Install
openclaw skills install @influence-so/influenceWrite and schedule social media posts with your saved brand voice. Review content and media before publishing, track delivery and read saved Insights. Connect channels including WhatsApp Business through Influence's hosted MCP. Paid subscription with a seven-day trial; a payment card is required.
openclaw skills install @influence-so/influenceUse the tools visible to this connection. If an MCP tool is missing, ask the user to refresh the client's tool list; in ChatGPT, use Manage → Refresh tools. Reconnect with the corresponding permission if an action refuses for a missing scope, or if a scoped REST catalog omits the tool. Complete unavailable features in Influence. Never request a secret in chat or place a credential in a URL, post, or tool argument. Server-issued confirmation and image-quote capabilities belong only in their designated confirmation arguments; do not repeat them in prose or other inputs.
Reviews and image quotes return expiresAtIso. Display that exact UTC expiry; add a local time only when a reliable date/time tool verifies the conversion. Do not infer a later expiry from a displayed local time or extend an expired review or quote.
Read the latest campaign. Request a new review with reschedule and its new UTC instant, or return_to_draft to cancel future delivery while keeping the composition editable. Send the current version. Show the review and obtain fresh approval using the same text or image path above. Already sent, in-flight, ambiguous or changed jobs are not safely editable. Returning to draft retains content, image, settings and history; subsequent publishing requires a new review.
accountList includes WhatsApp accounts in its bounded pagination; kind: whatsapp selects only messaging accounts, while kind: social selects social accounts. Its connectionId is the WhatsApp accountPublicId. Read integrationSchema with platform: whatsapp for the native message contract. Eligibility remains current account readiness, consent and message validation, not a guarantee that every recipient or format can be sent.
Use whatsappContactList with that accountPublicId to read exact contact publicIds, recipients, consent, suppression and service-window expiry. Ask the user to select intended recipients; do not infer opt-in or create consent. Use whatsappTemplateList for exact approved names, languages, component requirements and freshness. Outside a current service window, use an eligible approved template. Use whatsappMediaList for owned ready, unexpired providerMediaIds already uploaded for this account. Device/chat uploads and fresh generated assets go through the signed-in Influence upload workflow before they can appear here; never substitute a file assetId for a native providerMediaId. Follow each tool's cursor/done with the same account; an empty page is not complete unless done is true.
Save these explicit selections as whatsAppTargets through campaignDraftSave, with targets: [] for a WhatsApp-only composition. Each target has a caller-created stable publicId, the returned accountPublicId, exact contactPublicIds, native message and optional replyTo. Omit whatsAppTargets to preserve them on an edit; supplying the array replaces the complete messaging selection, and [] removes it. Native text, templates, owned image/video and other supported message controls retain their structured fields. IQ planning accepts the same explicitly selected targets and can rewrite text or template text parameters; it cannot choose recipients, manufacture consent, change native identities or publish.
Use the shared campaignReview and campaignReviewExecute flow. Show the server-derived business account, every recipient, exact native message, reply context and time. Any visual message requires signed-in visual review. Read campaignGet for per-recipient receipts and native batch summaries, or insightsPostList for paginated account delivery receipts. Queued, sending, accepted, delivered and read are different outcomes. Preserve failed, suppressed, canceled and needs_review; a receipt is not a social publication URL or an instruction to resend.
Use brandContextGet for saved confirmed company facts and separately authored guidance. Missing context is not a researched fact. This read does not run website research or change guidelines.
campaignPlanGenerate queues one native AI turn using exact selected account settings, owned reference media and explicit planning preferences. It spends IQ credits; explain that before confirming. For a new freeform plan omit planPublicId, action and choice, and put the user's exact request in brief. For a freeform revision, first read campaignPlanGet, then send its exact planPublicId and current version with the requested wording change in brief, omitting action and choice. Retain the intended accounts, settings and references.
Use action: prepare_draft only to prepare a draft from the already saved conversation, and suggest_images only to request saved image ideas. These fixed actions ignore brief and append no user message. Use choice only for an exact option from the latest saved assistant message; its saved label replaces brief. Neither fixed actions nor saved choices carry a freeform wording revision.
Keep the same requestId and confirmation idempotency key across uncertain responses. A queued run is not a completed draft. Read campaignPlanGet for the actual job, conversation, saved composition, image ideas, plan version and available/reserved credits; do not poll continuously. For a revision, compare the saved wording with the previous text and the user's exact request, and show the result. A completed job or higher version does not prove the requested wording changed. If it did not, report that result without claiming success or starting another billable turn automatically. A failed, stale or insufficient-credit operation is not success.
To publish generated content, save each chosen composition through campaignDraftSave and obtain a new complete publishing review as above. Generating a plan neither approves nor publishes it. Do not convert a batch into a single blanket publishing approval.
From campaignPlanGet choose one saved assistant message/image idea. imageGenerationQuote binds its plan version, idea, reference IDs and variation count. Prepare then confirm the quote tool; this creates a quote without calling a model or reserving credits. Show the quote's estimated and maximum milli-credits (1,000 milli-credits = 1 IQ credit) and expiry, then obtain agreement to that spend before preparing/confirming imageGenerationStart with its exact quote ID and token. Keep its start requestId stable. Changed or expired quotes need a new quote, not a bypass.
imageGenerationList reports native batch outcomes, owned asset IDs and authoritative actual costs, which remain null while unknown. Queued/running/needs_review are not completed images. Use mediaGet for a ready generated JPEG/PNG. Inspect its actual pixels only if the client displays native MCP image content; metadata alone does not show them. If the client does not display the image, direct the user to signed-in Influence for visual review. Do not invent media IDs or pixels. It can be attached through campaignDraftSave, but publishing still requires the signed-in Influence reviewPath to inspect and approve the actual pixels. No direct chat/device upload or arbitrary URL import is supplied by image generation.
Use insightsAccountList for available channel totals, dated account reporting periods, the selected read channel and refresh capability. Use insightsPostList for paginated connected-account posts, including provider-only posts and undated readings by default. Preserve captions, dates, measured/fetched timestamps, optional counters, breakdowns and reporting windows. Account period readings and per-post metrics are separate; never infer account totals from a post. Uncollected, unavailable, stale, error and permission-required data are distinct; never substitute zero for missing counters.
An account's optional lastCheck records a successful bounded collection: fetchedAt is completion time and postCount is the number of posts returned in that check, including zero, not the account's total post count. Queued or failed refreshes do not establish a new success. Compare any channelId on the receipt and posts with selectedChannelId; a different Slack channel's receipt is historical and does not show that the selected channel was checked.
insightsRefresh prepares/confirms a bounded read-only provider feed refresh into that account's owned cache. It queues background work; queued does not mean refreshed. Follow up through insightsAccountList/insightsPostList. Refresh cannot publish or change an account; Slack uses the channel already selected in Influence. Respect rate_limited/unavailable/permission_required results; reconnect providers through Influence when required.
WhatsApp items in insightsAccountList carry native messaging snapshots: phone-filtered incoming/outgoing counts, pricing with its observed currency, complete UTC periods, quality and health. Preserve each section's status and missing values. insightsPostList with the WhatsApp connectionPublicId returns native recipient delivery receipts, not social post metrics. Use whatsappTemplateList for separate WABA-scoped template reporting. insightsRefresh accepts that connectionPublicId and optional templatePublicId to queue the existing native reporting refresh. It never enables template analytics or link tracking; that separate irreversible opt-in stays in signed-in Influence.
Social publishing supports one composition and one static image per destination on the accounts marked eligible. WhatsApp uses its separate native message contract and explicit recipient selections above. Native AI plans can contain multiple proposed posts, but each publication has its own draft and exact review. Social video, galleries, threads, follow-up comments, recurring publishing, account connection and editing/deleting published network content remain outside the assistant publishing workflow. Writes use existing jobs; bounded Insights reads use the existing provider-read owner. An unavailable feature returns its actual refusal; preserve the draft. Legacy scheduling and generation names are not bypasses.