# Webhook

<Aside type="caution" icon="setting" title="Assistência de desenvolvedor necessária">
 Você precisará da ajuda da sua equipe de desenvolvimento para configurar o elemento Webhook. Compartilhe este guia com eles para começar.
</Aside>

Webhooks permitem que você envie dados da jornada para serviços externos, como sistemas de análise, CRM e ferramentas de marketing. Você pode:

* Notificar sistemas externos quando um cliente realiza uma ação na jornada
* Enviar dados do cliente para ferramentas de análise
* Disparar e-mails, SMS ou WhatsApp de terceiros em eventos específicos da jornada

<Aside type="note">
Confira alguns exemplos de como implementar webhooks para diferentes casos de uso e serviços: [Exemplos de Integração de Webhook](/pt/developer/guides/customer-journey/webhook-samples/)
</Aside>

## Como configurar o elemento Webhook 
### Adicione o elemento Webhook
Arraste e solte o elemento **Webhook** na tela. Posicione o **Webhook** onde desejar, levando em consideração quais informações da jornada você enviará para um serviço de terceiros.

<img src="/journey-elements-README-40.webp" alt="Elemento Webhook na tela com configurações de nome e solicitação"/>

### Nomeie a etapa do Webhook e especifique a URL e o tipo da solicitação
No campo **NOME DA ETAPA**, insira um nome para o webhook. Pode ser útil nomear os webhooks de acordo com os serviços para os quais eles enviam dados ou o caso de uso.

Em seguida, no campo **URL**, especifique a URL da solicitação para a qual os dados devem ser enviados. Ao lado do campo URL, selecione o tipo de solicitação no menu suspenso **TIPO DE SOLICITAÇÃO**: `GET` ou `POST`.
<img src="/journey-elements-webhook-1.webp" alt="Interface de configuração do Webhook mostrando o campo URL e o menu suspenso TIPO DE SOLICITAÇÃO para selecionar o método GET ou POST"/>
### Configure os cabeçalhos
Na seção **CABEÇALHOS**, defina o tipo de conteúdo. 

Por padrão, o tipo de conteúdo é **application/json**. Se o serviço para o qual você está enviando o webhook exigir outro tipo de conteúdo, insira o apropriado no valor do cabeçalho **Content-Type**. 

Exemplos de tipos de conteúdo são:

* `x-www-form-urlencoded`
* `text/plain`
* `text/xml`

Adicione cabeçalhos adicionais, se necessário, clicando em **+ ADICIONAR CABEÇALHO**. Você pode remover qualquer cabeçalho clicando no ícone 'x' ao lado dele.

Por exemplo, algumas APIs podem exigir **autenticação HTTP Basic**. Para autenticar tais solicitações, faça o seguinte:

1. Abra um editor de texto simples e digite seu nome de usuário e senha sem espaços, separados por dois pontos. Por exemplo: `myuser:mypass`
2. Codifique esta string em Base64.
3. Copie a string Base64 resultante (por exemplo, `bXl1c2VyOm15cGFzcw==`).
4. Nas configurações do webhook, adicione um cabeçalho Authorization com o valor: `Basic <SUA STRING BASE64>`. Certifique-se de que há um espaço após a palavra "Basic".

<img src="/journey-elements-webhook-2.webp" alt="Exemplo de cabeçalho de autorização para autenticação Basic nas configurações do webhook, mostrando os cabeçalhos Content-Type e Authorization"/>
### Adicione o corpo da solicitação JSON
Na seção **DADOS**, insira o corpo da sua solicitação JSON. Certifique-se de que o corpo da solicitação esteja no formato JSON correto.

<Aside type="note">
Se não houver valor para o placeholder de Dados Dinâmicos quando a solicitação POST for enviada, o valor nulo será transmitido.
</Aside>

Exemplo:
```
{
  "hwid": "{{device:hwid}}"
}
```



### Use dados dinâmicos e macros

O painel **CONSTRUTOR DE DADOS** permite que você insira informações dinâmicas (como dados de usuário, dispositivo, tag ou evento) diretamente no corpo da sua solicitação JSON. Com os Dados Dinâmicos, você pode incluir valores específicos do usuário individual que está progredindo na jornada.

Para isso: 
1. Selecione uma **categoria**. Você pode extrair dados de três categorias:

- **Dispositivo:** Use dados do Dispositivo quando precisar de informações técnicas vinculadas ao dispositivo do usuário.

- **Tag:** Use dados de Tag quando quiser enviar informações armazenadas no perfil do usuário.

- **Evento:** Use dados de Evento quando o webhook deve enviar valores do evento que acionou a jornada.

2. Selecione um **parâmetro** (por exemplo, HWID, categoria favorita, etc.).
3. O Pushwoosh gera uma macro que se parece com isto:

```
{{tag:Language}}
```

4. Copie a macro e cole-a no corpo do seu JSON na seção DADOS.

Quando o webhook é executado em uma jornada ativa, o Pushwoosh substitui automaticamente a macro pelo valor real para aquele usuário.

<img src="/journey-elements-webhook-3.webp" alt="Inserir placeholders de Dados Dinâmicos no corpo da solicitação do webhook"/>

### Mapeie os dados de resposta do webhook para variáveis

Além de enviar dados, o elemento Webhook também pode capturar dados da resposta que recebe e transformá-los em variáveis. Essas variáveis podem ser usadas posteriormente na jornada. Por exemplo, defina uma tag com [**Atualizar perfil do usuário**](/pt/product/customer-journey/journey-elements/flow-controls/update-user-profile/#use-a-value-from-a-webhook-response), ou agende um [**Atraso de tempo**](/pt/product/customer-journey/journey-elements/flow-controls/time-delay/#use-a-date-from-a-webhook-response) com base em um valor retornado pelo serviço externo. Para um exemplo completo de jornada, veja [Usando dados de resposta de webhook em sua jornada](/pt/product/customer-journey/journey-elements/using-webhook-response-data-in-journeys/).

Na seção **MAPEAMENTO DE RESPOSTA**, clique em **+ ADICIONAR MAPEAMENTO** e preencha dois campos para cada valor que você deseja capturar:

* **Caminho:** a localização do valor dentro do corpo JSON da resposta
* **Atributo:** o nome que você usa para referenciar este valor posteriormente na jornada

<img src="/journey-elements-webhook-4.webp" alt="Seção de mapeamento de resposta com campos de Caminho e Atributo e botão Adicionar mapeamento nas configurações do webhook"/>

Por exemplo, se o seu CRM responder com:

```
{
  "data": {
    "user": {
      "id": "789xyz"
    }
  }
}
```

Defina o **Caminho** como `data.user.id` e o **Atributo** como `crm_user_id` para capturar esse ID.

<Aside type="note">
Algumas coisas a saber sobre o mapeamento:

- O **Caminho** é um caminho simples separado por pontos (chaves de objeto e, para arrays, índices numéricos, por exemplo, `results.0.code`). Ele não suporta curingas ou filtros, então só pode apontar para um valor específico de cada vez.
- Os valores são armazenados exatamente como vêm da resposta JSON (texto, número ou verdadeiro/falso). Não há conversão de tipo. Se você planeja usar um valor como data em um elemento de **Atraso de tempo**, certifique-se de que seu serviço o retorne em um dos formatos de data que o **Atraso de tempo** suporta.
- Se a resposta não for um JSON válido, ou se um **Caminho** não corresponder a nada, a variável correspondente não é criada para aquele usuário. Nenhum erro é exibido, e a etapa do **Webhook** ainda é concluída normalmente.
</Aside>

<Aside type="caution">
Corpos de resposta maiores que 64 KB não são processados para mapeamento. Mantenha a resposta que seu endpoint envia razoavelmente pequena se você planeja mapear valores dela.
</Aside>

<LinkCard title="Usando dados de resposta de webhook em sua jornada" href="/product/customer-journey/journey-elements/using-webhook-response-data-in-journeys/" />

### Teste o Webhook
Clique em **Testar webhook** para verificar se a configuração do seu webhook está correta e se a solicitação é enviada com sucesso.

### Salve sua configuração
Clique em **Aplicar** para salvar a configuração do seu webhook.