
Appointments and enquiries
Your staff stop spending the day inside the phone.
- No thirty unread messages waiting on Monday morning
- No two patients booked into the same slot
- Medical questions reach you — the system never answers them
- Build
- 13 weeks
- First reply
- Under 30s
A single appointment request as it moves between groups. Dashed blocks are the language model. Solid black blocks are deterministic logic — and only those create the appointment.
Patient-facing group
Reception10:41
Mr Chan wants to see Dr Lee Tuesday afternoon, follow-up, 9123 4567
Language modelClassify and extract
- Type
- Appointment request
- Date
- Tue 25 Aug
- Time
- Afternoon
- Doctor
- Dr Lee
- Reason
- Follow-up
- Phone
- 9123 4567
Deterministic logic
Availability check
Tuesday afternoon falls outside Dr Lee's registered consulting hours. The model is not consulted in this determination, and would have no authority if it were.
No appointment created
Agent → Internal clinical group
Dr Lee — a follow-up request for Tuesday 25 August, afternoon. That slot is outside your registered consulting hours. Can it be arranged?
Internal clinical group
Dr Lee11:20
Can't do Tuesday, I've got a meeting. Thursday after 3:30 works.
Language modelRead the reply as a position
- Tuesday
- Unavailable
- Thursday
- From 15:30
Where a reply cannot be resolved, the agent asks again. Asking again is not counted as an error.
Deterministic logic
Create appointment
Thursday 27 August 15:45 falls inside the hours the doctor has just given, and is not occupied by another appointment.
Appointment created
Agent → Both groups
Booked — Mr Chan with Dr Lee, Thursday 27 August, 15:45, follow-up.
The model read the request and understood the doctor's reply. It did not decide the appointment.
The hard part, stated plainly
The official messaging business platform cannot join a group that already exists — it caps group members, and the group must have been created by the business account itself. That is documented by the platform vendor and you can verify it. So a deployment that leaves your staff's habits untouched has to run through a paired-device connector, which sits outside the platform's terms of service and is a single point of failure. We tell you this up front rather than discovering it with you later, and we mitigate it three ways: a dedicated practice number so a restriction costs you a channel and never anyone's personal messages; the full record held in storage you control, so losing the channel does not lose the records; and a rehearsed manual fallback.
What it does
- Classifies each message as general enquiry, appointment request, medical question, or requiring no reply
- Extracts date, time, doctor, reason and notes field by field, and asks again rather than guessing
- Threads related messages into one case readable end to end across every group
- Routes medical questions to the doctor and relays only the doctor's own answer
- Answers factual enquiries from a knowledge base you maintain, or hands over
- Captures images, PDFs, voice notes and stickers, retrievable from the dashboard
- Sends scheduled next-day appointment notifications, and re-sends if anything changes
- Read-only calendar subscription — no appointment can be created from a subscribed device
Performance
| Item | Standard |
|---|---|
| Appointment logic — occupied slots, consulting hours, doctor's explicit agreement | 100% |
| Message classification | ≥ 95% |
| Field extraction, counted field by field | ≥ 98% |
| First response, with no message exceeding 90 seconds | 95% ≤ 30s |
| Unsupported factual answers | 0 |
| AI-generated clinical content | 0 |
| Content leaking out of the internal clinical group | 0 |
| Agent replying after a human took over the case | 0 |
| Attachment capture and retrieval | ≥ 99% |
| Duplicate reply, appointment or case from a replayed message | 0 |
| Write to the schedule without the administrator password | 0 |
| A case read end to end across every group | ≤ 30s |





