Get what a rep learns in a meeting into Salesforce, HubSpot and the follow-up email without the rep typing any of it.
The clientA B2B cybersecurity sales team. Reps on the road all day, leadership back at the office.
Updating every system after a meeting took 15 to 20 minutes, so it mostly didn't happen.
Stages and close dates went stale, pipeline reviews ran on memory, and leadership was calling reps at night to find out what was happening with deals.
Before
- 1Meeting ends
- 2Rep drives to the next one
- 3Hours later: log into Salesforce, find the account, type notes, change the stage
- 4Repeat in HubSpot, then write the follow-up email
- 5Most of it never happens
After
- 1Meeting ends
- 2Rep leaves a 30-second voice note in Telegram
- 3Agent replies with a draft of what it will record
- 4Rep taps approve
- 5Salesforce, HubSpot and Outlook are updated in under a minute
The rep talks
A voice note, the way they'd tell a colleague.
- Rep: Voice note · 0:31 — Just left Northwind. Their CISO Dana said the endpoint contract is up in March and they're unhappy with renewal pricing. She wants a proposal for 400 seats. Follow up next Tuesday.
Illustrative data. Names are fictional.
The agent answers and extracts
One model call does both.
- Rep: Voice note · 0:31 — Just left Northwind. Their CISO Dana said the endpoint contract is up in March and they're unhappy with renewal pricing. She wants a proposal for 400 seats. Follow up next Tuesday.
- Agent: Got it. Here's what I'll record: Contact — Dana, CISO, Northwind (enriched: verified title and email). Signal — endpoint contract expires March, price-sensitive. Opportunity — 400 seats, stage moves to Proposal, close date set for end of March. Follow-up email drafted for Tuesday. Approve?
Illustrative data. Names are fictional.
The human gate
Nothing is written until the rep approves.
- Agent: Got it. Here's what I'll record: Contact — Dana, CISO, Northwind (enriched: verified title and email). Signal — endpoint contract expires March, price-sensitive. Opportunity — 400 seats, stage moves to Proposal, close date set for end of March. Follow-up email drafted for Tuesday. Approve?
- Rep: Approve
- System: ✓ HubSpot: contact and activity logged ✓ Salesforce: stage → Proposal, close date updated ✓ Outlook: follow-up drafted, reminder set
Illustrative data. Names are fictional.
What leadership sees
The pipeline fills in on its own.
| Account | Rep | Stage | ARR | Close date | Last update |
|---|---|---|---|---|---|
| Northwind | Maya R. | Proposal | $240k | Mar 31 | Updated 1 min ago |
| Contoso | Jordan T. | Negotiation | $385k | Feb 14 | Today, 9:12 AM |
| Fabrikam | Maya R. | Discovery | $120k | Apr 30 | Yesterday |
| Tailspin | Sam K. | Qualified | $175k | May 15 | 2 days ago |
Illustrative data. Names are fictional.
- Telegram (capture)
- →Node service + Claude (reply, extract, check)
- →Postgres graph + vector memory (row-level security)
- →HubSpot · Salesforce · Outlook (write-back after approval)
It's a workflow, not an agent. The steps are fixed; the model does judgment inside one of them.
A human approval gate on every write
Letting the agent write straight to the CRM
A few seconds per meeting
A wrong record in a customer's Salesforce costs far more than a few seconds.
- 01Function calling instead of tagged JSON, so the API validates the shape
- 02A team dashboard on the same database
- 03Signal scoring and real-time alerts
What this means for you
- 01Nothing gets written to a system of record until a person approves it. That costs a few seconds per meeting and it is worth it.
- 02The model drafts and the code enforces, which is how anything near a customer’s system of record should behave.
- 03It lives where people already work, so it gets used: 15 to 20 minutes of typing became a 30-second voice note.
- 04I built it inside three systems the client already owned, which is what coexisting with a legacy core asks of a forward deployed engineer.
→Why Telegram and not a custom app?
The bottleneck was capture friction, not interface polish. Zero install, voice notes, and reps already live in messaging.
→Why did you change models?
It launched on Gemini's free tier behind a swappable client. Extraction wasn't robust enough on real field messages, so I migrated to Claude in an afternoon without touching the bot.
→How do you know the extraction is right?
A second agent checks it against the database, then the rep approves it. The prompt drafts; the code enforces.
→Why Azure?
The client is a Microsoft shop on E5, so identity and Outlook were already there.