When to use it
- “Yes, have Bob send Jane the pricing deck three days after the dinner.”
- “Tony books the meeting with Rosa’s CRO by the 30th.”
- “Have Brightpath and Ferrocity each send invites to their top 20 by Friday.”
- “Done, Theo has the proposal.”
Parameters
Either way the due date is stored relative to the event and moves if the event moves.
Workflow
1
Wait for the user's yes
One accepted follow-up is one call. Never create tasks in bulk, or from suggestions the user did not accept.
2
Create
Send
action: "create" with a fresh client_request_id. Hand the task to its owner through the user’s own connectors (a CRM task, a Slack or mail message), joined on owner_email and contact_email.3
Complete
When the user says it is done, send
action: "complete" with task_id, an optional outcome_note, and a new client_request_id. A task already done changes nothing and returns outcome: "already_completed".4
Retry safely
On a transport error, retry with the SAME
client_request_id: a committed call returns idempotent_replay: true and is never repeated. Reusing the id for a different call is refused.Shared tasks for partners
Sendpartner_domains to give the task to partner companies on a collab you host (manage_collab_partners action: "status" lists them). Each partner whose heyBTW workspace has joined the collab gets its own assignment and sees the task in its own heyBTW.
completion_rule: "each": every partner does it."any": done when one partner does it; the others arecoveredand owe nothing.- A shared task names no person. Never send
owner_email,contact_emailorobservation_refwithpartner_domains, and never put a person’s email in the title or reason. Title, reason andaccount_domainare visible to every assigned partner. - A domain that is not a partner, was removed, or is your own is rejected by name; the rest still lands.
partner_not_joined: add it again with manage_collab_partnersaction: "add". If still refused, invite its contact withaction: "invite"(with the user’s go-ahead) and save the task once they accept.partner_no_workspace: record a task of your own workspace instead (owner_emailthe partner’s contact,account_domainits domain) and send the ask through the user’s connectors.- On complete, a shared task completes only this workspace’s own assignment. The host cannot complete it for a partner.
Response
The success shape below is from the code (tools/save_task.py and save-task-contract.json), not a live call: this page was written against a production workspace, so no task was created. data[0] holds:
event_window bands, served by heyBTW, never computed by you:
The validation error below is a real response, trimmed, from
action: "create" sent with nothing else:
Rules the agent must follow
- Create a task only for a follow-up the user accepted. One per call.
- A task is a commitment, not evidence of contact. Never report a task as a touch; get_attendee_touch_status reports contact.
- Read
event_windowanddue_dateas served. Never compute a band or a date yourself. - Never send
owner_email,contact_emailorobservation_refwithpartner_domains. - heyBTW sends nothing here. Deliver the task to its owner through the user’s own connectors.
Errors and gaps
Related
- get_due_tasks: what is still owed, overdue, or owed by a partner.
- record_observation: the debrief facts a task can point at.
- Playbooks: The morning after, Follow-up and ROI.