Record That They Agreed To A Call
li_track_bookingRecord that a person AGREED to a call — you read it in their reply ("yes, happy to chat", "Tuesday works, send me a link"). PoliteReach never decides this; you do.
🚨 SEARCH THE CALENDAR FIRST: people often book through the link within minutes of saying yes. If they already booked, do NOT call this — record it with li_mark_booked and send them nothing.
Effect: booking status agreed, bookingAgreedAt stamped, outcome interested (which closes the automated sequence like li_mark_outcome does), and a first check date: the EARLIER of the booking link + the account's firstNudgeHours (48h by default; "now" when the link has not gone out yet) and 09:00 in THEIR timezone on the day BEFORE the day they named — never sooner than 2 hours from now. On that date they appear in li_booking_due.
Pass agreedDayText (their words: "next Tuesday") and, when you can resolve it, agreedDate as "YYYY-MM-DD" in their timezone. Batch with profileUrls. Refused for someone whose call is already booked (cancel it first with li_mark_booking_cancelled). A person in no campaign gets a light record on the account you name.
The booking link itself is detected automatically: any outgoing message containing one of the account's booking links (li_set_booking_settings) stamps it — you never record the link.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | Why — quote them; stored with the verdict and on the timeline | |
| agreed | Yes | Must be true — this records an agreement, nothing else | |
| contactId | No | One contact by id (from li_contact_dossier or li_campaign_contacts), instead of profileUrl | |
| messageId | No | The exact message row, when you already have it from a dossier or a queue read. | |
| sessionId | No | The account this conversation is on. Only used when the person is in NO campaign: then a light record is created on this account so the mark has something to act on. Needed only when you have more than one account. | |
| agreedDate | No | The calendar day those words mean, "YYYY-MM-DD", resolved by you in THEIR timezone. Omit when they named no day. | |
| campaignId | No | Which campaign membership to act on. A contact can be in more than one campaign, and without this the row is whichever was touched last — so stopping them in one campaign while leaving the other running was not possible. Pass it whenever the contact might be in two. | |
| profileUrl | No | One contact, by profile URL | |
| profileUrls | No | Several contacts in ONE call, max 200. Each is resolved and marked independently: one refusal does not stop the rest, and the reply reports every one by URL. | |
| sessionLabel | No | Same, by account label | |
| agreedDayText | No | Their own words for when, e.g. "next Tuesday afternoon" | |
| conversationUrn | No | The thread, straight from li_list_conversations (single-person form). Recorded on the conversation so the live inbox recognises it as decided. On its own it finds the person only when their thread is already stored — pass profileUrl (the participantProfileId / ACoAA… URL) too. | |
| participantName | No | Their name from li_list_conversations — kept on a newly recorded contact. |