One record of every communication with a patient, a member of staff, a board member, a supplier or a journalist, on seven channels, honouring each person’s recorded preference. What is live, what is demonstrated, and exactly what leaves the building.
Most clinical systems treat communication as somebody else’s problem. The letters go out of a document tool, the texts go out of a messaging gateway, the phone system is a separate contract, the campaigns run in a marketing product and the internal announcements go out on email. Five suppliers, five audit trails, and no single answer to “what have we sent this person?” commvita holds all of it in the core: letter, email, SMS, WhatsApp, phone, portal and Teams, for patients and for staff, board members, stakeholders, suppliers and press.
Every letter, text, call, WhatsApp message and portal message against the person, inbound and outbound, with the module that generated it. Their recorded channel preferences sit on the same screen and are enforced when somebody presses send.
Staff hold their own preferences from the staff portal: which channel to reach them on, whether out-of-hours contact is urgent only, and the quiet hours window. Board members get pack notifications that carry no pack content.
A stakeholder, a supplier, a partner organisation and a media enquiry each get a party record with the same timeline shape. A media enquiry logged by the communications lead is on the same audit as a text to a patient.
Open a person and you get everything the organisation has sent them and everything they have sent back, in one column, whatever the channel. That’s the thing that’s hard to buy and easy to describe.
Three details on that screen do the work. The preferred channel is printed above the compose box, so the person sending sees it before choosing. Each row carries the module that generated the message, so a recall, a screening invitation and an ad hoc reply are told apart. And inbound is on the same timeline as outbound, which is the only way a query from a patient and the answer to it end up next to each other.
Staff get the same thing about themselves. A member of staff can open their own communications from the staff portal, set the channel they want to be reached on and their quiet hours, and read the timeline of what the organisation has sent them. A missed message becomes something you can check instead of something you argue about.
Most systems answer “can we text this person?” with true or false. That isn’t enough to act on. Somebody who was asked and said no needs their decision respected. Somebody nobody has ever asked needs a conversation. A single boolean sends staff to the wrong remedy, so this platform records which of the two it is.
SMS and WhatsApp arrive unbidden on a phone, and a wrong or shared number reaches a stranger. Where no contact preference has been recorded, those two channels are refused. Letter, phone, email and portal aren’t refused, because writing to somebody at their registered address or ringing them is ordinary direct care and blocking it for everyone who has never stated a preference would break routine correspondence across the platform.
When a send is blocked the response names the basis: the person opted out, the person recorded do-not-contact, or no permission has been recorded and nobody has asked them. An override exists for clinically essential contact, and taking it’s a decision somebody is recorded as making against the record.
Send to a cohort and the result gives you the number sent, the people skipped because they opted out, the people skipped because nobody has asked them, and the people who were sent to on a channel whose permission was assumed not recorded. One number covering all of that would let a campaign present assumed consent as recorded consent.
A campaign is a named piece of work with a cohort, a template, a channel, a schedule and a result. The library keeps drafts, scheduled sends and sent campaigns in one list with the sent and delivered counts on the row.
Underneath, an analytics view computes the month’s totals, the average open and click rates and the average did-not-attend reduction from the campaign rows themselves. The cohort definitions the studio offers are fixed with illustrative population sizes; the campaign counts against each one are real. Separately, the CRM will resolve an ad hoc cohort from the patient register by age band, condition and risk tier and send to it.
Two columns there are the governance. The WhatsApp category tells you whether a template is a utility message or a marketing one, which is what the platform rules turn on. The consent column marks the templates that can’t go without a recorded opt-in. A character count next to each is the mundane thing that stops a two-part text being sent by accident.
The telephone is still the busiest channel in most organisations and the least recorded. A call happens, and the only trace is a line in a phone system nobody in the clinical service can search. The telephony hub puts the call on the same timeline as everything else and gives the clinician a button to code it into the record.
The counter that says three of six calls coded to record is the useful one. It measures the gap between the calls that happened and the calls that left a clinical trace, and it’s a number a practice manager can work on. Routing rules, a mobile mode for staff working away from a desk phone, and a WhatsApp thread view sit alongside it. Click-to-call writes the call to the person’s CRM timeline as it dials.
This is the part of a communications module where suppliers are least honest, so here is the position plainly. In this environment no transport is provisioned. Nothing you press send on goes to a phone or an inbox.
A message written through the CRM, the messaging gateway or the campaign studio is validated against the person’s permissions, written to their timeline with a channel, a direction, a status and a timestamp, and given a provider reference. The provider reference in the demo is generated locally. A campaign marked sent has its delivered and bounced counts modelled and not reported back by a carrier.
Where the platform does dispatch on behalf of another module, it distinguishes three outcomes: a transport accepted the message, nothing left commvita, or the dispatch failed. Those are never collapsed into one count, because a board reading “members notified” over work that didn’t happen is worse than a board reading nothing.
The phone system panel shows the connected platform as not connected and says on the screen that it’s an integration adapter needing provider credentials at deployment. The messaging gateway ships a provider list with none active. The WhatsApp leg of the patient messaging screen posts to an external business adapter and records a failure when that adapter isn’t reachable. Switching them on is configuration, and until it’s done the platform says so.
| Capability | Route | Model / API | Status |
|---|---|---|---|
| Unified timeline: patients and every other party | /comms-crm | API /crm/patients/{id}/timeline · /crm/parties/{type}/{id}/timeline | ● Live |
| Patient contact preferences, per channel | /comms-crm · patient portal | API /crm/patients/{id}/preferences · enforced on send | ● Live |
| Staff preferences and quiet hours | /staff-portal | API /crm/me/preferences · /crm/me/timeline | ● Live |
| Permission basis on refusal and on send | /comms-crm | API /crm/patients/{id}/log · recorded, assumed, opted out, never asked | ● Live |
| Cohort send with skips reported apart | /comms-crm | API /crm/cohort/send · /crm/resolve-cohort | ● Live |
| Campaign library, schedule and send | /comms-hub | API /comms/campaigns · schedule · send | ● Live |
| Campaign templates and analytics | /comms-hub | API /comms/templates · /comms/analytics computed from campaign rows | ● Live |
| Campaign cohort catalogue | /comms-hub | Fixed cohort definitions with illustrative population sizes; campaign counts are real | ☉ Demonstrated |
| SMS and WhatsApp templates, consent, delivery log | /sms-gateway | API /sms/templates · /sms/consent · /sms/messages | ● Live |
| WhatsApp opt-in enforced on send | /sms-gateway | API POST /sms/send refuses WhatsApp with no recorded opt-in | ● Live |
| Messaging provider configuration | /sms-gateway | API /sms/providers · provider slots present, none active in this environment | ● Live |
| Calls, routing rules, code-to-record | /telephony | API /telephony/calls · /telephony/routing-rules · /telephony/stats | ● Live |
| Cloud phone system and click-to-call | /comms-crm | API /crm/telephony/config · /crm/telephony/click-to-call · adapter, no call placed here | ● Live |
| Patient WhatsApp and secure portal message | /patient-comms | API /patient-comms/send · /patient-comms/messages · WhatsApp via an external adapter | ● Live |
| Actual transmission to a carrier or inbox | — | Transport is switched on by configuration; nothing is provisioned in this environment | ☉ Demonstrated |