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

# Webhook

> O Webhook é utilizado para receber eventos relacionados aos produtos Positus que pertencem ao workspace.

# Webhook

Para configurar o webhook do workspace acesse: [https://studio.posit.us/workspace/configuracoes](https://studio.posit.us/workspace/configuracoes)

Todo evento entregue ao seu webhook segue o mesmo envelope: um campo `event` com o nome do evento, um objeto `workspace` identificando o workspace de origem e um objeto com o recurso relacionado ao evento (`number`, `template` etc.). A entrega é feita via HTTP `POST`.

**Objeto `workspace`**

| Campo           | Descrição                                                    |
| --------------- | ------------------------------------------------------------ |
| id              | Identificador (UUID) do workspace                            |
| provider        | Provedor do workspace: `{ "id", "name" }`                    |
| type\_workspace | Tipo do workspace: `{ "id", "name" }` (Receptivo / Prospect) |
| name            | Nome do workspace                                            |
| business\_id    | ID do Business Manager na Meta                               |
| waba\_id        | ID da WABA na Meta                                           |

## Classificação de qualidade do número

Receba em seu webhook a qualidade de cada número de WhatsApp afim de manter uma melhor integração com o seu CRM, aumentando assim a qualidade da gestão em seus números.

* Indefinido: ainda não qualificado
* Verde: qualidade alta
* Amarelo: qualidade média
* Vermelho: qualidade baixa

### Eventos de número

| Tipo de Evento                 | Descrição                                                                                                                                                     |
| ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| phone\_number\_status\_update  | Enviado em tempo real sempre que o status, a classificação de qualidade (`quality_rating`) ou o limite de mensagens (`messaging_limit`) do número é alterado. |
| phone\_number\_quality\_update | Enviado durante a sincronização periódica dos números. Utiliza um payload em formato achatado (ver exemplo abaixo).                                           |
| phone\_number\_sync            | Enviado durante a sincronização periódica, refletindo o estado atual do número.                                                                               |

### Status do número

| **Status do número** | Descrição                                                      |
| -------------------- | -------------------------------------------------------------- |
| 1                    | Número aguardando aprovação                                    |
| 2                    | Número aguardando criação do servidor                          |
| 3                    | Número aguardando autenticação do servidor                     |
| 4                    | Número aguardando instalação do servidor                       |
| 5                    | Número aguardando configuração do servidor                     |
| 6                    | Número aguardando ativação                                     |
| 7                    | Número ativo                                                   |
| 8                    | Número inativo                                                 |
| 9                    | Número excluído                                                |
| 10                   | Aguardando migração para Cloud Api                             |
| 11                   | Número aguardando reinicialização do servidor                  |
| 12                   | Número aguardando finalização da ativação por parte do usuário |
| 13                   | Número banido                                                  |
| 14                   | Número aguardando restauração                                  |
| 15                   | Número transferido                                             |

### Status de qualidade (`quality_status`)

| ID | Código    |
| -- | --------- |
| 0  | UNKNOWN   |
| 1  | CONNECTED |
| 2  | FLAGGED   |
| 3  | MIGRATED  |

### Classificação de qualidade (`quality_rating`)

| ID | Descrição da classificação de qualidade |
| -- | --------------------------------------- |
| 0  | UNKNOWN                                 |
| 1  | GREEN                                   |
| 2  | YELLOW                                  |
| 3  | RED                                     |

### Limite de mensagens (`messaging_limit`)

| ID | amount    | formatted\_amount |
| -- | --------- | ----------------- |
| 0  | UNKNOWN   | Unknown           |
| 1  | 1000      | 1.000             |
| 2  | 10000     | 10.000            |
| 3  | 100000    | 100.000           |
| 4  | UNLIMITED | Unlimited         |
| 5  | 50        | 50                |
| 6  | 250       | 250               |
| 7  | 2000      | 2.000             |

### Exemplo de payload — `phone_number_status_update`

```json theme={null}
POST / {
    "event": "phone_number_status_update",
    "workspace": {
        "id": "0baf1974-2ccc-41dd-8659-594da132edd2",
        "provider": {
            "id": 1,
            "name": "Positus V2"
        },
        "type_workspace": {
            "id": 1,
            "name": "Receptivo"
        },
        "name": "Estúdio Rilo",
        "business_id": "857420775150360",
        "waba_id": "1781395745366162"
    },
    "number": {
        "id": "96b3092d-bff9-4f53-bf46-74e5fb126043",
        "business_manager": {
            "business_portfolio_id": "857420775150360",
            "current_limit": 100000,
            "max_daily_conversations_per_business": 100000,
            "max_daily_conversation_per_phone": 1000,
            "max_phone_numbers_per_business": 20,
            "max_phone_numbers_per_waba": 20,
            "quality_rating": "HIGH",
            "throughput_level": "1000_mps"
        },
        "status": {
            "id": 7,
            "description": "Número ativo"
        },
        "quality_status": {
            "id": 1,
            "code": "CONNECTED"
        },
        "quality_rating": {
            "id": 1,
            "code": "GREEN"
        },
        "messaging_limit": {
            "id": 3,
            "amount": 100000,
            "formatted_amount": "100.000"
        },
        "official_business_account": true,
        "name": "Estudio Rilo",
        "country_code": "55",
        "number": "4333385841",
        "display_phone_number": "554333385841"
    }
}
```

### Exemplo de payload — `phone_number_quality_update`

O evento de sincronização utiliza um payload em formato achatado, com os limites do Business Manager no nível do próprio número e `quality_rating` como texto.

```json theme={null}
POST / {
    "event": "phone_number_quality_update",
    "workspace": {
        "id": "0baf1974-2ccc-41dd-8659-594da132edd2",
        "provider": {
            "id": 1,
            "name": "Positus V2"
        },
        "type_workspace": {
            "id": 1,
            "name": "Receptivo"
        },
        "name": "Estúdio Rilo",
        "business_id": "857420775150360",
        "waba_id": "1781395745366162"
    },
    "number": {
        "id": "96b3092d-bff9-4f53-bf46-74e5fb126043",
        "business_portfolio_id": "857420775150360",
        "current_limit": 100000,
        "max_daily_conversations_per_business": 100000,
        "max_daily_conversation_per_phone": 1000,
        "max_phone_numbers_per_business": 20,
        "max_phone_numbers_per_waba": 20,
        "quality_rating": "HIGH",
        "throughput_level": "1000_mps",
        "status": {
            "id": 7,
            "description": "Número ativo"
        },
        "quality_status": {
            "id": 1,
            "code": "CONNECTED"
        },
        "messaging_limit": {
            "id": 3,
            "amount": 100000,
            "formatted_amount": "100.000"
        },
        "official_business_account": true,
        "name": "Estudio Rilo",
        "country_code": "55",
        "number": "4333385841",
        "display_phone_number": "554333385841"
    }
}
```

## Mensagem de template

Receba notificações de aprovação das suas templates de notificações por webhook. O evento `message_template_status_update` é enviado sempre que o status de aprovação de uma template é alterado.

### Status da template

| ID | Código (code)     | Descrição         |
| -- | ----------------- | ----------------- |
| 0  | UNDEFINED         | Indefinido        |
| 1  | PENDING           | Pendente          |
| 2  | APPROVED          | Aprovado          |
| 3  | REJECTED          | Rejeitado         |
| 4  | IN\_APPEAL        | Em recurso        |
| 5  | PENDING\_DELETION | Exclusão pendente |
| 6  | DELETED           | Excluído          |
| 7  | DISABLED          | Desabilitado      |
| 8  | FLAGGED           | Sinalizado        |
| 9  | REINSTATED        | Reinstalado       |
| 10 | PAUSED            | Pausado           |
| 11 | PAUSED            | Pausado           |

### Exemplo de payload — `message_template_status_update`

```json theme={null}
POST / {
    "event": "message_template_status_update",
    "workspace": {
        "id": "93834938-3242-131321-bbb3-123131321",
        "provider": {
            "id": 2,
            "name": "Robbu"
        },
        "type_workspace": {
            "id": 1,
            "name": "Receptivo"
        },
        "name": "Robbu",
        "business_id": "8274562463464",
        "waba_id": "7362e34823764823"
    },
    "template": {
        "id": "us737373736s616-dsf2342-fd23-b324ea8-23423fd13",
        "status": {
            "id": 2,
            "code": "APPROVED",
            "description": "Aprovado"
        },
        "quality_score": {
            "id": 1,
            "code": "GREEN"
        },
        "category": {
            "id": 11,
            "code": "AUTO_REPLY",
            "description": "Resposta automática"
        },
        "language": {
            "id": 46,
            "code": "pt_BR",
            "name": "Portuguese (BR)"
        },
        "name": "abertura_janela_01",
        "components": [{
            "type": "BODY",
            "text": "{{1}}, desculpe a demora para responder sua mensagem. Você quer continuar nossa conversa?"
        }]
    }
}
```
