En caso de que requieras enviar información de forma automatizada a tus sistemas, diio te permite habilitar webhooks para ese envío de información. A continuación te explicamos el paso a paso de como configurar los webhooks dentro de diio.
1. Como administrador de la cuenta, navega hacia "Configuración de la Empresa" -> "Integraciones" -> "Webhooks"
2. Haz click en el botón "Nuevo Webhook"
Este es el paso de validación del webhook, para esto, diio realizará un request tipo GET al endpoint que tu definas, esto lo hará para validar que ese endpoint existe y que ya está desarrollado y habilitado para recibir mensajes. Para esto, lo único que debes hacer es que tu endpoint responda en texto plano el valor que diio enviará en el parámetro echo_string, el cual se enviará de la siguiente forma:
[GET] https://tuendpoint.com/webhook?echo_string=:valor_a_retornar
Una vez validado verás el webhook en el listado inferior
3. Para ver el valor del signing secret, debes presionar el ícono del ojo, todos nuestros requests vienen firmados con ese valor, y son enviados en un header llamado "DO-Signature", para calcular este valor y asegurarte de que viene de nosotros, deberás comparar las firmas calculadas con SHA256 firmando con el signing_secret, de la siguiente forma:
sign = "<id_del_objeto_webhook>-<header[DO-Timestamp]>"
header[DO-Signature] == OpenSSL::HMAC.hexdigest('sha256', context.webhook.signing_secret, sign)
En caso de que el valor enviado en el header de firma de igual al calulado con el pseudo código anterior, puedes estar seguro de que el request viene de diio.
4. Para suscribirte a distintos eventos a los cuales pueden estar sujetos los distintos objetos en diio, debes presionar el lapiz, elegir los eventos que desees y presionar el botón de aceptar.
5. Por último, una vez que tengas tu webhook habilitado y apuntando a la url de tu elección, cada vez que ocurra un evento a los cuales te hayas suscrito, recibirás un request de tipo POST con un JSON con una estructura similar a las siguiente:
Objeto Meeting
Reunión en Progreso
{
"action": "meeting.in_progress",
"id":"7b292f4a-90a1-11ef-9462-0a0ddbb5e2f5",
"name":"Reunión de Ejemplo",
"scheduled_at":"2024-10-22T18:15:00+0000",
"attendees_tracker":[
{
"join":"2024-10-22T18:15:20.875118Z",
"name":"John Doe",
"is_host":true
},
{
"join":"2024-10-22T18:15:25.224451Z",
"name":"Jane Doe",
"is_host":false
},
{
"join":"2024-10-22T18:17:17.893408Z",
"name":"Aline",
"is_host":false
}
],
"analyzed_status":"in_progress",
"error_cause":null
}
Reunión Pendiente
{
"action": "meeting.pending",
"id":"0a0081fc-92f8-11ef-8818-06c15ad63b85",
"name":"Reunión de Ejemplo",
"scheduled_at":"2024-10-25T19:15:00+0000",
"attendees_tracker":[],
"analyzed_status":"pending",
"error_cause":null
}
Reunión Analizada:
{
"id":"415b1e52-bc8b-11ef-94d3-06c15ad63b85",
"name":"Meeting name",
"scheduled_at":"2024-12-17T15:30:00Z",
"attendees":{
"sellers":[
{
"name":"John Doe",
"email":"[email protected]",
"user_id":"50c62262-a655-11ee-ad4e-06d5ade5f257"
}
],
"support":[
],
"customers":[
{
"name":"Jane Doe",
"email":"[email protected]"
}
]
},
"analyzed_status":"finished",
"error_cause":null,
"duration":107,
"participants":[
{
"name":"John Doe",
"role":"seller",
"show":true,
"email":"[email protected]",
"speak_time":88,
"arrive_time":"2024-12-17T15:29:58Z"
},
{
"name":"Jane Doe",
"role":"customer",
"show":true,
"email":"[email protected]",
"speak_time":null,
"arrive_time":"2024-12-17T15:29:58Z"
}
],
"tracker_values":{
"summary":{
"type":"string",
"value":"..."
},
"sentiment":{
"hint":"...",
"type":"integer",
"value":3
},
"objections":{
"type":"string",
"value":"..."
},
"competitors":{
"type":"array",
"value":[
]
},
"success_odds":{
"hint":"...",
"type":"integer",
"value":4
},
"customer_pains":{
"type":"string",
"value":"..."
},
"follow_up_email":{
"type":"string",
"value":"..."
},
"time_to_decision":{
"type":"string",
"value":"..."
},
"unresolve_queries":{
"type":"string",
"value":"..."
}
},
"playbook":{
"name":"Sales",
"version":49
},
"action":"meeting.finished"
}
Reunión con Error
{
"action": "meeting.error",
"id": "0bfe242e-d5b5-11ee-8141-06d5ade5f257",
"name": "Reunión de ejemplo",
"scheduled_at": "2024-12-11T18:30:00+0000",
"attendees_tracker": [],
"analyzed_status": "error",
"error_cause": "without_external_participants"
}
A continuación, puedes encontrar un listado con las causas de error:
without_start_time
recurring_event
without_external_participants
meeting_without_conference_url
too_many_sellers
user_without_seat
bot_errored
bot_errored_by_platform
bot_cant_enter_meeting
no_participants_or_host
bot_not_accepted
recording_permission_denied
couldnt_download_video
couldnt_be_transcribed
blank_transcript
transcript_too_short
couldnt_find_playbook
meeting_already_started_or_ended
meeting_manually_deactivated
Objeto Phone Call
Llamada en Progreso
{
"action": "phone_call.in_progress",
"id":"e8f7ce04-8fee-11ef-9c1e-0a0ddbb5e2f5",
"name":"Llamada de Prueba",
"ocurred_at":"2024-10-21T20:26:18+0000",
"analyzed_status":"in_progress",
"error_cause": null
}
Llamada Pendiente
{
"action": "phone_call.pending",
"id":"35f85f2a-90a8-11ef-862d-0a0ddbb5e2f5",
"name":"Llamada de Prueba",
"ocurred_at":"2024-10-22T18:52:02+0000",
"analyzed_status":"pending",
"error_cause": null
}
Llamada Finalizada
{
"action": "phone_call.finished",
"id":"8e762d54-90a7-11ef-b0af-0a0ddbb5e2f5",
"name":"Llamada de Prueba",
"ocurred_at":"2024-10-22T18:54:16+0000",
"analyzed_status":"finished",
"tracker_values":{
"summary":{
"type":"string",
"value":"..."
},
"sentiment":{
"hint":"...",
"type":"integer",
"value": 2
},
"objections":{
"type":"string",
"value":"..."
},
"competitors":{
"type":"array",
"value":[
"...", "..."
]
},
"success_odds":{
"hint":"...",
"type":"integer",
"value":2
},
"customer_pains":{
"type":"string",
"value":"..."
},
"follow_up_email":{
"type":"string",
"value":"..."
},
"time_to_decision":{
"type":"string",
"value":"..."
},
"unresolve_queries":{
"type":"string",
"value":"..."
}
},
"playbook":{
"name":"Playbook de Llamadas",
"version": 7
},
"error_cause": null
}
Llamada con Error
{
"action": "phone_call.error",
"id":"3c0bbb2e-90a7-11ef-9df3-0a0ddbb5e2f5",
"name":"Llamada de Prueba",
"ocurred_at":"2024-10-22T18:52:20+0000",
"analyzed_status":"error",
"error_cause": "voicemail"
}
A continuación puedes encontrar un listado con las causas de error:
couldnt_download_audio
couldnt_be_transcribed
blank_transcript
transcript_too_short
couldnt_find_playbook
voicemail
wrong_number
rejected
reschedule_request