Inbox
Read LinkedIn conversations, check unread counts, mark threads read, refresh the inbox, and send messages in existing conversations.
Tools (6)
Section titled “Tools (6)”list_inbox_conversations
Section titled “list_inbox_conversations”Full name: campaignstack_list_inbox_conversations
List inbox conversations across all LinkedIn accounts in the workspace. Call this when the user asks what is in the inbox or who has replied. Returns up to 50 conversations sorted by most recent activity, with participant details, last message preview, read/unread status, and associated lead info. Each conversation includes a conversationRef { platform, id } used as the identifier for other inbox tools. Use unreadOnly: true to filter to unread threads only. Use identityFilter to restrict to specific LinkedIn account IDs (use campaignstack_list_accounts to find them). Use search to find threads by a person’s name or by words in the message text (2 to 200 characters); matches come back newest first with a match snippet when a message matched, and unreadOnly is ignored. It returns previews only, not the full thread: use campaignstack_get_conversation for that.
Parameters
Section titled “Parameters”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
workspaceId | string | No | — | Workspace ID. REQUIRED for a user key (csu_), which spans every workspace you belong to; omitted for a workspace key (cs_), which is bound to one and ignores this argument. campaignstack_whoami reports which kind of key you are holding and, for a user key, the workspaces it can reach. |
unreadOnly | boolean | No | — | |
identityFilter | string[] | No | — | |
search | string | No | — | (min length: 2, max length: 200) |
get_conversation
Section titled “get_conversation”Full name: campaignstack_get_conversation
Get a conversation with its full message history. Call this before drafting a reply or calling campaignstack_send_message. Takes a conversationRef { platform, id } from campaignstack_list_inbox_conversations. Returns all participants, messages (oldest first in the messages array - the last element is the most recent), read state, account info, and associated lead details. If needsFetch is true, messages have not been loaded yet. Use campaignstack_refresh_inbox to populate them. Use campaignstack_list_inbox_conversations to find conversation refs.
Parameters
Section titled “Parameters”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
conversationRef | object | Yes | — |
get_inbox_unread_count
Section titled “get_inbox_unread_count”Full name: campaignstack_get_inbox_unread_count
Get the total number of unread conversations across all LinkedIn accounts in the workspace. Call this when the user asks how many unread messages there are. Returns { total, accountCount }. It does not list them: campaignstack_list_inbox_conversations with unreadOnly does.
Parameters
Section titled “Parameters”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
workspaceId | string | No | — | Workspace ID. REQUIRED for a user key (csu_), which spans every workspace you belong to; omitted for a workspace key (cs_), which is bound to one and ignores this argument. campaignstack_whoami reports which kind of key you are holding and, for a user key, the workspaces it can reach. |
mark_conversation_read
Section titled “mark_conversation_read”Full name: campaignstack_mark_conversation_read
Mark a conversation as read. Call this when the user says to dismiss a thread’s unread state. Clears the unread flag and decrements the account’s unread counter. No-ops if already read. It does not send anything: campaignstack_send_message does that.
Parameters
Section titled “Parameters”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
conversationRef | object | Yes | — |
refresh_inbox
Section titled “refresh_inbox”Full name: campaignstack_refresh_inbox
Ask CampaignStack to poll its connected LinkedIn accounts for new messages now. Call this when the user wants the inbox brought up to date before you read it. Respects a 20-second freshness dedup window per account. Returns { refreshed, skipped, errors }. It does not fetch one thread’s older history: use campaignstack_get_conversation for that.
Parameters
Section titled “Parameters”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
workspaceId | string | No | — | Workspace ID. REQUIRED for a user key (csu_), which spans every workspace you belong to; omitted for a workspace key (cs_), which is bound to one and ignores this argument. campaignstack_whoami reports which kind of key you are holding and, for a user key, the workspaces it can reach. |
send_message
Section titled “send_message”Full name: 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_list_inbox_conversations. Read the thread with campaignstack_get_conversation 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_conversation reports delivery. 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: put the leads in a lead list with campaignstack_add_leads_to_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.
Parameters
Section titled “Parameters”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
conversationRef | object | Yes | — | |
text | string | Yes | — | (min length: 1) |
attachments | object[] | No | — | Up to 5 files to attach (images or documents). Downloaded server-side and validated against the LinkedIn attachment policy. |
overrideOwnLimits | boolean | 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 | boolean | No | — | Deprecated name for overrideOwnLimits. Use overrideOwnLimits. |