Chat delivery
Chat delivery posts and receives Messages in connected chat workspaces, carries buttons and forms, and links each chat account to a Worker or Contact.
Contract
A Startup, a Human or a Customer connects a workspace as an Integration with Integration.connect. Each connected chat channel is a Channel, and its Messages keep one id in db.sb. The copy in the workspace is an alias of that id.
| Guarantee | Detail |
|---|---|
| Records | A Message posts through Message.create and lands in its Thread |
| Import | Only what becomes a record imports: Messages addressed to a Worker, mentions, Approval answers and Conversation turns; no history backfill |
| Training | Nothing read from a workspace trains a model |
| Buttons and forms | A message carries buttons and a form; a press runs as an Action via: |
| Acknowledgement | Every inbound event is acknowledged within 3 seconds and runs as an Action; a retry with the same upstream id runs once |
| Identity | An unlinked chat account can read and reply, but cannot call a Verb or answer through Approval.approve |
| Checks | Guards, Consent and send-rate Limits run before every post, as for email |
| Posting as an agent | An Agent posts under its own name, labeled as an Agent, and as a Human only under that Human's Mandate |
| Escalation | A notice unanswered in chat moves to push, then to SMS |
| Failures | A post refused for rate, a revoked token and a removed Channel each return their own error and next step |
The Chat app Interface builds on this capability.
Verbs
| Verb | Object | Event |
|---|---|---|
| Message.create | Message | Message.created |
| Channel.create | Channel | Channel.created |
| Thread.create | Thread | Thread.created |
Interfaces
Example
patentpad.com connects its team's Slack workspace. A refund over its Limit posts an Approval with two buttons to the finance channel, and a linked Human presses Approve. The post updates in place for everyone, and the refund runs.