> For the complete documentation index, see [llms.txt](https://docs.altu.d1.cx/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.altu.d1.cx/connect/apis/eventos.md).

# Eventos

## **Objetivo** <a href="#d21a2652-b522-40c2-a08e-2e37e41d0535" id="d21a2652-b522-40c2-a08e-2e37e41d0535"></a>

&#x20;A API de Eventos permite consultar os eventos disparados nos atendimentos de um determinado Assistente do Zenvia NLU.

## **API de eventos**

Permite consultar os eventos disparados nos atendimentos de um determinado Assistente do Zenvia NLU.

### **Request**

&#x20;**Endpoint:** POST `https://api.altubots.com/events/<instancia>`

**Header:** `x-api-key: <token>`

**Body template:**

```
{
    "filters": {
       "assistantId": "ID do assistente",
       "identifier": "Identificador do contato",
       "contactId": "ID do atendimento",
       "environment": "Ambiente (dev, homol ou prod)",
       "externalId": "ID do sistema externo quando o evento é relativo a uma integração, por exemplo",
       "eventName": "Nome (identificador) do evento",
       "startDate": "Início do período da consulta (Y-M-d H:m:s)",
       "endDate": "Fim do período da consulta (Y-M-d H:m:s)",
       "limit": "Quantidade de resultados por página", //Default: 100 - max: 1000
       "sort": "Define a ordem de retorno sendo ASC|DESC - o padrão é DESC" 
    },
    "pagination": "Hash para consultar a próxima página"
}
```

### Response

### **Status 200 (OK - Eventos encontrados)**

**Body (exemplo):**

```
{
	"events": [
		...
		{
			"id": 13213,
			"assistantId": 1,
			"channel": "whatsapp"
			"contactId": 16267,
			"externalId": null,
			"eventId": 12,
			"eventName": "transbordo",
			"extra1": null,
			"extra2": null,
			"details": {
				"cpf": "12345678909",
				"skill": "assistencia_tecnica"
			},
			"date": "2020-12-04T14:53:11"
		},
		...
	],
	"resultCount": 150,
	"pagination": "Hash para consultar a próxima página"
}
```

&#x20;**Atributos de um evento:**

* **id:** ID único do evento
* **assistantId:** Assistente em que o evento foi gerado
* **channel:** canal do atendimento
* **contactId:** Atendimento em que o evento foi gerado
* **externalId:** ID do sistema externo, caso o evento seja relacionado a uma integração, por exemplo.
* **eventId:** ID do tipo do evento
* **eventName:** Identificador do tipo do evento
* **extra1:** Atributo extra 1.
* **extra2:** Atributo extra 2.
* **details:** Objeto que contém todos os dados referentes ao evento. Esse objeto é flexível e os dados podem variar de evento para evento.
* **date:** Data em que o evento foi disparado (UTC).

### Status code 400 (Bad Request) <a href="#id-7ea508fe-1cf0-4088-aba1-12569f3fb400" id="id-7ea508fe-1cf0-4088-aba1-12569f3fb400"></a>

**Body:**

```
{
	"status": "error",
	"message": "Bad request",
	"invalidParams": [
		...
	]
}
```

### Status code 401 (Unauthorized) <a href="#id-5bfcb2ea-ff80-4541-a8c5-a2d29b8dedce" id="id-5bfcb2ea-ff80-4541-a8c5-a2d29b8dedce"></a>

**Body:**

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

### **Status code 404 (Not Found - Eventos não encontrados)** <a href="#id-26c7fc2b-b285-4146-b25d-104dae4dccf3" id="id-26c7fc2b-b285-4146-b25d-104dae4dccf3"></a>

**Body:**

```
{
	"status": "ok",
	"events": [],
	"resultCount": 0
}
```

### Status code 500 (Internal Server Error) <a href="#f1779128-4626-4125-afa5-baf33e403e9d" id="f1779128-4626-4125-afa5-baf33e403e9d"></a>

**Body:**

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

## &#x20;Observações <a href="#id-77d1fd84-353c-469e-9522-07ce5f3659d8" id="id-77d1fd84-353c-469e-9522-07ce5f3659d8"></a>

* Máximo de resultados por consulta: 1000
  * Utilizar `pagination` para buscar páginas seguintes
* O resultado sempre será ordenado pelos eventos mais recentes
* Os filtros não são obrigatórios. Caso nenhum for passado, o resultado trará os eventos mais recentes da instância
* Limite de 50000 consultas por dia e 10 por segundo

## **Dados dos atendimentos na API de Eventos**

A API de eventos agora tem um campo extra com informações sobre o atendimento:

```
"flags":{
        "includeContactsData": true
    }
```

Por padrão, esse campo recebe o valor de `false`, mas ao incluí-lo na chamada da API o retorno terá um campo com dados como ID, nome, CPF, e-mail e phone atrelados aos eventos.

Exemplo de resposta parcial da api com o campo igual a `true`:

```
{
            "id": 1232,
            "assistantId": 29,
            "contactId": 730,
            "externalId": "ckhzb8v2p003x0un3cs7basdx",
            "eventId": 16,
            "eventName": "saudacoes",
            "extra1": null,
            "extra2": null,
            "details": {
                "mensagem_bot": "ola"
            },
            "date": "2020-12-04T14:53:11",
            "contact": {
                "id": 730,
                "name": null,
                "cpf": null,
                "email": null,
                "phone": null
            }
}
```

{% hint style="info" %}
**Nota:** O campo **`date`** retorna o valor em horário UTC - 3 (Fortaleza).
{% endhint %}

## **API de disparo de eventos**

Permite disparar eventos de api.

![](/files/-MdOwapB868GD34vu7rG)

{% hint style="info" %}
As credenciais a serem usadas são as mesmas que para a api de eventos.
{% endhint %}

Para usar a API, copie o **endpoint** que se encontrará na aba api de disparo de eventos e preencha o **body** com as informações necessárias. Segue um template de exemplo:

```
{
    "assistant_id": <id do assistente>,
    "contact_id": <id do contato>
    "event_name": <nome do evento de api>,
    "extra1": <extra1>,
    "extra2": <extra2>,
    "details": {
           "field1": "<value1>",
           "field2": "<value2>"
       },
    "channel": <channel por onde o atendimento será feito>
}
```

**Atributos:**

* **dcassistant\_id**: id do assistente;
* **contact\_id** **(opcional)**: id do contato (deve ser um id de um contato existente)
* **event\_name**: nome do evento (deve ser Evento de api e deve existir)
* **extra1 (opcional)**;
* **extra2 (opcional)**;
* **details (opcional)**: limite de 1024 caracteres e deve ser um objeto. Qualquer tipo diferente vai ser salvo como {}
* **channel**
  * Se o contact\_id estiver presente, ele se torna opcional
  * Caso não tiver o contact\_id, ele se torna obrigatório
  * Channels aceitos: api, apple, facebook, gbm, rcs, whatsapp, widget, workplace

Na seção de eventos no nó em **builder**, não será possível disparar um evento de apipois ela é reservada apenas para disparo de **evento personalizados**.&#x20;

{% hint style="info" %}
Caso tente utilizar um evento de api, não será disparado e surgirá um **issue** do tipo Evento inválido.
{% endhint %}
