Api
Comandos WebSocket
Referência completa dos comandos que agentes podem enviar ao servidor.
Comandos WebSocket
Comandos enviados pelos agentes (navegador) para o stcall-ws, que os executa no Asterisk via ARI HTTP.
Formato do Comando
{
"type": "command",
"requestId": "unique-uuid-123",
"data": {
"action": "<nome-da-acao>",
"params": { ... }
}
}
O requestId é um UUID único gerado pelo cliente para correlacionar com a resposta.
Formato da Resposta
{
"type": "command_response",
"requestId": "unique-uuid-123",
"data": {
"success": true,
"result": { ... }
}
}
Comandos de Canal
originate - Iniciar chamada
{
"type": "command",
"requestId": "uuid",
"data": {
"action": "originate",
"params": {
"endpoint": "SIP/1001",
"extension": "1002",
"context": "from-internal",
"priority": 1,
"app": "stCall",
"appArgs": "agent-123",
"callerId": "+5511999999999",
"timeout": 30,
"variables": {
"CALLERID(name)": "João Silva"
}
}
}
}
| Parâmetro | Obrigatório | Descrição |
|---|---|---|
endpoint | Sim | Endpoint PJSIP a originar |
extension | Não | Extensão de destino |
context | Não | Contexto do dialplan |
priority | Não | Prioridade (default: 1) |
app | Não | Aplicação Stasis |
appArgs | Não | Argumentos da aplicação |
callerId | Não | Caller ID |
timeout | Não | Timeout em segundos |
variables | Não | Variáveis de canal |
Para chamadas de saída iniciadas pelo agente, use WebRTC direto (SIP.js INVITE) ao invés de ARI originate. O originate é para chamadas programáticas do servidor.
answer - Atender canal
{
"data": {
"action": "answer",
"params": {
"channelId": "1234567890.123"
}
}
}
| Parâmetro | Obrigatório | Descrição |
|---|---|---|
channelId | Sim | ID do canal a atender |
hangup - Desligar canal
{
"data": {
"action": "hangup",
"params": {
"channelId": "1234567890.123",
"reason": "normal"
}
}
}
| Parâmetro | Obrigatório | Descrição |
|---|---|---|
channelId | Sim | ID do canal |
reason | Não | Motivo (default: "normal") |
hold - Colocar em espera
{
"data": {
"action": "hold",
"params": {
"channelId": "1234567890.123"
}
}
}
unhold - Remover da espera
{
"data": {
"action": "unhold",
"params": {
"channelId": "1234567890.123"
}
}
}
mute - Silenciar canal
{
"data": {
"action": "mute",
"params": {
"channelId": "1234567890.123",
"direction": "both"
}
}
}
| Parâmetro | Obrigatório | Descrição |
|---|---|---|
channelId | Sim | ID do canal |
direction | Não | "in", "out" ou "both" |
unmute - Ativar áudio do canal
{
"data": {
"action": "unmute",
"params": {
"channelId": "1234567890.123",
"direction": "both"
}
}
}
Comandos de Dados
fetchCallHistory - Buscar histórico
{
"data": {
"action": "fetchCallHistory",
"params": {
"limit": 100
}
}
}
Resposta:
{
"success": true,
"result": [
{
"id": "call-uuid",
"callerNumber": "+5511999999999",
"direction": "inbound",
"status": "completed",
"duration": 125,
"startedAt": "2025-01-15T10:30:45.123Z"
}
]
}
Heartbeat
ping
{
"type": "ping"
}
O servidor responde com:
{
"type": "pong",
"timestamp": "2025-01-15T10:30:45.123Z"
}
Intervalo configurável via HEARTBEAT_INTERVAL (default: 30000ms).
Conexão
URL
ws://hostname:3001/?token=<JWT>
Autenticação
Token JWT via query parameter ou header:
Authorization: Bearer <JWT>
Payload JWT Obrigatório
{
"agentId": "agent-123",
"role": "agent",
"exp": 1234567890
}