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

# Webhook de Resposta de Mensagem

> Os webhooks de resposta de mensagem são acionados quando um usuário responde a uma mensagem. Aprenda a configurá-los neste artigo.

## Como funciona?

Quando um usuário responde a uma mensagem, podemos configurar um webhook para que seja acionado e envie uma solicitação HTTP ao seu endpoint configurado no Treble. Este webhook é um dos mais importantes para implementar casos de uso complexos, como a automação de processos ou a integração com outras aplicações.

Por exemplo, você pode configurar um webhook para capturar a resposta de um cliente quando for solicitado seu número de identificação. O Treble enviará uma solicitação HTTP ao seu endpoint configurado no Treble com a resposta do cliente que você pode processar em sua aplicação. Posteriormente, você pode até mesmo retornar informações para a conversa (fluxo) do Treble para exibir informações dinâmicas obtidas pelo seu servidor, ou direcionar a conversa por outro caminho.

### Diagrama de Fluxo do Webhook de Resposta de Mensagem

Neste exemplo, o cliente responde a uma mensagem do WhatsApp com seu número de identificação. O Treble envia uma solicitação HTTP ao seu endpoint configurado no Treble com a resposta do cliente com o número de identificação. Seu servidor a processa e retorna informações ao Treble para continuar a conversa.

<img src="https://mintcdn.com/trebleai/woBrUvSBPp-ldiW5/images/response-1.png?fit=max&auto=format&n=woBrUvSBPp-ldiW5&q=85&s=6f0c110ef3b600bde9c6051f0d7165e2" alt="Diagrama de Fluxo do Webhook de Resposta de Mensagem" width="2338" height="1214" data-path="images/response-1.png" />

```mermaid theme={null}
sequenceDiagram
    participant C as Cliente
    participant W as Webhook
    participant S as Servidor
    participant T as Treble

    C->>T: Responde mensagem do WhatsApp
    T->>W: Webhook acionado com identificação: {resposta_cliente}
    W->>S: Envia solicitação com identificação
    S->>S: Processa o webhook
    alt Usuário existe
        S->>W: Resposta com resp_servidor: usuário autenticado
    else Usuário não existe
        S->>W: Resposta com resp_servidor: usuário não autenticado
    end
    W->>T: Envia dados de volta ao Treble
    alt resp_servidor é usuário autenticado
        T->>T: Continua pelo caminho de usuário autenticado
    else resp_servidor é usuário não autenticado
        T->>T: Continua por outro caminho
    end
```

## Como configurar um webhook de resposta de mensagem?

<Steps>
  <Step title="Entre no Treble.ai">
    Entre no Treble.ai através da seguinte URL: <a class="article-link" href="https://app.treble.ai"><p>[https://app.treble.ai](https://app.treble.ai)</p><Icon icon="arrow-up-right-from-square" iconType="solid" /></a>
  </Step>

  <Step title="Criação de um fluxo">
    Vá para a seção "Conversas" e clique no botão **"Criar Conversa".** Você também pode configurar um webhook de leitura de mensagem em um fluxo existente. Para isso, vá para a seção "Fluxos" e clique no botão **"Editar" <Icon icon="pencil" iconType="solid" />** do seu fluxo.

    <img src="https://mintcdn.com/trebleai/aaCrgms9mLKayuxp/images/create-convo.gif?s=be4cd557da1bfa256303a5628ebc1768" alt="Criar Conversa" width="2686" height="1466" data-path="images/create-convo.gif" />
  </Step>

  <Step title="Adicionar blocos de mensagens">
    Vamos adicionar o primeiro bloco de mensagem. Clique no botão **"Adicionar bloco" <Icon icon="plus" iconType="solid" />**. Neste caso, vamos adicionar um template de mensagem (HSM) previamente criado e aprovado pelo Meta. Depois vamos conectar um bloco simples de mensagem com o bloco de HSM. Aqui vamos perguntar pelo número de identificação do cliente.

    <img src="https://mintcdn.com/trebleai/X3Ys1WzX_gZPA4ia/images/webhook-rd-2.gif?s=b5ff9b6f7fd1f2a56a7de42f5861dcd7" alt="Adicionar um bloco de mensagem" width="1700" height="967" data-path="images/webhook-rd-2.gif" />
  </Step>

  <Step title="Ativar webhook e adicionar endpoint">
    Agora, vamos dar duplo clique na seta <Icon icon="arrow-right" iconType="solid" /> que sai do bloco de mensagem e conecta com o bloco de resposta. Um campo de texto aparecerá na parte superior. Neste campo, vamos adicionar o endpoint para o qual você deseja que a solicitação HTTP seja enviada quando esta mensagem for lida.

    <img src="https://mintcdn.com/trebleai/woBrUvSBPp-ldiW5/images/message-response-1.gif?s=07494da324011276d6140682e9e66b8e" alt="Adicionar um bloco de mensagem" width="2328" height="1338" data-path="images/message-response-1.gif" />
  </Step>

  <Step title="Especificar a variável para capturar a resposta">
    É necessário especificar a variável para capturar a resposta do cliente. Vamos dar duplo clique no bloco de pergunta onde estamos pedindo o número de identificação. No painel que se abre à esquerda, vamos clicar na opção **"Salvar resposta como variável"**. Dois campos vão aparecer:

    * **"Tipo de resposta"**: Aqui você pode escolher o tipo de resposta que deseja capturar. Neste caso, vamos escolher **"Número"**.
    * **"Nome da variável"**: Aqui você pode adicionar o nome da variável que deseja que seja salva. Neste caso, vamos adicionar `id_cliente`.

    <img src="https://mintcdn.com/trebleai/woBrUvSBPp-ldiW5/images/message-response-2.gif?s=e8775e233e58f5aea7d1f2c1de3b9a04" alt="Adicionar um bloco de mensagem" width="2330" height="1340" data-path="images/message-response-2.gif" />

    O uso de variáveis no Treble é um conceito chave para a automação de processos. Você pode ler mais sobre elas em:

    <Card title="Variáveis no Treble" icon="book-open" href="/pt/docs/build-with-treble/features/variables">
      Aprenda mais sobre variáveis no Treble.
    </Card>
  </Step>

  <Step title="Salvar alterações">
    Para que o webhook seja acionado, você deve salvar as alterações. Se você estiver em um fluxo novo, clique no botão **"Publicar Conversa"** para salvar o fluxo. Se você estiver em um fluxo existente, clique no botão **"Salvar"** para salvar as alterações.

    <Check>
      Pronto! Agora, quando alguém responder à sua mensagem, o webhook será acionado e enviará uma solicitação HTTP ao seu endpoint configurado no Treble. O corpo da solicitação vai conter informações do evento de resposta.
    </Check>
  </Step>
</Steps>

<Card title="Corpo do Webhook de Resposta de Mensagem" icon="book-open" href="/pt/api-reference/webhooks/message-response">
  Aprenda mais sobre o corpo do webhook de resposta de mensagem.
</Card>

## Tutorial Avançado - Resposta do seu Servidor

No passo a passo anterior, vimos como configurar um webhook de resposta de mensagem no Treble. Agora, vamos ver como processar a resposta do cliente no seu servidor. Para isso, é necessário que seu servidor tenha um endpoint público ao qual a solicitação HTTP possa ser enviada.

### Passo a Passo

1. **Configure seu servidor:**
   Certifique-se de que seu servidor esteja configurado para receber solicitações HTTP. Você pode usar um framework como Express em Node.js para facilitar este processo.

2. **Crie um endpoint para o webhook:**
   Defina um endpoint em seu servidor que possa receber as solicitações do webhook.

3. **Processe a solicitação:**
   Extraia as informações relevantes da solicitação e realize as ações necessárias, como verificar se o usuário existe.

4. **Envie uma resposta ao Treble:**
   Retorne uma resposta ao Treble com as informações processadas, como o status de autenticação do usuário. A resposta deve ser um JSON com o seguinte formato:

   ```json theme={null}
    {
        "user_session_keys":[
            {
                "key":"servidor_usuario_valid",
                "value":"sim"
            }
        ]
    }
   ```

Os `user_session_keys` é um array de objetos que contém a chave e o valor da resposta. Para este exemplo, a chave deve ser `servidor_usuario_valid` e o valor deve ser `sim` se o usuário existe ou `não` se não existe. No entanto, você pode enviar de volta ao Treble qualquer informação que precise para continuar a conversa. Tal resposta pode conter mais variáveis que podem ser usadas no fluxo.

Exemplo:

```json theme={null}
{
    "user_session_keys":[
        {
            "key":"nome_usuario",
            "value":"João Silva"
        },
        {
            "key":"data_ultima_compra",
            "value":"2025-01-01"
        }
    ]
}
```

### Exemplo de Código

Aqui você tem um exemplo básico de como poderia implementar isso em Node.js:

```javascript theme={null}
const express = require('express');
const app = express();
app.use(express.json());

app.post('/webhook', (req, res) => {
    // Extrai a identificação do usuário dos user_session_keys
    const identificacao = req.body.user_session_keys.find(key => key.key === 'id_cliente')?.value;

    // Simula a verificação do usuário
    const usuarioExiste = verificarUsuario(identificacao);

    // Prepara a resposta para o Treble
    const resp_servidor = usuarioExiste ? 'sim' : 'não';

    // Envia a resposta de volta ao Treble com a estrutura correta
    res.json({
        user_session_keys: [
            {
                key: "servidor_usuario_valid",
                value: resp_servidor
            }
        ]
    });
});

function verificarUsuario(identificacao) {
    // Lógica para verificar se o usuário existe
    // Aqui você pode consultar um banco de dados ou um serviço externo
    return identificacao === '12345'; // Exemplo de verificação
}

app.listen(3000, () => {
    console.log('Servidor escutando na porta 3000');
});
```

5. De volta em sua conversa (fluxo) no Treble, conectamos um bloco de condições para avaliar a resposta do servidor. Note como a variável `servidor_usuario_valid` é uma variável de sessão que é salva no fluxo e é a resposta que é enviada ao servidor. O bloco de condições é um bloco do tipo "Se" e avalia se a variável `servidor_usuario_valid` é igual a `sim`. Se for, continua pelo caminho de usuário autenticado. Se não, continua por outro caminho.

<img src="https://mintcdn.com/trebleai/woBrUvSBPp-ldiW5/images/message-response-3.png?fit=max&auto=format&n=woBrUvSBPp-ldiW5&q=85&s=d2f1c7116a9d840822dcc5b4aefa3624" alt="Adicionar um bloco de mensagem" width="2338" height="1350" data-path="images/message-response-3.png" />

<Check>
  Pronto! Configuramos um webhook de resposta de mensagem no Treble. Agora, quando alguém responder à sua mensagem, o webhook será acionado e enviará uma solicitação HTTP ao seu endpoint configurado no Treble com a resposta do cliente. Seu servidor a processa e retorna informações ao Treble para continuar a conversa.
</Check>

## Tenha em mente

* Você deve configurar o webhook de resposta para cada resposta (seta <Icon icon="arrow-right" iconType="solid" />) que sai de um bloco de mensagem. Se você configurá-lo em uma única resposta ou a primeira, ele será acionado apenas para a primeira resposta.

Na imagem a seguir, você pode ver como deve configurar o webhook de resposta para cada uma das 3 respostas que saem de um bloco de mensagem.

<img src="https://mintcdn.com/trebleai/woBrUvSBPp-ldiW5/images/message-response-4.png?fit=max&auto=format&n=woBrUvSBPp-ldiW5&q=85&s=9af213e498cb1a584a816027f07926e3" alt="Configurar webhook de resposta" width="2310" height="1346" data-path="images/message-response-4.png" />

<Warning>
  A resposta do seu servidor ao webhook não pode durar mais de 10 segundos. Se seu servidor demorar mais de 10 segundos para responder, o webhook será marcado como timeout e a conversa do fluxo no Treble continuará. Você pode estender o tempo de resposta com a opção `[REQUEST_TRIGGER]`. Para mais informações, você pode ler o artigo: <a class="article-link" href="/pt/api-reference/webhooks/request-trigger">Parar conversa do Treble e aguardar resposta do seu servidor</a>.
</Warning>
