We use optional, privacy-safe analytics to understand which pages help visitors. Nothing optional runs until you choose. Privacy policy

Skip to content
Guide AvailableWorkflow + HTTP Request

Send a message after an AI phone call

The highest-value moment for messaging after a voice AI call is the minute it ends: a written confirmation, a payment or booking link, or a follow-up the customer can act on. SendiMessage is the layer that sends it and catches the reply.

This pattern is platform-neutral. Whichever voice AI you run, the shape is the same: the call-ended event reaches your backend, your backend calls POST /send-message, and the customer's reply returns as a signed receive webhook. For platform-specific notes, see the Vapi and Retell AI guides.

Request This SetupBook an Integration Review

What this integration enables

Written confirmation
Turn a spoken agreement into a text the customer keeps — appointment, order, or next step.
Booking or payment link
Send a link the customer taps after the call, then react to their reply.
Missed-call follow-up
The call didn't connect or went unanswered → send a text to continue.
Reschedule handling
The customer texts back to change a time; your workflow updates the booking.

Architecture

How it fits together: AI voice agent, then Call ends, then Your backend, then SendiMessage API, then Customer receives the message, then Customer replies, then Signed receive webhook, then Your workflow continues.
  1. AI voice agentYour voice platform runs the call
  2. Call endsA call-completed / end-of-call event fires
  3. Your backendReceives the event and decides whether to text
  4. SendiMessage APIPOST /send-message queues the follow-up on your line
  5. Customer receives the messageiMessage where supported, SMS fallback where configured
  6. Customer repliesThe answer arrives on the same thread
  7. Signed receive webhookSendiMessage posts the reply to your endpoint
  8. Your workflow continuesConfirm, reschedule, escalate — inside your application

Example request

Send after the call
// Your application (not SendiMessage) decides what to say.
const res = await fetch("https://api.sendimessage.com/v1/send-message", {
method: "POST",
headers: {
"X-API-Key": process.env.SENDIMESSAGE_API_KEY,
"X-API-Secret": process.env.SENDIMESSAGE_API_SECRET,
"Content-Type": "application/json",
// Idempotency-Key derived from your own record id keeps a
// retried automation from double-texting the customer.
"Idempotency-Key": callId,
},
body: JSON.stringify({ number: customer.phone, content: agentReply }),
});
const { message_handle } = await res.json(); // store this on your record

Trigger this from your voice platform's call-ended event. The Idempotency-Key (derived from the call id) makes a retried event safe.

Limitations and honest notes

  • iMessage delivery is available on supported messaging lines and destinations. Recipients without iMessage receive SMS when fallback is configured — never assume universal iMessage availability.
  • Messages are accepted asynchronously — the API returns status QUEUED and final status arrives via webhook or the message endpoints.
  • No official SDK for this ecosystem yet — the example uses plain HTTP against the REST API. Official SDKs are published for JavaScript/TypeScript (npm: sendimessage), Python (PyPI: sendimessage), PHP (Composer: sendimessage/sdk), and Go (github.com/sendimessage/sendimessage-go). Every SDK is dependency-free and covers the full public API surface.
  • SendiMessage handles messaging only — the voice call, transcription, and model stay on your voice platform.
  • Delivery is asynchronous: the send returns 201 QUEUED and the final state arrives via the outbound webhook or GET /v2/messages.

Security considerations

  • Send messages only to recipients who expect them. Transactional and operational messaging is the primary use case — unsolicited bulk marketing is not.
  • Do not place SendiMessage API credentials directly in browser code. Send requests through your own server route or backend.
  • Keep your API key server-side, in environment variables or a secrets manager — never in client code, CRM front-end scripts, or repositories.
  • Verify the signature header on every incoming webhook before trusting the event.
  • Scope keys per environment and rotate them if they are ever exposed.

Frequently asked questions

Does this work with my voice platform?
If your platform can call a webhook or your backend when a call ends, yes. The integration is a standard API + webhook pattern, independent of the voice vendor.
Will the follow-up be an iMessage?
iMessage delivery is available on supported messaging lines and destinations. Recipients without iMessage receive SMS when fallback is configured — never assume universal iMessage availability.

Ready to connect Voice AI Post-Call Follow-Up?

Request a messaging line and a SendiMessage integration specialist will review your Voice AI Post-Call Follow-Up workflow and guide the setup.