Call

Estrutura de dados do contrato OpenAPI.

Estrutura de dados do contrato OpenAPI.

Campos

CampoTipoPresençaDescrição
callIdstringobrigatório—
directionstringobrigatórioValores: "inbound", "outbound"
numberstringobrigatórioIdentidade telefônica canônica, quando conhecida.
jidstringopcional—
statusstringobrigatórioValores: "ringing", "connecting", "active", "ended"
startedAtstringobrigatórioFormato: date-time
answeredAtstringopcionalMomento do aceite remoto ou do atendimento local; não depende do primeiro áudio. Formato: date-time
endedAtstringopcionalFormato: date-time
endReasonstringopcionalhangup, 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.
endedBystringopcionalValores: "local", "remote"
answeredbooleanopcionalVerdadeiro a partir do aceite, mesmo antes de o áudio iniciar.
mediaStartedAtstringopcionalMomento em que o motor confirmou mídia recebida. Formato: date-time
durationSecondsnumberopcionalTempo entre atendimento e encerramento; zero para chamadas sem atendimento ou ainda em curso. Mínimo: 0
recordingobjectopcionalModelo: CallRecording.
videobooleanobrigatórioVerdadeiro quando a chamada é ou foi de vídeo (negociado em qualquer direção em algum momento). Permanece no histórico.
videoStateobjectopcionalEstado 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.
videoRecordingobjectopcionalGravaçã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.
incomingCallModestringopcionalComportamento 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"
callsConfigVersionintegeropcionalVersã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
rejectionSourcestringopcionalOrigem 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"
autoReplyRequestedbooleanopcionalVerdadeiro 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"
  ]
}