Gunakan callback agen untuk secara otomatis memicu aksi atau respons yang telah ditentukan dalam aplikasi Anda ketika event tertentu terjadi.
Ikhtisar
Ketika agen AI memicu event tertentu selama waktu proses, Alibaba Cloud mengirim permintaan callback ke server Anda. Anda kemudian dapat menambahkan logika bisnis untuk memproses permintaan tersebut.
Konfigurasi callback agen
-
Masuk ke Konsol Intelligent Media Service. Pilih agen yang ingin Anda konfigurasi, lalu klik Manage di kolom Actions.
-
Pada tab Callback Configuration, aktifkan callback agen, pilih jenis callback, lalu masukkan Callback URL dan Authentication Token opsional.
CatatanToken ini dikirim dalam bidang
Authorizationpada header permintaan. Server Anda harus memverifikasi token ini untuk memastikan keamanan permintaan.Jenis callback yang tersedia meliputi: Agent status callbacks, Workflow status callbacks, Real-time chat history callbacks, Hang-up intent detection callbacks, Outbound call status callbacks, Inbound call status callbacks, Custom client message callbacks, dan Instruction callbacks. Jika Callback URL Anda mendukung HTTP dan HTTPS, disarankan menggunakan HTTPS demi keamanan yang lebih baik.
-
Klik OK untuk menyelesaikan konfigurasi callback.
Bidang muatan callback
|
Parameter |
Tipe |
Wajib |
Deskripsi |
Contoh |
|
aiAgentId |
String |
Ya |
ID agen. |
xxxxx |
|
instanceId |
String |
Ya |
ID unik instans agen. |
39f8e0bc005e4f309379701645f4**** |
|
event |
String |
Ya |
Jenis event.
|
agent_start |
|
data |
Json |
Tidak |
Muatan data. Struktur bidang ini bergantung pada jenis event. |
|
|
code |
String |
Ya |
1001 |
|
|
message |
String |
Ya |
Pesan callback. |
User has been kicked from the room |
|
timestamp |
String |
Ya |
Waktu terjadinya event, diformat sebagai string ISO 8601 (UTC). |
2023-10-01T12:00:00Z |
|
userData |
String |
Tidak |
Informasi yang ditentukan pengguna. |
|
|
extendData |
Json |
Tidak |
Data ekstensi kustom. |
Contoh callback
Status panggilan arah keluar
Ketika event bernilai outbound_call, callback ini melaporkan status panggilan arah keluar. Tabel berikut menjelaskan bidang dalam objek extendData untuk event ini.
|
Parameter |
Tipe |
Deskripsi |
|
aiAgentId |
String |
ID agen AI. |
|
channelId |
String |
ID saluran. |
|
instanceId |
String |
ID unik instans agen AI. |
|
callerNumber |
String |
Nomor telepon pemanggil (agen AI). |
|
calleeNumber |
String |
Nomor telepon penerima panggilan. |
|
failReason |
Int |
Alasan kegagalan. Bidang ini hanya dikembalikan jika panggilan arah keluar gagal. |
|
status |
Int |
Status panggilan saat ini dari agen AI. Nilai yang mungkin adalah:
|
|
callStartTime |
String |
Waktu panggilan tersambung. Bidang ini hanya dikembalikan saat hang up. |
|
callEndTime |
String |
Waktu panggilan diakhiri. Bidang ini hanya dikembalikan saat hang up. |
|
hangupRole |
Int |
Pihak yang mengakhiri panggilan. Bidang ini hanya dikembalikan saat hang up. Nilai yang mungkin adalah:
|
|
forwardInfo |
JSON |
Informasi tentang transfer panggilan. Bidang ini hanya dikembalikan untuk callback terkait transfer panggilan. Berisi sub-bidang berikut:
|
Kegagalan panggilan arah keluar
Callback ini menunjukkan bahwa panggilan arah keluar gagal karena nomor penerima tidak valid, panggilan ditolak, atau penerima tidak dapat dihubungi.
{
"aiAgentId":"0d31c************b3c787",
"instanceId":"39f8e0bc005e4f309379*********",
"event":"outbound_call",
"code":10002,
"message":"Dial status failed",
"timestamp":"2023-10-01T12:00:00Z",
"extendData":{
"aiAgentId": "0d31c************b3c787",
"channelId": "XXX",
"instanceId": "39f8e0bc005e4f309379*********",
"callerNumber": "XXX",
"calleeNumber": "XXX",
"failReason": -6,
"status": 2
}
}
Panggilan arah keluar tersambung
Callback ini dikirim saat penerima menjawab panggilan arah keluar.
{
"aiAgentId":"0d31c************b3c787",
"instanceId":"39f8e0bc005e4f309379*********",
"event":"outbound_call",
"code":10003,
"message":"Dial status connected",
"timestamp":"2023-10-01T12:00:00Z",
"extendData":{
"aiAgentId": "0d31c************b3c787",
"channelId": "XXX",
"instanceId": "39f8e0bc005e4f309379*********",
"callerNumber": "XXX",
"calleeNumber": "XXX",
"status": 3
}
}
Penerima mengakhiri panggilan
Callback ini dikirim saat penerima mengakhiri panggilan setelah panggilan arah keluar tersambung.
{
"aiAgentId":"0d31c************b3c787",
"instanceId":"39f8e0bc005e4f309379*********",
"event":"outbound_call",
"code":10004,
"message":"Hangup",
"timestamp":"2023-10-01T12:00:00Z",
"extendData":{
"aiAgentId": "0d31c************b3c787",
"channelId": "XXX",
"instanceId": "39f8e0bc005e4f309379*********",
"callerNumber": "XXX",
"calleeNumber": "XXX",
"status": 4,
"callStartTime": "2023-10-01T12:00:00.135045+00:00",
"callEndTime": "2023-10-01T12:01:00.135045+00:00",
"hangupRole": 1
}
}
Agen mengakhiri panggilan
Callback ini dikirim saat agen AI mengakhiri panggilan setelah panggilan arah keluar tersambung.
{
"aiAgentId":"0d31c************b3c787",
"instanceId":"39f8e0bc005e4f309379*********",
"event":"outbound_call",
"code":10004,
"message":"Hangup",
"timestamp":"2023-10-01T12:00:00Z",
"extendData":{
"aiAgentId": "0d31c************b3c787",
"channelId": "XXX",
"instanceId": "39f8e0bc005e4f309379*********",
"callerNumber": "XXX",
"calleeNumber": "XXX",
"status": 4,
"callStartTime": "2023-10-01T12:00:00.135045+00:00",
"callEndTime": "2023-10-01T12:01:00.135045+00:00",
"hangupRole": 0
}
}
Transfer panggilan berhasil
Callback ini dikirim saat transfer panggilan berhasil tersambung.
{
"aiAgentId":"0d31c************b3c787",
"instanceId":"39f8e0bc005e4f309379*********",
"event":"outbound_call",
"code":10006,
"message":"Forward call connected",
"timestamp":"2023-10-01T12:00:00Z",
"extendData":{
"aiAgentId": "0d31c************b3c787",
"channelId": "XXX",
"instanceId": "39f8e0bc005e4f309379*********",
"callerNumber": "XXX",
"calleeNumber": "XXX",
"status": 3,
"forwardInfo": {
"callerNumber": "XXX",
"calleeNumber": "XXX",
"callStartTime": "2023-10-01T12:00:59Z"
}
}
}
Transfer panggilan gagal
Callback ini dikirim saat transfer panggilan gagal.
{
"aiAgentId":"0d31c************b3c787",
"instanceId":"39f8e0bc005e4f309379*********",
"event":"outbound_call",
"code":10005,
"message":"Forward call failed",
"timestamp":"2023-10-01T12:00:00Z",
"extendData":{
"aiAgentId": "0d31c************b3c787",
"channelId": "XXX",
"instanceId": "39f8e0bc005e4f309379*********",
"callerNumber": "XXX",
"calleeNumber": "XXX",
"failReason": 480,
"status": 2,
"forwardInfo": {
"callerNumber": "XXX",
"calleeNumber": "XXX"
}
}
}
Mengakhiri panggilan setelah transfer
Callback ini dikirim saat pihak yang menerima transfer mengakhiri panggilan.
{
"aiAgentId":"0d31c************b3c787",
"instanceId":"39f8e0bc005e4f309379*********",
"event":"outbound_call",
"code":10004,
"message":"Hangup",
"timestamp":"2023-10-01T12:00:00Z",
"extendData":{
"aiAgentId": "0d31c************b3c787",
"channelId": "XXX",
"instanceId": "39f8e0bc005e4f309379*********",
"callerNumber": "XXX",
"calleeNumber": "XXX",
"status": 4,
"callStartTime": "2023-10-01T12:00:00.135045+00:00",
"callEndTime": "2023-10-01T12:01:00.135045+00:00",
"hangupRole": 2,
"forwardInfo": {
"callerNumber": "XXX",
"calleeNumber": "XXX",
"callStartTime": "2023-10-01T12:00:59Z"
}
}
}
Status panggilan arah masuk
Ketika event bernilai inbound_call, callback ini melaporkan status panggilan arah masuk. Tabel berikut menjelaskan bidang dalam objek extendData untuk event ini.
|
Parameter |
Tipe |
Deskripsi |
|
aiAgentId |
String |
Nilai ini sama dengan bidang |
|
channelId |
String |
ID saluran. |
|
instanceId |
String |
Nilai ini sama dengan bidang |
|
callerNumber |
String |
Nomor telepon pemanggil (pihak yang melakukan panggilan arah masuk). |
|
calleeNumber |
String |
Nomor telepon penerima (agen AI). |
|
failReason |
Int |
Alasan kegagalan. Bidang ini hanya dikembalikan jika panggilan arah masuk gagal. |
|
status |
Int |
Status panggilan saat ini dari agen AI. Nilai yang mungkin adalah:
|
|
callStartTime |
String |
Waktu panggilan tersambung. Bidang ini hanya dikembalikan saat hang up. |
|
callEndTime |
String |
Waktu panggilan diakhiri. Bidang ini hanya dikembalikan saat hang up. |
|
hangupRole |
Int |
Pihak yang mengakhiri panggilan. Bidang ini hanya dikembalikan saat hang up. Nilai yang mungkin adalah:
|
|
forwardInfo |
JSON |
Informasi tentang transfer panggilan. Bidang ini hanya dikembalikan untuk callback terkait transfer panggilan. Berisi sub-bidang berikut:
|
Panggilan arah masuk tersambung
Callback ini dikirim saat agen AI berhasil menjawab panggilan arah masuk.
{
"aiAgentId":"0d31c************b3c787",
"instanceId":"39f8e0bc005e4f309379*********",
"event":"inbound_call",
"code":10003,
"message":"Dial status connected",
"timestamp":"2023-10-01T12:00:00Z",
"extendData":{
"aiAgentId": "0d31c************b3c787",
"channelId": "XXX",
"instanceId": "39f8e0bc005e4f309379*********",
"callerNumber": "XXX",
"calleeNumber": "XXX",
"status": 3
}
}
Panggilan arah masuk gagal
Callback ini dikirim saat agen AI gagal menjawab panggilan arah masuk.
{
"aiAgentId":"0d31c************b3c787",
"instanceId":"39f8e0bc005e4f309379*********",
"event":"inbound_call",
"code":10002,
"message":"Dial status failed",
"timestamp":"2023-10-01T12:00:00Z",
"extendData":{
"aiAgentId": "0d31c************b3c787",
"channelId": "XXX",
"instanceId": "39f8e0bc005e4f309379*********",
"callerNumber": "XXX",
"calleeNumber": "XXX",
"failReason": -6,
"status": 2
}
}
Mengakhiri panggilan arah masuk
Callback ini dikirim saat agen AI mengakhiri panggilan setelah panggilan arah masuk tersambung.
{
"aiAgentId":"0d31c************b3c787",
"instanceId":"39f8e0bc005e4f309379*********",
"event":"inbound_call",
"code":10004,
"message":"Hangup",
"timestamp":"2023-10-01T12:00:00Z",
"extendData":{
"aiAgentId": "0d31c************b3c787",
"channelId": "XXX",
"instanceId": "39f8e0bc005e4f309379*********",
"callerNumber": "XXX",
"calleeNumber": "XXX",
"status": 4,
"callStartTime": "2023-10-01T12:00:00.135045+00:00",
"callEndTime": "2023-10-01T12:01:00.135045+00:00",
"hangupRole": 0
}
}
Transfer panggilan berhasil
Callback ini dikirim saat transfer panggilan dari panggilan arah masuk berhasil tersambung.
{
"aiAgentId":"0d31c************b3c787",
"instanceId":"39f8e0bc005e4f309379*********",
"event":"inbound_call",
"code":10006,
"message":"Forward call connected",
"timestamp":"2023-10-01T12:00:00Z",
"extendData":{
"aiAgentId": "0d31c************b3c787",
"channelId": "XXX",
"instanceId": "39f8e0bc005e4f309379*********",
"callerNumber": "XXX",
"calleeNumber": "XXX",
"status": 3,
"forwardInfo": {
"callerNumber": "XXX",
"calleeNumber": "XXX",
"callStartTime": "2023-10-01T12:00:59Z"
}
}
}
Transfer panggilan gagal
Callback ini dikirim saat transfer panggilan dari panggilan arah masuk gagal.
{
"aiAgentId":"0d31c************b3c787",
"instanceId":"39f8e0bc005e4f309379*********",
"event":"inbound_call",
"code":10005,
"message":"Forward call failed",
"timestamp":"2023-10-01T12:00:00Z",
"extendData":{
"aiAgentId": "0d31c************b3c787",
"channelId": "XXX",
"instanceId": "39f8e0bc005e4f309379*********",
"callerNumber": "XXX",
"calleeNumber": "XXX",
"failReason": 480,
"status": 2,
"forwardInfo": {
"callerNumber": "XXX",
"calleeNumber": "XXX"
}
}
}
Mengakhiri panggilan setelah transfer
Callback ini dikirim saat pihak yang menerima transfer mengakhiri panggilan setelah transfer dari panggilan arah masuk.
{
"aiAgentId":"0d31c************b3c787",
"instanceId":"39f8e0bc005e4f309379*********",
"event":"inbound_call",
"code":10004,
"message":"Hangup",
"timestamp":"2023-10-01T12:00:00Z",
"extendData":{
"aiAgentId": "0d31c************b3c787",
"channelId": "XXX",
"instanceId": "39f8e0bc005e4f309379*********",
"callerNumber": "XXX",
"calleeNumber": "XXX",
"status": 4,
"callStartTime": "2023-10-01T12:00:00.135045+00:00",
"callEndTime": "2023-10-01T12:01:00.135045+00:00",
"hangupRole": 2,
"forwardInfo": {
"callerNumber": "XXX",
"calleeNumber": "XXX",
"callStartTime": "2023-10-01T12:00:59Z"
}
}
}
Status alur kerja
Untuk event status alur kerja, objek extendData berisi bidang-bidang berikut:
|
Parameter |
Tipe |
Deskripsi |
|
channelId |
String |
ID saluran. |
|
sentenceId |
Int |
ID unik untuk satu giliran percakapan. Catatan
Respons agen AI terhadap satu kueri pengguna memiliki |
|
requestTimestamp |
String |
|
|
responseTimestamp |
String |
|
Callback instruksi
Ketika jenis event adalah instruction, callback ini menunjukkan bahwa tag instruksi aksi tertentu telah dipicu. Callback instruksi yang didukung meliputi:
Callback instruksi transfer panggilan
Callback ini dikirim saat agen AI memicu tag aksi transfer panggilan.
{
"aiAgentId":"0d31c************b3c787",
"instanceId":"39f8e0bc005e4f309379*********",
"event":"instruction",
"code":11001,
"message":"Forward call triggered",
"timestamp":"2023-10-01T12:00:00Z",
"extendData":{
"triggerTime": "2023-10-01T12:00:00Z"
}
}
Contoh server
Python
from aiohttp import web
import json
from loguru import logger
async def handle_post(request):
"""
Handle POST requests and log the received data.
"""
# Get the Authorization header from the request.
authorization_header = request.headers.get('Authorization')
if authorization_header is None or not authorization_header.startswith('Bearer fixed-token'):
logger.error("Unauthorized request")
return web.Response(status=401, text='Unauthorized')
try:
# Parse the request body as JSON.
callback_data = await request.json()
logger.info("Parsed JSON data:")
logger.info(json.dumps(callback_data, indent=4))
return web.Response(text='Callback received successfully', status=200)
except json.JSONDecodeError:
# Return an error if JSON parsing fails.
return web.Response(text='Invalid JSON', status=400)
app = web.Application()
app.add_routes([web.post('/', handle_post)])
if __name__ == '__main__':
web.run_app(app, host='localhost', port=8081)
Kode status event callback
|
Kode status |
Callback event |
Deskripsi |
|
1001 |
Agent starts |
Agen dimulai. |
|
1002 |
Agent stops |
Agen dihentikan. |
|
1003 |
Session starts |
Sesi dimulai. |
|
4001 |
Concurrent agent routes exhausted |
Jumlah maksimum entri rute agen konkuren telah tercapai. |
|
4002 |
Agent kicked from channel |
Sistem mengeluarkan agen dari saluran. |
|
4003 |
Invalid agent token |
Token agen tidak valid. |
|
4004 |
Agent stream subscription failed |
Agen gagal berlangganan ke aliran. |
|
4005 |
Third-party ASR failed |
Layanan ASR pihak ketiga gagal. |
|
4006 |
Avatar service unavailable |
Layanan avatar tidak tersedia. |
|
8001 |
Intent recognized |
Maksud dikenali. |
|
8002 |
LLM data received |
Data LLM diterima. |
|
8003 |
TTS data received |
Data TTS diterima. |
|
10002 |
Dial status failed |
Panggilan gagal tersambung. |
|
10003 |
Dial status connected |
Panggilan berhasil tersambung. |
|
10004 |
Hangup |
Panggilan diakhiri. |
|
10005 |
Forward call failed |
Upaya penerusan panggilan gagal. |
|
10006 |
Forward call connected |
Panggilan yang diteruskan berhasil tersambung. |
|
11001 |
Forward call triggered |
Sistem memicu penerusan panggilan. |