> ## Documentation Index
> Fetch the complete documentation index at: https://docs.suasofia.online/llms.txt
> Use this file to discover all available pages before exploring further.

# Webhook de Conversa Finalizada

> Webhook enviado após uma conversa de chat terminar contendo transcrição, variáveis extraídas e dados do cliente

O Webhook de Conversa Finalizada é automaticamente enviado para sua URL de webhook especificada após uma conversa de chat (WhatsApp ou Widget Web) terminar. Este webhook contém a transcrição completa, variáveis extraídas, informações do cliente e detalhes do remetente.

## Configuração do Webhook

Para ativar webhooks de conversa finalizada:

1. Use o endpoint da API [Enable Conversation Ended Webhook](/api-reference/assistants/enable-conversation-ended-webhook)
2. Forneça sua URL de webhook onde as notificações serão enviadas
3. Opcionalmente configure variáveis pós-chamada no seu assistente para extrair dados estruturados das conversas

## Formato da Requisição

O webhook é enviado como uma requisição POST para sua URL configurada com a seguinte carga JSON:

### Estrutura da Carga

<ResponseField name="conversation_id" type="string">
  Identificador único (UUID) da conversa
</ResponseField>

<ResponseField name="assistant_id" type="string">
  Identificador único (UUID) do assistente que handling a conversa
</ResponseField>

<ResponseField name="type" type="string">
  O tipo de conversa. Valores possíveis: `widget`, `whatsapp`
</ResponseField>

<ResponseField name="message_count" type="integer">
  Número total de mensagens trocadas na conversa
</ResponseField>

<ResponseField name="status" type="string">
  Status da conversa. Valor: `ended`
</ResponseField>

<ResponseField name="extracted_variables" type="object">
  Variáveis extraídas pela IA baseadas na configuração do esquema pós-chamada do seu assistente

  <Expandable title="Exemplo de variáveis extraídas">
    <ResponseField name="status" type="boolean">
      Se o objetivo da conversa foi atingido
    </ResponseField>

    <ResponseField name="summary" type="string">
      Resumo da conversa
    </ResponseField>

    <ResponseField name="custom_variable" type="string|number|boolean">
      Qualquer variável personalizada que você definiu na configuração do assistente
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="input_variables" type="object">
  Variáveis que foram passadas para o assistente no início da conversa (ex: de campos de formulário pré-chat ou fluxos de automação)
</ResponseField>

<ResponseField name="transcript" type="array">
  Array de objetos de mensagem representando a conversa completa

  <Expandable title="Propriedades da mensagem">
    <ResponseField name="role" type="string">
      O papel do remetente: `assistant` ou `user`
    </ResponseField>

    <ResponseField name="content" type="string">
      O conteúdo da mensagem
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="formatted_transcript" type="string">
  Transcrição formatada legível para humanos com prefixos `AI:` e `Customer:`
</ResponseField>

<ResponseField name="customer_phone" type="string">
  Número de telefone do cliente (disponível para conversas WhatsApp, `null` para conversas de widget)
</ResponseField>

<ResponseField name="customer_name" type="string">
  Nome do cliente se fornecido (ex: de formulário pré-chat), ou `null`
</ResponseField>

<ResponseField name="sender" type="object">
  Informações do remetente WhatsApp (apenas presente para conversas WhatsApp, `null` para widget)

  <Expandable title="Propriedades do remetente">
    <ResponseField name="phone_number" type="string">
      O número de telefone do remetente WhatsApp
    </ResponseField>

    <ResponseField name="display_name" type="string">
      O nome de exibição do remetente WhatsApp
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="created_at" type="string">
  Timestamp ISO 8601 quando a conversa começou (no fuso horário configurado do usuário)
</ResponseField>

<ResponseField name="ended_at" type="string">
  Timestamp ISO 8601 quando a conversa terminou (no fuso horário configurado do usuário)
</ResponseField>

<ResponseExample>
  ```json Carga do Webhook de Conversa Finalizada theme={null}
  {
    "conversation_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "assistant_id": "f9e8d7c6-b5a4-3210-fedc-ba9876543210",
    "type": "widget",
    "message_count": 8,
    "status": "ended",
    "extracted_variables": {
      "status": true,
      "summary": "Cliente perguntou sobre planos de preços e se interessou pelo plano Pro"
    },
    "input_variables": {
      "name": "João Silva",
      "email": "joao@example.com"
    },
    "transcript": [
      {
        "role": "assistant",
        "content": "Olá! Como posso ajudá-lo hoje?"
      },
      {
        "role": "user",
        "content": "Tenho uma pergunta sobre seu serviço."
      },
      {
        "role": "assistant",
        "content": "Claro! Ficarei feliz em ajudar. O que gostaria de saber?"
      },
      {
        "role": "user",
        "content": "Quais são seus planos de preços?"
      }
    ],
    "formatted_transcript": "AI: Olá! Como posso ajudá-lo hoje?\nCustomer: Tenho uma pergunta sobre seu serviço.\nAI: Claro! Ficarei feliz em ajudar. O que gostaria de saber?\nCustomer: Quais são seus planos de preços?",
    "customer_phone": null,
    "customer_name": "João Silva",
    "sender": null,
    "created_at": "2026-02-23T09:30:00+01:00",
    "ended_at": "2026-02-23T10:00:00+01:00"
  }
  ```

  ```json Webhook de Conversa WhatsApp Finalizada theme={null}
  {
    "conversation_id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
    "assistant_id": "f9e8d7c6-b5a4-3210-fedc-ba9876543210",
    "type": "whatsapp",
    "message_count": 12,
    "status": "ended",
    "extracted_variables": {
      "status": true,
      "summary": "Cliente agendou um compromisso para próxima semana"
    },
    "input_variables": {},
    "transcript": [
      {
        "role": "user",
        "content": "Olá, gostaria de agendar um compromisso"
      },
      {
        "role": "assistant",
        "content": "Olá! Ficarei feliz em ajudar você a agendar um compromisso. Que data funciona melhor para você?"
      }
    ],
    "formatted_transcript": "Customer: Olá, gostaria de agendar um compromisso\nAI: Olá! Ficarei feliz em ajudar você a agendar um compromisso. Que data funciona melhor para você?",
    "customer_phone": "+1234567890",
    "customer_name": null,
    "sender": {
      "phone_number": "+19876543210",
      "display_name": "Minha Empresa"
    },
    "created_at": "2026-02-23T14:00:00+01:00",
    "ended_at": "2026-02-23T14:25:00+01:00"
  }
  ```
</ResponseExample>

## Comportamento de Tentativa

Se seu endpoint de webhook retornar um código de status não-2xx ou a requisição falhar, o sistema tentará novamente:

| Tentativa    | Atraso       |
| ------------ | ------------ |
| 1ª tentativa | 30 segundos  |
| 2ª tentativa | 60 segundos  |
| 3ª tentativa | 120 segundos |

Após 3 tentativas falharam, a entrega do webhook é marcada como falhou e nenhuma tentativa adicional é feita.

## Notas Importantes

* Os `conversation_id` e `assistant_id` são UUIDs, não IDs de inteiros
* O campo `sender` é apenas preenchido para conversas WhatsApp — será `null` para conversas de widget web
* O `customer_phone` está disponível apenas para conversas WhatsApp
* O `customer_name` vem de dados de formulário pré-chat ou contexto da conversa
* Timestamps usam o fuso horário configurado do usuário (formato ISO 8601)
* As `extracted_variables` são preenchidas a partir da avaliação do esquema pós-chamada do seu assistente
* As `input_variables` contêm dados de formulários pré-chat (widget web) ou fluxos de automação
