# Introdução

## Bem-vindos a AstraApi

A AstraApi foi feita por programadores para programadores, por isso nosso principal objetivo nessa documentação é trazer uma implementação simples e de fácil entendimento.

\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_

## O que é a AstraApi?

Astra API é uma plataforma que oferece uma API RestFul que possibilita que você integre com o seu WhatsApp por meio de uma API simples e extremamente intuitiva.

{% hint style="info" %} <mark style="color:blue;">**Se liga na dica!**</mark>\ <mark style="color:blue;">A AstraApi reitera que não é destinada à prática de SPAM e ao envio de mensagens indesejadas, nem a qualquer ação que viole os termos de serviço do WhatsApp.</mark>

<mark style="color:blue;">Utilize a API com responsabilidade, desenvolvendo recursos que agreguem valor aos seus clientes e aos usuários do WhatsApp.</mark>
{% endhint %}

\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_

## Quem pode utilizar AstraApi?

Não há restrições quanto a utilização, mas normalmente tem dois públicos que utilizam nossos serviços:

* **Desenvolvedores** com conhecimentos em API's RestFul. Se você não é, **mas conhece alguém** com estas competências, já consegue utilizar nossos serviços
* Utilizadores de soluções de terceiros que permitam integração com AstraApi

\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_

## Ok, mas o que pode ser feito com a AstraApi?

Basicamente tudo que você faz com o WhatsApp Web conseguirá fazer utilizando nossos serviços. Basta ler o Qr code e se jogar :smile:.

\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_

## Como funciona nosso fluxo de envio?

* Você envia via API uma mensagem para o AstraApi.
* Te retornamos o id da mensagem em caso de sucesso ou uma mensagem de erro.
* Seu Webhook de delivery é chamado quando a mensagem foi enviada.
* Assim que o destinatário receber a mensagem, o Webhook de message-status é chamado informando **RECEIVED.**
* Por fim quando o destinatário ler a mensagem o messages-status é chamado informando **READ.**

<br>

{% content-ref url="/pages/9fGBfAYn03EHWzZ7NHAX" %}
[Envio/Recebimento de mensagens](/webhooks/envio-recebimento-de-mensagens)
{% endcontent-ref %}


# Instance

### O que é uma instância?

Uma instância é uma conexão a partir de um número de telefone com conta no WhatsApp, que será responsável pela envio e recebimento de mensagens.&#x20;

\
É viável criar diversas instâncias para que você consiga ter múltiplos números de WhatsApp conectados à sua conta. Tecnicamente falando, uma instância nada mais é do que uma máquina virtual (ou container) dentro da nossa infraestrutura de servidores, dedicada a fornecer um ambiente para a conexão do seu número.&#x20;

\
Cada instância possui somente um número, caso seja necessário conectar mais números, será preciso criar mais instâncias. Porém, uma instância não está limitada a um único número, ou seja, você pode desconectar um número e conectar outro na mesma instância. <br>

Para auxiliar você a compreender o funcionamento da AstraApi, nosso serviço opera com base em um Whatsapp Web, e abstraímos os métodos permitindo que você manipule por meio de uma API RestFul. Para uma melhor exemplificação, nos próximos tópicos vamos de maneira organizada ajudar você nos primeiros passos.


# Listar Instancias

Esse endpoint retornará as suas instancias

<mark style="color:blue;">`GET`</mark> `https://api.astraapi.com/api/instance`

#### Headers

| Name                                            | Type   | Description            |
| ----------------------------------------------- | ------ | ---------------------- |
| Authorization<mark style="color:red;">\*</mark> | String | Seu Token de segurança |

{% tabs %}
{% tab title="200: OK Informações da instância" %}

```json
[
{
    "id": 6,
    "connected": true,
    "phone": "557999999999",
    "name": "teste",
    "webhookUrl": "http://google.com"
},
{
    "id": 60,
    "connected": true,
    "phone": "557999999999",
    "name": "teste",
    "webhookUrl": "http://google.com"
}

]
```

{% endtab %}
{% endtabs %}


# Gerar QRCode

É com esse endpoint que você irá realizar a conexão entre seu WhatsApp e a instancia possibilitando o envio e recebimento de mensagens via API.\
\
Como no WhatsApp Web para realizar essa conexão é necessário realizar a leitura de um QrCode

Existem 2 formas que você pode utilizar para realizar esta leitura. São elas:

* Se conectar através do nosso painel de administrador ou
* Disponibilizar a experiência dentro da sua própria aplicação através do método descrito nesta sessão.

Esse endpoint retorna os bytes do QRCode. Você poderá renderizar em um componente do tipo QRCode compatível com sua linguagem de programação.

Caso esteja testando a request e não tenha acesso ao painel, recomendamos o site <https://br.qr-code-generator.com/> basta inserir os bytes e ler o QRCode gerado.

<mark style="color:green;">`POST`</mark> `https://api.astraapi.com/api/connection/{{instanceId}}`

Caso a requisição retorne com sucesso retornará a String dos Bytes, caso contrário uma mensagem de erro

#### Path Parameters

| Name                                         | Type   | Description         |
| -------------------------------------------- | ------ | ------------------- |
| instanceId<mark style="color:red;">\*</mark> | Number | Número da instancia |

#### Headers

| Name                                            | Type   | Description            |
| ----------------------------------------------- | ------ | ---------------------- |
| Authorization<mark style="color:red;">\*</mark> | String | Seu token de segurança |

{% tabs %}
{% tab title="200: OK Bytes" %}
2\@OJWPa5i3uZuKKaVaWasWK11lv0rmeok1NNGkOLXQ8YIHhgboSTCENjLVe6ay3uB+x/+Q8O/b6ibq5w==,TEpA49T/tLsoixbWgJAYBG2WBtRWwN38YxroAhvu2kQ=,Gy3HY9aC3fxFry2AKQkiI0L2ULVxVkyPGYY1QITgVjI=,bq718IIL8fACo1AOQF5nhD5AN8ke/sSiAERaqwMO+Ck=
{% endtab %}
{% endtabs %}


# Pegar informações da Instância

Esse endpoint retornará informações da instancia, mas principalmente se ela está ou não conectada a um número.

<mark style="color:blue;">`GET`</mark> `https://api.astraapi.com/api/connection/{{instanceId}}`

#### Path Parameters

| Name                                         | Type   | Description         |
| -------------------------------------------- | ------ | ------------------- |
| instanceId<mark style="color:red;">\*</mark> | Number | Número da instância |

#### Headers

| Name                                            | Type   | Description            |
| ----------------------------------------------- | ------ | ---------------------- |
| Authorization<mark style="color:red;">\*</mark> | String | Seu Token de segurança |

{% tabs %}
{% tab title="200: OK Informações da instância" %}

```json
{
    "connected": true,
    "phone": "557999999999",
    "name": "teste",
    "webhookUrl": "http://google.com"
}
```

{% endtab %}

{% tab title="404: Not Found Informações da instância" %}

```json
"SESSION_NOT_FOUND"
```

{% endtab %}
{% endtabs %}


# Desconectar Instância

Esse endpoint irá desconectar a instância do número que ela estiver vinculada

<mark style="color:red;">`DELETE`</mark> `https://api.astraapi.com/api/connection/{{instanceId}}`

#### Path Parameters

| Name                                         | Type   | Description     |
| -------------------------------------------- | ------ | --------------- |
| instanceId<mark style="color:red;">\*</mark> | Number | Id da instância |

#### Headers

| Name                                            | Type   | Description            |
| ----------------------------------------------- | ------ | ---------------------- |
| Authorization<mark style="color:red;">\*</mark> | String | Seu token de segurança |

{% tabs %}
{% tab title="200: OK " %}

{% endtab %}
{% endtabs %}


# Atualizar url de webhook

Cada instância possui uma URL de webhook para receber notificações sobre a instância e atividades executadas, é viável modificar essa URL de webhook nessa rota.

### Exemplo de body a ser enviado

```json
{
    "url": "https://google.com"
}
```

<mark style="color:green;">`POST`</mark> `https://api.astraapi.com/api/instance/webhook/{{instanceId}}`

#### Path Parameters

| Name                                         | Type   | Description     |
| -------------------------------------------- | ------ | --------------- |
| instanceId<mark style="color:red;">\*</mark> | Number | id da instancia |

#### Headers

| Name                                            | Type   | Description            |
| ----------------------------------------------- | ------ | ---------------------- |
| Authorization<mark style="color:red;">\*</mark> | String | Seu token de segurança |

#### Request Body

| Name                                  | Type   | Description    |
| ------------------------------------- | ------ | -------------- |
| url<mark style="color:red;">\*</mark> | String | Url do webhook |

{% tabs %}
{% tab title="200: OK " %}

{% endtab %}
{% endtabs %}


# Mensagens

Para o WhatsApp tanto os contatos como os grupos são tratados como "chats", então na hora do envio os dos são tratados como iguais. Ou seja os mesmos métodos que voce vai utilizar para enviar para conversas privadas você vai utilizar para enviar também para grupos.\
\
O que vai diferenciar se o envio é para uma conversa privada ou para um grupo é que para grupos você vai enviar o id do grupo dessa forma "<mark style="color:green;">**<120363029431518951@g.us>**</mark>", e para conversas privadas você vai usar o número do contato dessa forma "<mark style="color:green;">**<5579999999999@s.whatsapp.net>**</mark>".


# Mensagem de texto

Permite enviar uma mensagem de texto simples para um número que tenha WhatsApp.

### Sobre textos

Neste endpoint você poderá enviar textos simples mas, você pode incrementá-los utilizando a formatação de texto e emojis, por exemplo. Caso você ainda não saiba como fazer isso, clique nos links abaixo e siga as instruções:

* Se você precisar usar emojis pode usar esse link <https://getemoji.com/>
* Para saber como formata fontes no WhatsApp [Clique Aqui](https://faq.whatsapp.com/539178204879377/?locale=pt_BR)
* Importante destacar mas caso a mensagem tenha um link ele só ficará clicável caso o destinatário já tenha seu telefone nos contatos, ou se o mesmo iniciar uma conversa com você.

<figure><img src="https://2903885385-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FQBZfML65wCNYTfm6Z1yV%2Fuploads%2FIVYmRPsSBFBUuF3xgoqH%2Ftexto%20simples.jpeg?alt=media&amp;token=c5d82f61-9768-4a36-b6cb-89d0cd840dca" alt=""><figcaption></figcaption></figure>

### Exemplo de body a ser enviado

```json
{
    "text": "Hello World 🌎",
    "phone": "557999999999@s.whatsapp.net"
}
```

## Irá retornar o id da mensagem

<mark style="color:green;">`POST`</mark> `https://api.astraapi.com/api/message/send/text/{{instanceId}}`

#### Path Parameters

| Name                                         | Type   | Description     |
| -------------------------------------------- | ------ | --------------- |
| instanceId<mark style="color:red;">\*</mark> | Number | id da instancia |

#### Headers

| Name                                            | Type   | Description            |
| ----------------------------------------------- | ------ | ---------------------- |
| Authorization<mark style="color:red;">\*</mark> | String | Seu token de segurança |

#### Request Body

| Name                                   | Type   | Description                               |
| -------------------------------------- | ------ | ----------------------------------------- |
| text<mark style="color:red;">\*</mark> | String | texto a ser enviado                       |
| phone                                  | String | telefone ou grupo que vai receber a media |

{% tabs %}
{% tab title="200: OK id da mensagem" %}

```json
{
    "id": "BAE5426A378EF278"
}
```

{% endtab %}
{% endtabs %}


# Responder uma mensagem

Permite responder uma mensagem.

<figure><img src="https://2903885385-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FQBZfML65wCNYTfm6Z1yV%2Fuploads%2FFzYc4rv16VECMCYoCC34%2Fresposta.jpeg?alt=media&amp;token=51f490a6-fd18-4f1b-bbe5-40825ee9ad6c" alt=""><figcaption></figcaption></figure>

### Exemplo de body a ser enviado

```json
{
    "text": "respondendo",
    "phone": "557999070094@s.whatsapp.net",
    "messageId": "BFF7AC940E5B2147A86263AD2365F4CD",
    "fromMe": true,
    "type": "location"
}
```

## Irá retornar o id da mensagem

<mark style="color:green;">`POST`</mark> `https://api.astraapi.com/api/message/send/reply/{{instanceId}}`

#### Path Parameters

| Name                                         | Type   | Description     |
| -------------------------------------------- | ------ | --------------- |
| instanceId<mark style="color:red;">\*</mark> | Number | id da instancia |

#### Headers

| Name                                            | Type   | Description            |
| ----------------------------------------------- | ------ | ---------------------- |
| Authorization<mark style="color:red;">\*</mark> | String | Seu token de segurança |

#### Request Body

| Name                                        | Type    | Description                                                                                  |
| ------------------------------------------- | ------- | -------------------------------------------------------------------------------------------- |
| text<mark style="color:red;">\*</mark>      | String  | Texto a ser enviado como resposta da mensagem                                                |
| phone                                       | String  | telefone ou grupo que vai receber a media                                                    |
| messageId<mark style="color:red;">\*</mark> | String  | Id da mensagem que voce irá responder                                                        |
| fromMe<mark style="color:red;">\*</mark>    | Boolean | Campo que indica se a mensagem a ser respondida foi enviada pelo seu WhatsApp ou não         |
| type<mark style="color:red;">\*</mark>      | String  | Tipo da mensagem a ser respondida (location,audio,document,video,image,contact,buttons,text) |

{% tabs %}
{% tab title="200: OK id da mensagem" %}

```json
{
    "id": "BAE5426A378EF278"
}
```

{% endtab %}
{% endtabs %}


# Mensagem de media

Permite enviar uma media para um número que tenha WhatsApp

Permite enviar qualquer tipo de media como image, video, pdf.

<figure><img src="https://2903885385-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FQBZfML65wCNYTfm6Z1yV%2Fuploads%2FeiRJykgYojX3t422Hvap%2Fimagem.jpeg?alt=media&amp;token=faee324e-3e29-40e5-b936-e999c2ae880e" alt=""><figcaption></figcaption></figure>

### Exemplo de body a ser enviado

```json
{
    "caption": "test",
    "phone": "5579999999@s.whatsapp.net",
    "url": "https://www.tecnologiaefloresta.com.br/imagens/uploads/2016/06/floresta-no-outono.jpg",
    "gif": false,
    "mediaType": "image"
}
```

<mark style="color:green;">`POST`</mark> `https://api.astraapi.com/api/message/send/url/{{instanceId}}`

#### Path Parameters

| Name                                         | Type   | Description     |
| -------------------------------------------- | ------ | --------------- |
| instanceId<mark style="color:red;">\*</mark> | Number | id da instancia |
|                                              | String |                 |

#### Headers

| Name                                            | Type   | Description            |
| ----------------------------------------------- | ------ | ---------------------- |
| Authorization<mark style="color:red;">\*</mark> | String | Seu token de segurança |

#### Request Body

| Name                                      | Type    | Description                                                                                                                                         |
| ----------------------------------------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
| caption<mark style="color:red;">\*</mark> | String  | Legenda da media                                                                                                                                    |
| phone<mark style="color:red;">\*</mark>   | String  | telefone ou grupo que vai receber a media                                                                                                           |
| url<mark style="color:red;">\*</mark>     | String  | link da media                                                                                                                                       |
| gif                                       | Boolean | No caso de vídeos se for passado true nesse campo ele será enviado como gif                                                                         |
| mediaType                                 | String  | <p>Tipo da media (image,video,audio, document.<br>Esse parâmetro é opcional, caso nao seja passado o tipo da media será captado com base na url</p> |

{% tabs %}
{% tab title="200: OK id da mensagem" %}

```json
{
    "id": "BAE5426A378EF278"
}
```

{% endtab %}
{% endtabs %}


# Mensagem de localização

Permite enviar uma mensagem de localização para qualquer número que tenha WhatsApp

<figure><img src="https://2903885385-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FQBZfML65wCNYTfm6Z1yV%2Fuploads%2Fywhca2Efkzv1QGkr7Ml3%2FLocalizacao.jpeg?alt=media&amp;token=8f8c84de-08ab-46e8-8b6e-710d3a368f5b" alt=""><figcaption></figcaption></figure>

### Exemplo de body a ser enviado

```json
{
    "phone": "557999999999@s.whatsapp.net",
    "degreesLatitude": -10.971348988,
    "degreesLongitude": -37.043178989,
    "address": "Seu endereço"
}
```

<mark style="color:green;">`POST`</mark> `https://api.astraapi.com/api/message/send/location/{{instanceId}}`

#### Path Parameters

| Name                                         | Type   | Description     |
| -------------------------------------------- | ------ | --------------- |
| instanceId<mark style="color:red;">\*</mark> | Number | id da instancia |

#### Headers

| Name                                            | Type   | Description            |
| ----------------------------------------------- | ------ | ---------------------- |
| Authorization<mark style="color:red;">\*</mark> | String | Seu token de segurança |

#### Request Body

| Name                                               | Type   | Description                               |
| -------------------------------------------------- | ------ | ----------------------------------------- |
| phone<mark style="color:red;">\*</mark>            | String | telefone ou grupo que vai receber a media |
| degreesLatitude<mark style="color:red;">\*</mark>  | String | Latitude da localização                   |
| degreesLongitude<mark style="color:red;">\*</mark> | String | Longitude da localização                  |
| address                                            | String | legenda da localização                    |

{% tabs %}
{% tab title="200: OK Id da mensagem" %}

```json
{
    "id": "BAE5D89310AFAE85"
}
```

{% endtab %}
{% endtabs %}


# Reagir a uma mensagem

Permite reagir a uma mensagem em seu WhatsApp

<figure><img src="https://2903885385-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FQBZfML65wCNYTfm6Z1yV%2Fuploads%2F6d6QPXoW5zJYoARDNi2Q%2FReagir.jpeg?alt=media&amp;token=737e91f4-b9f5-4d66-9f4a-6c431bd849f9" alt=""><figcaption></figcaption></figure>

### Exemplo de body a ser enviado

```json
{
    "phone": "557999070094@s.whatsapp.net",
    "text": "👍",
    "fromMe": false,
    "messageId": "BAE5AA6AB01EE50B"
}
```

<mark style="color:green;">`POST`</mark> `https://api.astraapi.com/api/message/send/reaction/{{instanceId}}`

#### Path Parameters

| Name                                         | Type   | Description     |
| -------------------------------------------- | ------ | --------------- |
| instanceId<mark style="color:red;">\*</mark> | Number | id da instancia |

#### Headers

| Name                                            | Type   | Description            |
| ----------------------------------------------- | ------ | ---------------------- |
| Authorization<mark style="color:red;">\*</mark> | String | Seu token de segurança |

#### Request Body

| Name                                        | Type    | Description                                                                          |
| ------------------------------------------- | ------- | ------------------------------------------------------------------------------------ |
| phone<mark style="color:red;">\*</mark>     | String  | telefone ou grupo que vai receber a media                                            |
| fromMe<mark style="color:red;">\*</mark>    | Boolean | Campo que indica se a mensagem a ser respondida foi enviada pelo seu WhatsApp ou não |
| messageId<mark style="color:red;">\*</mark> | String  | id da mensagem que será reagida                                                      |
| text<mark style="color:red;">\*</mark>      | String  | Emoji de reação                                                                      |

{% tabs %}
{% tab title="200: OK Id da mensagem" %}

```json
{
    "id": "BAE5D89310AFAE85"
}
```

{% endtab %}
{% endtabs %}


# Mensagem de contato

Permite enviar uma mensagem de contato para um número que tenha WhatsApp

<figure><img src="https://2903885385-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FQBZfML65wCNYTfm6Z1yV%2Fuploads%2FCoVqTCPF7AuDUFjHcHY5%2FContato.jpeg?alt=media&amp;token=82a1459d-7f03-4954-a6d9-3b31e0d52e3e" alt=""><figcaption></figcaption></figure>

### Exemplo de body a ser enviado

```json
{
    "phone": "557999070094@s.whatsapp.net",
    "contacts": [
        {
            "displayName": "contato1",
            "phone":"55799999988"
        },
        {
            "displayName": "contato2",
            "phone":"5579999999"
        }
    ]
}
```

<mark style="color:green;">`POST`</mark> `https://api.astraapi.com/api/message/send/contacts/{{instanceId}}`

#### Path Parameters

| Name                                         | Type   | Description     |
| -------------------------------------------- | ------ | --------------- |
| instanceId<mark style="color:red;">\*</mark> | Number | id da instancia |

#### Headers

| Name                                            | Type   | Description            |
| ----------------------------------------------- | ------ | ---------------------- |
| Authorization<mark style="color:red;">\*</mark> | String | Seu token de segurança |

#### Request Body

| Name                                       | Type      | Description                                                                                          |
| ------------------------------------------ | --------- | ---------------------------------------------------------------------------------------------------- |
| phone<mark style="color:red;">\*</mark>    | String    | telefone ou grupo que vai receber a media                                                            |
| contacts<mark style="color:red;">\*</mark> | Object\[] | Um array de objetos que contem "displayName" que seria o nome do contato e "phone" o número do mesmo |

{% tabs %}
{% tab title="200: OK Id da mensagem" %}

```json
{
    "id": "BAE5D89310AFAE85"
}
```

{% endtab %}
{% endtabs %}


# Deletar uma mensagem

Permite deletar tanto uma mensagem que enviou quanto uma mensagem enviada por um contato, para utilizar este recurso você só vai precisar do messageId da mensagem que quer apagar

<mark style="color:red;">`DELETE`</mark> `https://api.astraapi.com/api/message/{{instanceId}}/{{messageId}}`

#### Path Parameters

| Name                                         | Type   | Description                     |
| -------------------------------------------- | ------ | ------------------------------- |
| instanceId<mark style="color:red;">\*</mark> | Number | id da instancia                 |
| messageId<mark style="color:red;">\*</mark>  | String | id da mensagem que será apagada |

#### Query Parameters

| Name                                    | Type   | Description                                                                                |
| --------------------------------------- | ------ | ------------------------------------------------------------------------------------------ |
| phone<mark style="color:red;">\*</mark> | String | telefone ou grupo que referente ao chat que será deletada a mensagem com o @s.whatsapp.net |

{% tabs %}
{% tab title="200: OK " %}

{% endtab %}
{% endtabs %}


# Grupos

Conforme mencionado anteriormente para o Whatsatpp, tudo é uma conversa. Portanto, um grupo pode ser considerado como uma conversa coletiva, e todas as mensagens que você envia ou recebe em uma conversa individual podem ser enviadas ou recebidas em grupos também. Cada grupo possui um ID/Número que consiste no número de telefone do criador concatenado com um registro de data e hora, algo semelhante a "5511999999999-162327528". Esse ID/Número é o que você usará como destino ao enviar mensagens para os grupos. Para obter esse ID/Número, utilize o método get/chats.


# Criar grupo

{% hint style="info" %}
Assim como no Whatsapp Web você vai precisar adicionar ao menos um contato para conseguir criar um grupo.
{% endhint %}

### Exemplo de body a ser enviado

```json
{
    "name": "teste",
    "participants": ["557999070094@s.whatsapp.net", "557998416831@s.whatsapp.net"]
}
```

{% hint style="danger" %} <mark style="color:red;">Você não deve passar o número conectado a</mark> <mark style="color:red;"></mark><mark style="color:red;">**astraApi**</mark> <mark style="color:red;"></mark><mark style="color:red;">que é responsável pela criação do grupo no array de números que vão compor o grupo.</mark>
{% endhint %}

<mark style="color:green;">`POST`</mark> `https://api.astraapi.com/api/group/{{instanceId}}`

#### Path Parameters

| Name                                         | Type   | Description         |
| -------------------------------------------- | ------ | ------------------- |
| instanceId<mark style="color:red;">\*</mark> | Number | Número da instancia |

#### Headers

| Name                                            | Type   | Description            |
| ----------------------------------------------- | ------ | ---------------------- |
| Authorization<mark style="color:red;">\*</mark> | String | Seu token de segurança |

#### Request Body

| Name                                   | Type      | Description                     |
| -------------------------------------- | --------- | ------------------------------- |
| name<mark style="color:red;">\*</mark> | String    | Nome do grupo                   |
| participants                           | String\[] | Números dos integrates do grupo |

{% tabs %}
{% tab title="200: OK Dados do grupo" %}

```json
{
    "id": "120363160697014651@g.us",
    "subject": "teste",
    "subjectOwner": "98989@s.whatsapp.net",
    "subjectTime": 1686709379,
    "size": null,
    "creation": 1686709379,
    "owner": "8989898@s.whatsapp.net",
    "restrict": false,
    "announce": false,
    "participants": [
        {
            "id": "56595959@s.whatsapp.net",
            "admin": "superadmin"
        },
        {
            "id": "5659656@s.whatsapp.net",
            "admin": null
        },
        {
            "id": "8798989@s.whatsapp.net",
            "admin": null
        }
    ]
}
```

{% endtab %}
{% endtabs %}


# Listar grupos

Com esse endpoint você irá listar todos os grupos

<mark style="color:blue;">`GET`</mark> `https://api.astraapi.com/api/group/{{instanceId}}`

#### Path Parameters

| Name                                         | Type   | Description         |
| -------------------------------------------- | ------ | ------------------- |
| instanceId<mark style="color:red;">\*</mark> | Number | id da sua instancia |

#### Headers

| Name          | Type   | Description            |
| ------------- | ------ | ---------------------- |
| Authorization | String | Seu token de segurança |

{% tabs %}
{% tab title="200: OK Lista de grupos" %}

```json
[
    {
        "chatId": "120363029431518951@g.us",
        "chatName": "grupoo",
        "unreadCount": 12,// quantidade de mensagens não lidas
        "unreadMentionCount": 0// quantidade de mensagens de marcação não lidas
    },
    {
        "chatId": "120363029431518951@g.us",
        "chatName": "GRUPO TESTE",
        "unreadCount": 0,
        "unreadMentionCount": 0
    }
]
```

{% endtab %}
{% endtabs %}


# Informações de um grupo

<mark style="color:blue;">`GET`</mark> `https://api.astraapi.com/api/group/info/{{instanceId}}`

#### Path Parameters

| Name                                         | Type   | Description         |
| -------------------------------------------- | ------ | ------------------- |
| instanceId<mark style="color:red;">\*</mark> | Number | Número da instancia |

#### Query Parameters

| Name                                      | Type   | Description |
| ----------------------------------------- | ------ | ----------- |
| groupId<mark style="color:red;">\*</mark> | String | Id do grupo |

#### Headers

| Name                                            | Type   | Description            |
| ----------------------------------------------- | ------ | ---------------------- |
| Authorization<mark style="color:red;">\*</mark> | String | Seu token de segurança |

{% tabs %}
{% tab title="200: OK Dados do grupo" %}

```json
{
    "id": "120363160697014651@g.us",
    "subject": "teste",
    "subjectOwner": "321321@s.whatsapp.net",
    "subjectTime": 1686709379,
    "size": 3,
    "creation": 1686709379,
    "owner": "312312132@s.whatsapp.net",
    "restrict": false,
    "announce": false,
    "participants": [
        {
            "id": "321321@s.whatsapp.net",
            "admin": "superadmin"
        },
        {
            "id": "31212@s.whatsapp.net",
            "admin": null
        },
        {
            "id": "11@s.whatsapp.net",
            "admin": null
        }
    ]
}
```

{% endtab %}
{% endtabs %}


# Sair de um grupo

<mark style="color:red;">`DELETE`</mark> `https://api.astraapi.com/api/group{{instanceId}}`

#### Path Parameters

| Name                                         | Type   | Description         |
| -------------------------------------------- | ------ | ------------------- |
| instanceId<mark style="color:red;">\*</mark> | Number | Número da instancia |

#### Query Parameters

| Name                                      | Type   | Description |
| ----------------------------------------- | ------ | ----------- |
| groupId<mark style="color:red;">\*</mark> | String | Id do grupo |

#### Headers

| Name                                            | Type   | Description            |
| ----------------------------------------------- | ------ | ---------------------- |
| Authorization<mark style="color:red;">\*</mark> | String | Seu token de segurança |

{% tabs %}
{% tab title="200: OK " %}

{% endtab %}
{% endtabs %}


# Editar participantes do grupo

### Exemplo de body a ser enviado

```json
{
    "groupId": "120363044029865382@g.us",
    "participants": ["557998416831@s.whatsapp.net"],
    "action": "add"
}
```

<mark style="color:orange;">`PUT`</mark> `https://api.astraapi.com/api/group/participants/{{instanceId}}`

#### Path Parameters

| Name                                         | Type   | Description         |
| -------------------------------------------- | ------ | ------------------- |
| instanceId<mark style="color:red;">\*</mark> | Number | Número da instancia |

#### Headers

| Name                                            | Type   | Description            |
| ----------------------------------------------- | ------ | ---------------------- |
| Authorization<mark style="color:red;">\*</mark> | String | Seu token de segurança |

#### Request Body

| Name                                           | Type      | Description                                                         |
| ---------------------------------------------- | --------- | ------------------------------------------------------------------- |
| groupId<mark style="color:red;">\*</mark>      | String    | Id do grupo                                                         |
| participants<mark style="color:red;">\*</mark> | String\[] | Números dos integrates do grupo que você deseja editar ou adicionar |
| action                                         | String    | Ação que deseja fazer (add, remove, promote, demote)                |

{% tabs %}
{% tab title="200: OK " %}

{% endtab %}
{% endtabs %}


# Atualizar descrição do grupo

### Exemplo de body a ser enviado

```json
{
    "groupId": "120363046176525911@g.us",
    "description": "aaaa"
}
```

<mark style="color:orange;">`PUT`</mark> `https://api.astraapi.com/api/group/description/{{instanceId}}`

#### Path Parameters

| Name                                         | Type   | Description         |
| -------------------------------------------- | ------ | ------------------- |
| instanceId<mark style="color:red;">\*</mark> | Number | Número da instancia |

#### Headers

| Name                                            | Type   | Description            |
| ----------------------------------------------- | ------ | ---------------------- |
| Authorization<mark style="color:red;">\*</mark> | String | Seu token de segurança |

#### Request Body

| Name                                          | Type   | Description        |
| --------------------------------------------- | ------ | ------------------ |
| groupId<mark style="color:red;">\*</mark>     | String | Id do grupo        |
| description<mark style="color:red;">\*</mark> | String | Descrição do grupo |

{% tabs %}
{% tab title="200: OK " %}

{% endtab %}
{% endtabs %}


# Atualizar nome do grupo

Este método é responsável alterar o nome de um grupo já existente.

### Exemplo de body a ser enviado

```json
{
    "groupId": "120363046176525911@g.us",
    "name": "aaaaa"
}
```

<mark style="color:orange;">`PUT`</mark> `https://api.astraapi.com/api/group/name/{{instanceId}}`

#### Path Parameters

| Name                                         | Type   | Description         |
| -------------------------------------------- | ------ | ------------------- |
| instanceId<mark style="color:red;">\*</mark> | Number | Número da instancia |

#### Headers

| Name                                            | Type   | Description            |
| ----------------------------------------------- | ------ | ---------------------- |
| Authorization<mark style="color:red;">\*</mark> | String | Seu token de segurança |

#### Request Body

| Name                                      | Type   | Description   |
| ----------------------------------------- | ------ | ------------- |
| groupId<mark style="color:red;">\*</mark> | String | Id do grupo   |
| name<mark style="color:red;">\*</mark>    | String | Nome do grupo |

{% tabs %}
{% tab title="200: OK " %}

{% endtab %}
{% endtabs %}


# Editar configuração do grupo

Edita as principais configurações dos grupos, como só admin enviar mensagem ou liberar para todos.

### Exemplo de body a ser enviado

```json
{
    "groupId": "120363046176525911@g.us",
    "setting": "aaaaa"
}
```

<mark style="color:orange;">`PUT`</mark> `https://api.astraapi.com/api/group/setting/{{instanceId}}`

#### Path Parameters

| Name                                         | Type   | Description         |
| -------------------------------------------- | ------ | ------------------- |
| instanceId<mark style="color:red;">\*</mark> | Number | Número da instancia |

#### Headers

| Name                                            | Type   | Description            |
| ----------------------------------------------- | ------ | ---------------------- |
| Authorization<mark style="color:red;">\*</mark> | String | Seu token de segurança |

#### Request Body

| Name                                      | Type   | Description                                                                                                                                                                                                                                                                                                     |
| ----------------------------------------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| groupId<mark style="color:red;">\*</mark> | String | Id do grupo                                                                                                                                                                                                                                                                                                     |
| setting<mark style="color:red;">\*</mark> | String | <p><strong>announcement</strong>: apenas admins podem mandar mensagens<br><strong>not\_announcement</strong>: todos podem mandar mensagem</p><p><strong>unlocked</strong>: todos podem editar as informações do grupo</p><p><strong>locked</strong>: apenas admins podem editar as informações do grupo<br></p> |

{% tabs %}
{% tab title="200: OK " %}

{% endtab %}
{% endtabs %}


# Contatos


# Listar contatos

Com esse endpoint você irá listar os contatos do seu whatsapp

<mark style="color:blue;">`GET`</mark> `https://api.astraapi.com/api/contacts/{{instanceId}}`

#### Path Parameters

| Name                                         | Type   | Description         |
| -------------------------------------------- | ------ | ------------------- |
| instanceId<mark style="color:red;">\*</mark> | Number | id da sua instancia |

#### Headers

| Name          | Type   | Description            |
| ------------- | ------ | ---------------------- |
| Authorization | String | Seu token de segurança |

{% tabs %}
{% tab title="200: OK Lista de contatos" %}

```json
[
    {
        "contactId": "321321321@s.whatsapp.net",
        "contactName": "Biel🏀✨"
    },
    {
        "contactId": "231312@s.whatsapp.net",
        "contactName": "🌚🌝"
    }
]
```

{% endtab %}
{% endtabs %}


# Pegar foto de perfil de um contato

O link retornado nesse endpoint dura 48 horas, após esse período o link é desabilitado pelo próprio WhatsApp.

<mark style="color:blue;">`GET`</mark> `https://api.astraapi.com/api/contacts/profile-picture/{{instanceId}}`

#### Path Parameters

| Name                                         | Type   | Description         |
| -------------------------------------------- | ------ | ------------------- |
| instanceId<mark style="color:red;">\*</mark> | Number | Número da instancia |

#### Query Parameters

| Name                                    | Type   | Description                                     |
| --------------------------------------- | ------ | ----------------------------------------------- |
| phone<mark style="color:red;">\*</mark> | String | Telefone que você deseja pegar a foto de perfil |

#### Headers

| Name                                            | Type   | Description            |
| ----------------------------------------------- | ------ | ---------------------- |
| Authorization<mark style="color:red;">\*</mark> | String | Seu token de segurança |

{% tabs %}
{% tab title="200: OK Url da foto" %}

```json
"google.com/suaurl/issoeumexemplo"
```

{% endtab %}
{% endtabs %}


# Verificar se determinado número tem WhatsApp

<mark style="color:blue;">`GET`</mark> `https://api.astraapi.com/api/contacts/is-on-whatsapp/{{instanceId}}`

#### Path Parameters

| Name                                         | Type   | Description         |
| -------------------------------------------- | ------ | ------------------- |
| instanceId<mark style="color:red;">\*</mark> | Number | Número da instancia |

#### Query Parameters

| Name                                    | Type   | Description                                    |
| --------------------------------------- | ------ | ---------------------------------------------- |
| phone<mark style="color:red;">\*</mark> | String | Telefone que você deseja saber se tem WhatsApp |

#### Headers

| Name                                            | Type   | Description            |
| ----------------------------------------------- | ------ | ---------------------- |
| Authorization<mark style="color:red;">\*</mark> | String | Seu token de segurança |

{% tabs %}
{% tab title="200: OK Se tem WhatsApp ou não" %}

```json
{
    "exists": true,
    "jid": "55799999999@s.whatsapp.net"
}
```

{% endtab %}
{% endtabs %}


# Envio/Recebimento de mensagens

Estamos quase no fim da sua integração, agora falta apenas configurar os webhooks para utilizar da forma que desejar em sua aplicação.

Os webhooks evitamos mexer o máximo possível no conteúdo, para evitar causar qualquer tipo de erro caso o WhatsApp venha a mudar algo. Devido a isso infelizmente existem alguns dados que poderiam estar mais facilmente acessíveis, porém vamos detalhar o máximo possível em nossa documentação para que voce tenha o mínimo de trabalho e nosso suporte sempre estará disponível para dúvidas 😊.

{% hint style="info" %} <mark style="color:blue;">**Se liga na dica!**</mark>

<mark style="color:blue;">No detalhamento dos webhooks alguns dados são repetitivos de um para outro, então para não ficar algo repetitivo vamos aproveitar o ensinamento de um webhook para outro</mark>
{% endhint %}


# Mensagem de texto

### Exemplo de body recebido no webhook

#### Envio via Endpoint

{% code overflow="wrap" fullWidth="false" %}

```json
{
  "event": "MESSAGE", // Webhooks de envio/recebimento de mensagem vem com esse status
  "data": {
    "message": {
      "key": {
        "remoteJid": "557999070094@s.whatsapp.net",//Número da conversa
        "fromMe": true,// Propriedade que indica se a mensagem foi enviada pelo número conectado na instância
        "id": "BAE5A871E8A0A143"// ID da mensagem no WhatsApp
      },
      "message": {
        "extendedTextMessage": {
          "text": "Hello World 🌎" // String da mensagem de texto enviada
        }
      },
      "messageTimestamp": "1686785122",
      "status": "PENDING" // Webhooks de envio de mensagens via endpoint vem com esse status
    },
    "instanceId": 4 // id da instancia que enviou a mensagem
  }
}
```

{% endcode %}

#### Envio via celular

{% code overflow="wrap" fullWidth="false" %}

```json
{
  "event": "MESSAGE",
  "data": {
    "message": {
      "key": {
        "remoteJid": "5799999@s.whatsapp.net",
        "fromMe": true,// Propriedade que indica se a mensagem foi enviada pelo número conectado na instância
        "id": "541AF675B7B0C4C3615D717F969E9FE6"// ID da mensagem no WhatsApp
      },
      "messageTimestamp": 1686785288,
      "pushName": "Amor E Vida",// nome de quem enviou a mensagem
      "status": 2,// Webhooks de envio de mensagens via celular irão chegar com esse status
      "message": {
        "conversation": "Oi" // Diferente do envio via endpoint objeto message virá o campo conversation e não extendedTextMessage.text 
      },
      "verifiedBizName": "Amor E Vida"
    },
    "instanceId": 4
  }
}
```

{% endcode %}

{% hint style="info" %} <mark style="color:blue;">**Se liga na dica!**</mark>\ <mark style="color:blue;">Resumindo para não passar batido as diferenças:</mark>

* <mark style="color:blue;">O envio via endpoint o status da mensagem virá como "PENDING", e se for via celular virá como 2.</mark>
* <mark style="color:blue;">O envio via endpoint o texto da mensagem vem dentro de message.extendedTextMessage.text, já via celular é apenas acessar message.convesation dentro da mensagem. Ou seja quando for uma mensagem de texto recomendamos validar essas duas possibilidades</mark><br>
  {% endhint %}

#### Recebimento

```json5
{
  "event": "MESSAGE",
  "data": {
    "message": {
      "key": {
        "remoteJid": "5595959@s.whatsapp.net",//Número da conversa
        "fromMe": false,// Propriedade que indica se a mensagem foi enviada pelo número conectado na instância
        "id": "3EB0788C1518D8C2422C66"
      },
      "messageTimestamp": 1686786344,
      "pushName": "teste",// nome de quem enviou a mensagem
      "message": {
        "conversation": "Hello World 🌎 de volta",// texto da mensagem
        "messageContextInfo": {
          "deviceListMetadata": {
            "senderKeyHash": "AofW3u2YzeOX8g==",
            "senderTimestamp": "1686702226",
            "recipientKeyHash": "ncAa2ZCPTc5sxA==",
            "recipientTimestamp": "1686681282"
          },
          "deviceListMetadataVersion": 2
        }
      }
    },
    "instanceId": 4
  }
}
```

{% hint style="info" %} <mark style="color:blue;">**Se liga na dica!**</mark>\ <mark style="color:blue;">Como pode ver no recebimento não vem um status, e a mensagem vem em "message.conversations".</mark>
{% endhint %}


# Mensagem de imagem

### Exemplo de body recebido no webhook

#### Envio via Endpoint

{% code overflow="wrap" fullWidth="false" %}

```json
{
  "event": "MESSAGE",
  "data": {
    "message": {
      "key": {
        "remoteJid": "989898@s.whatsapp.net",//Número da conversa
        "fromMe": true,// Propriedade que indica se a mensagem foi enviada pelo número conectado na instância
        "id": "BAE5F030602BE692"// ID da mensagem no WhatsApp
      },
      "message": {
        "imageMessage": {// Os webhooks de imagem vem com esse objeto imageMessage em que dentro dele terá os dados da imagem
          "url": "https://mmg.whatsapp.net/o1/v/t62.7118-24/f1/m231/up-oil-image-9b85b5de-0fd0-49a4-841a-9231c21af1c0?ccb=9-4&oh=01_AdTVNrrt8TBRQoGWiIhL6ROHCrbqXDv98UhQ0zPYCJPGlQ&oe=64B1D3A0&mms3=true",
          "mimetype": "image/jpeg",
          "caption": "test",// legenda da imagem
          "fileSha256": "+9syKedGWLOHb+37S/cNIVxlUd9YAhPuRbJhULHMuvw=",
          "fileLength": "33480",
          "mediaKey": "ykl2XhzrehvYe/YhP21qwansukZC+o3Y+07kS9JRBo4=",
          "fileEncSha256": "4ADL6epx7e/Gz4aPYbip690zN6gApC6aGT6gfRns39g=",
          "directPath": "/o1/v/t62.7118-24/f1/m231/up-oil-image-9b85b5de-0fd0-49a4-841a-9231c21af1c0?ccb=9-4&oh=01_AdTVNrrt8TBRQoGWiIhL6ROHCrbqXDv98UhQ0zPYCJPGlQ&oe=64B1D3A0",
          "mediaKeyTimestamp": "1686788707"
        }
      },
      "messageTimestamp": "1686788707",
      "status": "PENDING"
    },
    "instanceId": 4
  }
}
```

{% endcode %}

{% hint style="warning" %} <mark style="color:orange;">Como os próximos endpoints não tem muita diferença entre o envio via endpoint e o envio via celular, referente ao conteúdo dos webhooks, vamos exemplificar apenas o envio via endpoint</mark>\ <mark style="color:orange;">A principal diferença a partir de agora é referente ao status, que já foi explicado no tópico anterior.</mark>
{% endhint %}

#### Recebimento

{% code overflow="wrap" %}

```json5
{
  "event": "MESSAGE",
  "data": {
    "message": {
      "key": {
        "remoteJid": "56565@s.whatsapp.net",//Número da conversa
        "fromMe": false,// Propriedade que indica se a mensagem foi enviada pelo número conectado na instância
        "id": "0DB9F0453A46CE56C252B3FB7B4D7F98"// ID da mensagem no WhatsApp
      },
      "messageTimestamp": 1686835070,
      "pushName": ".",
      "message": {
        "imageMessage": {
          "url": "https://mmg.whatsapp.net/v/t62.7118-24/29132462_2253688221490425_5616136160390368594_n.enc?ccb=11-4&oh=01_AdRBB8wTsdhCExaMBEWhCrHxrIfrDLPxZOVl8RIKbll-wg&oe=64B1D8A6&mms3=true",
          "mimetype": "image/jpeg",
          "fileSha256": "x37djwWQYh6Fw+ZmJxperOf219PlimVvuFPtb00+r6A=",
          "fileLength": "100568",
          "height": 720,
          "width": 1280,
          "mediaKey": "cXszyJaOpjgWmKVcM0bVa4DYLDCRvPjpJ6bQ4xQRQYQ=",
          "fileEncSha256": "CFq/O+MG8Tjocp8GTFgVaYe5aNhCAtijTWHe7czO6l0=",
          "directPath": "/v/t62.7118-24/29132462_2253688221490425_5616136160390368594_n.enc?ccb=11-4&oh=01_AdRBB8wTsdhCExaMBEWhCrHxrIfrDLPxZOVl8RIKbll-wg&oe=64B1D8A6&_nc_hot=1686835069",
          "mediaKeyTimestamp": "1686788844",
          "jpegThumbnail": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEABsbGxscGx4hIR4qLSgtKj04MzM4PV1CR0JHQl2NWGdYWGdYjX2Xe3N7l33gsJycsOD/2c7Z//////////////8BGxsbGxwbHiEhHiotKC0qPTgzMzg9XUJHQkdCXY1YZ1hYZ1iNfZd7c3uXfeCwnJyw4P/Zztn////////////////CABEIACgASAMBIgACEQEDEQH/xAAvAAADAQEBAQAAAAAAAAAAAAAABAUDAgEGAQEBAQEAAAAAAAAAAAAAAAABAAID/9oADAMBAAIQAxAAAADRZDmw3Xh2mV5196PbabHNVJ4aVflv2fXY1yuNfZWd0R2Xokm4y/0AWcnQNY7AXSgNLAD/xAAjEAACAwACAgICAwAAAAAAAAABAgADEQQSEyEiUQUxMkFh/9oACAEBAAE/AOLfRVWNf2ZzrktKlDOK2WQltH1LSe7Hvkqc9wC0JlBxZ+UuYoK1lVdjj0IdBycc5YJ2/wBhrWw6YKlQ6IYhxZzrwXOTzOWA3AZ4qQNJjOgzrgMWxSB9xThM/cPoy9wlDOhlqWYHb+5QO9oBjqfcA+Q0eyYtYCLgEZOtTkHWz9SrlWBwrjRsetWrGCcodUIljd6qkE45y5ZXxvICZVwOrku4nSsD+cOBp2q9EVDY3Ib6nKAdfkJ4PmCD6n//xAAcEQEAAgMAAwAAAAAAAAAAAAABABECEBIgMUH/2gAIAQIBAT8A11jzq2AEcqJb8DwQYBj61bP/xAAcEQEAAgMAAwAAAAAAAAAAAAABABECEEESITH/2gAIAQMBAT8Ay8uzH5Kb0BFhjb6ZR1gXrsGoq6Z//9k=",
          "contextInfo": {
            "forwardingScore": 1,
            "isForwarded": true
          },
          "scansSidecar": "IJ+qcznx2YYhdMhWomvoSn5475I=",
          "scanLengths": [9961, 90607]
        },
        "messageContextInfo": {
          "deviceListMetadata": {
            "senderKeyHash": "AofW3u2YzeOX8g==",
            "senderTimestamp": "1686702226",
            "recipientKeyHash": "u6WDlitVQhU/aQ==",
            "recipientTimestamp": "1686834621"
          },
          "deviceListMetadataVersion": 2
        }
      },
      "base64": "BASE64 DA IMAGEM"// Base64 referente a imagem para que possa subir em seu sistema.
    },
    "instanceId": 450
  }
}
```

{% endcode %}

{% hint style="info" %} <mark style="color:blue;">**Se liga na dica!**</mark>\ <mark style="color:blue;">Como pode ver no recebimento não vem um status, e a mensagem vem em "message.conversations".</mark>
{% endhint %}


# Mensagem de vídeo

### Exemplo de body recebido no webhook

#### Envio via Endpoint

{% code overflow="wrap" fullWidth="false" %}

```json
{
  "event": "MESSAGE",
  "data": {
    "message": {
      "key": {
        "remoteJid": "9898988@s.whatsapp.net",//Número da conversa
        "fromMe": true,// Propriedade que indica se a mensagem foi enviada pelo número conectado na instância
        "id": "BAE5D8CC3426AF5F"// ID da mensagem no WhatsApp
      },
      "message": {
        "videoMessage": {//Os webhooks de imagem vem com esse objeto videoMessage em que dentro dele terá os dados do video
          "url": "https://mmg.whatsapp.net/v/t62.7161-24/31441937_646759657329704_7227249319509407050_n.enc?ccb=11-4&oh=01_AdQ_4PNPz1vfWtjLm7UjhWVjjNIC_Z3qkLJfQivlJAs5WQ&oe=64B291B7&mms3=true",
          "mimetype": "video/mp4",
          "fileSha256": "Kc2AIm0hk1Q3wrkfrCl65NQAIGl/NUmrbAfjhatY+kw=",
          "fileLength": "10530208",
          "mediaKey": "jOW/WBePddm/C5YL7wJVmacsTyKepdupQq1u4CK2JbU=",
          "gifPlayback": false,
          "fileEncSha256": "esCAlty38o/jaMZU0wD+6/SeUlLdourQ3fpZsFGRIRY=",
          "directPath": "/v/t62.7161-24/31441937_646759657329704_7227249319509407050_n.enc?ccb=11-4&oh=01_AdQ_4PNPz1vfWtjLm7UjhWVjjNIC_Z3qkLJfQivlJAs5WQ&oe=64B291B7",
          "mediaKeyTimestamp": "1686835523"
        }
      },
      "messageTimestamp": "1686835523",
      "status": "PENDING"
    },
    "instanceId": 450
  }
}
```

{% endcode %}

{% hint style="info" %} <mark style="color:blue;">**Se liga na dica!**</mark>\ <mark style="color:blue;">Perceba que a principal diferença entre os webhooks de media é que o objeto da mensagem vem objetos com nomes diferente, imagem é imageMessage, video é videoMessage, audio é audioMessage e assim por diante.</mark>
{% endhint %}

#### Recebimento

{% code overflow="wrap" %}

```json5
{
  "event": "MESSAGE",
  "data": {
    "message": {
      "key": {
        "remoteJid": "65655@s.whatsapp.net",//Número da conversa
        "fromMe": false,// Propriedade que indica se a mensagem foi enviada pelo número conectado na instância
        "id": "E86FAEB880427C03EFB090525E61C119"// ID da mensagem no WhatsApp
      },
      "messageTimestamp": 1686836009,
      "pushName": ".",
      "message": {
        "videoMessage": {
          "url": "https://mmg.whatsapp.net/v/t62.7161-24/21389830_187559220942914_7347361018558331436_n.enc?ccb=11-4&oh=01_AdS2WZ0QpQX0SXM9OpybWm92pBB0DTnlLSYLEnLFBzJOQQ&oe=64B2777B&mms3=true",
          "mimetype": "video/mp4",
          "fileSha256": "fDc+18kqFPcUjthyQ1HL1CqV7/yeseIcIT/KPOpgaKM=",
          "fileLength": "1008037",
          "seconds": 5,
          "mediaKey": "bX6UljmF8wIiVdv/nFDhPAvd7IAyd4QDJq5otShjrzk=",
          "height": 656,
          "width": 368,
          "fileEncSha256": "j8CCicJmJRB7Ri0mmRCIge+O0bmUNaCIvLg/Y28Qdgk=",
          "directPath": "/v/t62.7161-24/21389830_187559220942914_7347361018558331436_n.enc?ccb=11-4&oh=01_AdS2WZ0QpQX0SXM9OpybWm92pBB0DTnlLSYLEnLFBzJOQQ&oe=64B2777B",
          "mediaKeyTimestamp": "1686835930",
          "jpegThumbnail": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEABsbGxscGx4hIR4qLSgtKj04MzM4PV1CR0JHQl2NWGdYWGdYjX2Xe3N7l33gsJycsOD/2c7Z//////////////8BGxsbGxwbHiEhHiotKC0qPTgzMzg9XUJHQkdCXY1YZ1hYZ1iNfZd7c3uXfeCwnJyw4P/Zztn////////////////CABEIAEgAKAMBIgACEQEDEQH/xAAuAAADAQEBAAAAAAAAAAAAAAAAAwQCBQEBAQEBAQAAAAAAAAAAAAAAAAECAAP/2gAMAwEAAhADEAAAAK9YTza5MMohLB25fXRSdeXJwjtlEhzMj0LuN1TeEgUjKW0JevzasSDGBUtAzsA3/8QAJBAAAgICAgEDBQAAAAAAAAAAAQIAEQMhBBIxEyJCFEFSgZH/2gAIAQEAAT8AE0qNUwkHGDOYnqEbg47mzAZny1isTBlISoHAa6jcujXpiEiiLnJsYQBuphBZLjWLmZyzRafx5npEIxrZE4p6Fwwl4G8rPpuI3xmJ0woWbzDy9XUGb3XETugYTu6kgzIMjRWIFETsKnGygcci4XykzcajKKmI5Aomp+4uf8oCDsQ0dGAsmm2sr7oYwisVM7BxrzEf4mD27X+T/8QAGhEAAgIDAAAAAAAAAAAAAAAAAAEQERIgIf/aAAgBAgEBPwBFmTFHJrf/xAAYEQACAwAAAAAAAAAAAAAAAAAQEQAgIf/aAAgBAwEBPwAIKaXf/9k=",
          "streamingSidecar": "sbfrLmvJU5VZdgnUwow8ME+LmMwEFQJzvSHgE0jqBiLBAyff9IxHsJCYLDmOQXZ69yZAqwniShypvUZY3+BmFWkb0wMfHREjz5g8LzFsl2Qf7zhcpIvxB4rlIBaSIHx5hzLqTDva5iISlBTl9svmV1d1/FFooconr+TCebZOG0b5ADvtqxBDlW8TOU92/NuoYOXP+gIiG+JYR1a5tuKyZg=="
        },
        "messageContextInfo": {
          "deviceListMetadata": {
            "senderKeyHash": "AofW3u2YzeOX8g==",
            "senderTimestamp": "1686702226",
            "recipientKeyHash": "u6WDlitVQhU/aQ==",
            "recipientTimestamp": "1686834621"
          },
          "deviceListMetadataVersion": 2
        }
      },
      "base64": "BASE64 DO VIDEO"// Base64 referente ao video para que possa subir em seu sistema.
    },
    "instanceId": 450
  }
}
```

{% endcode %}


# Mensagem de áudio

### Exemplo de body recebido no webhook

#### Envio via Endpoint

{% code overflow="wrap" fullWidth="false" %}

```json
{
  "event": "MESSAGE",
  "data": {
    "message": {
      "key": {
        "remoteJid": "232432423@s.whatsapp.net",//Número da conversa
        "fromMe": true,// Propriedade que indica se a mensagem foi enviada pelo número conectado na instância
        "id": "BAE5BA086F319F6A"// ID da mensagem no WhatsApp
      },
      "message": {
        "audioMessage": {//Os webhooks de audio vem com esse objeto audioMessage em que dentro dele terá os dados do audio
          "url": "https://mmg.whatsapp.net/v/t62.7114-24/18923600_965747904877982_5711315207927072028_n.enc?ccb=11-4&oh=01_AdTreuMRDp75Jr6bAsq0lLPBsW-fIbhSL5w27gMUjrB9nA&oe=64B283DA&mms3=true",
          "mimetype": "audio/ogg; codecs=opus",
          "fileSha256": "ktH5HybDjRc8VuuwoCuITQSGOxTGNl+yQA7R4nRHsvM=",
          "fileLength": "21875",
          "seconds": 3,
          "ptt": true,
          "mediaKey": "yBgQ76mQbcbo9jFE+MIJphxOhooylB/PRLXlNyT3ASU=",
          "fileEncSha256": "NjJlSNmal5YSezJGELB3eHoPT2FjRJ3ERvXAvSoHXGw=",
          "directPath": "/v/t62.7114-24/18923600_965747904877982_5711315207927072028_n.enc?ccb=11-4&oh=01_AdTreuMRDp75Jr6bAsq0lLPBsW-fIbhSL5w27gMUjrB9nA&oe=64B283DA",
          "mediaKeyTimestamp": "1686836709"
        }
      },
      "messageTimestamp": "1686836709",
      "status": "PENDING"
    },
    "instanceId": 450
  }
}
```

{% endcode %}

{% hint style="info" %} <mark style="color:blue;">**Se liga na dica!**</mark>\ <mark style="color:blue;">Perceba que a principal diferença entre os webhooks de media é que o objeto da mensagem vem objetos com nomes diferente, imagem é imageMessage, video é videoMessage, audio é audioMessage e assim por diante.</mark>
{% endhint %}

#### Recebimento

{% code overflow="wrap" %}

```json5
{
  "event": "MESSAGE",
  "data": {
    "message": {
      "key": {
        "remoteJid": "12312312@s.whatsapp.net",//Número da conversa
        "fromMe": false,// Propriedade que indica se a mensagem foi enviada pelo número conectado na instância
        "id": "A21844FB815A105B001E56C48D4E6148"// ID da mensagem no WhatsApp
      },
      "messageTimestamp": 1686837031,
      "pushName": ".",
      "message": {
        "audioMessage": {
          "url": "https://mmg.whatsapp.net/v/t62.7117-24/30680565_6475648872499583_47590381075882851_n.enc?ccb=11-4&oh=01_AdSBGHppoMq6L13g63ZQcJIOFFfKwCiQWMh9x5hP0NuPQg&oe=64B28253&mms3=true",
          "mimetype": "audio/ogg; codecs=opus",
          "fileSha256": "di2JJjbRVsS7VA9a/UAduMTOOP0oo1wHvRlPzk7/ddI=",
          "fileLength": "6628",
          "seconds": 3,
          "ptt": true,
          "mediaKey": "XefODxviKSyIU3clrJQfXTTG2Ua8c0sY9hiXApnoOtw=",
          "fileEncSha256": "GANoL+4fPEWjGS844Tht6S+PVqKDIRHf6pk+DJvwu1Y=",
          "directPath": "/v/t62.7117-24/30680565_6475648872499583_47590381075882851_n.enc?ccb=11-4&oh=01_AdSBGHppoMq6L13g63ZQcJIOFFfKwCiQWMh9x5hP0NuPQg&oe=64B28253",
          "mediaKeyTimestamp": "1686837029",
          "waveform": "AAAlJiQhJjI5OTUzKywwLyosKR8UEhcYEiooJh0gJCMfHx4aISQXFQwJCQwMCAYNGiglHSknJyQbHSouIhUgIA=="
        },
        "messageContextInfo": {
          "deviceListMetadata": {
            "senderKeyHash": "AofW3u2YzeOX8g==",
            "senderTimestamp": "1686702226",
            "recipientKeyHash": "l7l0ggVb98ikLg==",
            "recipientTimestamp": "1686834621"
          },
          "deviceListMetadataVersion": 2
        }
      },
      "base64": "BASE64 DO AUDIO"// Base64 referente ao audio para que possa subir em seu sistema.
    },
    "instanceId": 450
  }
}
```

{% endcode %}


# Mensagem de documento

### Exemplo de body recebido no webhook

#### Envio via Endpoint

{% code overflow="wrap" fullWidth="false" %}

```json
{
  "event": "MESSAGE",
  "data": {
    "message": {
      "key": {
        "remoteJid": "12321@s.whatsapp.net",//Número da conversa
        "fromMe": true,// Propriedade que indica se a mensagem foi enviada pelo número conectado na instância
        "id": "BAE5E7DE9CEDAB94"// ID da mensagem no WhatsApp
      },
      "message": {
        "documentMessage": {//Os webhooks de documento vem com esse objeto documentMessage em que dentro dele terá os dados do documento
          "url": "https://mmg.whatsapp.net/v/t62.7119-24/12147938_637240178463686_5490412204921601116_n.enc?ccb=11-4&oh=01_AdTXuZutA3Vun2iCVQ0Z-aNa03cRVV1ISaSzU2eP9WjMQQ&oe=64B29BB5&mms3=true",
          "mimetype": "application/pdf",
          "fileSha256": "OA3wjjN/68vb5BlMnRbIPS8Of3JmXfGOdmVl8jnk0/c=",
          "fileLength": "157575",
          "mediaKey": "ORvMqz+jI1DK27lM06vy19tqufmig4WNXbBLZ7rqgYE=",
          "fileName": "file",
          "fileEncSha256": "GShqVnSk8fQCRTY1Xpe2/xrCuXsaRZsMjgGDuPyaYPA=",
          "directPath": "/v/t62.7119-24/12147938_637240178463686_5490412204921601116_n.enc?ccb=11-4&oh=01_AdTXuZutA3Vun2iCVQ0Z-aNa03cRVV1ISaSzU2eP9WjMQQ&oe=64B29BB5",
          "mediaKeyTimestamp": "1686837635"
        }
      },
      "messageTimestamp": "1686837635",
      "status": "PENDING"
    },
    "instanceId": 450
  }
}
```

{% endcode %}

{% hint style="info" %} <mark style="color:blue;">**Se liga na dica!**</mark>\ <mark style="color:blue;">Perceba que a principal diferença entre os webhooks de media é que o objeto da mensagem vem objetos com nomes diferente, imagem é imageMessage, video é videoMessage, audio é audioMessage e assim por diante.</mark>
{% endhint %}

#### Recebimento

{% code overflow="wrap" %}

```json5
{
  "event": "MESSAGE",
  "data": {
    "message": {
      "key": {
        "remoteJid": "1321321@s.whatsapp.net",//Número da conversa
        "fromMe": false,// Propriedade que indica se a mensagem foi enviada pelo número conectado na instância
        "id": "A97082DAE07D32CB744B5D0783261420"// ID da mensagem no WhatsApp
      },
      "messageTimestamp": 1686837859,
      "pushName": ".",
      "message": {
        "documentMessage": {
          "url": "https://mmg.whatsapp.net/v/t62.7119-24/34889046_802451707874348_1700986789817026555_n.enc?ccb=11-4&oh=01_AdRqkrHPTuB_6iEHXyRqFhZp4oh9rdAhzmSorCaOT77q4Q&oe=64B2741C&mms3=true",
          "mimetype": "application/pdf",
          "title": "1673291711194.pdf",
          "fileSha256": "WeX5rwlJ3yBRmVYkxrAfjnk8A8zoGCfxCGQHeQa2z4k=",
          "fileLength": "5817",
          "pageCount": 1,
          "mediaKey": "QC+jUxVs5egv8NeOkfN47DgjHCnre/hIfLFOzJMnrMo=",
          "fileName": "1673291711194.pdf",
          "fileEncSha256": "4ernw8rowkU0HjKcPdzGxTljUv9jnq8asDnI1Mn+9Io=",
          "directPath": "/v/t62.7119-24/34889046_802451707874348_1700986789817026555_n.enc?ccb=11-4&oh=01_AdRqkrHPTuB_6iEHXyRqFhZp4oh9rdAhzmSorCaOT77q4Q&oe=64B2741C",
          "mediaKeyTimestamp": "1686769475",
          "thumbnailDirectPath": "/v/t62.36145-24/22559386_204757929187487_2360157085654623539_n.enc?ccb=11-4&oh=01_AdTPKc7DcJv3gAlo4qFMMSZpkfMnfH7REfvJcDtQmPUDQQ&oe=64B28AD3",
          "thumbnailSha256": "+VUJLrOw4b2ZF+ECAUnOHvo5d0uASbvx/6eYEaLhbBY=",
          "thumbnailEncSha256": "p0+zK5YmM3xfzsvrTyL3eNV3smq7K06W+mwQpbsZWnM=",
          "jpegThumbnail": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEABERERESERMVFRMaHBkcGiYjICAjJjoqLSotKjpYN0A3N0A3WE5fTUhNX06MbmJiboyiiIGIosWwsMX46/j///8BERERERIRExUVExocGRwaJiMgICMmOiotKi0qOlg3QDc3QDdYTl9NSE1fToxuYmJujKKIgYiixbCwxfjr+P/////CABEIAGAASgMBIgACEQEDEQH/xAAuAAEAAwEBAQAAAAAAAAAAAAAAAQMEAgUGAQEBAQAAAAAAAAAAAAAAAAAAAQL/2gAMAwEAAhADEAAAAPvEZWtfFWhOHZAAI8z08x1ogSiQACMezMc7KLwAACPO9HEX3ZbywAACqyk64mCrRxJ05F4AAAAAP//EADAQAAEDAgIIBQMFAAAAAAAAAAEAAhEDIQQSEBMgIjEycZEUQVFTYQVioiMkQIGx/9oACAEBAAE/ANFWqKYBNz6SAhjxYav8mofUG+3+TUPqAgfp/k1UcQyqSOB6g/5sVs0bokhpgTCbiGNgVWPmBygkXVPE0HloLKoJ+CsoWULKFlCyhAQ46MSQG34ZSmmg4gB1yLAgKlXdZrXOgeUBNMzYjZHMeg0V3FjS5syGngJK8RicoOd9/sCpYiqWXpvcfWwWtf7LkNgcx6DRXIDZImGm0wg9oBIoG44axybWyEHU3B9wlCqxxgHZHMeg0V2l4ygTLTZDC1coBpk2sDlsmU8S2zQ9o+C1MDgN4nZHMeg0YqMhnhlKpMp1Dka0cPtKGFbb9lf1kIPqAACge4QqVfZPcbA5j0GiuJEAkbpuE1jrTUqGPgoAhwOeobzylMfTa7Nlqf2muzCYI67A5j0GhwlwE+RQNInLrgD6Sg6j7w7p72QclZhI9Sg99jraMeocVNKAdcO6Jotia7e6ml51h3TBbQZkGF4ffzw/jMShhjfnvPmhhonnv8rwu7G/3XhrRD+6OGs2zxA9V4a87/dCwH8b/8QAFBEBAAAAAAAAAAAAAAAAAAAAQP/aAAgBAgEBPwB3/8QAGREBAAIDAAAAAAAAAAAAAAAAAgExABFA/9oACAEDAQE/AICVYijca7f/2Q==",
          "thumbnailHeight": 480,
          "thumbnailWidth": 370
        },
        "messageContextInfo": {
          "deviceListMetadata": {
            "senderKeyHash": "AofW3u2YzeOX8g==",
            "senderTimestamp": "1686702226",
            "recipientKeyHash": "l7l0ggVb98ikLg==",
            "recipientTimestamp": "1686834621"
          },
          "deviceListMetadataVersion": 2
        }
      },
      "base64": "BASE64 DO DOCUMENTO"// Base64 referente ao docuemnto para que possa subir em seu sistema.
    },
    "instanceId": 450
  }
}
```

{% endcode %}


# Mensagem de localização

### Exemplo de body recebido no webhook

#### Envio via Endpoint

{% code overflow="wrap" fullWidth="false" %}

```json
{
  "event": "MESSAGE",
  "data": {
    "message": {
      "key": {
        "remoteJid": "557999070094@s.whatsapp.net",//Número da conversa
        "fromMe": true,// Propriedade que indica se a mensagem foi enviada pelo número conectado na instância
        "id": "BAE584330F0B8E26"// ID da mensagem no WhatsApp
      },
      "message": {
        "locationMessage": {// objeto com os dados da mensagem de localização
          "degreesLatitude": -10.971348988,// latitude da mensagem
          "degreesLongitude": -37.043178989,// longitude da mensagem
          "address": "Seu endereço" //"legenda" da localização
        }
      },
      "messageTimestamp": "1686838304",
      "status": "PENDING"
    },
    "instanceId": 450
  }
}
```

{% endcode %}

#### Recebimento

{% code overflow="wrap" %}

```json5
{
  "event": "MESSAGE",
  "data": {
    "message": {
      "key": {
        "remoteJid": "557999070094@s.whatsapp.net",//Número da conversa
        "fromMe": false,// Propriedade que indica se a mensagem foi enviada pelo número conectado na instância
        "id": "8AC6C91C0CC6F309BC0298AAA663C1FC"// ID da mensagem no WhatsApp
      },
      "messageTimestamp": 1686838393,
      "pushName": ".",
      "message": {
        "locationMessage": {
          "degreesLatitude": -10.9692197,
          "degreesLongitude": -37.0565709,
          "jpegThumbnail": "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"
        },
        "messageContextInfo": {
          "deviceListMetadata": {
            "senderKeyHash": "AofW3u2YzeOX8g==",
            "senderTimestamp": "1686702226",
            "recipientKeyHash": "l7l0ggVb98ikLg==",
            "recipientTimestamp": "1686834621"
          },
          "deviceListMetadataVersion": 2
        }
      }
    },
    "instanceId": 450
  }
}
```

{% endcode %}


# Mensagem de contato

### Exemplo de body recebido no webhook

#### Envio e recebimento

{% code overflow="wrap" fullWidth="false" %}

```json
{
  "event": "MESSAGE",
  "data": {
    "message": {
      "key": {
        "remoteJid": "557999070094@s.whatsapp.net",//Número da conversa
        "fromMe": true,// Propriedade que indica se a mensagem foi enviada pelo número conectado na instância
        "id": "BAE5873ED78F0837"// ID da mensagem no WhatsApp
      },
      "message": {
        "contactMessage": {// objeto com os dados da mensagem de contato
          "displayName": "nome mostrado",// nome do contato
          "vcard": "BEGIN:VCARD\nVERSION:3.0\nFN:nome mostrado\nORG:organização;\nTEL;type=CELL;type=VOICE;waid=911234567890:+91 12345 67890\nEND:VCARD"// vcard é o formato do WhatsApp referente a contatos, basicamente as informações que voce precisa nessa string é "waid=numero" em que vem o número e o nome tambem vem em "\nFN:nome mostrado"
        }
      },
      "messageTimestamp": "1686838585",
      "status": "PENDING"
    },
    "instanceId": 450
  }
}
```

{% endcode %}

{% hint style="warning" %} <mark style="color:orange;">A diferença do body para o webhook de recebimento é que o de recebimento virá com "pushName" que seria o nome no WhatsApp de quem enviou a mensagem. E o Status de "PENDING" que vem no envio via endpoint ou status 2 via celular.</mark>
{% endhint %}

####


# Reação a uma mensagem

### Exemplo de body recebido no webhook

#### Envio e recebimento

{% code overflow="wrap" fullWidth="false" %}

```json
{
  "event": "MESSAGE",
  "data": {
    "message": {
      "key": {
        "remoteJid": "557999070094@s.whatsapp.net",//Número da conversa
        "fromMe": false,// se for recebimento será false e se for voce que enviou será true
        "id": "6351F5DB0597B98F1FC65B0A95720ADF"// ID da mensagem no WhatsApp
      },
      "messageTimestamp": 1686839521,
      "pushName": ".",
      "message": {
        "messageContextInfo": {
          "deviceListMetadata": {
            "senderKeyHash": "AofW3u2YzeOX8g==",
            "senderTimestamp": "1686702226",
            "recipientKeyHash": "l7l0ggVb98ikLg==",
            "recipientTimestamp": "1686834621"
          },
          "deviceListMetadataVersion": 2,
          "messageAddOnDurationInSecs": 0
        },
        "reactionMessage": {// Objeto referente a reação
          "key": {//Objeto referente a mensagem que foi reagida
            "remoteJid": "557999070094@s.whatsapp.net",
            "fromMe": true,
            "id": "BAE5873ED78F0837"
          },
          "text": "🙏🏾",// Emoji utilizado na reação
          "senderTimestampMs": "1686839521528"
        }
      }
    },
    "instanceId": 450
  }
}
```

{% endcode %}

{% hint style="warning" %} <mark style="color:orange;">A diferença do body para o webhook de recebimento é que o de recebimento virá com "pushName" que seria o nome no WhatsApp de quem enviou a mensagem. E o Status de "PENDING" que vem no envio via endpoint ou status 2 via celular.</mark>
{% endhint %}

####


# Responder a uma mensagem

### Exemplo de body recebido no webhook

#### Envio

{% code overflow="wrap" fullWidth="false" %}

```json
{
  "event": "MESSAGE",
  "data": {
    "message": {
      "key": {
        "remoteJid": "2313123@s.whatsapp.net",//Número da conversa
        "fromMe": true,// Propriedade que indica se a mensagem foi enviada pelo número conectado na instância
        "id": "BAE594C32A74989B"// ID da mensagem no WhatsApp
      },
      "message": {
        "extendedTextMessage": {
          "text": "respondendo",// texto da resposta
          "contextInfo": {
            "stanzaId": "BAE5E0D10E27D1E0",// id da mensagem que foi respondida
            "participant": "5511962313225@s.whatsapp.net",
            "quotedMessage": {
              "conversation": ""
            }
          }
        }
      },
      "messageTimestamp": "1686849541",
      "status": "PENDING"
    },
    "instanceId": 450
  }
}
```

{% endcode %}

#### Recebimento

```json
{
  "event": "MESSAGE",
  "data": {
    "message": {
      "key": {
        "remoteJid": "312321@s.whatsapp.net",
        "fromMe": false,// Propriedade que indica se a mensagem foi enviada pelo número conectado na instância
        "id": "4F4B7B2DC3C0125BAF0B56768E270792"
      },
      "messageTimestamp": 1686849644,
      "pushName": ".",
      "message": {
        "extendedTextMessage": {
          "text": "Oi",
          "previewType": "NONE",
          "contextInfo": {
            "stanzaId": "BAE5E0D10E27D1E0",
            "participant": "5511962313225@s.whatsapp.net",
            "quotedMessage": {// objeto com os dados da mensagem que foi respondida
              "conversation": "Hello World 🌎"
            }
          },
          "inviteLinkGroupTypeV2": "DEFAULT"
        },
        "messageContextInfo": {
          "deviceListMetadata": {
            "senderKeyHash": "AofW3u2YzeOX8g==",
            "senderTimestamp": "1686702226",
            "recipientKeyHash": "l7l0ggVb98ikLg==",
            "recipientTimestamp": "1686834621"
          },
          "deviceListMetadataVersion": 2
        }
      }
    },
    "instanceId": 450
  }
}
```

####


# Deletando uma mensagem

### Exemplo de body recebido no webhook

```json
{
  "event": "MESSAGE",
  "data": {
    "message": {
      "key": {
        "remoteJid": "12312312@s.whatsapp.net",//Número da conversa
        "fromMe": false,// Propriedade que indica se a mensagem foi enviada pelo número conectado na instância
        "id": "7AA75892ED32AF201829725CB429C7B4"// ID da mensagem no WhatsApp
      },
      "messageTimestamp": 1686849760,
      "pushName": ".",
      "message": {
        "protocolMessage": {
          "key": {//dados da mensagem que foi deletada
            "remoteJid": "312321123@s.whatsapp.net",
            "fromMe": true,
            "id": "4F4B7B2DC3C0125BAF0B56768E270792"
          },
          "type": "REVOKE"// aqui é o dado que indica que a mensagem foi deletada
        },
        "messageContextInfo": {
          "deviceListMetadata": {
            "senderKeyHash": "AofW3u2YzeOX8g==",
            "senderTimestamp": "1686702226",
            "recipientKeyHash": "l7l0ggVb98ikLg==",
            "recipientTimestamp": "1686834621"
          },
          "deviceListMetadataVersion": 2
        }
      }
    },
    "instanceId": 450
  }
}
```

####


# Status de mensagem

Os status de mensagem basicamente são estágios em que no WhatsApp é tratada. Esses status são recebidos no evento "MESSAGE\_STATUS"

### Quais são os tipos de status?

Basicamente, existem seis status, sendo eles:

* 0 - Esse status indica erro no envio da mensagem, ocorreu algum problema no momento de enviar a mensagem até o contato do WhatsApp.
* 1 - Aguardando envio, que está aguardando o WhatsApp receber a mensagem.
* 2 - O servidor do WhatsApp recebeu a mensagem (**O primeiro** :heavy\_check\_mark: **que aparece no WhatsApp**).
* 3 - A mensagem foi enviada com sucesso para o contato (**O segundo**:heavy\_check\_mark: **que aparece no WhatsApp**).
* 4 - A mensagem foi lida pelo usuário.
* 5 - Apenas para casos de áudio e vídeo, essa propriedade indica que o usuário deu play no áudio ou vídeo, ou seja, além de visualizar ele também abriu o arquivo.

### Exemplo de body&#x20;

```json
{
  "event": "MESSAGE_STATUS",
  "data": {
    "0": {
      "key": {
        "remoteJid": "342423@s.whatsapp.net",//Número da conversa
        "id": "EBFF3531892D6A52EB7D7095E2ECB6DC",// ID da mensagem no WhatsApp
        "fromMe": true// Propriedade que indica se a mensagem foi enviada pelo número 
      },
      "update": {
        "status": 3// é esse status que virá com as numerações informadas acima
      }
    },
    "instanceId": 450
  }
}
```


# Conexão

Finalizando nossa documentação , agradecemos por chegar até aqui , espero que não tenha sido uma jornada muito cansativa :relaxed:.\
\
Nesse evento de conexão tem duas possibilidades, a conexão quando uma instância é conectada a um número, e a desconexão quando o contrário ocorre. Virá em "event" os respectivos tipos "CONNECTED" e "DISCONNECTED"


# Conexão

Esse webhook é enviado toda vez que um número é conectado em uma instancia

### Exemplo de body recebido no webhook

```json
{
  "event": "CONNECTED",// Nesse evento sempre virá essa string
  "data": {
    "connection": "open",
    "instanceId": 450,
    "user": {
      "id": "3213213:14@s.whatsapp.net",
      "name": "Amor E Vida"
    }
  }
}
```

{% hint style="info" %} <mark style="color:blue;">**Se liga na dica!**</mark>\ <mark style="color:blue;">O WhatsApp salva no seu servidor as mensagens mais recentes enviadas , porém dura pouco tempo lá. Então caso tenha enviado mensagens recentemente e conecte o número pode ser que cheguem alguns eventos de Sync de mensagem.</mark>
{% endhint %}


# Desconexão

Esse webhook é enviado toda vez que um número é desconectado de uma instancia

### Exemplo de body recebido no webhook

```json
{
  "event": "DISCONNECTED",// quando é esse tipo de evento virá sempre essa string
  "data": {
    "connection": "close",
    "lastDisconnect": {
      "error": {
        "data": {
          "tag": "stream:error",
          "attrs": {
            "code": "401"
          },
          "content": [
            {
              "tag": "conflict",
              "attrs": {
                "type": "device_removed"
              }
            }
          ]
        },
        "isBoom": true,
        "isServer": false,
        "output": {
          "statusCode": 401,
          "payload": {
            "statusCode": 401,
            "error": "Unauthorized",
            "message": "Stream Errored (conflict)"
          },
          "headers": {}
        }
      },
      "date": "2023-06-15T17:38:50.266Z"
    },
    "instanceId": 450
  }
}
```


