> For the complete documentation index, see [llms.txt](https://docs.salebot.pro/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.salebot.pro/rabota-s-api/integraciya-so-storonnimi-api.md).

# Интеграция со сторонними API

Вы можете создавать ботов, которые взаимодействуют с другими ресурсами по API. Например, боты могут выполнять запросы с проверкой возможности записаться на определенную дату или найти товар в интернет магазине.&#x20;

## Как обращаться к сторонними API на примере Dadata

Для примера возьмем API подсказки по адресам <https://dadata.ru/api/suggest/address/>

{% hint style="info" %}
Внимательно читайте документацию в сторонних API
{% endhint %}

{% hint style="warning" %}
Обращаем внимание! Чаще всего, при интеграции со сторонними API с их стороны требуются адреса IP, с которых будут направляться запросы: 158.160.49.208  - сайт
{% endhint %}

В поле **"URL запроса"** пишем указанный URL <https://suggestions.dadata.ru/suggestions/api/4_1/rs/suggest/address>

В поле **"Заголовок запроса"** пишем заголовок в формате JSON

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

В поле **"JSON параметры"** пишем сам запрос { "query": "#{CurrencyType}" }

Для получения результата запроса необходимо заполнить поле **"Сохраняемые значения"**

Пример запроса на рисунке ниже:

![](/files/z10eZ4td3q3L0jgAJOps)

### **Как сохранять значения из переменных**

С первого раза это не совсем понятно, пока не попробуешь самостоятельно это сделать.

Для начала введите #{custom\_answer} в поле ответ. ( Переменная #{custom\_answer} - содержит в себе ответ, полученный с сервера, указанного в поле 'URL для ответа с сервера')

Запустите блок с запросом, чтобы отправить запрос и получить ответ на него. Полученный ответ надо проанализировать и настроить получение переменных из него. Для этого в поле "Сохраняемые значения"&#x20;

Разберем пример, описанный выше:

Лучше всего можно понять принцип адресации при работе с JSON на примере. В результате нашего запроса в #{custom\_answer} пришел ответ формата:

*`{"suggestions": [{"value": "Белорусский рубль", "unrestricted_value": "Белорусский рубль", "data": {"code": "933", "strcode": "BYN", "name": "Белорусский рубль", "country": "Беларусь"}}]}`*

В поле "Сохраняемые значения" пишем ЗНАЧЕНИЕ->ПЕРЕМЕННАЯ:

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

**suggestions -** ключ для массива \[{"value": "Белорусский рубль", "unrestricted\_value": "Белорусский рубль", "data": {"code": "933", "strcode": "BYN", "name": "Белорусский рубль", "country": "Беларусь"}}]

**suggestions|0** - ключ для первого элемента массива {"value": "Белорусский рубль", "unrestricted\_value": "Белорусский рубль", "data": {"code": "933", "strcode": "BYN", "name": "Белорусский рубль", "country": "Беларусь"}}

**suggestions|0|value** - ключ для значения "Белорусский рубль"

Самый длинный ключ в этом JSON:

**suggestions|0|data|strcode** - ключ для значения BYN

{% hint style="success" %}
Ключи разделяются вертикальной чертой. Если в JSON есть массив, то доступ к его элементу идет по номеру, начиная с 0 и также записывается через вертикальную черту.
{% endhint %}

{% hint style="info" %}
Необходимо повторить всю вложенность. Для удобства можно визуализировать JSON через приложение JSON-viewer.
{% endhint %}

Уровень вложенности разделяется вертикальной чертой. То есть вам нужно перечислить все ключи, для того чтобы дойти до значения разделив их вертикальной чертой.

{% hint style="info" %}
Если в json присутствует массив, вместо ключа нужно указать номер элемента массива, начиная с нуля.
{% endhint %}

Разделяем выражения получения наших переменных символом " ; "(точка с запятой). Выражения состоят из ссылки к данным в ответе на запрос и названия переменной для сохранения разделенных символами -> (минус больше).\
Поисковой запрос представляет собой путь в JSON до требуемого значения.&#x20;

### **Разработка API для ботов**

Бот поддерживает запросы GET и POST, это основные типы запроса, которые используются в большинстве публичных API.&#x20;

**GET** - это тот запрос, который происходит по клику по ссылке или при открытии ссылки в браузере. Параметры в данном запросе передаются в URL-запроса.

Синтаксис передачи параметров: после url ставится знак вопроса(?), дальше каждый параметр разделен знаком амперсанда(&). Параметр состоит из имени и после знака равно его значения. Пример URL с параметром:

Здесь передается один параметр q со значением “хорошая музыка”. %20 - пробел. При работа с конструктором, вы можете писать просто пробел, бот сам заменит его.

**POST** - это запрос, который чаще всего отправляется при заполнении формы на сайте. Параметры запрос передает в body, конечно они могут быть переданы также как и в GET, но так делают редко. Параметры в body могут идти в формате JSON, либо в виде ключ-значение. В виде ключ-значение параметры передают формы, для api чаще всего используется формат JSON.

**Заголовок запроса.** К каждому запросу можно добавить заголовок. Чаще в него пишется формат передаваемых данных и ключи доступа. Обычно это поле оставляем пустым, в редких случаях требуется вставить API Token или типа запроса "Content-type": "application/json"&#x20;

**JSON** - (англ. JavaScript Object Notation, обычно произносится как /ˈdʒeɪsən/ JAY-sən) — текстовый формат обмена данными, основанный на JavaScript. Как и многие другие текстовые форматы, JSON легко читается людьми. Чтобы работать с API в боте, вам необходимо знать этот формат, на нем основано все.&#x20;

Перед продолжением, прочитайте следующие статьи:&#x20;

<https://www.json.org/json-ru.html>\
<https://developer.mozilla.org/ru/docs/Learn/JavaScript/%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D1%8B/JSON>

А также на этом сайте попробуйте написать свой JSON файл:

<https://jsoneditoronline.org/>

**Практика**&#x20;

Запросы могут выполнять блоки и условия. Запросы условий созданы для того, чтобы узнать на сайте, может ли диалог пойти по этой ветке или нет. Запрос в этом случае происходит каждый раз, когда проверяется условие ветки. Условия блоков наоборот, выполняется только тогда, когда произошел переход в данное состояние.

Перед созданием запроса необходимо выбрать его тип:

![](/files/YOZwnYaOJgGI7ZwPGwTu)

POST-data и POST-json отличаются способом передачи параметров, как говорилось выше(в формате JSON, либо в виде ключ-значение). Если вы выбрали тип JSON, то параметры можете передавать только в запросе. Для пост открывается дополнительное поле: JSON POST-параметров. **Важно!** параметры записывать только в формате JSON, бот работает только с ним. Вы уже потренировались в написании JSON.&#x20;

Ответ с сервера можно распарсить и сохранить в переменные.&#x20;

{% hint style="info" %}
Разобрать ответ можно только если он в формате JSON
{% endhint %}

Сохраненные переменные записываются в последнюю не заполненную заявку, если заявка передается через красный блок, переменные аннулируются. Поэтому, если эти данные надо сохранить, то передавайте переменные в CRM системы через желтый блок.

Кстати, увидеть что бот записал в переменные можно в разделе Клиенты.

### Передача переменных, не как строка

По умолчанию в качестве значения переменных Вы должны строки, в формате **"#{}"**, но в таком случае переменная придет как строка. Для того чтобы переменную передать числом, необходимо выключить в настройках проекта проверку формата параметров:

<figure><img src="/files/yn2ZWh7ESdGo8Y3TyP89" alt=""><figcaption></figcaption></figure>

Затем можно просто указывать имя переменной, например: **{"key": #{имя\_переменной}}**, имя\_переменной — переменная. То есть без обрамляющих кавычек.

{% hint style="warning" %}
После установки параметров, рекомендуется обратно включить проверку.
{% endhint %}
