Reference table
Messaging providers
Lists the providers Raven sends through for SMS, WhatsApp, email, push and voice, the receipts each returns, and the checks every message passes first.
Raven sends the hospital's messages to patients and staff through outside providers for push, SMS, WhatsApp, email and voice, and delivers in-app notices itself. This page lists each channel's provider with what it carries and the receipts it returns, then sets out the checks every message passes and how the hospital's provider accounts are held.
Channels and providers
Each outside channel has its own adapter on the platform, which calls the provider and logs every attempt. A receipt is a provider's report of what became of a message once Raven handed it over.
| Channel | Provider | What it carries | Receipts returned | Two-way |
|---|---|---|---|---|
| In-app | Pensieve itself | A short notice to the person's open Pensieve session | Delivery to the open session, recorded by Raven | No |
| Push | Firebase Cloud Messaging | A short notification to each device the person is signed in on | A result for each device, naming any device no longer registered | No |
| SMS | MSG91 | Text built from a DLT-registered template, sent to Indian mobile numbers under the hospital's registered sender header | Delivery reports | No |
| The WhatsApp Business Platform Cloud API | Approved template messages, and interactive messages with reply buttons and lists | Sent, delivered, read and failed receipts | Yes | |
| Amazon SES | Email from the hospital's verified sender address, with any attachments | Delivery, bounce and complaint notices | No | |
| Voice | Exotel | An automated call that plays a recorded message | The status of each call | No |
Each message starts in the tool that decides to send it, and Raven handles its delivery. Sentinel hands over the alerts that need a person and each step of an escalation, Gate its appointment notices and Nexus Manager its staff invitations by email. A patient's follow-up reminders reach them through Raven on a channel they agreed to.
Checks before a message leaves
Every message passes the same checks in a fixed order, and a message refused at any of them is kept with the check that stopped it.
- 1
Raven classifies the message
Each message takes its TRAI category from its template, or else from the request: transactional, service or promotional. A message that names none counts as promotional. The category decides which consent applies and the route an SMS takes.
- 2
Raven finds the contact
Raven reads the number, address, device or session the channel needs from the person's record, and refuses the message if that contact is missing or invalid.
- 3
Raven checks consent
Raven reads the person's latest consent entry for the channel and the category, and that entry decides whether the message may go. Consent for transactional and service messages is recorded for each person from the start, and a promotional message needs a grant the person gave.
- 4
Quiet hours apply
A routine message due inside the person's quiet hours is scheduled for when they end, and an urgent clinical message goes straight away with the override recorded on it.
- 5
Raven renders the template
Raven builds the text from the template in the person's language, falling back to English and then to the template's base text. Each required value must be supplied or carry a default, so every placeholder is filled before the text reaches a provider.
- 6
Raven checks for health information
For each outside channel, Cirith Manager and Atlas decide whether the content may travel on it, and a message that would carry protected health information there is refused. An in-app notice stays inside Pensieve and skips this check.
- 7
The limits apply
The channel must be on for the site, and the message must fit the site's daily and monthly allowance for the channel and the recipient's daily allowance.
- 8
The message is written and counted
Raven writes the message as pending, or as scheduled for later, and only then do the site's counters for the channel advance.
A scheduled message is checked again when it falls due, and its consent, contact and template must still stand. How consent and quiet hours shape each send is described in communications.
Receipts and status
Raven logs each attempt with its cost and the provider's own identifier for the message, and a later receipt finds its message by that identifier and channel. Every receipt is verified before Raven reads it. A WhatsApp receipt carries an HMAC-SHA256 signature over its raw body, and an Amazon SES notice is checked against the provider's signing key.
A message's status rises through sent, delivered and read, so a receipt that arrives late or twice leaves the higher status standing. Push counts as delivered once any of the person's devices accepts it, and a device reported as unregistered is dropped from their list.
A permanent bounce or a complaint puts the address on the site's email suppression list, and later email to it is refused before the provider is called.
Retries and fallback
A failed attempt is retried a set number of times at widening intervals. A refusal a retry cannot fix, such as a validation failure or incomplete channel settings, ends the message at once with its reason.
An urgent message that has used its retries moves to the next untried channel in the failed channel's fallback order, carrying the original's reference.
Templates
Every outside message is built from a template the hospital has approved, with wording for each channel and each language it offers. A template also holds what its provider expects: the DLT template identifier for SMS, and the name it is registered under on the WhatsApp Business Platform.
An SMS whose template lacks its DLT identifier is refused before MSG91 is called, and a WhatsApp template is sent only once its recorded status is approved.
Conversations on WhatsApp
A patient who writes to the hospital's WhatsApp number is matched to their record by that number, and an unknown number is asked to register at the front desk.
The conversation runs on reply buttons and lists for booking, cancelling or checking an appointment, and Gate makes each change itself. An administrator chooses which services can be booked this way. Raven verifies the signature on every incoming message, drops one the provider delivers twice, and records each turn.
The hospital's provider accounts
SMS, WhatsApp, email and voice each send through the hospital's own provider account, set per site and channel in Raven's channel settings, which need a permission of their own.
The provider the channel sends through.
The identity the provider registered for the hospital: the SMS sender header and DLT entity, the WhatsApp business account and number, or the email sender address.
The site's daily and monthly allowance for the channel, and the allowance for each recipient in a day.
The channels an urgent message moves through once its retries are used.
Whether the channel is on. A channel switched off refuses messages with that reason, and one never set up is reported as incomplete.
A reference to the account's credential in the platform's secret store. The settings show the reference alone.
Custody and rotation of each credential follow authentication between systems.
Common confusions
Whose account sends the hospital's messages?
The hospital's own provider account for SMS, WhatsApp, email and voice, set for each site. Raven reads its credential from the secret store at the moment it sends. Push and in-app notices need no provider account of the hospital's.
Why did a message never leave?
One of the checks refused it, and the delivery log keeps the check and its reason, such as withdrawn consent, a missing contact or an empty template value.
Read how Raven carries each message to its person in communications, and how a provider receipt sent twice is recognised in delivery guarantees.