# Integração com APIs de terceiros

Você pode criar bots que interagem com outros recursos por meio de API. Por exemplo, bots podem atender a solicitações com a capacidade de verificar se é possível criar um agendamento para uma determinada data ou encontrar um produto em uma loja online.

## Como lidar com API de terceiros usando o exemplo da DaData

Vamos pegar dicas de API de [https://dadata.ru/api/suggest/address ](https://dadata.ru/api/suggest/address)como exemplo

{% hint style="info" %}
Leia atentamente a documentação das APIs de terceiros
{% endhint %}

Abra seu projeto no Salebot e abra as configurações avançadas nas configurações de um bloco; lá você precisa alterar o tipo de solicitação para POST-json.

No campo “**URL da solicitação**” insira a seguinte URL: h<ttps://suggestions.dadata.ru/suggestions/api/4_1/rs/suggest/address>

No campo “**Cabeçalho da solicitação**” digite o cabeçalho no formato JSON:

{ "Content-Type": "application/json", "Accept": "application/json", "Authorization": "Token " + token }

Em "**Parâmetros JSON**” coloque na própria solicitação - { "query": "#{CurrencyType}" }

Para obter os resultados, você também precisará preencher a aba “**Valores armazenados**”.

Um exemplo da solicitação está abaixo:

![](https://lh3.googleusercontent.com/QV4ldVY9n1AFFCr2jn1NQU_hZe7Iug-Xh5d4KLWtAZNQEyQ9WPLu1mV7mPcFjfjAKaPGO2Wi148J4AAF3kmU0wmhLYwBy6LgDXbFRgteh0Nrtu29LhqSgTg6d14Ts8pvanwWUJQAVTUThYp6Lg)

### Como salvar valores de variáveis

Nem todo mundo entende isso imediatamente, até tentar fazer por conta própria.

Para começar, digite #{custom\_answer} no campo de resposta. (A variável #{custom\_answer} contém a resposta recebida do servidor mencionada no campo “URL para uma resposta do servidor”)

Execute o bloco com a solicitação para enviar a requisição e obter uma resposta. Você precisa analisar a resposta e configurar o acesso às variáveis nela. Para isso, você precisa trabalhar com a aba “Valores armazenados”.

Vamos ver um exemplo para entender melhor o processo.

Como resultado da nossa solicitação #{custom\_answer}, veio uma resposta no formato:

`{"suggestions": [{"value": "Libra esterlina", "unrestricted_value": "Libra esterlina", "data": {"code": "826", "strcode": "GBP", "name": "Libra esterlina", "country": "Reino Unido"}}]}`

Agora vamos escrever no campo “Valores armazenados” nosso VALOR->VARIÁVEL

`suggestions|0|value->CurrencyType;` \
`suggestions|0|data|code->CurrencyDigCode;` \
`suggestions|0|data|strcode->CurrencyStrCode;` \
`suggestions|0|data|country->CurrencyCountry`

**sugestões** - a chave do array \[{"value": "Libra esterlina", "unrestricted\_value": "Libra esterlina", "data": {"code": "826", "strcode": "GBP", "name": "Libra esterlina", "country": "Reino Unido"}}]

**sugestões|0** - a chave do primeiro elemento no array {"value": "Libra esterlina", "unrestricted\_value": "Libra esterlina", "data": {"code": "826", "strcode": "GBP", "name": "Libra esterlina", "country": "Reino Unido"}}

**sugestões|0|value** - a chave para o valor “Libra esterlina”

A chave mais longa neste JSON:

**sugestões|0|data|strcode** - a chave para o valor “GBP”

{% hint style="success" %}
As chaves são separadas pela barra vertical (|). Se houver um array no JSON, então o acesso ao seu elemento é numerado, começando pelo número 0, e também é escrito com a barra vertical.
{% endhint %}

{% hint style="info" %}
É necessário repetir todo o aninhamento. Para facilitar, você pode visualizar o JSON em um app JSON-viewer.
{% endhint %}

Os níveis de aninhamento são separados por barras verticais. Portanto, você precisa listar todas as chaves separadas pela barra para chegar ao valor.

{% hint style="info" %}
Se houver um array no JSON, então em vez da chave você precisa mencionar o número do elemento, começando em 0.
{% endhint %}

Separe as frases de obtenção de variáveis pelo símbolo de ponto e vírgula (;). As frases consistem no link para os dados na resposta e no nome da variável para salvá-los, que são separados pelos símbolos -> (hífen + sinal de maior).

A consulta de pesquisa é, de certa forma, um caminho no JSON até o valor necessário.

### Desenvolvendo API para bots

Para desenvolver uma API, você vai precisar de uma hospedagem na qual ela ficará baseada. Se você não tiver uma ou não for fera em programação, então pode entrar em contato conosco e nós desenvolveremos a API para o seu bot e a hospedaremos na nossa. A hospedagem em si é gratuita, você só pagará pelo desenvolvimento.

#### Mas, por enquanto, um pouco de teoria.

O bot suporta as **GET** e **POST** solicitações, esses são os principais tipos usados na maioria das APIs públicas.

**GET** é uma solicitação que acontece ao clicar no link ou ao abrir o link no navegador. Os parâmetros em tal solicitação são transferidos para as URL-requests.

A sintaxe dos parâmetros transferidos: depois da URL há um ponto de interrogação (?) e então cada parâmetro é separado por um e comercial (&). Um parâmetro consiste no nome e em seu valor após o sinal de igual (=). Um exemplo de URL com um parâmetro:

![](https://lh6.googleusercontent.com/c4xJMMuFKVsFJW_3nDTzUmhvejIUtIKsg-kEA8_PT05vlmmAfDgritAtxwh_5sq3-YwOuy8dw4LVYbesWa4Yy-QjUx3gIbF-54_omadX1SFFaa8K6HirvD-qycd4D6tjSBpkRLAB)

Aqui você pode ver que um parâmetro chamado “search\_query” está sendo compartilhado e que seu valor é “queen live aid”. O ‘+’ aqui representa o espaço entre as palavras; ao trabalhar com o software de edição, você pode simplesmente deixar os espaços – o bot vai alterar isso sozinho.

**POST** é um tipo de solicitação que é enviada com mais frequência ao preencher um formulário em um site. A solicitação transfere os parâmetros no corpo; é claro que eles podem ser compartilhados da mesma forma que no GET, mas raramente é feito assim. O parâmetro no corpo pode estar no formato JSON ou como chave-valor. Como chave-valores, os parâmetros compartilham formulários; o formato JSON é o mais usado em API.

**Cabeçalho da solicitação.** Toda solicitação pode ter um cabeçalho/título adicionado. Nele, na maioria das vezes, são escritos o formato dos dados compartilhados e as chaves de acesso. Normalmente deixamos esta aba vazia, mas às vezes ela é necessária para inserir o Token da API ou o tipo de solicitação “Content-type”: “application/json”.

**JSON** - (JavaScript Object Notation) é um formato de arquivo padrão aberto e um formato de intercâmbio de dados que usa texto legível por humanos para armazenar e transmitir objetos de dados consistindo em pares atributo-valor e arrays. Para trabalhar com a API em bots, você precisa conhecer esse formato; tudo é baseado nele.

Antes de continuar, leia os seguintes artigos:

[https://www.json.org/json-en.html ](<https://www.json.org/json-en.html >)\
<https://developer.mozilla.org/en-US/docs/learn/javascript/objects/json>

E também tente criar seu próprio arquivo JSON neste site:

<https://jsoneditoronline.org>

#### Prática

Blocos e condições podem atender a solicitações. As solicitações de condição são criadas para entender no site se o diálogo pode seguir um determinado caminho ou não. A solicitação, nesse caso, acontece toda vez que a condição do caminho é verificada. As solicitações dos blocos, ao contrário, só são executadas quando a transição para o bloco acontece.

Antes de criar uma solicitação, você precisa escolher seu tipo:

![](https://lh5.googleusercontent.com/jDLVxBLwNSrmSb9t6LTuwuuifA3X-U9PNhLi7YvCrLj36uyDjiP-FymTpUXg1fhSewb63UslJbHhndLsefusieLdYSe4oNWMBGWuceHWWNg5VrRddIHXbGVwqhDMFFUR5Xk4YZLYXfM2hcNP9w)

POST-data e POST-json são diferenciados pelo método de transferência dos parâmetros, como mencionado acima (formato JSON ou como chave-valor). Se você escolher JSON, então os parâmetros podem ser transferidos apenas na solicitação. Um campo adicional é aberto para o post: parâmetros JSON POST. **Importante!** Os parâmetros devem ser escritos apenas no formato JSON; o bot só funciona dessa maneira.

A resposta do servidor pode ser analisada e salva nas variáveis.

{% hint style="info" %}
Você pode analisar a resposta somente se ela estiver no formato JSON.
{% endhint %}

As variáveis salvas são registradas no último envio não preenchido; se o envio for transferido por um bloco vermelho, as variáveis são anuladas. Portanto, se você precisar salvar os dados, deve transferir as variáveis por meio do bloco amarelo.

Aliás, você pode ver o que o bot registrou nas variáveis na seção Leads:

![](https://lh3.googleusercontent.com/e6mzwKUgxl22YqWNmN3HI0afQKM8gcU2OR_E_7Q3NSEzx0n45QLGXI4_UsaWaK52z7-QnULWmfSqCeZhfStALhung9LpFoK2i9EGhNccUcgo-E-7ONrkb7Aj2GEzd0DMDTxLsviV)

### Transferência de dados não como uma linha

Por padrão, o valor da variável vem no formato #{} , mas depois vem como uma linha. Para fazer com que a variável seja transferida como um número, você precisa desativar a verificação do formato dos parâmetros post-json.

![](https://lh4.googleusercontent.com/KDDSAYd7NeXu0c7jL45ktnPPeWy7G_YJS-xrf1jvAXf1aKYKGh781E1oGmnS8fw0PbpynqG0lXyqZwK_RfuCC3ezal4-Iu0lo7y5zsNQUT6i21J4C2hb9xw6DF30wReKLorcLliS)

Depois, você pode simplesmente mencionar o nome da variável, como {"key": #{variable\_name}}, variable\_name é a variável, então sem usar colchetes.

{% hint style="warning" %}
Depois de configurar os parâmetros, é recomendável ativar novamente a verificação.
{% endhint %}


---

# 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.mavibot.ai/doc/pt/integrations/api/request.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.
