Usuário reportou que 1502 ligando pra 1503 (dois telefones IP reais, ambos registrados) não completava a chamada. Três bugs em camadas diferentes, cada um só confirmado lendo o log/capturando pacote real — nunca por suposição: 1. Registro: os dois ramais registravam com Contact apontando pro MESMO IP público compartilhado desta rede (a VM nunca tem IP público próprio, é sempre RFC1918 atrás do NAT do escritório) — originar uma chamada tentava mandar o INVITE de volta pra esse IP público, hairpin NAT clássico, falha instantânea (503). Fix: NDLB-received-in-nat-reg- contact (Contact salvo vira o IP realmente observado no pacote). De quebra, aplicado network_mode: host no serviço freeswitch (pedido explícito do usuário) — tira o Docker NAT/bridge do meio. Quebra em cascata corrigida: fs-config vira alcançável só via 127.0.0.1:8080 (não mais nome de serviço), workers ESL (fs-events/predictive-dialer) passam a usar host.docker.internal. 2. Áudio: com o registro corrigido, a chamada completava mas sem RTP — local-network-acl="localnet.auto" só cobria a subnet da própria interface do FreeSWITCH, tratando ramais de OUTRAS subnets do mesmo escritório como "de fora" e trocando o SDP pelo IP público de novo. Fix: ACL própria (b2bcall_lan, cobre todo RFC1918) referenciada em local-network-acl. 3. Chamada morrendo sozinha em exatos 32s (Timer H do RFC 3261): mesmo com áudio ok, o 200 OK que o FreeSWITCH manda pro ramal que recebeu a chamada ainda tinha Contact com o IP público — o telefone nunca manda o ACK de volta, FreeSWITCH retransmite sozinho até desistir. Só confirmado com tcpdump (instalado nesta sessão) capturando o pacote byte a byte. Fix: ext-rtp-ip/ext-sip-ip (STUN, sempre resolvem pro IP público) removidos do profile "internal" — sem endereço "externo" configurado, o FreeSWITCH nunca mais tem como escolher errado. Confirmado resolvido pelo usuário com chamadas reais nos dois sentidos, áudio bidirecional, sobrevivendo bem além dos 32s que travavam antes. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BFaBaBSQGhyXGEgtTYZGV8
22 lines
1.2 KiB
XML
22 lines
1.2 KiB
XML
<configuration name="xml_curl.conf" description="cURL XML Gateway">
|
|
<bindings>
|
|
<binding name="b2bcall-fs-config">
|
|
<!-- b2bcall-fs-config responde directory de verdade (extensions) e
|
|
"not found" pra dialplan ainda (fase seguinte). A config estatica
|
|
vanilla continua valendo como fallback quando "not found".
|
|
Credenciais substituidas em runtime pelo entrypoint.sh — nunca
|
|
ficam de verdade na imagem (mesmo padrao do ESL_PASSWORD). -->
|
|
<!-- 127.0.0.1, nao "fs-config" (PHASE 68): com o FreeSWITCH em
|
|
network_mode: host, ele nao esta mais na rede bridge do
|
|
compose, entao o DNS embutido do Docker (nomes de servico) nao
|
|
resolve mais pra ele. fs-config publica 8080 so em loopback do
|
|
host (docker-compose.yml) — o FreeSWITCH, agora usando a
|
|
propria stack de rede do host, alcanca por ali. -->
|
|
<param name="gateway-url" value="http://127.0.0.1:8080/" bindings="directory|dialplan"/>
|
|
<param name="gateway-credentials" value="__FS_CONFIG_USER__:__FS_CONFIG_PASSWORD__"/>
|
|
<param name="auth-scheme" value="basic"/>
|
|
<param name="timeout" value="5"/>
|
|
</binding>
|
|
</bindings>
|
|
</configuration>
|