Add two-way customer messaging to your CRM
One-way notifications tell customers things; two-way messaging lets them answer — confirm the appointment, ask about the delivery, continue the sales conversation — without your team juggling a separate inbox.
The loop is: CRM event → outbound message → customer reply → incoming webhook → CRM update. SendiMessage handles the middle (managed lines, channel routing, reply capture); your CRM automation or middleware handles the two ends it already owns.
Because replies arrive as structured webhook events carrying the sender's number and a conversation_handle, routing them is deterministic: match the number against your CRM records to find the contact and its owner, and your handler knows exactly which record and which rep the reply belongs to. No ready-made connector is required — or claimed — for any specific CRM; the vendor guides show each system's mechanism.
What this integration enables
Architecture
- CRM eventDeal stage, booking, or ticket change
- Outbound messagePOST /send-message — store the returned message_handle on the record
- Customer replySMS or iMessage where supported
- Incoming webhookreceive event with the sender's number and conversation_handle
- CRM updateYour handler writes the reply as activity and notifies the owner
Example request
{"event": "receive","message_handle": "96699B14-AFDB-4B33-AA66-C4B093533DA3","from": "+15555550123","to": "+15555550100","content": "YES, confirmed — see you tomorrow.","media_url": null,"service": "SMS","is_outbound": false,"status": "RECEIVED","conversation_handle": "conv_01HZY5C7N2XQ8V4KE9RWB0V1DM","date_sent": "2026-08-11T09:00:00Z"}
Match the from number (or conversation_handle) to your CRM records to route the reply deterministically.
Delivery events and incoming replies
Incoming replies and delivery confirmations use the same signed webhook channel — one endpoint, one signature check, and your handler branches on the event type.
// "outbound" event → your your_crm endpoint// Verify the SendiMessage-Signature header (t={timestamp},v1=HMAC-SHA256 of// "{timestamp}.{raw body}", keyed with your webhook secret), then use// GET /v2/messages/{message_handle} for authoritative state and match it to// your contact_id in your_crm.
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.
- Writing replies into the CRM is performed by your handler or automation platform — automatic synchronization is not claimed for any CRM.
- Send messages only to recipients who expect them. Transactional and operational messaging is the primary use case — unsolicited bulk marketing is not.
Security considerations
- Verify webhook signatures before creating CRM records from inbound content.
- Treat reply text as untrusted input — sanitize before rendering it inside CRM fields or notifications.
Frequently asked questions
Does a ready-made connector exist for my CRM?
How fast do replies arrive?
What if a customer replies STOP?
Related integrations
Ready to connect Two-Way CRM Messaging?
Request a messaging line and a SendiMessage integration specialist will review your Two-Way CRM Messaging workflow and guide the setup.