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âmetroObrigatórioDescrição
endpointSimEndpoint PJSIP a originar
extensionNãoExtensão de destino
contextNãoContexto do dialplan
priorityNãoPrioridade (default: 1)
appNãoAplicação Stasis
appArgsNãoArgumentos da aplicação
callerIdNãoCaller ID
timeoutNãoTimeout em segundos
variablesNãoVariá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âmetroObrigatórioDescrição
channelIdSimID do canal a atender

hangup - Desligar canal

{
  "data": {
    "action": "hangup",
    "params": {
      "channelId": "1234567890.123",
      "reason": "normal"
    }
  }
}
ParâmetroObrigatórioDescrição
channelIdSimID do canal
reasonNãoMotivo (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âmetroObrigatórioDescrição
channelIdSimID do canal
directionNã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
}
Copyright © 2026