Bot WA AI untuk Healthcare
Panduan bot AI WhatsApp untuk klinik dan healthcare. Booking, reminder, FAQ kesehatan. Tutorial lengkap dengan compliance!
Healthcare + AI Bot = Better patient experience!
Bot AI untuk healthcare bisa handle appointment booking, medication reminders, FAQ kesehatan, dan triage awal - dengan tetap mematuhi regulasi.
Use Cases Healthcare
š„ USE CASES:
KLINIK/RUMAH SAKIT:
- Booking appointment
- Reschedule/cancel
- Reminder H-1
- Info dokter & jadwal
- Estimasi biaya
APOTEK:
- Cek ketersediaan obat
- Info harga
- Reminder minum obat
- Refill notification
LABORATORIUM:
- Booking test
- Info persiapan test
- Hasil lab ready notification
ASURANSI KESEHATAN:
- Cek coverage
- Claim status
- Provider network
- FAQ polisCompliance & Safety
ā ļø PENTING - HEALTHCARE COMPLIANCE:
1. BUKAN PENGGANTI DOKTER
⢠Bot TIDAK boleh diagnosa
⢠TIDAK boleh resep obat
⢠TIDAK boleh advice medis spesifik
2. DISCLAIMER WAJIB
⢠Setiap info kesehatan harus ada disclaimer
⢠Selalu sarankan konsultasi profesional
3. DATA PRIVACY
⢠Enkripsi data pasien
⢠Sesuai regulasi (HIPAA/local)
⢠Consent untuk data
4. EMERGENCY HANDLING
⢠Detect emergency keywords
⢠Direct ke hotline/IGD
⢠Jangan delay dengan botSystem Prompt Healthcare
javascript
const HEALTHCARE_PROMPT = `Kamu adalah AI assistant untuk [KLINIK NAME].
PERAN:
- Membantu booking appointment
- Memberikan info umum tentang layanan
- Menjawab FAQ non-medis
- BUKAN dokter, TIDAK memberikan diagnosis
LAYANAN KLINIK:
- Dokter Umum: Rp 150.000
- Dokter Spesialis: Rp 300.000 - 500.000
- Lab Test: Bervariasi
- Vaksinasi: Sesuai jenis
JADWAL:
- Senin-Jumat: 08:00-21:00
- Sabtu: 08:00-15:00
- Minggu: Tutup
DOKTER:
- dr. Andi (Umum) - Senin-Jumat
- dr. Budi, Sp.PD (Penyakit Dalam) - Selasa, Kamis
- dr. Citra, Sp.A (Anak) - Senin, Rabu, Jumat
ATURAN KETAT:
1. JANGAN PERNAH memberikan diagnosis
2. JANGAN PERNAH meresepkan obat
3. JANGAN PERNAH memberikan advice medis spesifik
4. Selalu sarankan konsultasi dengan dokter
5. Jika emergency, langsung arahkan ke IGD/119
CONTOH YANG TIDAK BOLEH:
ā "Sepertinya Anda terkena flu"
ā "Coba minum paracetamol"
ā "Itu gejala diabetes"
CONTOH YANG BOLEH:
ā
"Untuk keluhan tersebut, sebaiknya konsultasi dengan dokter umum"
ā
"Saya bisa bantu booking dengan dr. Andi"
ā
"Info lebih lanjut tentang gejala bisa ditanyakan saat konsultasi"
EMERGENCY KEYWORDS:
Jika ada kata: darurat, emergency, sesak napas berat,
nyeri dada, pingsan, kejang, kecelakaan
ā LANGSUNG arahkan ke IGD atau hubungi 119`;Appointment Booking
javascript
const appointmentTools = [
{
type: 'function',
function: {
name: 'check_doctor_schedule',
description: 'Check doctor availability',
parameters: {
type: 'object',
properties: {
doctorId: { type: 'string' },
date: { type: 'string' }
}
}
}
},
{
type: 'function',
function: {
name: 'create_appointment',
description: 'Book an appointment',
parameters: {
type: 'object',
properties: {
patientName: { type: 'string' },
patientPhone: { type: 'string' },
doctorId: { type: 'string' },
date: { type: 'string' },
time: { type: 'string' },
complaint: { type: 'string' }
},
required: ['patientName', 'doctorId', 'date', 'time']
}
}
}
];
async function createAppointment(data) {
// Check availability
const isAvailable = await checkSlotAvailability(
data.doctorId,
data.date,
data.time
);
if (!isAvailable) {
return {
success: false,
message: 'Slot tidak tersedia',
alternatives: await getAlternativeSlots(data.doctorId, data.date)
};
}
// Create appointment
const appointment = {
appointmentId: generateAppointmentId(),
patientName: data.patientName,
patientPhone: data.patientPhone,
doctorId: data.doctorId,
doctorName: await getDoctorName(data.doctorId),
date: data.date,
time: data.time,
complaint: data.complaint,
status: 'confirmed',
createdAt: new Date()
};
await db.appointments.insertOne(appointment);
// Schedule reminders
await scheduleReminder(appointment, 'H-1');
await scheduleReminder(appointment, 'H-3h');
return {
success: true,
appointment
};
}Emergency Detection
javascript
const EMERGENCY_KEYWORDS = [
'darurat', 'emergency', 'gawat',
'sesak napas', 'tidak bisa napas',
'nyeri dada', 'sakit dada',
'pingsan', 'tidak sadar',
'kejang', 'step',
'kecelakaan', 'luka parah',
'perdarahan', 'darah banyak',
'stroke', 'serangan jantung',
'keracunan', 'overdosis'
];
function detectEmergency(message) {
const lowerMessage = message.toLowerCase();
return EMERGENCY_KEYWORDS.some(keyword =>
lowerMessage.includes(keyword)
);
}
async function handleMessage(userId, message) {
// PRIORITY: Check for emergency first
if (detectEmergency(message)) {
return handleEmergency(userId, message);
}
// Normal flow
return await processNormalMessage(userId, message);
}
function handleEmergency(userId, message) {
// Log emergency
logEmergencyDetection(userId, message);
// Alert staff
alertEmergencyStaff(userId, message);
return `šØ KONDISI DARURAT TERDETEKSI
Jika ini adalah keadaan darurat medis:
1ļøā£ SEGERA hubungi 119 (Ambulans)
2ļøā£ Atau langsung ke IGD terdekat
š„ IGD [KLINIK]: [ALAMAT]
š Hotline: [NOMOR]
Jangan tunda penanganan medis darurat!
---
Jika ini bukan darurat dan Anda ingin
booking konsultasi biasa, ketik BOOKING.`;
}Medical FAQ with Disclaimer
javascript
async function handleMedicalFAQ(message) {
const response = await openai.chat.completions.create({
model: 'gpt-4o',
messages: [
{
role: 'system',
content: `Kamu adalah assistant untuk FAQ kesehatan UMUM.
ATURAN:
- Berikan info UMUM saja
- SELALU tambahkan disclaimer
- JANGAN diagnosis
- JANGAN resep obat
- Selalu sarankan konsultasi dokter
FORMAT JAWABAN:
1. Info umum singkat
2. Disclaimer
3. Saran untuk konsultasi`
},
{ role: 'user', content: message }
]
});
let answer = response.choices[0].message.content;
// Ensure disclaimer is present
if (!answer.includes('konsultasi') && !answer.includes('dokter')) {
answer += '\n\nā ļø _Informasi ini bersifat umum. Untuk kondisi spesifik Anda, silakan konsultasi dengan dokter._';
}
return answer;
}Medication Reminder
javascript
// For pharmacy or clinic with medication reminders
async function setupMedicationReminder(userId, medication) {
const reminder = {
oderId
userId,
medicationName: medication.name,
dosage: medication.dosage,
frequency: medication.frequency, // e.g., "3x sehari"
times: medication.times, // e.g., ["08:00", "14:00", "20:00"]
startDate: medication.startDate,
endDate: medication.endDate,
withFood: medication.withFood,
active: true
};
await db.medicationReminders.insertOne(reminder);
// Schedule reminders
for (const time of reminder.times) {
await scheduleRecurringReminder(reminder, time);
}
return `ā
Reminder obat sudah diset!
š ${medication.name} ${medication.dosage}
ā° ${medication.times.join(', ')}
š
Sampai ${formatDate(medication.endDate)}
Aku akan ingatkan setiap jadwal minum obat ya!
ā ļø _Reminder ini sebagai pengingat saja.
Ikuti petunjuk dokter/apoteker Anda._`;
}
async function sendMedicationReminder(reminder) {
const message = `ā° REMINDER OBAT
Waktunya minum obat:
š ${reminder.medicationName}
š Dosis: ${reminder.dosage}
${reminder.withFood ? 'š½ļø Diminum setelah makan' : 'š§ Bisa diminum kapan saja'}
Sudah minum? Reply ā
Snooze 15 menit? Reply ā°
_Jaga kesehatan ya!_ šŖ`;
await sendWhatsApp(reminder.userId, message);
}Conversation Example
š¤: Hai, mau booking dokter
š¤: Hai! Selamat datang di [Klinik] š
Mau konsultasi dengan dokter apa kak?
šØāāļø Dokter kami:
1ļøā£ dr. Andi (Umum)
2ļøā£ dr. Budi, Sp.PD (Penyakit Dalam)
3ļøā£ dr. Citra, Sp.A (Anak)
Atau ceritakan keluhannya, aku bantu
arahkan ke dokter yang tepat!
---
š¤: Anak saya demam sudah 2 hari
š¤: Untuk keluhan demam pada anak,
sebaiknya konsultasi dengan dr. Citra, Sp.A
(Spesialis Anak) ya kak.
š
Jadwal dr. Citra:
- Senin, Rabu, Jumat
- 09:00 - 15:00
Mau booking untuk tanggal berapa kak?
ā ļø _Jika demam disertai kejang, sesak napas,
atau kondisi memburuk, segera ke IGD._
---
š¤: Hari Rabu bisa?
š¤: Rabu, 19 Feb 2026 dengan dr. Citra ya!
ā° Slot tersedia:
- 09:00 ā
- 10:00 ā
- 11:00 ā
- 13:00 ā
- 14:00 ā
Pilih jam berapa kak?
---
š¤: Jam 10 aja
š¤: Baik kak! Untuk booking, aku butuh:
1ļøā£ Nama lengkap pasien (anak)
2ļøā£ Tanggal lahir anak
3ļøā£ Nama orang tua/wali
---
š¤: Anak: Dinda, 5 tahun. Ortu: Sari
š¤: ā
BOOKING BERHASIL!
š Detail Appointment:
āāāāāāāāāāāāāāāāāāāā
š« No: APT-20260219-010
š¶ Pasien: Dinda (5 thn)
š© Ortu: Sari
š©āāļø Dokter: dr. Citra, Sp.A
š
Rabu, 19 Feb 2026
ā° 10:00 WIB
š [Alamat Klinik]
āāāāāāāāāāāāāāāāāāāā
š° Biaya konsultasi: Rp 300.000
(Belum termasuk obat/lab jika ada)
š Yang perlu dibawa:
- Kartu identitas ortu
- Kartu BPJS (jika pakai)
- Catatan suhu demam anak
Aku akan reminder H-1 ya kak!
Semoga Dinda cepat sembuh šBest Practices
DO ā
- Clear disclaimer setiap info medis
- Detect dan prioritaskan emergency
- Konfirmasi detail appointment
- Send reminders
- Respect patient privacy
- Escalate appropriatelyDON'T ā
- Diagnosa penyakit
- Resepkan obat
- Delay emergency cases
- Store data tanpa consent
- Over-promise treatment
- Replace doctor consultationFAQ
Bot boleh kasih info kesehatan?
Info UMUM boleh dengan disclaimer. Diagnosis dan resep TIDAK boleh.
Bagaimana handle emergency?
Detect keywords, langsung arahkan ke 119/IGD. Jangan proses sebagai chat biasa.
Kesimpulan
Healthcare Bot = Better access, with responsibility!
| Without Bot | With AI Bot |
|---|---|
| Call to book | 24/7 booking |
| Miss reminders | Auto reminder |
| Wait for info | Instant FAQ |