Tempos e atendimento¶
call.timing¶
| Campo | Tipo | Presença | Formato/semântica |
|---|---|---|---|
startedAt |
string | obrigatório | Início da chamada, ISO 8601 UTC. |
answeredAt |
string | condicional | Momento de atendimento técnico/PSTN, ISO 8601 UTC. Não prova atendimento humano. |
endedAt |
string | obrigatório | Término da chamada, ISO 8601 UTC. |
durationSeconds |
integer | obrigatório | Duração total da chamada, em segundos. |
talkTimeSeconds |
integer | obrigatório | Tempo técnico de conversação usado pelo CDR/billing, em segundos. Não é necessariamente conversa humana. |
timeToHumanAnswerSeconds |
integer | condicional | Segundos entre startedAt e o atendimento por uma pessoa em um ramal Moonu. Só existe quando esse atendimento é conhecido. |
humanTalkTimeSeconds |
integer | condicional | Segundos em que ao menos uma pessoa em um ramal Moonu esteve efetivamente conectada à chamada. |
humanTalkTimeSeconds mede o período em que pelo menos uma pessoa esteve em um ramal Moonu conectado à chamada. Em transferências, períodos consecutivos são somados; períodos sobrepostos não são contados duas vezes. Se não há um intervalo completo confiável, o campo é omitido — ele não é estimado pelo fim da chamada.
Em uma chamada realizada (outbound), o campo pode existir quando o ramal Moonu que iniciou a chamada esteve conectado. Isso não comprova que o destino PSTN seja uma pessoa.
Atendimento humano¶
| Campo | Tipo | Presença | Semântica |
|---|---|---|---|
call.humanAnswered |
boolean | inbound/internal | true somente se uma pessoa atendeu em um ramal Moonu; false quando não há esse atendimento humano. Omitido em outbound. |
call.answeredBy |
object ou null |
inbound/internal | Ramal que atendeu, quando conhecido; null sem atendimento humano. Omitido em outbound. |
call.answeredBy.extension |
string | quando objeto | Ramal do atendente. |
call.answeredBy.name |
string | condicional | Nome do atendente. |
URA atende tecnicamente, sem atendimento humano
Uma URA pode atender a ligação e resultar em status: "answered", answeredAt preenchido e humanAnswered: false. Nesse caso, answeredBy é null e timeToHumanAnswerSeconds não aparece.
Fila sem atendimento humano
A entrada em uma Fila também não comprova atendimento humano. Quando nenhum endpoint atende, o evento contém humanAnswered: false e answeredBy: null; a Fila participante, quando conhecida, aparece em uma etapa routing.steps[] com type: "queue".
Não confunda as métricas
Não calcule conversa humana como endedAt - answeredAt. Após uma URA, a chamada pode continuar tocando em um ramal ou Grupo de atendimento; talkTimeSeconds também conserva a semântica técnica de cobrança.