Version 1.273.85 Release Note
Since 1.225.85, AB Projects shipped a brand-new CRM lead-automation funnel that finds, researches, contacts, and reports on leads without human intervention — plus multi-tenant mail support, per-task deadline reminders, timezone-aware timestamps everywhere, and the long-awaited fix for the “Add to Calendar” button.
CRM on Autopilot — leads research and contact themselves
A new automation timer wakes up every 5 minutes for orgs that opt in and walks each lead through three stages, end to end:
- Stage 1 — Find the website. For leads missing a website URL, the automation asks Google’s Gemini model (with live Search grounding) for the company’s official site, then fetches the page and verifies the company name actually appears on it before saving. AI confidence scores are explicitly not used — only real-world checks.
- Stage 2 — Research the contact. Once a lead has a website, the next pass downloads the page text and asks Gemini to extract a real contact name and email. Anything that smells generic (info@, noreply@, etc.) gets rejected.
- Stage 3 — Send a pre-approved template. Once a lead has name + website + email, it auto-promotes to the new “Information filled” status, becoming eligible for outbound. The automation merges the lead’s variables into the oldest active outbound template you’ve authored in CRM Settings, sends it via your CRM mailbox, and stamps the lead as “Contacted.” A per-org daily cap (default 5) keeps early adopters from accidentally blasting their list.
- Loop the team in. After every successful send, an Adaptive Card lands in your chosen CRM Teams channel showing the lead, template, and send time, with a one-click “Stop automating this lead” button that flips a per-lead opt-out so the funnel skips that lead from then on.
- Template library. CRM Settings gained a new Outbound Templates section: add, edit, archive. Templates support merge tokens for lead name, company name, contact name, contact email, and website — anything that can’t be merged stays as a visible token in the audit log so admins can spot misnamed fields.
- Full audit trail. Every stage logs to a send-log table with the reason (website-filled, research-skipped, outbound-sent, daily-cap-reached, etc.) so admins can see exactly what the automation did and why.
CRM mail goes multi-tenant
- Send from any tenant. CRM mail now acquires Microsoft Graph tokens against each customer’s own Azure AD tenant, so SaaS deployments where each org’s mailbox lives in a different tenant from the AB app registration work cleanly.
- Permission probe with one-click consent. CRM Settings now probes Graph for send permission as soon as you save a mailbox and surfaces a clear admin-consent button if the app hasn’t been consented in that tenant yet — no more silent failures days later when the first email goes out.
- Clearer error mapping. Graph’s ErrorInvalidUser is now reported as “access denied” so admins know to grant consent, not to retype the mailbox.
Per-task deadline reminders
- Pick the moment. Every task now has an inline reminder picker — choose 1 hour before deadline, 1 day before, 3 days before, or a custom interval. The assignee gets a personal Teams message from the AB bot at exactly the chosen time.
- Reset on edit. Move the deadline and the reminder rearms automatically — no risk of the old reminder firing for a stale date.
Times that travel
- Org-level timezone. Every project now has a timezone setting. Adaptive cards in Teams channels, change-history diffs, and the bot’s reminder messages all render in that timezone with a clear suffix instead of raw UTC.
- Browser-level fallback for personal pages. The first time a user signs in, their browser-reported timezone gets saved automatically, so personal pages match the clock on their wall.
- No more UTC-only timestamps. Every .ToLocalTime() call across the Blazor surfaces — tasks, CRM panels, settings — was replaced with a central UserTime helper that resolves user → org → browser → UTC in that order.
“Add to Calendar” works again
- Outlook calendar invites. Clicking “Add to Calendar” on a task no longer fails with “Could not acquire access token.” The root cause turned out to be two missing
@characters in Razor attribute bindings that silently passed the literal string “ContextSsoToken” instead of the actual SSO token to the calendar flow — a two-character fix at the end of a deep diagnostic trail.
Bot stability and Teams App Store readiness
- Smarter error handling. The Teams bot no longer surfaces the generic adapter error when an inner handler fails — required for the Microsoft Teams App Store submission. The outer safety-net catch now logs the full stack to telemetry and emails the team so silent crashes don’t slip through.
- Login page shows the app version. The Blazor login page now displays the current AB Projects version, so support requests can be cross-referenced to a specific build.
- EF migrations on startup. Database schema upgrades now apply automatically when the Blazor app boots, removing a manual deploy step.
Polish
- Parent tasks reindex on rollup. When all subtasks complete and the parent auto-promotes, the search index now updates so the incomplete-only filter is accurate.
- Side panels reset cleanly. Closing and reopening the Complete Task side panel no longer carries over stale state from the previous task.
- AI Generate Goal dropdown. The CRM AI Generate Goal selector now retains your first pick without requiring a second click.
As always, AB Projects updates automatically — nothing to install. If anything looks off after the new version lands for you, the team is only a message away.