Use callbacks do agente para acionar automaticamente ações ou respostas predefinidas na sua aplicação quando eventos específicos ocorrerem.
Visão geral
Quando um agente de IA dispara determinados eventos de execução, a Alibaba Cloud envia uma solicitação de callback ao seu servidor. Você pode então adicionar lógica de negócios para processar essa solicitação.
Configure callbacks do agente
Faça login no console do Intelligent Media Service. Selecione o agente que deseja configurar e clique em Manage na coluna Actions.
-
Na aba Callback Configuration, ative os callbacks do agente, selecione os tipos de callback e insira a Callback URL e um Authentication Token opcional.
NotaEsse token é enviado no campo
Authorizationdo cabeçalho da solicitação. Seu servidor deve verifique esse token para garantir a segurança da requisição.Os tipos de callback disponíveis incluem: 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 e Instruction callbacks. Se a URL de callback suportar HTTP e HTTPS, recomenda-se fortemente o uso de HTTPS para maior segurança.
Clique em OK para concluir a configuração de callback.
Campos do payload de callback
|
Parâmetro |
Tipo |
Obrigatório |
Descrição |
Exemplo |
|
aiAgentId |
String |
Sim |
ID do agente. |
xxxxx |
|
instanceId |
String |
Sim |
ID exclusivo da instância do agente. |
39f8e0bc005e4f309379701645f4**** |
|
event |
String |
Sim |
Tipo de evento.
|
agent_start |
|
data |
Json |
Não |
Payload de dados. A estrutura deste campo depende do tipo de evento. |
|
|
code |
String |
Sim |
1001 |
|
|
message |
String |
Sim |
Mensagem de callback. |
User has been kicked from the room |
|
timestamp |
String |
Sim |
Momento em que o evento ocorreu, formatado como string ISO 8601 (UTC). |
2023-10-01T12:00:00Z |
|
userData |
String |
Não |
Informações definidas pelo usuário. |
|
|
extendData |
Json |
Não |
Dados de extensão personalizados. |
Exemplos de callback
Status de chamada de saída
Quando o event é outbound_call, este callback relata o status de uma chamada de saída. A tabela a seguir descreve os campos no objeto extendData para este evento.
|
Parâmetro |
Tipo |
Descrição |
|
aiAgentId |
String |
ID do agente de IA. |
|
channelId |
String |
ID do canal. |
|
instanceId |
String |
ID exclusivo da instância do agente de IA. |
|
callerNumber |
String |
Número de telefone de quem liga (o agente de IA). |
|
calleeNumber |
String |
Número de telefone de quem recebe a chamada. |
|
failReason |
Int |
Motivo da falha. Retornado apenas quando a chamada de saída falha. |
|
status |
Int |
Status atual da chamada do agente de IA. Valores possíveis:
|
|
callStartTime |
String |
Horário em que a chamada foi conectada. Retornado apenas no desligamento. |
|
callEndTime |
String |
Horário em que a chamada foi desligada. Retornado apenas no desligamento. |
|
hangupRole |
Int |
Parte que desligou a chamada. Retornado apenas no desligamento. Valores possíveis:
|
|
forwardInfo |
JSON |
Informações sobre a transferência de chamada. Retornado apenas para callbacks relacionados a transferência de chamada. Contém os seguintes subcampos:
|
Falha na chamada de saída
Este callback indica que uma chamada de saída falhou porque o número de quem recebeu a chamada era inválido, a chamada foi rejeitada ou o destinatário estava inacessível.
{
"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
}
}
Chamada de saída conectada
Este callback é enviado quando o destinatário atende a uma chamada de saída.
{
"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
}
}
Desligamento pelo destinatário
Este callback é enviado quando o destinatário desliga após a conexão de uma chamada de saída.
{
"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
}
}
Desligamento pelo agente
Este callback é enviado quando o agente de IA desliga após a conexão de uma chamada de saída.
{
"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ência de chamada bem-sucedida
Este callback é enviado quando uma transferência de chamada é conectada com sucesso.
{
"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"
}
}
}
Falha na transferência de chamada
Este callback é enviado quando uma transferência de chamada falha.
{
"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"
}
}
}
Desligamento após transferência de chamada
Este callback é enviado quando a parte que recebeu a transferência desliga.
{
"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 de chamada de entrada
Quando o event é inbound_call, este callback relata o status de uma chamada de entrada. A tabela a seguir descreve os campos no objeto extendData para este evento.
|
Parâmetro |
Tipo |
Descrição |
|
aiAgentId |
String |
Valor igual ao campo |
|
channelId |
String |
ID do canal. |
|
instanceId |
String |
Valor igual ao campo |
|
callerNumber |
String |
Número de telefone de quem liga (a parte que faz a chamada de entrada). |
|
calleeNumber |
String |
Número de telefone de quem recebe a chamada (o agente de IA). |
|
failReason |
Int |
Motivo da falha. Retornado apenas quando a chamada de entrada falha. |
|
status |
Int |
Status atual da chamada do agente de IA. Valores possíveis:
|
|
callStartTime |
String |
Horário em que a chamada foi conectada. Retornado apenas no desligamento. |
|
callEndTime |
String |
Horário em que a chamada foi desligada. Retornado apenas no desligamento. |
|
hangupRole |
Int |
Parte que desligou a chamada. Retornado apenas no desligamento. Valores possíveis:
|
|
forwardInfo |
JSON |
Informações sobre a transferência de chamada. Retornado apenas para callbacks relacionados a transferência de chamada. Contém os seguintes subcampos:
|
Chamada de entrada conectada
Este callback é enviado quando o agente de IA atende com sucesso a uma chamada de entrada.
{
"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
}
}
Falha na chamada de entrada
Este callback é enviado quando o agente de IA não consegue atender a uma chamada de entrada.
{
"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
}
}
Desligamento de chamada de entrada
Este callback é enviado quando o agente de IA desliga após a conexão de uma chamada de entrada.
{
"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ência de chamada bem-sucedida
Este callback é enviado quando uma transferência de chamada de entrada é conectada com sucesso.
{
"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"
}
}
}
Falha na transferência de chamada
Este callback é enviado quando uma transferência de chamada de entrada falha.
{
"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"
}
}
}
Desligamento após transferência de chamada
Este callback é enviado quando a parte que recebeu a transferência desliga após uma transferência de chamada de entrada.
{
"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 do fluxo de trabalho
Para eventos de status do fluxo de trabalho, o objeto extendData contém os seguintes campos:
|
Parâmetro |
Tipo |
Descrição |
|
channelId |
String |
ID do canal. |
|
sentenceId |
Int |
ID exclusivo para um turno de conversa. Nota
As respostas do agente de IA a uma única consulta do usuário compartilham o mesmo |
|
requestTimestamp |
String |
|
|
responseTimestamp |
String |
|
Callback de instrução
Quando o tipo de event é instruction, o callback indica que uma tag específica de instrução de ação foi acionada. Os callbacks de instrução suportados incluem:
Callback de instrução de transferência de chamada
Este callback é enviado quando o agente de IA aciona uma tag de ação de transferência de chamada.
{
"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"
}
}
Exemplo de servidor
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)
Códigos de status de evento de callback
|
Código de status |
Evento de callback |
Descrição |
|
1001 |
Agent starts |
Agente iniciado. |
|
1002 |
Agent stops |
Agente parado. |
|
1003 |
Session starts |
Sessão iniciada. |
|
4001 |
Concurrent agent routes exhausted |
Número máximo de rotas simultâneas do agente atingido. |
|
4002 |
Agent kicked from channel |
Sistema removeu o agente do canal. |
|
4003 |
Invalid agent token |
Token do agente inválido. |
|
4004 |
Agent stream subscription failed |
Falha na assinatura do stream pelo agente. |
|
4005 |
Third-party ASR failed |
Falha no serviço ASR de terceiros. |
|
4006 |
Avatar service unavailable |
Serviço de avatar indisponível. |
|
8001 |
Intent recognized |
Intenção reconhecida. |
|
8002 |
LLM data received |
Dados do LLM recebidos. |
|
8003 |
TTS data received |
Dados do TTS recebidos. |
|
10002 |
Dial status failed |
Falha na conexão da chamada. |
|
10003 |
Dial status connected |
Chamada conectada com sucesso. |
|
10004 |
Hangup |
Chamada desligada. |
|
10005 |
Forward call failed |
Falha na tentativa de encaminhamento de chamada. |
|
10006 |
Forward call connected |
Chamada encaminhada conectada com sucesso. |
|
11001 |
Forward call triggered |
Encaminhamento de chamada acionado pelo sistema. |