Example deployment: appointment reminders
A scheduling system sends reminders ahead of each appointment; "reply YES to confirm" answers flip the booking to confirmed through the webhook, and anything else becomes a staff task.
This is an example architecture, not a customer case study — use it as a technical starting point for your own deployment.
The business problem
No-shows cost real money, and phone-call reminders don't scale. Email reminders get opened after the appointment has already been missed.
Recommended architecture
- Scheduling systemBookings with dates, phones, and status
- Reminder jobCron selects tomorrow's bookings
- SendiMessage APIPOST /send-message with the booking id
- Managed messaging lineThe clinic/location's dedicated line
- CustomerReminder arrives the day before
- Confirmation reply"YES" — or a reschedule request
- Webhookreceive with the booking id
- Appointment status updateConfirmed automatically, or a task for staff
System trigger
A scheduled job (cron, queue worker, or your booking platform's automation) selects appointments in the next 24 hours and sends one clear reminder each. A same-day nudge is optional for high no-show contexts.
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 Anna, your appointment is tomorrow at 10:00 AM. Reply YES to confirm.","status_callback": "https://your-endpoint.example.com/status?booking_id=apt_2210&workflow=reminder_24h"}'# → {# "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
Reminders read equally well on either channel; "auto" maximizes deliverability. 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
Your webhook handler applies a simple rule: YES confirms the booking via your scheduling system's API; any other reply creates a staff task with the message text. Delivery events double as an audit trail for no-show disputes.
// "outbound" event → your scheduler 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 booking_id in scheduler.
Messaging-line setup
One line per clinic, location, or region — customers learn to recognize the number.
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.
Pricing and managed onboarding
Per active line plus usage. Reminder volume tracks appointment count — bring your monthly booking numbers to the pricing review. 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.