Sent Messaging

sentdm/sent-plugin/plugins/sent/skills/sent-messaging

作者 sentdme3d91640fb6f48601c17ddb4ff3df2d3a5f81d6f無授權條款48 個星標收錄於 2026年10月9日更新於 2026年10月9日儲存庫6 天前更新

Sends SMS, WhatsApp, or RCS messages through Sent and retrieves individual message status and activity history with the Sent MCP tools. Use when a user asks to send, schedule, or preview a message, check a message ID, confirm delivery status, inspect lifecycle events, investigate a timed-out or ambiguous send, or retry safely. Use messaging-performance-analyzer for aggregate delivery diagnosis.

僅含說明Communication
AI 產生的概覽

透過 Sent 操作簡訊、WhatsApp 與 RCS 訊息流程:預覽、傳送、排程並查詢送達狀態。

功能
引導代理使用 Sent MCP 工具 messages.send、messages.get 與 messages.activities.list 完成訊息操作。涵蓋連線與授權範圍檢查、以範本為基礎的內容準備與預覽及明確確認、使用 ISO-8601 時間戳的排程傳送、冪等鍵,以及結果與重試的安全處理。產出內容預覽、傳送呼叫與狀態或生命週期報告,並將彙總送達分析交給另一個技能。
適用情境
適用於使用者要求傳送、排程或預覽 Sent 訊息,查詢訊息 ID,確認送達狀態,檢視生命週期事件,排查逾時或結果不明的傳送,或安全重試的情況。不適用於跨大量記錄的彙總送達趨勢或根因分析。
執行需求
需要相容的 MCP 用戶端,並透過 OAuth 2.1/PKCE 取得 Sent 授權,同時可存取 Sent MCP 工具(messages.send、messages.get、messages.activities.list、templates.list/get、sender_profiles.list/get、balance.get)。不附帶指令碼,僅為指示。憑證由用戶端處理,不得索取或儲存。

Sent Messaging

Operate direct message workflows with messages.send, messages.get, and messages.activities.list.

Establish connection and scope

  1. Let the MCP client perform OAuth 2.1/PKCE authorization. Never request, accept, print, or store tokens, API keys, authorization headers, client IDs, or secrets.
  2. Surface the organization and Sender Profile selected by the active connection before a mutation. If the client context does not expose both, use sent-account-readiness to inspect the authorized scope before continuing.
  3. Use an explicit, validated acting profile when an organization grant supports it.
  4. Minimize sensitive output. Mask phone numbers where practical and do not repeat message bodies after the operator has reviewed them.

If MCP is unsupported or authorization fails, keep the skill usable for payload planning. Explain that execution requires a compatible client or reauthorization; never ask the user to paste a credential.

An organization grant may select an owned Sender Profile with the tool schema's optional profileId; omit it to act as the authenticated account. Validate ownership with sender_profiles.list or sender_profiles.get, and use the same selector for preflight reads, mutations, and follow-up reads. Profile grants cannot use this selector. Reauthorize for a different organization or a profile outside the grant. Never invent scope fields or request credentials.

Inspect a message

  • Use messages.get for the current record when a message identifier is known.
  • Use messages.activities.list for lifecycle events and delivery evidence.
  • State that an accepted or queued send is not proof of delivery. Report delivered only when the returned state or activity establishes delivery.
  • Return identifiers, timestamps, and status evidence needed to answer the question, masking recipient data and omitting the message body unless it is necessary.

For aggregate trends, funnels, or root-cause analysis across many delivery records, hand off to messaging-performance-analyzer.

Prepare a send

  1. Resolve the intended channel, Sender Profile, recipient, existing template, variables, scheduledAt, and idempotencyKey. Sends are template-only: first use templates.list or templates.get in the same acting scope, reference its real ID or name in template, and provide every declared variable in template.parameters. Never pass message text as a template name or invent a free-form text argument. Do not invent missing values.
  2. For a high-volume send, use sent-account-readiness to check balance.get before preparing the mutation. Stop if the available balance or account readiness is insufficient or unclear.
  3. Build the exact messages.send arguments without calling the tool.
  4. Show a payload preview that includes the selected organization, Sender Profile, channel, exact destination, existing template identifier and its reviewed content, variables, and scheduling/idempotency inputs. Show sensitive content once only; mask it where the operator can still verify the target.
  5. Ask for explicit confirmation for this exact payload. General approval given earlier in the conversation is not sufficient.
  6. Call messages.send immediately after that confirmation. If any payload value, scope, or elapsed context changes, discard the confirmation and preview again.

Never call messages.send without the preview and explicit confirmation immediately before the call.

Schedule a send

scheduledAt is optional. Resolve the user's date, time, and timezone into an ISO-8601 timestamp with an explicit UTC offset or Z; offset-free timestamps are rejected. The instant must be 1 minute to 30 days ahead at execution. Include the exact local time and UTC instant in the preview, and revalidate the window before calling.

Acceptance returns QUEUED with scheduledAt; the message then moves to SCHEDULED, visible through messages.get, and releases around the requested time within a few minutes. Recipient quiet hours can defer it to the next allowed time, reported through message.scheduled. Do not promise an exact delivery time. Account scheduling limits can reject the send. There is no MCP reschedule or cancellation tool; do not invent one.

For schema-supported idempotency, use camelCase idempotencyKey; the same key can replay a cached send result for 24 hours. Keep the original key and arguments when recovering the same operation. A different intended send needs its own key. Idempotency does not replace review and confirmation.

Handle results and retries

  • Report the message identifier and the returned acceptance state. Say "accepted" or "queued" when that is all the response establishes; do not say "delivered."
  • Use messages.get or messages.activities.list when the user asks for subsequent delivery state.
  • Treat every retry as a new mutation: reconstruct the payload, show a fresh preview, and obtain new explicit confirmation immediately before the retry.
  • Never blindly retry an ambiguous send. If the first call times out or its outcome is unknown, inspect messages.get and messages.activities.list when an identifier exists. Without conclusive evidence, report the unknown outcome and duplication risk. Only attempt another send after the operator chooses to do so and completes a new preview and confirmation.

來源與署名

來源:sentdm/sent-plugin位於plugins/sent/skills/sent-messaging提交e3d9164

授權條款: 無授權條款

內容歸原作者所有。SourceWeft 從公開儲存庫中收錄這些內容。

檢舉或申請下架