Widget Público
Endpoints públicos para el flujo de entrada del cliente en la videollamada. Estos endpoints no requieren autenticación JWT, siendo accedidos por el cliente final.
Rate Limiting
Los endpoints públicos están limitados a 30 solicitudes por minuto por IP.
Endpoints
| Método | Endpoint | Descripción |
|---|---|---|
GET | /api/v1/call/:token/validate | Validar enlace de acceso |
POST | /api/v1/call/:token/join | Ingresar a la cola de atención |
GET | /api/v1/call/status/:call_id | Verificar estado de la llamada |
POST | /api/v1/call/evaluate/:call_id | Evaluar la llamada |
GET | /api/v1/call/turn-credentials | Obtener credenciales TURN |
Validar Enlace de Acceso
Verifica si un enlace de acceso es válido y devuelve información del departamento.
GET /api/v1/call/:token/validatePath Parameters
| Parámetro | Tipo | Descripción |
|---|---|---|
token | string | Token del enlace de acceso |
Ejemplo de Request
curl -X GET https://voki.avanter.com.br/api/v1/call/abc123def456/validateRespuesta Exitosa (200)
{
"data": {
"valid": true,
"department_name": "Suporte Técnico",
"company_name": "Avanter Aliado Tecnológico Ltda",
"company_logo_url": null,
"primary_color": "#6366f1",
"queue_size": 2,
"estimated_wait_time": 30,
"online_agents": 3
}
}Enlace Inválido/Expirado (404)
{
"errors": {
"detail": "Link de acesso inválido ou expirado"
}
}Ingresar a la Cola
El cliente ingresa a la cola de atención del departamento.
POST /api/v1/call/:token/joinRequest Body
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
name | string | Sí | Nombre del cliente |
email | string | No | Email del cliente |
phone | string | No | Teléfono del cliente |
reason | string | No | Motivo de la llamada |
Ejemplo de Request
curl -X POST https://voki.avanter.com.br/api/v1/call/abc123def456/join \
-H "Content-Type: application/json" \
-d '{
"name": "Carlos Ferreira",
"email": "carlos@email.com",
"reason": "Suporte com configuração"
}'Respuesta Exitosa (200)
{
"data": {
"call_id": "1a2b3c4d-5e6f-7890-abcd-ef1234567890",
"status": "queued",
"position": 3,
"estimated_wait_time": 45,
"websocket_token": "temp_ws_token_for_customer...",
"websocket_url": "wss://voki.avanter.com.br/socket/websocket"
}
}Flujo del Cliente
Después de ingresar a la cola, el cliente debe conectarse vía WebSocket usando el websocket_token para recibir actualizaciones en tiempo real sobre la posición en la cola y cuando la llamada sea iniciada.
Estado de la Llamada
Verifica el estado actual de una llamada (polling alternativo al WebSocket).
GET /api/v1/call/status/:call_idEjemplo de Request
curl -X GET https://voki.avanter.com.br/api/v1/call/status/1a2b3c4d-5e6f-7890-abcd-ef1234567890Respuesta Exitosa (200)
{
"data": {
"call_id": "1a2b3c4d-5e6f-7890-abcd-ef1234567890",
"status": "queued",
"position": 2,
"estimated_wait_time": 30
}
}Evaluar Llamada
Permite al cliente evaluar la llamada después de su finalización.
POST /api/v1/call/evaluate/:call_idRequest Body
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
rating | integer | Sí | Calificación de 1 a 5 |
comment | string | No | Comentario opcional |
Ejemplo de Request
curl -X POST https://voki.avanter.com.br/api/v1/call/evaluate/1a2b3c4d-5e6f-7890-abcd-ef1234567890 \
-H "Content-Type: application/json" \
-d '{
"rating": 5,
"comment": "Atendimento excelente! Problema resolvido rapidamente."
}'Respuesta Exitosa (200)
{
"data": {
"message": "Avaliação registrada com sucesso"
}
}Credenciales TURN (público)
Obtiene credenciales TURN para que el cliente establezca conexión WebRTC.
GET /api/v1/call/turn-credentialsEjemplo de Request
curl -X GET https://voki.avanter.com.br/api/v1/call/turn-credentialsRespuesta Exitosa (200)
{
"data": {
"urls": [
"turn:voki.avanter.com.br:3478?transport=udp",
"turn:voki.avanter.com.br:3478?transport=tcp"
],
"username": "1708300800:anonymous",
"credential": "abcdef1234567890",
"ttl": 86400
}
}