O áudio de chamadas do WaGo não serve apenas para testes. Uma aplicação em produção pode permitir que um usuário real fale e ouça através de um navegador, aplicativo desktop ou aplicativo móvel, fazendo a ponte entre o áudio dessa aplicação e uma chamada ativa do WhatsApp.
Caminho recomendado para produção
Use WebRTC entre seu frontend e o WaGo:
User browser or app
microphone -> Opus RTP -> WaGo /call/webrtc/offer -> WhatsApp call
speaker <- Opus RTP <- WaGo call receive path
O WebRTC é o padrão recomendado porque os navegadores já oferecem suporte nativo para captura de microfone, cancelamento de eco, jitter buffering, temporização de pacotes e saída de áudio.
Requisitos do navegador
Sua aplicação no navegador precisa de:
- Origem HTTPS em produção.
- Permissão de microfone concedida pelo usuário.
- Um ID de chamada ativa do WaGo.
RTCPeerConnection configurado com /call/webrtc/config.
- Um elemento
<audio autoplay> visível ou oculto para o áudio remoto da chamada.
Navegadores bloqueiam o acesso ao microfone em origens não seguras. localhost funciona para desenvolvimento local, mas em produção é obrigatório o uso de HTTPS.
Requisitos do servidor
O WaGo precisa de:
- Um token conectado e autenticado.
- Uma chamada rastreada via
/call/make ou um evento de chamada recebida.
- Acesso UDP/rede para o ICE do WebRTC.
- Suporte de proxy reverso para o tráfego normal da API HTTPS.
Configuração atual do ICE:
{
"iceServers": [
{
"urls": ["stun:stun.l.google.com:19302"]
}
],
"turn": {
"enabled": false,
"status": "coming_soon"
}
}
Status do TURN
O TURN ainda não está configurado. O WaGo utiliza STUN fixo por enquanto e retorna o status do TURN como coming_soon.
Isso significa que o áudio em produção pode funcionar em muitas redes, mas não é garantido para todos os usuários. NATs restritivos, firewalls corporativos e algumas redes móveis podem precisar de um relay TURN para que o áudio ao vivo seja confiável em todos os cenários.
Checklist de implementação no navegador
- Chame
GET /call/webrtc/config.
- Crie a
RTCPeerConnection com os iceServers retornados.
- Chame
navigator.mediaDevices.getUserMedia({ audio: true }).
- Adicione a trilha de áudio do microfone à conexão peer.
- Escute o evento
pc.ontrack e anexe o stream remoto a um elemento de áudio.
- Crie uma oferta SDP.
- Aguarde a conclusão da coleta de ICE.
- Envie
{ callID, type: "offer", sdp } para POST /call/webrtc/offer.
- Defina a resposta do WaGo como a descrição remota.
- Ao encerrar a chamada, feche a conexão peer e chame
POST /call/webrtc/close.
Aplicativos desktop e móveis
Se você estiver criando um aplicativo desktop ou móvel, tem duas opções:
| Opção | Use quando |
|---|
| Biblioteca WebRTC | Você deseja o mesmo comportamento do áudio ao vivo no navegador. |
| Ponte RTP/Opus nativa | Você controla a captura de áudio e deseja um pipeline personalizado em tempo real. |
Para a maioria dos aplicativos, use uma biblioteca WebRTC. RTP nativo significa que você mesmo deve lidar com a captura de microfone, reamostragem, codificação/decodificação Opus, temporização de pacotes, jitter e reprodução de áudio.
Arquivos de áudio no servidor
Se o usuário não precisar falar ao vivo, use /call/play em vez de WebRTC. Isso reproduz um arquivo que já está presente no servidor WaGo.
Extensões de arquivo suportadas:
Gravação
Use /call/record para salvar o áudio da chamada recebida em um arquivo WAV:
{
"CallID": "CALL_ID",
"Path": "files/calls/CALL_ID.wav"
}
Se o campo Path estiver vazio, o WaGo salvará por padrão em files/calls/{callID}.wav.
As leis de gravação de chamadas variam de acordo com o país e o estado. Seu produto deve obter consentimento e seguir as exigências locais antes de gravar usuários.