Saltar al contenido
Marketplace

migrate-to-sent

de sentdm

Plans and executes a migration from Twilio, Sinch, Infobip, Vonage, or MessageBird/Bird to Sent v3 — mapping send calls, status vocabularies, webhook signature schemes, opt-out stores, templates, and tenancy models, then cutting over safely with dual-run and rollback. Use when replacing an incumbent CPaaS provider, translating provider code or webhook handlers to Sent, or planning a phased cutover and its verification gates.

Esta skill incluye scripts que tu agente puede ejecutar. Ver qué archivos

Resumen

SKILL.mdLeída en e3d9164

Migrate to Sent

Every migration from a major CPaaS provider hits the same five translation problems. Work them in this order, because the first one silently doubles cost and is invisible in tests.

1. Ordered fallback becomes automatic routing

Incumbent platforms express cross-channel delivery through different caller-side arrays, failover objects, messaging-service features, or application-level priority configuration. Do not assume those shapes have a direct Sent request-field equivalent.

Sent's channel array is a broadcast list. Porting an ordered array produces one message and one charge per recipient-channel pair, which passes tests and multiplies production spend. The correct translation is automatic routing — omit channel or send ["sent"] — which lets the platform select a route and reroute across up to three channel-and-provider pairs on the same message_id. Details belong to sent-routing-strategist; the migration rule is simply: never port an ordered channel list.

2. Status vocabularies do not line up

Incumbent statuses map onto Sent's, but Sent adds two states that have no equivalent and that break naive retry logic.

Sent statusClosest incumbent analogueMigration note
QUEUEDTwilio queued, Sinch QUEUED_ON_CHANNELAccepted, not sent
ROUTEDno analogueRoute chosen; fires again on reroute
SENTTwilio sent, Sinch MESSAGE_SUBMITProvider handoff only
DELIVEREDdelivered everywhereThe first proof of handset receipt
READTwilio read, Sinch READWhatsApp and RCS only
FAILEDfailed, undeliveredMay still reroute; not necessarily final
FILTEREDTwilio error 21610 (opt-out)Policy gate. Never retry
BLOCKEDaccount-level errorsAccount precondition. Fix the account, then resend
SCHEDULEDno analogueQuiet-hours parking; resumes automatically

Two consequences for ported code. Handlers that treat every non-delivered terminal state as retryable will retry consent blocks, which is a compliance failure rather than a bug. And handlers keyed on numeric provider error codes — Twilio's 21610 is the classic — must be rewritten against Sent's string error.code families.

3. Webhook verification is a rewrite, not a port

No two providers sign the same way, and no Sent SDK ships a verifier.

ProviderScheme
TwilioX-Twilio-Signature, base64 HMAC-SHA1 over the full URL plus sorted POST parameters
SinchHMAC-SHA256 over body.nonce.timestamp, four x-sinch-webhook-signature* headers, or OAuth 2.0
InfobipBasic, HMAC-SHA256 over the raw body, or OAuth on a notification profile; the header name is account-configured
VonageJWT in Authorization: Bearer, or a legacy sig parameter
MessageBird/Birdmessagebird-signature, base64 HMAC-SHA256 over timestamp, URL, and a SHA-256 body hash
Sentx-webhook-signature: v1,{base64}, HMAC-SHA256 over {x-webhook-id}.{x-webhook-timestamp}.{raw_body}

Sent's key is the signing secret with whsec_ stripped and the remainder base64-decoded, compared in constant time, with timestamps outside 300 seconds rejected. Because Sent provides no per-event id, dedupe keys must be derived from payload semantics. Build the receiver with sent-webhook-engineer rather than adapting the incumbent's verifier.

4. Opt-out stores must be reconciled, not migrated by copy

Every provider keeps its own suppression list — Twilio Advanced Opt-Out, Infobip Blocklist, Sinch OPT_IN/OPT_OUT events. Sent enforces consent at the platform level before events reach the application, stores it as opt_out on the contact, and applies it channel-agnostically: a STOP on SMS suppresses WhatsApp and RCS too.

Reconciliation rules: export the incumbent's suppression list before cutover, treat any opt-out on any incumbent channel as a global Sent opt-out, and never clear opt_out to "clean up" migrated data. Sent's ten default keywords are STOP, CANCEL, UNSUBSCRIBE, QUIT, END, START, UNSTOP, SUBSCRIBE, HELP, INFO, matched only when the entire trimmed body equals the keyword — so incumbent-specific keywords need custom keyword entries. Rewrite any incumbent keyword matcher as an exact local consent mirror and audit mechanism; the matcher must not write consent to Sent again. Consent semantics belong to sent-two-way-messaging.

5. Templates and tenancy are re-registered, not transferred

WhatsApp templates live with the WABA, so the migration question is whether the WABA moves. Positional placeholders ({{1}}, {{2}}) become named parameters in Sent, which means every call site that passed an ordered array must pass a named map. Approval is asynchronous and arrives as a templates webhook event, so build the template inventory before cutover rather than during it.

Tenancy maps as follows, with the boundary decision owned by sender-profile-architect and the API work by sent-profile-provisioning:

Incumbent constructSent equivalent
Twilio subaccountSender Profile
Twilio Messaging Servicerouting plus profile configuration, not a caller-side pool
Infobip Application or EntitySender Profile
Sinch Conversation API appSender Profile
Provider API credential per tenantProfile-scoped API key, or organization key with x-profile-id

Migration sequence

  1. Inventory every send call site, webhook handler, status branch, template, suppression list, and credential. Use scripts/inventory_scan.py to find them mechanically. It reads local regular files inside the selected repository, skips symbolic links and environment files, and reports paths, line numbers, and migration guidance without source excerpts. It makes no network requests.
  2. Map each item using references/provider-mapping.md, flagging ordered-fallback arrays and numeric error codes as required rewrites.
  3. Stand up Sent in parallel: credentials, one webhook per environment, verified receiver, templates re-registered and approved.
  4. Prove equivalence in sandbox with "sandbox": true, then with a small live cohort confirmed to DELIVERED.
  5. Dual-run with a traffic split, comparing delivery rates, latency, and cost per message on the same message classes.
  6. Cut over by message class — lowest-risk transactional first, marketing last — keeping the incumbent receiver live.
  7. Decommission only after a full billing cycle of clean data, then revoke incumbent credentials.

Sequencing detail, verification gates, and rollback triggers are in references/cutover-playbook.md.

Mistakes that survive testing

  • Porting an ordered channel array. Doubles cost, never errors.
  • Treating FILTERED as retryable. Compliance exposure.
  • Reusing the incumbent's signature verifier. Every delivery returns 401.
  • Assuming 202 means delivered. Sent acknowledges acceptance only.
  • Keeping positional template placeholders. Parameters silently mismatch.
  • Retrying on 401. Ten consecutive auth failures lock the credential with escalating lockout.
  • Omitting Idempotency-Key during dual-run. A timeout retry sends twice.
  • Sending x-profile-id with a profile-scoped key. Returns 403.
  • Copying an incumbent's Authorization: Bearer pattern. Sent authenticates with x-api-key.

Boundaries

This skill owns provider mapping and line-by-line migration planning. Hand the resulting Sent client and resilience work to sent-integration-starter, channel semantics to sent-routing-strategist, receiver construction to sent-webhook-engineer, WhatsApp onboarding to waba-embedded-signup, and US campaign registration to sms-10dlc-registration.

Archivos 5 archivos

Instálala a mano

Deska ejecuta esto por ti, para cada agente que elijas. Para ejecutarlo tú en una terminal:

npx skills add sentdm/sent-plugin --skill migrate-to-sent

Más de sentdm

  • messaging-performance-analyzersentdmAnalyzes Sent message delivery, webhook, and activity data to explain funnel drop-offs, delivery failures, read-rate gaps, channel fallback, and suspicious performance changes. Use when a user says MDR, delivery report, message activity, webhook event, failed messages, low delivery rate, RCS fallback, WhatsApp read rate, SMS filtering, campaign performance, or asks why messages did not arrive.2,900 instalaciones en skills.sh0
  • rcs-agent-onboardingsentdmGuides current Sent RCS and RBM onboarding, launch evidence, carrier approval, text and suggestion-chip templates, Sender Profile readiness, and safe routing. Use for RCS launch, fallback, pinned-channel tests, or broadcast prevention.2,900 instalaciones en skills.sh0
  • sender-profile-architectsentdmDesigns Sent Sender Profile architecture for multi-tenant, multi-brand, and multi-channel systems. Use for API-key scoping, x-profile-id, isolation, inheritance, sharing, billing, WABA, 10DLC campaigns, webhooks, or tenant offboarding.2,900 instalaciones en skills.sh0
  • sentsentdmRoutes broad or ambiguous Sent requests to the correct MCP-backed operation or specialist skill. Use when the user asks what Sent can do, says "help me with Sent" or "set up messaging," needs several Sent workflows, or has not made the channel, task, or desired operation clear enough to select a more specific skill.2,900 instalaciones en skills.sh0
  • sent-account-readinesssentdmChecks the authorized Sent account, organization and Sender Profile scope, balance, onboarding/KYC status, and readiness with the Sent MCP tools. Use when a user asks whether the account can send, what the MCP connection authorized, whether funds are sufficient, why onboarding is blocked, or for a preflight check before a mutation or channel launch. Route remediation to the relevant onboarding or compliance skill.2,900 instalaciones en skills.sh0
Todas las skills de sentdm