Call
Estrutura de dados do contrato OpenAPI.
Estrutura de dados do contrato OpenAPI.
Campos
| Campo | Tipo | Presença | Descrição |
|---|---|---|---|
callId | string | obrigatório | — |
direction | string | obrigatório | Valores: "inbound", "outbound" |
number | string | obrigatório | Identidade telefônica canônica, quando conhecida. |
jid | string | opcional | — |
status | string | obrigatório | Valores: "ringing", "connecting", "active", "ended" |
startedAt | string | obrigatório | Formato: date-time |
answeredAt | string | opcional | Momento do aceite remoto ou do atendimento local; não depende do primeiro áudio. Formato: date-time |
endedAt | string | opcional | Formato: date-time |
endReason | string | opcional | hangup, rejected, ring_timeout, closed, unknown ou motivo do motor. Um terminate remoto sem motivo explícito (ausente, vazio ou só espaços) é hangup/remote: solicitação remota de encerramento, sem comprovar ação humana. Motivos explícitos são preservados; callbacks genéricos sem motivo continuam unknown. O primeiro motivo fica no histórico; registros antigos não são reclassificados. |
endedBy | string | opcional | Valores: "local", "remote" |
answered | boolean | opcional | Verdadeiro a partir do aceite, mesmo antes de o áudio iniciar. |
mediaStartedAt | string | opcional | Momento em que o motor confirmou mídia recebida. Formato: date-time |
durationSeconds | number | opcional | Tempo entre atendimento e encerramento; zero para chamadas sem atendimento ou ainda em curso. Mínimo: 0 |
recording | object | opcional | Modelo: CallRecording. |
video | boolean | obrigatório | Verdadeiro quando a chamada é ou foi de vídeo (negociado em qualquer direção em algum momento). Permanece no histórico. |
videoState | object | opcional | Estado vivo do vídeo; presente apenas enquanto a chamada não terminou. Os campos sending/receiving refletem o fluxo negociado, não quadros efetivamente trafegando. Modelo: CallVideoState. |
videoRecording | object | opcional | Gravação de vídeo independente do WAV. Campo opcional, presente somente após começar a captura de vídeo. processing indica composição do MP4 em fila após a chamada; não muda o estado ou a ocupação de ligações. O primeiro resultado terminal é preservado. Modelo: CallVideoRecording. |
incomingCallMode | string | opcional | Comportamento para novas chamadas recebidas: allow permite atendimento humano; reject recusa no servidor; reject_reply recusa e solicita ao consumidor resposta por uma conexão de mensagens vinculada. Não atende automaticamente. O envio do texto é independente da recusa. Modelo: IncomingCallMode. Valores: "allow", "reject", "reject_reply" |
callsConfigVersion | integer | opcional | Versão da política congelada na chegada da chamada recebida. Não é seq do evento; mudanças de configuração posteriores não alteram esta decisão. Mínimo: 0. Formato: int64 |
rejectionSource | string | opcional | Origem de uma recusa confirmada: política automática, ocupação ou operador. Não confundir com timeout, desligamento remoto ou atendimento em outro dispositivo. Valores: "policy", "busy", "manual" |
autoReplyRequested | boolean | opcional | Verdadeiro somente após recusa confirmada por política reject_reply. O consumidor enfileira o texto uma única vez por instância/chamada; este campo não comprova envio da resposta. |
Definição OpenAPI
json
{
"type": "object",
"properties": {
"callId": {
"type": "string"
},
"direction": {
"type": "string",
"enum": [
"inbound",
"outbound"
]
},
"number": {
"type": "string",
"description": "Identidade telefônica canônica, quando conhecida."
},
"jid": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"ringing",
"connecting",
"active",
"ended"
]
},
"startedAt": {
"type": "string",
"format": "date-time"
},
"answeredAt": {
"type": "string",
"format": "date-time",
"description": "Momento do aceite remoto ou do atendimento local; não depende do primeiro áudio."
},
"endedAt": {
"type": "string",
"format": "date-time"
},
"endReason": {
"type": "string",
"description": "hangup, rejected, ring_timeout, closed, unknown ou motivo do motor. Um terminate remoto sem motivo explícito (ausente, vazio ou só espaços) é hangup/remote: solicitação remota de encerramento, sem comprovar ação humana. Motivos explícitos são preservados; callbacks genéricos sem motivo continuam unknown. O primeiro motivo fica no histórico; registros antigos não são reclassificados."
},
"endedBy": {
"type": "string",
"enum": [
"local",
"remote"
]
},
"answered": {
"type": "boolean",
"description": "Verdadeiro a partir do aceite, mesmo antes de o áudio iniciar."
},
"mediaStartedAt": {
"type": "string",
"format": "date-time",
"description": "Momento em que o motor confirmou mídia recebida."
},
"durationSeconds": {
"type": "number",
"minimum": 0,
"description": "Tempo entre atendimento e encerramento; zero para chamadas sem atendimento ou ainda em curso."
},
"recording": {
"$ref": "#/components/schemas/CallRecording"
},
"video": {
"type": "boolean",
"description": "Verdadeiro quando a chamada é ou foi de vídeo (negociado em qualquer direção em algum momento). Permanece no histórico."
},
"videoState": {
"$ref": "#/components/schemas/CallVideoState"
},
"videoRecording": {
"$ref": "#/components/schemas/CallVideoRecording"
},
"incomingCallMode": {
"$ref": "#/components/schemas/IncomingCallMode"
},
"callsConfigVersion": {
"type": "integer",
"format": "int64",
"minimum": 0,
"description": "Versão da política congelada na chegada da chamada recebida. Não é seq do evento; mudanças de configuração posteriores não alteram esta decisão."
},
"rejectionSource": {
"type": "string",
"enum": [
"policy",
"busy",
"manual"
],
"description": "Origem de uma recusa confirmada: política automática, ocupação ou operador. Não confundir com timeout, desligamento remoto ou atendimento em outro dispositivo."
},
"autoReplyRequested": {
"type": "boolean",
"description": "Verdadeiro somente após recusa confirmada por política reject_reply. O consumidor enfileira o texto uma única vez por instância/chamada; este campo não comprova envio da resposta."
}
},
"required": [
"callId",
"direction",
"number",
"status",
"startedAt",
"video"
]
}