Park A Reply Until A Date
li_snooze_replyPut a conversation down until a date WITHOUT closing it — for "I am away until the 24th", "circle back after the quarter", anything where the answer is simply not now.
Why this exists rather than li_mark_reply_handled: the needs-answer queue sorts oldest-first, so an out-of-office reply sits permanently at the TOP of it, re-read every session in front of everyone genuinely waiting. Marking it handled removes it — and ALSO hands the sequence off, which makes the inbox sweep (about hourly) treat the thread as finished and never read it again. So parking somebody that way ended reply detection for them permanently: they come back on the 24th and nothing notices.
This writes one date and nothing else. The conversation stays open, the sweep keeps watching the thread, and a reply arriving while it is parked is still detected and moves them back up the queue. On the date the row simply reappears in li_replies_to_answer carrying snoozedUntil, so you can see why it was quiet. On a conversation already marked with an outcome (e.g. interested) the date is its CHECK-AGAIN date instead: it reappears in li_marked_conversations(dueOnly=true), not the reply queue.
NOTHING IS SENT when it expires — there is no scheduled follow-up here, deliberately. It reappears in a queue you already read; you decide then.
Pass until: null to un-park a date you set wrongly. Takes profileUrls for several at once.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | Why — stored on the timeline with the date | |
| until | Yes | ISO 8601 date/time to park until, e.g. "2026-09-24T09:00:00Z". Must be in the future. null un-parks. | |
| 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. | |
| 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 | |
| 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. |