The write-back lives
where the work already is.
Reps read the morning list in Slack. So the way they log a call is a slash command in that same channel, and it writes straight to the CRM. No tab to open, no screen to build, and not one model call in the path.
[2026-04-14] left voicemail, retry Tue• dana@example.org Ephemeral — only the rep sees it
The reason logging gets skipped is the tab, not the typing
Every CRM already has a notes field. The work still doesn't get logged, because logging it means leaving the thing you were doing.
What normally happens
The list arrives in one place; the record lives in another.
- read the list in chat
- make the call
- open the CRM, find the contact
- … log it later, or never
✓ What happens here
The same surface carries the list and the write-back.
- read the list in chat
- make the call
- type one line in that channel
- the note is on the record
Nine steps, and not one of them thinks
A command arrives, a note lands on the right record, a reply goes back. Every step is a tool. There is no prompt anywhere in this pipeline.
Split the command
First word is the target, the rest is the note. Straight quotes, curly quotes and stray whitespace all parse, because a phone will send curly ones.
Read the rep map
A small JSON file mapping each chat account to a CRM user. Editing it is how a new rep gets access.
Resolve who is asking
An inner join against that map. A chat account that isn't in the file produces no row, so everything downstream has nothing to act on. The refusal is the shape of the data, not a rule someone remembered to write.
Read today's list
The same CSV the morning report wrote. One snapshot, shared by the report and the write-back.
Narrow it to that rep
A second join does two jobs at once: it keeps only that rep's rows, and it stamps the parsed command onto each one, so later steps need nothing but the row.
Pick the contacts, once each
The list is one row per site; a note belongs to a contact. A contact who manages four sites appears four times and must still be written once.
Write the note
One call per contact, dated and prefixed. It also moves that account's last-activity clock, which is what drops it off tomorrow's stalled list.
Build the confirmation
Counts what was written and names each contact. When nothing matched it says so plainly instead of claiming success.
Reply to the rep only
Back to the person who typed it, in the channel they typed it in, visible to nobody else.
Who may write what, decided by a join
A write-back has to answer three questions before it touches anything: who is asking, whose records may they change, and what is it allowed to say happened.
From the request, not the message
The sender's identity comes from the signed request itself, not from anything they typed. You cannot claim to be another rep by wording the command differently, because the command text is never consulted for identity.
Only the ones on their list
The join narrows to that rep's rows in today's list. A contact belonging to someone else cannot be reached, even by naming it exactly, because it was never in the set being written to.
Logged as automation, not as the rep
The note is written with the rep's authority but recorded under the account the automation authenticates as. It is never filed as though the rep typed it into the CRM by hand.
What it buys to have no model in the path
Measured on a real run: nine steps, one note written, a reply delivered.
No prompt to tune, no output to validate, nothing to re-run when a model changes.
Fast enough that the rep is still looking at the channel when the confirmation arrives.
Identical input, identical writes. A pipeline with no model has no temperature.
No screen, no form, no app for anyone to install or be trained on.
What the platform gives you — and what you wire up
The inbound half is a built-in. What you decide is the command, who may use it, and what it writes.
Dispatch provides
Built-in capability — available to every workflow, on every box.
- signed inbound webhooks as triggers
- the payload as workflow inputs
- keyed joins, filters, transforms
- typed CRM tools + write gating
✓ You wire up
A row in your box's database and one small file. Live on save.
- the command and its syntax
- which accounts map to which reps
- what the note says
- where the confirmation goes
Put the write-back where the reading already happens.
Shipping today · one line in chat, no model in the path
dispatch