Integrasi WhatsApp Gateway (WA API) di RS: Pasien Senang, IT Tenang
Sobat IT RS pasti paham, jadwal poli itu kadang kayak lomba lari. Banyak pasien lupa jadwal kontrol, jadwal kosong, dokter nunggu, kursi ruang tunggu jadi tempat tidur darurat. Kepala ruangan protes, manajemen tanya: "Kenapa pasien nggak diingatkan, IT ngapain aja?" Sementara, HP pasien sehari-hari nempel kayak lem super: WA aktif 24 jam, SMS dilirik aja enggak. Jadi, kenapa nggak sekalian main di area yang dipandang pasien? Kirim reminder kontrol via WhatsApp, pasien senang, perawat nggak mumet, IT pusingnya berkurang.
Artikel ini kupas tuntas cara sistem IT RS ngirimin notifikasi kontrol ke pasien via WhatsApp Gateway/WA API. Mulai dari pemilihan solusi, skenario sistem, contoh query, sampai contoh payload API yang bisa langsung diterapkan. Nggak pake ribet, langsung ke teknis, no basa-basi.
Kenapa Harus WhatsApp?
- Pasien 90% sudah pake WA. SMS? Sering nyasar ke spam, sering dibilang “nggak dapat”.
- WA lebih dipercaya pasien, dibuka real time. Reminder lebih efektif.
- Log chat WA bisa dipantau, gampang tracking kalau ada protes “katanya gak dihubungi”.
- Bisa dua arah (respon pasien: “Ya, saya datang”, atau “Cancel”), tinggal sesuaikan kebutuhan.
Model Integrasi WhatsApp Gateway di RS
Langkahnya simpel, jalurnya dua:
- Ambil data pasien yang jadwal kontrol besok/lusa via SQL.
- Loop data, kirim ke endpoint WhatsApp Gateway.
Ada dua tipe WhatsApp Gateway:
- Resmi/WA Business API: Aman, scalability tinggi, tapi perlu KYC, biaya mahal, kadang approval lama, kirim pesan 1 arah saja (template message, interaksi terbatas).
- Unofficial/third-party gateway: Biasanya self-hosted (WAGateway, Chat-API, open-source seperti whatsapp-web.js), lebih fleksibel, murah, risk: kadang kena banned, perlu monitoring.
Skema Integrasi Sederhana
- SQL job jalan subuh/siang, ambil jadwal kunjungan pasien H+1, format data.
- Script (bisa PHP, Python, Node.js, PowerShell, terserah OS/stack) loop ke API WhatsApp Gateway, kirim pesan per pasien.
- Log hasil kirim di tabel log notifikasi (biar kalau ada komplain, ada jejaknya).
Contoh Query SQL: Ambil Jadwal Kontrol Besok
Pakai struktur tabel standar: tb_pasien, tb_registrasi, tb_jadwal_kontrol
-- Ambil pasien yang punya jadwal kontrol besok
SELECT
p.no_rm,
p.nama_pasien,
p.no_hp,
k.tanggal_kontrol,
d.nama_dokter,
poli.nama_poli
FROM tb_jadwal_kontrol k
JOIN tb_pasien p ON k.no_rm = p.no_rm
JOIN tb_registrasi r ON k.id_reg = r.id_reg
JOIN tb_dokter d ON k.id_dokter = d.id_dokter
JOIN tb_poli poli ON k.id_poli = poli.id_poli
WHERE
k.tanggal_kontrol = CAST(GETDATE() + 1 AS DATE)
AND p.no_hp IS NOT NULL
- no_hp pastikan sudah format internasional (+62...)
- Jangan kirim ke pasien yang sudah batal/meninggal/telepon kosong
Contoh Payload Kirim ke WhatsApp Gateway
Anggap pakai WhatsApp Gateway populer, misal Chat-API atau waboxapp. Format kirim biasanya REST POST, JSON:
POST https://your-wa-gateway.local/api/sendMessage
Content-Type: application/json
{
"phone": "6281234567890",
"message": "Yth. Bapak/Ibu {nama_pasien}, ini pengingat jadwal kontrol Anda di RS Sehat pada {tanggal_kontrol} dengan dr. {nama_dokter} di poli {nama_poli}. Balas pesan ini jika ada perubahan jadwal. Terima kasih."
}
Ganti phone sama nomor, message format bebas, bisa pakai template, tinggal replace fieldnya.
Contoh Script Otomatisasi: Python
Pakai library requests. Script jalan via scheduler OS (cron/Windows Task Scheduler, atau job di SIMRS).
import pyodbc
import requests
# Koneksi DB SQL Server
conn = pyodbc.connect('DRIVER={SQL Server};SERVER=mydb;DATABASE=simrs;UID=user;PWD=pass')
cursor = conn.cursor()
cursor.execute("""
SELECT p.no_rm, p.nama_pasien, p.no_hp, k.tanggal_kontrol, d.nama_dokter, poli.nama_poli
FROM tb_jadwal_kontrol k
JOIN tb_pasien p ON k.no_rm = p.no_rm
JOIN tb_registrasi r ON k.id_reg = r.id_reg
JOIN tb_dokter d ON k.id_dokter = d.id_dokter
JOIN tb_poli poli ON k.id_poli = poli.id_poli
WHERE k.tanggal_kontrol = CAST(GETDATE() + 1 AS DATE)
AND p.no_hp IS NOT NULL
""")
rows = cursor.fetchall()
for row in rows:
wa_number = '62' + row.no_hp.lstrip('0') # Pastikan format
message = f"Yth. Bapak/Ibu {row.nama_pasien}, ini pengingat jadwal kontrol Anda di RS Sehat pada {row.tanggal_kontrol:%d-%m-%Y} dengan dr. {row.nama_dokter} di poli {row.nama_poli}. Balas pesan ini jika ada perubahan jadwal. Terima kasih."
payload = {
"phone": wa_number,
"message": message
}
resp = requests.post("https://your-wa-gateway.local/api/sendMessage", json=payload)
# Simpan log kirim
cursor.execute("""
INSERT INTO tb_log_wa (no_rm, tanggal, no_hp, status)
VALUES (?, GETDATE(), ?, ?)
""", row.no_rm, wa_number, resp.status_code)
conn.commit()
- Ganti koneksi DB sesuai RS masing-masing
- Pastikan field nomor HP pasien tidak typo, tidak ada spasi/karakter aneh
- Log status WA masuk tabel tb_log_wa, biar gampang tracking
Struktur Tabel Log Notifikasi WhatsApp
CREATE TABLE tb_log_wa (
id_log INT IDENTITY(1,1) PRIMARY KEY,
no_rm VARCHAR(20),
tanggal DATETIME,
no_hp VARCHAR(20),
status INT,
keterangan VARCHAR(255)
)
- status: status HTTP (200 = sukses, 4xx/5xx gagal)
- keterangan: bisa diisi error message dari WA Gateway
Studi Kasus Nyata: Penerapan di RS Kecil
Implementasi WA Gateway pertama kali, satu unit server second (bisa VM, bisa PC bekas), OS Ubuntu, deploy whatsapp-web.js (open-source Node.js).
- Server internal, tidak expose ke internet
- Nomor WA khusus RS, scan QR di WA Web, siap dipakai broadcast
- Job SQL jalan tiap jam 6 pagi, kirim ke pasien hari H+1
- Rata-rata 60-80 pesan/hari, delivery rate 98% (sisanya gagal: nomor tidak aktif/pasien ganti nomor)
- Pasien konfirmasi via WA, perawat update ke SIMRS manual
- Tim IT monitor error log, deteksi kalau nomor kena banned restart device/replace nomor WA
Tips Aman dan Efisien Kirim WA Notif
- Pakai nomor khusus untuk WA Gateway, jangan nomor pribadi
- Jangan spam: 1 pesan reminder cukup, hindari blast ribuan pesan dalam satu waktu
- Wajib log semua kiriman, cek status error tiap hari
- Kalau sering banned, siapkan nomor cadangan, automation login QR ulang
- Jangan promet promo/iklan, hanya notifikasi medis/administrasi
- Usahakan format pesan konsisten biar pasien familiar
Skrip Validasi Nomor HP Pasien
-- Update nomor HP pasien jadi +62, hapus karakter aneh
UPDATE tb_pasien
SET no_hp = CASE
WHEN LEFT(REPLACE(REPLACE(REPLACE(no_hp, ' ', ''), '-', ''), '+', ''), 1) = '0'
THEN '62' + RIGHT(REPLACE(REPLACE(REPLACE(no_hp, ' ', ''), '-', ''), '+', ''), LEN(REPLACE(REPLACE(REPLACE(no_hp, ' ', ''), '-', ''), '+', '')) - 1)
ELSE REPLACE(REPLACE(REPLACE(no_hp, ' ', ''), '-', ''), '+', '')
END
WHERE no_hp IS NOT NULL
- Pastikan sebelum produksi, semua nomor sudah bentuk 62xxxx
Monitoring dan Troubleshooting
- Cek tabel log: banyak status gagal? Cek quota Gateway, nomor WA kena banned, API down
- Gateway self-hosted: monitor log service. Lihat error stacktrace, restart process kalau butuh
- Pasien komplain tidak terima WA? Cek nomor, cek delivery report, cek apakah nomornya valid
- Perawat/loket komplain double reminder? Cek logic job, pastikan tiap pasien H+1 hanya kirim 1x
Bonus: Integrasi ke SIMRS via Webhook
Beberapa SIMRS kekinian sudah support webhook. Kalau ada jadwal kontrol baru, langsung trigger WA tanpa nunggu batch SQL. Skemanya:
- SIMRS trigger event "jadwal kontrol baru" / "reschedule"
- Webhook panggil endpoint internal, langsung push ke WA Gateway
- Realtime, pasien dapat notif dalam detik
# Contoh endpoint flask untuk webhook
from flask import Flask, request
import requests
app = Flask(__name__)
@app.route('/webhook/jadwal', methods=['POST'])
def jadwal():
data = request.json
wa_number = '62' + data['no_hp'].lstrip('0')
message = f"Yth. Bapak/Ibu {data['nama_pasien']}, pengingat jadwal kontrol Anda di RS pada {data['tanggal_kontrol']}, dr. {data['nama_dokter']}, poli {data['nama_poli']}."
resp = requests.post("https://your-wa-gateway.local/api/sendMessage", json={
"phone": wa_number,
"message": message
})
# log, dsb.
return {'status': 'ok'}, 200
- Begitu ada event kontrol, langsung push ke pasien, ga nunggu batch harian
Risiko dan Mitigasi
- WA Gateway unofficial sering kena banned: minimize volume, rotate nomor, limit content non-promosi, monitoring error
- Data pasien bocor: pastikan API gateway internal, akses terbatas, audit log
- Down? Siapkan fallback (SMS, telepon manual untuk kasus urgent)
Penutup: Kapan Mulai?
Sekarang pasien nungguin WA, bukan SMS. Reminder kontrol lewat WhatsApp bukan sekedar gaya-gayaan, tapi solusi real buat nurunin antrian kosong, memperbaiki layanan, dan nambah citra RS. Implementasi nggak susah, modal script dan satu server sudah jalan. Sobat IT RS bisa mulai dari yang simpel, trial di 1 poli, ukur impact, baru scale up.
Makin banyak proses otomatis, makin fokus tenaga medis di pasien, makin tenang IT—darah tinggi turun, pasien senang, manajemen puas.
PETIRS