> ## 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.

# Robbu Verify

> O Robbu Verify é uma API que permite validar se um número de telefone está ativo no WhatsApp antes de iniciar qualquer interação. <br/> Essa verificação aumenta a assertividade das comunicações, evita tentativas de envio para números inválidos e contribui para a eficiência das integrações. <br/> Para utilizar o serviço, é necessário solicitar a habilitação junto à equipe comercial da Robbu.

## Integração

Para usar a API, você deve realizar uma requisição `POST` para o endpoint `/verify`, enviando um **array de números de telefone** no corpo da requisição.

#### Regras para os números de telefone

* Os números devem ser enviados no formato **DDI + Número de Telefone**.
  * **Exemplo:** `+5511999999999` para um número no Brasil.
* O **array pode conter até 1000 números** por chamada.
* Todos os números devem ser **únicos**, ou seja, **não podem haver repetições** no mesmo array.

#### Regras de concorrência

* Não é permitido realizar chamadas simultâneas para este endpoint utilizando o mesmo PrivateToken.
* Se uma requisição estiver em andamento para um determinado PrivateToken e outra requisição for feita antes da conclusão da primeira, a segunda será bloqueada e retornará o seguinte status HTTP

```
423 Locked
```

#### Base Url

```
https://api.robbu.global/v1/verify
```

#### Autenticação

Para acessar os endpoints da API da Robbu, você precisa autenticar suas requisições utilizando dois tipos de token:

1. PrivateToken: Um token de acesso privado fornecido pela Robbu.
2. Authorization: Um token no formato `Bearer` que valida sua identidade.

Ambos os tokens devem ser incluídos como cabeçalhos na requisição HTTP.

<Tip>Clique <a href="https://inveniocenter.robbu.global/painel/configuracoes/conta" target="_blank">aqui</a> para obter o Private Token do seu ambiente.</Tip>

## Obteção de Tokens

### Token Privado

Para consumir esta API, é necessário possuir o **token privado da conta** configurada no Invenio. Esse token pode ser localizado ao final da página de configurações da conta dentro do Invenio Center.

### **Para localizar as configurações da conta, siga o caminho:**

**Invenio Center → Configurações →  Conta**

[Clique para acessar as Configurações da Conta](https://inveniocenter.robbu.com.br/painel/configuracoes/conta)

![tokens](https://storage.robbu.global/v2/file/1598D047A7945B0306CCC4B0AABB66AA)

### Authorization

Além do token privado, é obrigatória a inclusão de um token de autorização nas requisições.

Esse token de autorização deve ser obtido por meio da API de login e enviado no header da requisição para validação de acesso.

Abaixo estão as instruções para geração do token.

**Endpoint de Login**

Para gerar o token de autorização, realize a autenticação conforme o exemplo abaixo:

Método: POST
URL: [https://api.robbu.global/v1/login](https://api.robbu.global/v1/login)

```json Body theme={null}
{
    "Company": "#####",
    "Username": "#####",
    "Password": "#####"
}
```

**Parâmetros da Requisição**

| **Parâmetro** | **Tipo** | **Obrigatório** | **Descrição**                        | **Exemplo**     |
| ------------- | -------- | --------------- | ------------------------------------ | --------------- |
| `Company`     | `string` | Sim             | Nome da empresa no ambiente Invenio. | `Robbu`         |
| `Username`    | `string` | Sim             | Nome de usuário para autenticação.   | `usuario_teste` |
| `Password`    | `string` | Sim             | Senha associada ao usuário.          | `senha_secreta` |

#### Modelo de Requisição

##### Headers

<ParamField header="PrivateToken" type="string" placeholder="Teste" required="true">
  xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
</ParamField>

<ParamField header="Authentication" type="string" placeholder="Bearer" required="true">
  Bearer TOKEN
</ParamField>

##### Body

<ParamField body="PhoneNumbers" type="array" required>
  Lista de números de telefone para validação. Deve conter no máximo 1000 números, todos no formato **DDI + Número** e sem repetições. | `["+5511941709999", "+5511999999999"]`
</ParamField>

##### Exemplo

<CodeGroup>
  ```bash Curl theme={null}
  curl --location 'https://api.robbu.global/v1/verify' \
  --header 'Content-Type: application/json' \
  --header 'PrivateToken: teste' \
  --header 'Authorization: Bearer TOKEN' \
  --data '{
      "PhoneNumbers": [
          "14128880043",
          "56971332420",
          "17077878069",
          "18176475163",
          "50431999232",
          "51941700660",
          "18057965469",
          "18402846702",
          "15097929172"
      ]
  }
  ```

  ```csharp C# HttpClient theme={null}
  var client = new HttpClient();
  var request = new HttpRequestMessage(HttpMethod.Post, "https://api.robbu.global/v1/verify");
  request.Headers.Add("PrivateToken", "teste");
  request.Headers.Add("Authorization", "Bearer TOKEN");
  var content = new StringContent("{\n    \"PhoneNumbers\": [\n        \"14128880043\",\n        \"56971332420\",\n        \"17077878069\",\n        \"18176475163\",\n        \"50431999232\",\n        \"51941700660\",\n        \"18057965469\",\n        \"18402846702\",\n        \"15097929172\"\n    ]\n}\n", null, "application/json");
  request.Content = content;
  var response = await client.SendAsync(request);
  response.EnsureSuccessStatusCode();
  Console.WriteLine(await response.Content.ReadAsStringAsync());
  ```

  ```js JavaScript XHR theme={null}
  // WARNING: For POST requests, body is set to null by browsers.
  var data = JSON.stringify({
    "PhoneNumbers": [
      "14128880043",
      "56971332420",
      "17077878069",
      "18176475163",
      "50431999232",
      "51941700660",
      "18057965469",
      "18402846702",
      "15097929172"
    ]
  });

  var xhr = new XMLHttpRequest();
  xhr.withCredentials = true;

  xhr.addEventListener("readystatechange", function() {
    if(this.readyState === 4) {
      console.log(this.responseText);
    }
  });

  xhr.open("POST", "https://api.robbu.global/v1/verify");
  xhr.setRequestHeader("Content-Type", "application/json");
  xhr.setRequestHeader("PrivateToken", "teste");
  xhr.setRequestHeader("Authorization", "Bearer TOKEN");

  xhr.send(data);
  ```
</CodeGroup>

```json request.json theme={null}
{
    "PhoneNumbers": [
        "+5511941709999",
        "5511941709999",
        "11941709999",
        "941709999",
        "11999999999"
    ]
}
```

#### Modelo de Resposta

```json response.json theme={null}
{
    "numbersVerified": [
        {
            "exists": true,
            "jid": "551145679999@s.whatsapp.net",
            "name": "Mauricio da Silva",
            "number": "+5511941709999"
        },
        {
            "exists": true,
            "jid": "551145679999@s.whatsapp.net",
            "name": "Joao Teste",
            "number": "5511941709999"
        },
        {
            "exists": false,
            "jid": "119417099990@s.whatsapp.net",
            "number": "11941709999"
        },
        {
            "exists": false,
            "jid": "941709999@s.whatsapp.net",
            "number": "941709999"
        },
        {
            "exists": false,
            "jid": "11999999999@s.whatsapp.net",
            "number": "11999999999"
        }
    ]
}
```

| **Parâmetro**              | **Tipo**  | **Descrição**                                                             | **Exemplo**                      |
| -------------------------- | --------- | ------------------------------------------------------------------------- | -------------------------------- |
| `numbersVerified`          | `array`   | Lista de números verificados contendo os detalhes de cada número enviado. | Ver descrição abaixo             |
| `numbersVerified[].exists` | `boolean` | Indica se o número está ativo no WhatsApp.                                | `true` ou `false`                |
| `numbersVerified[].jid`    | `string`  | Identificador do número no WhatsApp no formato JID (Jabber ID).           | `"5511941709999@s.whatsapp.net"` |
| `numbersVerified[].name`   | `string`  | Nome associado ao número no WhatsApp (caso exista).                       | `"Usuario Teste"`                |
| `numbersVerified[].number` | `string`  | Número de telefone no formato enviado.                                    | `"+5511941709999"`               |

#### HTTP Status Codes

| **Status** | **Descrição**                                                                                     |
| ---------- | ------------------------------------------------------------------------------------------------- |
| `200`      | Sucesso. A requisição foi processada corretamente.                                                |
| `400`      | Erro no request. Verifique os parâmetros enviados na requisição.                                  |
| `401`      | Não autorizado. O token de autenticação é inválido ou está ausente.                               |
| `403`      | Sem permissão. O cliente não possui autorização para acessar este recurso.                        |
| `423`      | Não é permitido realizar chamadas simultâneas para este endpoint utilizando o mesmo PrivateToken. |
| `500`      | Erro interno. Entre em contato com o suporte.                                                     |

## ⁉️ Perguntas Frequentes (FAQ)

<AccordionGroup>
  <Accordion title="O que é o Robbu Verify?">
    O Robbu Verify é um serviço que permite verificar se um número de telefone está ativo no WhatsApp, ideal para sistemas que precisam confirmar a presença no WhatsApp antes de interagir com o usuário.
  </Accordion>

  <Accordion title="Como posso habilitar o Robbu Verify na minha conta?">
    Você precisa entrar em contato com o seu Gerente de Contas da Robbu para ativar o serviço na sua conta.
  </Accordion>

  <Accordion title="Existe algum custo para usar o Robbu Verify?">
    Entre em contato com a equipe comercial da Robbu para detalhes sobre custos e planos disponíveis.
  </Accordion>
</AccordionGroup>
