Los sistemas de facturación y las herramientas de depuración necesitan los mismos datos en momentos distintos. La mayoría de las plataformas les dan copias separadas. En Bird un solo registro sirve para ambos, y se puede leer en cuanto la llamada termina. Eso cambia dos cosas a la hora de conciliar: qué cuenta como tramo y cuándo llega el coste.
¿Qué contiene un registro?
Un registro tiene tres grupos de campos, que responden a tres preguntas distintas.
Qué ocurrió. El status es el resultado, uno de answered, no answer, rejected, failed o unknown. Junto a él, la respuesta SIP es el código SIP final. Cuando Bird rechazó la llamada en lugar de un operador, un motivo de rechazo nombra la comprobación que falló. Esos tres leídos juntos forman el diagnóstico, y qué significan los códigos de respuesta SIP explica cómo se combinan.
Cuándo ocurrió. Started es cuándo Bird recibió la llamada. Answered es cuándo se contestó, o el hecho de que no se contestó. Ended es cuándo se cortó. En una llamada entrante, Inbound route registra qué estaba configurado para hacer el número marcado, y Trunk nombra el trunk por el que entró o se entregó la llamada.
Cuánto costó. Tiempo facturable, duración total y coste de la llamada.
Dos identificadores acompañan esos campos y no son intercambiables. El call ID (vcl_…) es el identificador del propio registro. Cítalo a soporte y corrélalo en tus propios registros. El session ID (vcs_…) es compartido por todos los tramos de una llamada.
¿Por qué una llamada aparece como dos registros?
Porque un registro describe un tramo, no una llamada, y algunas llamadas tienen más de uno.
Una llamada redirigida es un ejemplo: el tramo entrante y el tramo saliente son registros separados que comparten un session ID. Si cuentas registros como llamadas, contarás de más exactamente las llamadas que fueron redirigidas, y si sumas duraciones entre registros contarás doble el tiempo en que se solaparon.
El session ID es la solución. Agrupa por él cuando quieras llamadas, y lee los registros individualmente cuando quieras tramos. Cuál necesitas depende de la pregunta: un problema de entrega es una pregunta de tramo, y una pregunta de experiencia de cliente o de volumen suele ser de sesión.
¿Por qué mi coste no coincide con la duración?
El tiempo facturable excluye el timbre. El coste se escribe después de que la llamada termina, no con ella.
El tiempo facturable no es la duración total. El tiempo facturable va de la respuesta al cuelgue. La duración total incluye el tiempo que la llamada estuvo sonando antes de que alguien contestara. Un registro tiene ambos. Una conciliación que usa el incorrecto sin darse cuenta se desvía por la duración del timbre en cada llamada contestada, y por la duración completa en cada llamada que nunca se contestó.
El coste llega después de la llamada. Un registro incluye su coste una vez que ha sido tarifado, y eso no es en el instante en que la llamada termina. Un registro consultado de inmediato puede estar completo en todo lo demás y no tener precio. Si calculas el gasto en tiempo casi real, lee el coste cuando esté presente y nunca interpretes su ausencia como cero. No es un detalle menor: un coste ausente y un coste de cero son hechos diferentes, y tratarlos igual subestima el gasto.
Esperar no siempre es la respuesta. Una llamada no contestada no tiene coste y nunca lo tendrá. Una llamada contestada que sigue sin coste tampoco está esperando la tarifación. El registro no indica cuál de los dos casos estás viendo. Contacta a soporte con el call ID en lugar de seguir consultándolo.
¿Qué llamadas no aparecen nunca?
Una llamada que Bird rechaza antes de admitirla no deja registro, así que el registro no es una cuenta completa de lo que llegó a tu cuenta.
Una llamada que Bird no puede admitir de ningún modo se rechaza antes de que exista un registro, así que nunca llega al registro. La lista de IPs permitidas del trunk es uno de esos rechazos. Una llamada desde una dirección que no está en ella se rechaza en la capa SIP, y normalmente no genera registro. Así, un atacante que escanee tu trunk puede generar mucho tráfico sin dejar rastro en el lugar donde naturalmente buscarías. Un PBX mal configurado, la centralita que enruta las llamadas de una empresa, hace lo mismo desde una dirección nueva.
La consecuencia práctica es que "there is nothing in the call log" responde a una pregunta más limitada de lo que parece. Significa que no se admitió ninguna llamada, no que no se intentó ninguna. Cuando un sistema telefónico reporta que sus llamadas están fallando y el registro está vacío, revisa la lista de IPs permitidas primero, no al final. Resolución de problemas de voz cubre el resto de ese camino.
¿Cómo obtengo los registros?
Para una sola llamada, ábrela en el registro de llamadas y lee los campos anteriores. El registro filtra y busca en la lista, y muestra las llamadas en curso por separado de las terminadas.
Para muchas, la API de voz devuelve llamadas como registros que puedes paginar. Los endpoints de estadísticas de voz los agregan por día, hora, país y código de respuesta. Una pregunta sobre un patrón se responde desde las estadísticas, no paginando los registros.
El registro de llamadas documenta cada campo que lleva un registro y cómo se filtra la lista.
En resumen
Una llamada puede ser varios registros.
Cada tramo tiene su propio registro, y un session id compartido es lo que los agrupa. Una llamada redirigida son dos registros, no uno.
El tiempo facturable va de la respuesta al cuelgue.
No es la duración total, que incluye el timbre. Ambos se registran, así que concilia contra el correcto.
El coste no está al principio, y a veces nunca.
Un registro incluye su coste una vez que ha sido tarifado. Una llamada contestada que sigue sin coste no está esperando la tarifación, así que lleva el call ID a soporte.
Algunas llamadas nunca generan un registro.
Una llamada rechazada antes de que Bird la admita no deja nada en el registro, así que el registro no es una cuenta completa de lo que llegó a tu cuenta.