π Daftar Isi
π Pendahuluan
API Webhook Apotek Online adalah interface untuk melakukan update status bridging resep kronis antara sistem apotek online dan sistem farmasi rumah sakit. API ini memungkinkan apotek online untuk memberikan feedback status processing resep secara real-time.
π Autentikasi
Semua endpoint webhook menggunakan token authentication. Token harus disertakan di header request dengan salah satu format berikut:
# Format 1: Authorization Bearer
Authorization: Bearer YOUR_TOKEN
# Format 2: Authorization tanpa Bearer
Authorization: YOUR_TOKEN
# Format 3: Custom Header
X-Webhook-Token: YOUR_TOKEN
Token diperoleh dari administrator sistem farmasi rumah sakit.
π Base URL
http://farmasi.balimed.local/api/webhook/apotek-online
π‘ Endpoints
Health Check
Endpoint untuk mengecek status kesehatan webhook API.
Endpoint: GET /health
Headers:
Authorization: Bearer YOUR_TOKEN
Response:
{
"success": true,
"message": "Webhook endpoint is healthy",
"timestamp": "2025-08-19T10:30:00.000000Z",
"version": "1.0.0"
}
Get Resep Info
Mendapatkan informasi resep untuk verifikasi sebelum update status.
Endpoint: GET /resep/{resepId}
Headers:
Authorization: Bearer YOUR_TOKEN
Parameters:
-
resepId
(integer, required): ID resep yang akan dicek
Response Success:
{
"success": true,
"data": {
"resep_id": 123,
"nomor_resep": "RX-2025-08-001",
"tanggal_resep": "2025-08-19",
"no_rm": "RM001234",
"nama_pasien": "John Doe",
"bridging_status": "processing",
"bridging_sent_at": "2025-08-19T10:00:00.000000Z",
"bridging_attempts": 1,
"bridging_error_message": null,
"last_webhook_received": null
}
}
Response Error:
{
"success": false,
"message": "Resep kronis tidak ditemukan"
}
Update Status Bridging
Update status bridging untuk satu resep.
Endpoint: POST /update-status
Headers:
Authorization: Bearer YOUR_TOKEN
Content-Type: application/json
Request Body:
{
"resep_id": 123,
"status": "success",
"response_id": "AOL-123-456",
"message": "Resep berhasil diproses dan siap diantar",
"response_data": {
"estimated_delivery": "2025-08-20",
"pharmacy_notes": "Obat tersedia lengkap"
},
"delivery_info": {
"courier": "Express Delivery",
"tracking_number": "TRK123456789"
}
}
Request Parameters:
-
resep_id
(integer, required): ID resep -
status
(string, required): Status baru (success
,failed
,processing
,delivered
,cancelled
) -
response_id
(string, optional): ID response dari sistem apotek online -
message
(string, optional): Pesan atau keterangan tambahan -
response_data
(object, optional): Data response tambahan -
delivery_info
(object, optional): Info pengiriman (untuk statusdelivered
)
Response Success:
{
"success": true,
"message": "Status bridging berhasil diupdate",
"data": {
"resep_id": 123,
"nomor_resep": "RX-2025-08-001",
"old_status": "processing",
"new_status": "success",
"updated_at": "2025-08-19T10:35:00.000000Z"
}
}
Response Error:
{
"success": false,
"message": "Validasi gagal",
"errors": {
"resep_id": ["The resep_id field is required."],
"status": ["The selected status is invalid."]
}
}
Batch Update Status
Update status bridging untuk multiple resep sekaligus.
Endpoint: POST /batch-update-status
Headers:
Authorization: Bearer YOUR_TOKEN
Content-Type: application/json
Request Body:
{
"updates": [
{
"resep_id": 123,
"status": "success",
"response_id": "AOL-123-456",
"message": "Resep berhasil diproses"
},
{
"resep_id": 124,
"status": "failed",
"message": "Stok obat tidak tersedia"
},
{
"resep_id": 125,
"status": "delivered",
"message": "Resep telah diantar",
"delivery_info": {
"delivered_at": "2025-08-19T14:30:00",
"recipient": "John Doe",
"signature": "base64_signature_data"
}
}
]
}
Request Parameters:
-
updates
(array, required): Array berisi data update untuk setiap resep -
updates[].resep_id
(integer, required): ID resep -
updates[].status
(string, required): Status baru -
updates[].response_id
(string, optional): ID response -
updates[].message
(string, optional): Pesan -
updates[].response_data
(object, optional): Data response -
updates[].delivery_info
(object, optional): Info pengiriman
Response Success:
{
"success": true,
"message": "Batch update selesai. Berhasil: 2, Gagal: 1",
"summary": {
"total": 3,
"success": 2,
"failed": 1
},
"details": [
{
"resep_id": 123,
"nomor_resep": "RX-2025-08-001",
"success": true,
"old_status": "processing",
"new_status": "success",
"message": "Status berhasil diupdate"
},
{
"resep_id": 124,
"nomor_resep": "RX-2025-08-002",
"success": true,
"old_status": "processing",
"new_status": "failed",
"message": "Status berhasil diupdate"
},
{
"resep_id": 125,
"success": false,
"message": "Resep kronis tidak ditemukan"
}
]
}
π Status Codes
Status | Deskripsi | Kapan Digunakan |
---|---|---|
success |
Berhasil diproses | Resep berhasil diverifikasi dan disiapkan |
failed |
Gagal diproses | Resep tidak dapat diproses (stok kosong, dll) |
processing |
Sedang diproses | Resep sedang dalam tahap verifikasi/penyiapan |
delivered |
Sudah diantar | Resep telah berhasil diantar ke pasien |
cancelled |
Dibatalkan | Resep dibatalkan oleh apotek atau pasien |
β οΈ Error Handling
HTTP Status Codes
-
200
- Success -
400
- Bad Request (validasi gagal) -
401
- Unauthorized (token tidak valid) -
404
- Not Found (resep tidak ditemukan) -
500
- Internal Server Error
Error Response Format
{
"success": false,
"message": "Deskripsi error",
"error_code": "ERROR_CODE",
"errors": {
"field_name": ["Error message"]
}
}
Error Codes
Code | Deskripsi |
---|---|
TOKEN_MISSING |
Token tidak ditemukan di header |
INVALID_TOKEN |
Token tidak valid |
CONFIG_NOT_FOUND |
Konfigurasi sistem tidak ditemukan |
AUTHENTICATION_ERROR |
Error saat verifikasi token |
π Contoh Penggunaan
1. Cek Status API
curl -X GET "http://farmasi.balimed.local/api/webhook/apotek-online/health" \
-H "Authorization: Bearer YOUR_TOKEN"
2. Ambil Info Resep
curl -X GET "http://farmasi.balimed.local/api/webhook/apotek-online/resep/123" \
-H "Authorization: Bearer YOUR_TOKEN"
3. Update Status Berhasil
curl -X POST "http://farmasi.balimed.local/api/webhook/apotek-online/update-status" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"resep_id": 123,
"status": "success",
"response_id": "AOL-123-456",
"message": "Resep berhasil diproses dan siap diantar",
"response_data": {
"estimated_delivery": "2025-08-20",
"pharmacy_notes": "Obat tersedia lengkap"
}
}'
4. Update Status Gagal
curl -X POST "http://farmasi.balimed.local/api/webhook/apotek-online/update-status" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"resep_id": 124,
"status": "failed",
"message": "Stok obat A tidak tersedia"
}'
5. Update Status Delivered
curl -X POST "http://farmasi.balimed.local/api/webhook/apotek-online/update-status" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"resep_id": 125,
"status": "delivered",
"message": "Resep telah diantar kepada pasien",
"delivery_info": {
"delivered_at": "2025-08-19T14:30:00",
"recipient": "John Doe",
"courier": "Express Delivery",
"tracking_number": "TRK123456789"
}
}'
6. Batch Update
curl -X POST "http://farmasi.balimed.local/api/webhook/apotek-online/batch-update-status" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"updates": [
{
"resep_id": 123,
"status": "success",
"response_id": "AOL-123-456",
"message": "Resep berhasil diproses"
},
{
"resep_id": 124,
"status": "failed",
"message": "Stok obat tidak tersedia"
}
]
}'
π Notes
- Token Security: Token harus dijaga kerahasiaan dan tidak boleh dibagikan
- Rate Limiting: API memiliki rate limiting untuk mencegah abuse
- Logging: Semua request webhook akan di-log untuk audit trail
- Timeout: Request timeout maksimal 30 detik
- Retry Logic: Implementasikan retry logic dengan exponential backoff untuk handling error temporary
π Flow Integration
- Apotek Online menerima resep dari sistem farmasi RS
- Apotek Online memproses resep (verifikasi, penyiapan)
-
Apotek Online mengirim update status melalui webhook:
-
processing
- saat mulai memproses -
success
- jika berhasil disiapkan -
failed
- jika gagal (stok kosong, dll) -
delivered
- setelah diantar -
cancelled
- jika dibatalkan
-
- Sistem Farmasi RS menerima update dan melakukan tindakan sesuai status
π Support
Untuk bantuan teknis atau pertanyaan mengenai API ini, hubungi:
- Email: support@rsbalimeddenpasar.id
- Tim IT Farmasi RS Balimed Denpasar
Last Updated: August 19, 2025
API Version: 1.0.0
Top comments (0)