campaignstack_send_message
Ask CampaignStack to send one message into a LinkedIn conversation the owner's connected account is already part of, optionally with attachments given as public URLs. Takes a conversationRef { platform, id } from campaignstack_get_conversations. Read the thread with campaignstack_get_conversations using ids and include.messages first. If the last message is the owner's and the other person has not answered since, do not send: say so, and send only if the user confirms they want to follow up again. This reaches a real person. Before calling it, tell the user exactly who it goes to and read the wording back to them, and wait for an explicit yes. The send is dispatched asynchronously and the response carries a messageEntityUrn; campaignstack_get_conversations reports delivery. Pass sendAt to hold the message and send it later instead of now; it is cancelled if the other person replies first, so read the wording and the time back and wait for a yes. campaignstack_get_conversations with include.scheduledMessages lists pending ones; campaignstack_edit_conversations cancels or edits one. One person per call. There is no bulk form, and calling this in a loop over a list is not the supported way to reach a list: add the leads with campaignstack_edit_lead_list and run a workflow over it with campaignstack_trigger_workflow, which paces the sends and applies the review step the workspace configured. Sending is paced by CampaignStack's own daily and weekly limits and business hours, which are set by a human in the app and are not writable from here; see overrideOwnLimits before asking for an exception.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| sendAt | No | ISO 8601 with a UTC offset. Omit to send now. With it, the message is held and sent at that time instead (1 minute to 180 days out) - cancelled automatically if the other person replies first. Read the wording and the time back to the user and wait for a yes before calling this with sendAt set. | |
| attachments | No | Up to 5 files to attach (images or documents). Downloaded server-side and validated against the LinkedIn attachment policy. | |
| workspaceId | No | Workspace ID. Omit it when this connection reaches one workspace: a workspace key (cs_) is bound to its own, and a user key (csu_) or connected app whose person belongs to exactly one workspace defaults to that one. Required only when the person belongs to several; the error then lists them, and campaignstack_whoami reports them too. | |
| conversationRef | Yes | ||
| overrideOwnLimits | No | Tells CampaignStack to skip its OWN protective pacing for this one call: the daily budget, the weekly cap, the business-hours window, the account status check and the risk pause. These are limits CampaignStack sets to keep the account healthy. They are not LinkedIn's controls, and nothing here touches, negotiates with or works around anything LinkedIn enforces. LinkedIn's own measured ceiling is a separate check that is never overridable, and neither is a pause the account's owner set. Default false, and it should stay false. Setting it true voids the safety guarantee: from that call on, CampaignStack can no longer promise the pacing that keeps the account out of trouble, and the risk of a restriction sits with the owner. Every use is recorded in the workspace audit log. Ask the owner in plain words and get an explicit yes first. A refusal from the safety system is that system working, not a fault to route around: report the reason and let the person decide, and never retry the same send with this set. | |
| dangerouslyBypassSafetySystem | No | Deprecated name for overrideOwnLimits. Use overrideOwnLimits. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| sendAt | No | ||
| status | No | ||
| messageEntityUrn | No | ||
| scheduledMessageId | No |