Webhook Human Agent
Terima HTTP POST callback ketika human agent merespons pesan user. Sempurna untuk logging, analytics, integrasi CRM, dan sistem notifikasi custom.
(URL Webhook Anda)Kapan Ini Dipicu?
Webhook ini dipicu setiap kali human agent mengirim balasan di percakapan mana pun, terlepas dari apakah percakapan dimulai via API atau chat widget.
Webhook hanya dikirim jika agent Anda memiliki URL webhook yang dikonfigurasi di pengaturan.
Header Request
| Header | Nilai | Deskripsi |
|---|---|---|
| Content-Type | application/json | Selalu payload JSON |
| User-Agent | Aksita-Webhook/1.0 | Mengidentifikasi webhook Aksita |
| X-Webhook-Signature | HMAC-SHA256 hex | Signature untuk verifikasi (opsional - hanya jika webhook secret dikonfigurasi) |
Struktur Payload
| Field | Tipe | Deskripsi |
|---|---|---|
| response | array | Pesan human agent (array string) |
| conversation_id | string | ID percakapan unik |
| message_id | string | ID pesan untuk balasan ini |
| credits | number | Selalu 0 (respons human agent gratis) |
| remaining_credits | number | Sisa kredit user setelah percakapan ini |
| additional_context | string | Konteks tambahan (string kosong jika tidak diset) |
| source | string | Selalu "human_agent" untuk mengidentifikasi sumber webhook |
| timestamp | string | Timestamp ISO 8601 (RFC3339) |
{
"response": ["halo"],
"message_id": "2125",
"conversation_id": "2a73ddbe-31cd-4a60-83ff-1fc2a1627ccc",
"credits": 0,
"remaining_credits": 1234,
"additional_context": "",
"source": "human_agent",
"timestamp": "2026-01-22T15:18:18+07:00"
}Contoh Implementasi
const crypto = require('crypto');
const express = require('express');
const app = express();
// IMPORTANT: Use express.raw() to get raw body for signature verification
app.post('/webhook', express.raw({type: 'application/json'}), (req, res) => {
const signature = req.headers['x-webhook-signature'];
const webhookSecret = process.env.WEBHOOK_SECRET; // From agent settings
// Verify signature if provided
if (signature && webhookSecret) {
const hmac = crypto.createHmac('sha256', webhookSecret);
hmac.update(req.body); // Raw body as buffer
const calculatedSignature = hmac.digest('hex');
if (calculatedSignature !== signature) {
return res.status(400).json({ error: 'Invalid signature' });
}
}
// Parse and process webhook
const payload = JSON.parse(req.body);
console.log('Human agent replied:', payload.response[0]);
console.log('Conversation ID:', payload.conversation_id);
console.log('Source:', payload.source); // "human_agent"
// Respond with 200 OK
res.json({ received: true });
});
app.listen(3000);Jika Anda mengonfigurasi webhook secret di pengaturan agent, header X-Webhook-Signature akan dikirim dengan semua webhook. Kami sangat menyarankan untuk memverifikasi signature ini untuk memastikan webhook authentic dan mencegah request berbahaya.
Response yang Diharapkan
Penerimaan webhook berhasil (status 2xx apa pun)
{
"received": true
}Status code HTTP antara 200-299 dianggap berhasil. Response body bersifat opsional.
Detail Teknis
| Algoritma Signature | HMAC-SHA256 (hex) |
| Timeout | 10 detik |
| Kebijakan Retry | Tidak ada retry otomatis |
| Status Sukses | HTTP 200-299 |
| User-Agent | Aksita-Webhook/1.0 |
Penting:
- Webhook dikirim secara asinkron dari queue
- Webhook yang gagal TIDAK diulang otomatis
- Endpoint Anda harus merespons dalam 10 detik
- Verifikasi signature bersifat opsional tapi sangat direkomendasikan
Alur Webhook
User Mengirim Pesan
User mengirim pesan via chat widget atau API
Pengambilalihan Human Agent
Human agent klik "Ambil Alih" di dashboard untuk percakapan ini
Human Agent Membalas
Human agent mengirim pesan melalui dashboard
Webhook Dipicu
Aksita mengirim POST request ke URL webhook Anda dengan signature HMAC opsional
Server Anda Memproses
Verifikasi signature (jika dikonfigurasi), proses payload, respon dengan 200 OK