Example deployment: two-way CRM messaging
The complete loop: CRM events trigger outbound messages, customers answer, and replies land back on the right record with the right owner notified — one metadata convention makes the whole loop deterministic.
This is an example architecture, not a customer case study — use it as a technical starting point for your own deployment.
The business problem
One-way notifications tell customers things; the business value is in the answers — and without a return path, those answers land in a shared inbox nobody owns.
Recommended architecture
- CRM eventDeal stage, booking, or ticket change
- Outbound messagePOST /send-message with contact + owner metadata
- Customer replySMS or iMessage where supported
- Incoming webhookreceive echoes your metadata
- CRM updateReply written as activity; owner notified
System trigger
Any CRM automation (Flow, Workflows, Deluge, Power Automate) or middleware. The key design decision is the metadata convention: every send carries contact_id and owner_id, and every reply comes back carrying them.
SendiMessage API request
curl -sS https://api.sendimessage.com/v1/send-message \-H "X-API-Key: $SENDIMESSAGE_KEY" \-H "X-API-Secret: $SENDIMESSAGE_SECRET" \-H "Content-Type: application/json" \-d '{"number": "+15555550123","content": "Hi {{contact.first_name}}, your proposal is ready — any questions before we talk Thursday?","status_callback": "https://your-endpoint.example.com/status?crm=your_crm&contact_id={{contact.id}}&owner_id=rep_789&workflow=proposal_follow_up"}'# → {# "status": "QUEUED",# "message_handle": "4e828182-a640-483f-bfe9-17ffcaa51d48",# "to": "+14155550123",# "service": null,# "is_outbound": true,# "error_message": null,# "date_sent": null# }
Channel behavior and SMS fallback
Conversations flow naturally on iMessage where supported; SMS fallback keeps every contact reachable. iMessage delivery is available on supported messaging lines and destinations. Recipients without iMessage receive SMS when fallback is configured — never assume universal iMessage availability.
Incoming replies
Replies are the product here: receive events carry your metadata back, middleware writes the reply to the record and notifies the owner. STOP handling updates consent state immediately. No ready-made connector is claimed for any CRM — the vendor guides show each system's trigger mechanism.
// "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.
Messaging-line setup
One line per team or brand. Two-way volume grows with reply rates — usually the sign it's working.
Security checklist
- API key in server environment variables or a secrets manager — never in client code.
- Webhook signatures verified before any record is updated.
- Only the fields a message needs (phone, first name, reference id) leave your system.
- Reply text is untrusted input — sanitize before rendering inside CRM fields or notifications.
Pricing and managed onboarding
Per active line plus usage in both directions. The pricing review covers reply-heavy workloads explicitly. Every line goes through managed onboarding: use-case review, test line, credentials delivered securely, and guided production activation.
Want this setup?
Request the setup and the team will map this example to your systems, or book a review to talk it through first.