Sistemas de faturamento e ferramentas de depuração querem os mesmos dados em prazos diferentes. A maioria das plataformas lhes entrega cópias separadas. Na Bird um único registro atende aos dois, e fica legível assim que a chamada termina. Isso muda duas coisas na hora de reconciliar: o que conta como trecho e quando o custo aparece.
O que há em um registro?
Um registro carrega três grupos de campos, respondendo a três perguntas diferentes.
O que aconteceu. O status é o resultado: answered, no answer, rejected, failed ou unknown. Junto dele, a resposta SIP é o código SIP final. Quando Bird recusou a chamada em vez de uma operadora, um motivo de rejeição indica qual verificação falhou. Esses três lidos em conjunto formam o diagnóstico, e o que os códigos de resposta SIP significam explica como eles se combinam.
Quando aconteceu. Started é quando Bird recebeu a chamada. Answered é quando ela foi atendida, ou o fato de que não foi. Ended é quando ela foi encerrada. Em uma chamada de entrada, Inbound route registra o que o número discado estava configurado para fazer, e Trunk identifica o tronco pelo qual a chamada entrou ou foi entregue.
Quanto custou. Tempo faturável, duração total e custo da chamada.
Dois identificadores acompanham esses campos e não são intercambiáveis. O call ID (vcl_…) é o identificador do próprio registro. Informe-o ao suporte e correlacione-o nos seus próprios logs. O session ID (vcs_…) é compartilhado por todos os trechos de uma chamada.
Por que uma chamada aparece como dois registros?
Porque um registro descreve um trecho, não uma chamada, e algumas chamadas têm mais de um.
Uma chamada encaminhada é um exemplo: o trecho de entrada e o trecho de saída são registros separados, compartilhando um session ID. Se você contar registros como chamadas, vai contar a mais exatamente as chamadas que foram encaminhadas, e se somar durações entre registros vai contar em dobro o tempo em que eles se sobrepuseram.
O session ID é a solução. Agrupe por ele quando quiser chamadas e leia os registros individualmente quando quiser trechos. Qual você quer depende da pergunta: um problema de entrega é uma pergunta de trecho, e uma pergunta de experiência do cliente ou volume normalmente é de sessão.
Por que meu custo não bate com a duração?
O tempo faturável exclui o toque. O custo é gravado depois que a chamada termina, não junto com ela.
Tempo faturável não é duração total. O tempo faturável vai do atendimento ao desligamento. A duração total inclui o tempo que a chamada ficou tocando antes de alguém atender. Um registro carrega ambos. Uma reconciliação que usa o valor errado silenciosamente acumula desvio equivalente à duração do toque em cada chamada atendida, e à duração inteira em cada chamada que nunca foi atendida.
O custo chega depois da chamada. Um registro carrega seu custo depois de tarifado, o que não acontece no instante em que a chamada termina. Um registro consultado imediatamente pode estar completo em todos os outros aspectos e não trazer preço. Se você está calculando gasto em tempo quase real, leia o custo quando ele estiver lá e nunca interprete a ausência como zero. Isso não é um detalhe: custo ausente e custo zero são fatos diferentes aqui, e tratá-los como iguais subestima o gasto.
Esperar nem sempre é a resposta. Uma chamada não atendida não tem custo e nunca terá. Uma chamada atendida que continua sem custo também não está esperando tarifação. O registro não diz em qual dos dois casos você está. Entre em contato com o suporte informando o call ID em vez de continuar consultando.
Quais chamadas nunca aparecem?
Uma chamada que Bird recusa antes de admiti-la não gera registro, então o log não é um relato completo do que chegou à sua conta.
Uma chamada que Bird não consegue admitir é rejeitada antes de um registro existir, então nunca chega ao log. A lista de IPs permitidos do tronco é uma dessas recusas. Uma chamada vinda de um endereço que não está nela é recusada na camada SIP e normalmente não gera registro. Assim, um atacante sondando seu tronco pode gerar muito tráfego sem deixar rastro no lugar onde você naturalmente procuraria. Um PBX, o sistema telefônico empresarial que roteia as chamadas de uma empresa, mal configurado faz o mesmo a partir de um novo endereço.
A consequência prática é que "there is nothing in the call log" responde a uma pergunta mais restrita do que parece. Significa que nenhuma chamada foi admitida, não que nenhuma foi tentada. Quando um sistema telefônico informa que suas chamadas estão falhando e o log está vazio, verifique a lista de IPs permitidos primeiro, não por último. Troubleshooting de voz cobre o restante desse caminho.
Como obtenho os registros?
Para uma única chamada, abra-a no log de chamadas e leia os campos acima. O log filtra e pesquisa a lista, e mostra chamadas em andamento separadamente das finalizadas.
Para muitas, a API de voz retorna chamadas como registros que você pode paginar. Os endpoints de estatísticas de voz os agregam por dia, hora, país e código de resposta. Uma pergunta sobre um padrão é respondida pelas estatísticas, não paginando os registros.
O log de chamadas documenta cada campo que um registro carrega e como a lista é filtrada.
Em resumo
Uma chamada pode gerar vários registros.
Cada trecho tem seu próprio registro, e um session ID compartilhado é o que os agrupa. Uma chamada encaminhada são dois registros, não um.
Tempo faturável vai do atendimento ao desligamento.
Não é a duração total, que inclui o toque. Ambos são registrados, então reconcilie usando o correto.
O custo não está lá de início, e às vezes nunca aparece.
Um registro carrega seu custo depois de tarifado. Uma chamada atendida que continua sem custo não está esperando tarifação, então leve o call ID ao suporte.
Algumas chamadas nunca geram registro.
Uma chamada recusada antes de Bird admiti-la não deixa nada no log, então o log não é um relato completo do que chegou à sua conta.