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

# Exemplos de Webhook de Atributos de Contato Alterados

> Manipule eventos de alteração de atributos de contato.

<Note>Para o catálogo completo derivado do esquema, consulte [todos os exemplos](/pt/api-reference/guides/examples/webhook-examples/webhook-payload-examples).</Note>

## O que é

Manipule eventos de alteração de atributos de contato.

## Antes de começar

* Crie um endpoint HTTPS público na sua aplicação.
* Configure um endpoint de webhook da YCloud para os tipos de evento que você precisa.
* Armazene o segredo de assinatura do endpoint de forma segura.
* Torne o processamento de eventos idempotente.

## Como funciona

A YCloud envia uma requisição HTTP `POST` quando o evento ocorre. Verifique a assinatura, registre o evento de forma durável, retorne uma resposta `2xx` e processe tarefas lentas de forma assíncrona.

## Requisição

Os cenários abaixo mostram requisições entregues à sua URL de webhook. Trate o `id` do evento como o identificador de entrega e use o `type` para rotear a carga útil.

## Resposta

Retorne um status `2xx` após aceitar o evento.

```http theme={"theme":{"light":"github-light","dark":"github-dark"}}
HTTP/1.1 200 OK
```

<Note>Para configuração do endpoint, validação de assinatura e comportamento de repetição, consulte [Configurar webhooks](/pt/api-reference/guides/api-fundamentals/configure-webhooks).</Note>

Ocorre quando os atributos de um contato são modificados. A carga útil do webhook contém informações sobre quais atributos foram alterados, incluindo seus valores antigos e novos.

## Exemplo de Alteração de Tags (Adicionar Tags)

### Requisição

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "id": "evt_1234567892",
  "type": "contact.attributes_changed",
  "apiVersion": "v2",
  "createTime": "2024-01-01T12:00:00.000Z",
  "contactAttributesChanged": {
    "id": "1824266594102064128",
    "updateTime": "2024-01-01T12:00:00.000Z",
    "changedAttributes": {
      "tags": {
        "oldValue": ["premium", "newsletter"],
        "newValue": ["premium", "newsletter", "vip"],
        "extra": [
          {
            "action": "ADDED",
            "id": "686dd294334be8606a5bf312",
            "value": "vip"
          }
        ]
      }
    }
  }
}
```

### Resposta

Confirme o recebimento da entrega após aceitar o evento de forma durável.

```http theme={"theme":{"light":"github-light","dark":"github-dark"}}
HTTP/1.1 200 OK
```

### Explicação

Roteie o evento por `type`, remova duplicatas por `id` e transfira tarefas lentas ou propensas a falhas para um processador assíncrono.

## Exemplo de Alteração de Tags (Remover Tags)

### Requisição

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "id": "evt_1234567893",
  "type": "contact.attributes_changed",
  "apiVersion": "v2",
  "createTime": "2024-01-01T12:00:00.000Z",
  "contactAttributesChanged": {
    "id": "1824266594102064128",
    "updateTime": "2024-01-01T12:00:00.000Z",
    "changedAttributes": {
      "tags": {
        "oldValue": ["premium", "newsletter", "vip"],
        "newValue": ["premium", "newsletter"],
        "extra": [
          {
            "action": "REMOVED",
            "id": "686dd294334be8606a5bf312",
            "value": "vip"
          }
        ]
      }
    }
  }
}
```

### Resposta

Confirme o recebimento da entrega após aceitar o evento de forma durável.

```http theme={"theme":{"light":"github-light","dark":"github-dark"}}
HTTP/1.1 200 OK
```

### Explicação

Roteie o evento por `type`, remova duplicatas por `id` e transfira tarefas lentas ou propensas a falhas para um processador assíncrono.

## Exemplo de Alteração

### Requisição

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "id": "evt_1234567900",
  "type": "contact.attributes_changed",
  "apiVersion": "v2",
  "createTime": "2024-01-01T12:00:00.000Z",
  "contactAttributesChanged": {
    "id": "1824266594102064128",
    "updateTime": "2024-01-01T12:00:00.000Z",
    "changedAttributes": {
      "waba_id": {
        "oldValue": "waba_old_123456",
        "newValue": "waba_new_789012",
        "extra": [
          {
            "action": "CHANGED"
          }
        ]
      }
    }
  }
}
```

### Resposta

Confirme o recebimento da entrega após aceitar o evento de forma durável.

```http theme={"theme":{"light":"github-light","dark":"github-dark"}}
HTTP/1.1 200 OK
```

### Explicação

* **Estrutura Correta**: O objeto `contactAttributesChanged` contém três campos obrigatórios: `id`, `updateTime` e `changedAttributes`.
* **Atributos Alterados**: O campo `changedAttributes` é um objeto onde cada chave é o nome do atributo e o valor é um objeto `ContactAttributeChange`.
* **Configuração de Propriedades de Evento**: Ao habilitar eventos `contact.attributes_changed`, você deve configurar o campo `eventProperties` no seu endpoint de webhook para especificar quais atributos devem ser incluídos na carga útil do webhook.
* **Tipos de Atributos**: Os campos `oldValue` e `newValue` podem conter diferentes tipos de dados:
  * String: valores de texto
  * Number: valores numéricos (inteiro ou decimal)
  * Boolean: valores verdadeiro/falso
  * Array: arrays de strings
  * Object: objetos complexos com propriedades aninhadas
  * Null: quando um atributo é removido ou desmarcado
* **Alterações de Tags**: Para atributos de tag, o campo `extra` fornece informações detalhadas sobre quais tags foram adicionadas ou removidas, incluindo seus IDs e valores.
* **Valores Nulos**: Quando um atributo é removido ou definido como nulo, o `newValue` será `null`. Quando um atributo é adicionado recentemente, o `oldValue` pode ser `null`.
* **Atributos Personalizados**: Atributos personalizados são incluídos no objeto `changedAttributes` da mesma forma que os atributos padrão, com suas chaves personalizadas como os nomes dos atributos.
* **Detecção de Alterações**: Apenas os atributos que realmente foram alterados são incluídos no objeto `changedAttributes`.
* **Campo Extra**: O campo `extra` é opcional e é usado principalmente para alterações relacionadas a tags para fornecer contexto adicional sobre as ações específicas executadas.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.