# Outbound Zenvia

Ao habilitar a API de outbound é gerado um endpoint e um token, que serão utilizados para realizar o envio das mensagens de outbound.

![](/files/j6SpW10C2FmFAIr5EUzd)

### Request

**Endpoint:**

**POST** <https://outbound.ms.altubots.com/zenvia/\\><slug>/\<id\_integracao>

**Header:**

* **Content-Type:** "application/json"
* **Authorization:** \<altu token>

```
{
    "destination": "numero_whatsapp_destino",
    "templateId": "id_template",
    "context": {
        "status": "aprovado"
    },
    "fields": {
        "<template_chave_1>": "<template_valor_1>",
        "<template_chave_2>": "<template_valor_2>",
        "...": "...",
        "<template_chave_n>": "<template_valor_n>"
    },
    "externalId": "seu_id_mensagem",
    "restartContact": false | true,
    "inactivityTime": 0
}
```

**Atributos:**

* **destination (obrigatório):** o número de WhatsApp que irá receber a mensagem
* **templateId (obrigatório):** o ID do template
* **context (opcional)**: variáveis que serão salvas no contexto do usuário
* **fields (opcional):** os campos disponíveis para serem usados ​​no template. Este atributo deve ser um objeto com chaves e valores
* **externalId (opcional):** identificador único para a mensagem a ser enviada. Este ID será retornado nos status de envio em seu webhook de status
* **restartContact (opcional):** booleano para resetar as variáveis de contexto do usuário
* **inactivityTime (opcional):** tempo em minutos que deve ser passado desde a última interação do usuário com o assistente para que a mensagem seja enviada. Exemplo: Se o usuário está interagindo ou interagiu com assistente há 1 minuto e o tempo de inatividade necessário para mensagem ser enviada é de 2 minutos ("inactivityTime": 2), a mensagem não seria enviada. Caso a interação tivesse ocorrido 3 minutos atrás, a mensagem seria enviada.

### Exemplo

```
{
    "destination": "35988001234",
    "templateId": "3b9c0955-bdd9-00de-4135-6cfb74f5fb2e",
    "fields": {
        "name": "Maria",
        "value": "R$ 1670,00"
    },
    "externalId": "meu_id_1"
}
```

### Response**s**

{% tabs %}
{% tab title="🟢   200" %}
**OK - Mensagem enviada:**

A mensagem foi enviada corretamente para a Zenvia e será encaminhada para o usuário.Body (exemplo):

```
{
    "status": "pending",
    "external_id": "meu_id_1",
    "message_id": 218,
    "contact_id": 874
}
```

* **status:** status da mensagem enviada
* **external\_id:** ID externo da mensagem enviada
* **message\_id:** ID interno da mensagem enviada
* **contact\_id:** ID do atendimento do usuário
  {% endtab %}

{% tab title="🔴   400" %}
**Bad Request:**&#x20;

Um ou mais parâmetros não estão no formato esperado ou os parâmetros obrigatórios não foram preenchidos. Verifique o formato e a obrigatoriedade de todos os parâmetros durante a requisição.Body (exemplo):

```
{
    "status": "error",
    "message": "Invalid destination!"
}
```

{% endtab %}

{% tab title="🔴   401" %}
**Unauthorized:**&#x20;

Não foi possível autorizar a requisição. Verifique se foi definido corretamente o header **Authorization** com valor **altu token**.Body (exemplo):

```
{
    "status": "error",
    "message": "Unauthorized"
}
```

{% endtab %}

{% tab title="🔴   500" %}
**Internal Server Error:**

Houve um erro durante o envio da mensagem.Body (exemplo):

```
{
  "status": "error",
  "message": "Unexpected error"
}
```

{% endtab %}
{% endtabs %}

## Webhook de Status

Para receber os status de mensagens enviadas pela API de outbound, deve se configurar um webhook de status semelhante ao webhook configurado na criação da integração, com o mesmo passo a passo e com as mesmas opções, ajustando:

* **Tipo do evento:** Selecione a opção **Status** para receber os status de mensagens enviadas para o usuário.
* **URL:** URL usada para receber os status de mensagens enviadas para seus clientes. Consulte a URL na plataforma Zenvia NLU, em **Status de Mensagens** da seção Webhooks

## Opção para Rich Notification - HSM

{% hint style="info" %}
Como enviar outbounds "no-hsm"(ou notification), ou seja, não é um template aprovado, pois é uma funcionalidade que somente é utilizável dentro da sessão de 24h do WhatsApp.
{% endhint %}

### Estrutura - Enviar arquivo

Utilizar o body abaixo usando a mesma API que utiliza para o outbound com template.

{% tabs %}
{% tab title="Modelo" %}

```
{
    "destination": "11999999999",
    "contents": [
        {
            "type": "file",\\tipo do notification
            "fileUrl": "https://file-examples-com.github.io/uploads/2017/04/file_example_MP4_640_3MG.mp4",\\arquivo a ser enviado t
            "fileMimeType": "video/mp4",\\extensão do arquivo enviado
            "fileCaption": "Our pic :)",\\Texto que vai abaixo do vídeo na mensagem
            "fileName": "example.png"\\nome do arquivo enviado - não mudar a extensão
        }
    ]
}
```

{% endtab %}

{% tab title="Visualização" %}
![](/files/-Me_5dui7jWV8h45b2wn)
{% endtab %}
{% endtabs %}

Tamanhos de arquivos:

| **Media** | **Content Type**                                                                 | **Post-Processing Media Size\*** |
| --------- | -------------------------------------------------------------------------------- | -------------------------------- |
| document  | Any valid MIME type.                                                             | 100 MB                           |
| image     | <p>image/jpeg</p><p>image/png</p>                                                | 5 MB                             |
| sticker   | <p>image/webp</p><p><strong>note</strong>: Animated sticker is not supported</p> | 100 KB                           |
| audio     |                                                                                  | 16 MB                            |
| video     |                                                                                  | 16 MB                            |

### **Estrutura - Botoes**

Utilizar o body abaixo usando a mesma API que utiliza para o outbound com template.

{% tabs %}
{% tab title="Modelo" %}

```
{
    "destination": "11999999999",
    "contents": [
        {
            "type": "button",
            "header": {\\Header é opcional
                "type": "file",
                "fileUrl": "https://prime.altubots.com/chats/dev/cesar/07db4c9e4559050116d38e660548749a/uploads/3660b5fe-4c62-8979-2619-761f234892bf/20200909165426883_gato.jpg"\\URL do arquivo a ser enviado
            },
            "body": "Gostaria de agendar o seu treinamento sobre a plataforma?",\\texto da pergunta 
            "footer": "Selecione uma das opcões abaixo:",\\Texto mais claro abaixo do texto da pergunta
            "buttons": [\\botoes - limitado a 3 botoes
                {
                    "id": "Agendar",\\Input que chegará no bot
                    "title": "Agendar treinamento"\\Texto exibido no WhatsApp
                },
                {
                    "id": "encerrar",
                    "title": "Encerrar"
                },
                {
                    "id": "reiniciar",
                    "title": "Reiniciar"
                }
            ]
        }
    ]
}
```

{% endtab %}

{% tab title="Visualização" %}
![](/files/-Me_C21hEqEeiMJ-AxcS)
{% endtab %}
{% endtabs %}

## **Estrutura - Lista Modal**

Utilizar o body abaixo usando a mesma API que utiliza para o outbound com template.

{% tabs %}
{% tab title="Modelo" %}

```
{
    "destination": "11999999999",
    "contents": [
        {
            "type": "list",
            "header": "Menu de Opções",\\Texto maior de titulo da lista(opcional)
            "body": "Para finalizar, selecione o módulo do treinamento você deseja fazer?",\\Texto comum de pergunta da lista(requerido)
            "footer": "Selecione abaixo",\\texto mais claro abaixo do texto comum(opcional)
            "button": "Opções disponíveis",\\Texto do botao que abrirá a lista - limitado a 20 caracteres(requerido)
            "sections": [
                {
                    "title": "Section Title",
                    "rows": [\\Classe dos botões - limitados a 10 botoes
                        {
                            "id": "builder",\\texto recebido no bot (requerido)
                            "title": "Builder",\\texto apresentado no WA(requerido)
                            "description": "Aprenda a programar no Build do ALTU"\\texto de descricao da opcao (opcional)
                        },
                        {
                            "id": "nlu",
                            "title": "NLU",
                            "description": "Aprenda a configurar seu NLU de forma assertiva"
                        },
                        {
                            "id": "builder_nlu",
                            "title": "Builder e NLU",
                            "description": "Aprenda a criar um assistente híbrido completo"
                        }
                    ]
                }
            ]
        }
    ]
}
```

{% endtab %}

{% tab title="Visualização" %}
![](/files/-Me_DmegZDEiviKKo3pG)
{% endtab %}
{% endtabs %}

### **Estrutura - Localização**

Utilizar o body abaixo usando a mesma API que utiliza para o outbound com template.

{% tabs %}
{% tab title="Modelo" %}

```
{
    "destination": "11999999999",
    "contents": [
        {
            "type": "location",
            "latitude": -23.54220538772733,
            "longitude": -46.65812552818576,
            "name": "SMARKIO BRASIL",
            "address": "Rua Sergipe, 475 - 5º Andar - Higienópolis, São Paulo - SP, 01243-001",
            "url": "https://www.smarkio.com.br"
        }
    ]
}
```

{% endtab %}

{% tab title="Visualização" %}
![](/files/-Me_EpUgeo9pbqsjgZJH)
{% endtab %}
{% endtabs %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.altu.d1.cx/connect/apis/outbound/zenvia.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
