> For the complete documentation index, see [llms.txt](https://docs.ncteam.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.ncteam.io/nocodb/http-zaprosy.md).

# HTTP-запросы

## Лучшие практики <a href="#undefined" id="undefined"></a>

## NocoDB URL <a href="#nocodburl" id="nocodburl"></a>

Храните URL NocoDB в глобальной переменной на случай, если вы поменяете адрес вашего сервера.

Где взять URL?

→ Откройте Swagger.

→ Откройте любой первый GET-запрос.

→ Нажмите “Try it out”.

→ Нажмите “Execute”.

→ Скопируйте блоки “Выполнить SmartQuery” и “Отправить HTTP-запрос” с обработкой ошибки.

URL будет находиться чуть ниже “Execute” в поле “Request URL”.

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

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

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

Скопируйте все до `…tables/`.

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

Создайте глобальную переменную и вставьте туда этот адрес.

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

## Идентификаторы таблиц <a href="#id-1" id="id-1"></a>

Храните идентификаторы таблиц в глобальной переменной типа словарь на случай, если добавятся/изменятся/удалятся таблицы в NocoDB.

Где взять идентификаторы таблиц?

Откройте Swagger.

Каждая ваша таблица содержит одну группу запросов.

<figure><img src="/files/4CEEn27BEHN6zirB6irw" alt=""><figcaption></figcaption></figure>

Идентификаторы таблиц видны сразу же.

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

Чтобы скопировать идентификатор, выполните любой тестовый запрос.

Из поля “Request URL” вы можете выделить и скопировать идентификатор.

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

Создайте глобальную переменную с типом словарь, где ключ — название таблицы, значение — идентификатор.

```
{
   "Features":"m6uv6qopcq4layy",
   "Fake":"mw4871qe2a2r8j7"
}
```

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

## Токен NocoDB <a href="#nocodb" id="nocodb"></a>

Храните токен NocoDB в глобальной переменной.

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

## Заготовка из блоков <a href="#id-2" id="id-2"></a>

Используйте специальную заготовку из блоков “Выполнить SmartQuery” и “Отправить HTTP-запрос”, а также блоков с обработкой ошибок.

```
%get_url_arr% = []

# Метод запроса - True = GET, False = POST,PATCH,DELETE
%is_get% = True

# Таблица
%table% = ""

# Нужные поля в ответе
%fields% = ""

# Указать поля для сортировки и порядок
%sort% = ""

# Фильтры
%where% = ""

# Сколько нужно записей в ответе
%limit% = ""

# Перемешивание
# shuffle уже есть в Smartbot, поэтому shuffl
%shuffl% = ""

# С какой записи начать
%offset% = ""

# Если нужна одна запись
%record_id% = ""

%get_url_arr%.push("fields=" + %fields% if %fields% else %fields%)
%get_url_arr%.push("sort=" + %sort% if %sort% else %sort%)
%get_url_arr%.push("where=" + %where% if %where% else %where%)
%get_url_arr%.push("limit=" + %limit% if %limit% else %limit%)
%get_url_arr%.push("shuffle=" + %shuffl% if %shuffl% else %shuffl%)

%url% = (
    %NOCODB_URL% 
    + %NOCODB_TABLE%[%table%] 
    + "/records" 
    + (
        ("/" + %record_id% if %record_id% else "?" + (%get_url_arr% | join("&")))
        if %is_get% else ""
        )
    )

%req_body% = {}
```

<figure><img src="/files/7n5wj1Squ0mjTgZo7NPl" alt=""><figcaption></figcaption></figure>

В блоке “Отправить HTTP-запрос” в поле URL введите %url%.

В заголовках укажите:

`accept` = `application/json`

`xc-token` = `%NOCODB_TOKEN%`

`content-type` = `application/json`

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

Ответ сохраняйте в переменную с типом “Словарь”.

Статус ответа сохраняйте в переменную типа “Число”.

Заголовки ответа можно не сохранять.

Если GET-запрос — пустое тело запроса “Форма”.

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

Если POST/PATCH/DELETE — тело запроса “Текст”:

```
{{ %req_body% | to_json }}
```

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

Если вы хотите всегда быть в курсе обо всех происшествиях с запросами, то:

→ Создайте блок “Webhook”.

<figure><img src="/files/0vwHz2pYtb3gs2UjCYEa" alt=""><figcaption></figcaption></figure>

→ Создайте блоки “Выполнить SmartQuery” и “Выполнить HTTP-запрос”.

→ Добавьте следующий код в блок “Выполнить SmartQuery”:

```
%alert% = {
    "message": "Ошибка при формировании запроса",
    "block": ""
}

%req_body% = {
    "access_token":"ppFHtisTOfZTuLFIZ2atx3hM00vfI1q5RI0M3L_aGKCo6kQaPOq_3wjK-NBjpfqa",
    "v":"0.0.1",
    "channel_id":"7832339438",
    "block_id":"36b0f86002df181e13dc619f",
    "peer_id":"<вставьте id пользователя или его username>",
    "data": %alert%
}
```

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

→ Скопируйте URL вебхука.

→ Вставьте его в URL в блоке “Отправить HTTP-запрос”.

→ Поменяйте метод на POST.

→ Тело запроса выберите “Текст”:

```
{{ %req_body% | to_json }}
```

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

→ В заголовках передайте:

`content-type` = `application/json`

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

Сохранять ответ, статус и заголовки необязательно.

→ Переместите блоки к заготовке

→ Проведите стрелку от выхода по ошибке блока “Выполнить SmartQuery” заготовки.

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

→ Откройте блок ”Выполнить SmartQuery”, от которого выходит стрелка по ошибке.

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

→ Нажмите на адресную строку вашего браузера и скопируйте URL целиком.

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

→ Откройте блок “SmartQuery”, на который ведет стрелка по ошибке

→ В ключ “block” словаря %alert% вставьте скопированный URL

→ Замените значение “peer*id” словаря %req*body% на ваш id (или id админа)

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

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

→ Проведите стрелку от ошибки блока “Отправить HTTP-запрос”.

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

→ Создайте блок “Условие” с условием:

```
%Статус% == 200
```

→ Проведите к нему стрелку от блока “Отправить HTTP-запрос”.

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

→ Сделайте дубликат из двух блоков “Выполнить SmartQuery” и “Отправить HTTP-запрос”, которые идут от стрелок с ошибками.

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

→ В блоке “Выполнить SmartQuery” замените “message” в `%alert%` на:

```
"Ошибка при запросе"
```

→ Здесь же, добавьте ниже строчку:

```
"code": %Статус%,
```

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

→ Вставьте блоки рядом с **“Иначе”** и соедините:

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

→ Создайте блок **“Отправить сообщение”** и соедините с блоком **“Webhook”**.

→ Введите следующий текст сообщения:

```
Произошла ошибка!

%public_api_data%['message']
{{ '' if 'code' not in %public_api_data%  else "\nКод ошибки: " + %public_api_data%['code'] }}

%public_api_data%['block']
```

<figure><img src="/files/7HgaBWm3FHAgFWPhgDBD" alt=""><figcaption></figcaption></figure>

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

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

{% hint style="info" %}
При копировании блоков их URL меняется.

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

Нужно снова выбрать блок, на который будет ссылаться ошибка, скопировать адрес из адресной строки и заменить “block” в %alert% в обоих цепочках с ошибками.
{% endhint %}

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

Цепочка с вебхуком должна быть одна на весь проект. Можете поместить ее в отдельный сценарий.

<figure><img src="/files/1r2a6nMylCzggnejz7pt" alt=""><figcaption></figcaption></figure>

## Преимущества <a href="#id-3" id="id-3"></a>

Плюсы от внедрения в проект лучших практик:

— Если у вас поменяется токен, не придется менять его во всех блоках, достаточно будет изменить глобальную переменную.

— Если у вас добавится/удалится таблица, достаточно будет добавить/удалить ее идентификатор в глобальной переменной.

— Если вы поменяете URL NocoDB (смените сервер или облако), достаточно поменять URL в одном месте.

— Минимум затрат времени на настройку очередного запроса к NocoDB.

— Вы сможете быстро реагировать на сбои и неполадки при работе бота, связанные с запросами в NocoDB.
