Back to samples
Summit Health logo
Healthcare

Summit Health

Healthcare insurance, claims, doctors, and appointments

3 min read

Note: the visuals in this demo recording have since been refreshed with sharper brand assets. The conversation flow is identical to what you'll get from a fresh clone.

What's inside

  • View insurance plan details, deductible, and out-of-pocket max
  • Track claim status across recent visits
  • Find in-network doctors with rich location cards
  • Book and manage appointments inside the conversation
  • FAQ knowledge base for common coverage questions

A healthcare and insurance management chatbot that runs over RCS. Patients view their plan, track claims, find doctors, book appointments, and get answers about deductibles and out-of-pocket maxes — all from inside the messages app.

This guide walks you from a fresh clone to a working clinic demo in under 10 minutes.

What you'll build

  • A Pinnacle RCS agent for patient self-service
  • Insurance plan summary, claims tracker, and doctor finder
  • Appointment booking with reminder confirmation flow
  • Deductible and out-of-pocket max status with progress
  • Doctor location and hours lookup

Prerequisites

1. Clone and install

Bash
git clone https://github.com/pinnacle-samples/Summit-Health
cd Summit-Health
npm install

2. Configure environment

Bash
cp .env.example .env
env
PINNACLE_API_KEY=your_api_key_here
PINNACLE_AGENT_ID=your_agent_id_here
PINNACLE_SIGNING_SECRET=your_signing_secret_here
TEST_MODE=false
PORT=3000

3. Expose your webhook

Bash
ngrok http 3000

4. Connect the webhook

In the Webhooks dashboard:

  1. Add https://<your-tunnel-domain>/webhook
  2. Attach it to your RCS agent
  3. Copy the signing secret into PINNACLE_SIGNING_SECRET

5. Run it

Bash
npm run dev

Send MENU or START to your agent. You'll see Summit Health's main menu with Insurance, Claims, Find a Doctor, Make Appointment, and Support buttons.

How the pieces fit together

Summit-Health/
├── server.ts              # Express bootstrap
├── router.ts              # /webhook POST — verifies + dispatches
├── lib/
│   ├── rcsClient.ts       # PinnacleClient instance
│   ├── baseAgent.ts       # Shared send + typing helpers
│   ├── typing.ts          # Fire-and-forget typing indicator
│   ├── agent.ts           # SummitHealthAgent — every action handler
│   ├── data.ts            # Default patient, claims, FAQs, doctor locations
│   └── types.ts           # Patient, Claim, Doctor types

Action handlers

ActionWhat it does
mainMenu / showMainMenuLanding card with all entry points
viewInsurancePlan summary and coverage details
viewClaimsRecent claims list
claimDetailsPer-claim breakdown
deductibleStatusDeductible progress card
oopMaxOut-of-pocket max progress card
findDoctor / viewHoursDoctor lookup and location hours
makeAppointment / bookTimeAppointment booking flow
confirmReminder / declineReminderReminder opt-in step after booking
showSupportSupport contact info

Customize patient data

lib/data.ts exports a defaultPatient and seeded defaultClaims so the demo works out of the box. In production you'll want to look these up by from (the phone number) — the agent already passes from into every handler.

TypeScript
async getPatientByPhone(from: string): Promise<Patient> {
  // call your EHR / database
  return await db.patients.findUnique({ where: { phone: from } });
}

Doctor + locations

doctorLocations in lib/data.ts is the in-network provider list rendered as rich location cards. Add your own clinics and the finder picks them up immediately.

Compliance note

Healthcare RCS deployments need extra care:

  • Don't transmit PHI to third parties without a BAA
  • Use a test agent and whitelist only your dev devices during testing
  • Set TEST_MODE=true until your branded agent is approved

Going to production

  • Wire getPatientByPhone to your EHR or member database
  • Replace the in-memory state with Postgres
  • Submit the agent for carrier approval

Resources

© 2026 Pinnacle Software Development, Inc.