Webhooks e endpoints internos
Além da API v1, o Rouxinol expõe alguns endpoints usados internamente pela plataforma para receber eventos de provedores externos (Twilio, Meta) ou para a comunicação entre o navegador e o Janus. Eles não fazem parte da API pública para integradores e não usam OAuth2 — cada um tem seu próprio mecanismo de autenticação (ou nenhum). Documentados aqui apenas para referência.
POST /api/twilio/voice/inbound
Webhook chamado pela Twilio para chamadas de entrada (PSTN). Valida a assinatura X-Twilio-Signature da requisição contra o auth_token configurado. Rejeita com 401 se a assinatura for inválida ou o auth_token não estiver configurado. Retorna TwiML instruindo a Twilio a discar para o SIP do Janus.
POST /api/sip-trunk/voice/inbound
Webhook genérico de chamada de entrada para troncos SIP que não são Twilio. Autenticado por um header X-Webhook-Secret, comparado com o secret configurado no servidor. Falha fechado: se o secret não estiver configurado, a requisição é rejeitada.
curl -X POST "$ROUXINOL_URL/api/sip-trunk/voice/inbound" \
-H "X-Webhook-Secret: SEU_WEBHOOK_SECRET" \
-H "Content-Type: application/json" \
-d '{ "to": "+551130001000", "from": "+5511988887777" }'
POST /api/openai/realtime/agents/{agent}/session
Endpoint interno usado pela ponte de voz (navegador/telefonia) para abrir uma sessão WebRTC Realtime da OpenAI para um agente: recebe uma oferta SDP e devolve a resposta SDP.
Este endpoint não tem verificação de autenticação própria — depende de só ser chamado a partir de fluxos internos confiáveis. Não deve ser exposto publicamente sem uma camada adicional de proteção.
POST /api/openai/realtime/function-call
Recebe chamadas de função (transfer_call) disparadas pelo modelo durante uma sessão Realtime da OpenAI. Autenticado por um header X-Webhook-Secret comparado ao secret configurado.
Se o secret não estiver configurado no servidor, a verificação é pulada (falha aberto) — diferente do endpoint de tronco SIP. Configure sempre o secret em produção.
GET|POST /api/whatsapp/webhook/{connection}
Webhook padrão da WhatsApp Cloud API (Meta) para uma conexão específica.
- GET — handshake de verificação da assinatura do webhook: a Meta envia
hub_verify_token, comparado com o token cadastrado na conexão; se válido, ohub_challengeé ecoado de volta. - POST — entrega dos eventos. Apenas eventos de chamada (
calls) são processados; se a conexão tiver umaproxy_urlconfigurada, o evento também é encaminhado para lá.
Simulando o handshake de verificação (use o webhook_verify_token cadastrado na conexão):
curl "$ROUXINOL_URL/api/whatsapp/webhook/8?hub.mode=subscribe&hub.verify_token=SEU_VERIFY_TOKEN&hub.challenge=12345"
A entrega via POST não verifica a assinatura X-Hub-Signature-256 do payload contra o app_secret — trate esse endpoint como confiável apenas por estar atrás do token de verificação do handshake inicial.
POST /api/whatsapp/test-call/{connection} e /hangup
Usados exclusivamente pela ação Testar Ligação do painel administrativo, para simular uma chamada de teste via Janus sem depender de uma chamada real do WhatsApp. Não são destinados a uso por integrações externas.