# 1С. Взаимодействие с http-сервисами

Ведение бизнеса связано с управлениям **базами данных**, которые могут быть созданы большим количеством способов. Одним из популярных и эффективных способов является использование платформы **1С**, которая предоставляет глубокую интеграцию в бизнес-процессы и адаптирована под **законодательство РФ**.

Для настройки взаимодействия с базой данных **1С** через **HTTP** необходимо на стороне платформы **1С** опубликовать соответствующий *веб-сервис*.

Для этого проектируется логика **API**, которая предоставляет доступ к определенным данным через заранее определенные запросы. Как правило, такое взаимодействие строится по принципам **REST-архитектуры**, однако конкретная реализация API определяется на этапе проектирования. Способ доступа к данным (их структура, фильтрация, сортировка и т.д.) полностью определяется в момент проектирования **API**. Как и при развертывании любого **API**, создаются основные методы (эндпоинты) и настраиваются правила авторизации.

{% hint style="success" %}
Вы можете познакомиться с подробным описанием настройки взаимодействия в записи нашего эфира: <https://youtu.be/F922SV7RAGM>.
{% endhint %}

Для настройки взаимодействия бота с базой данных Вам необходимо следующее:

1. URL метода. Дополнительно необходимо иметь информацию о том, какой тип запроса обработчик на стороне 1С поддерживает, какие параметры принимает и возвращает.
2. Необходимые заголовки.
3. Метод авторизации. `Авторизация может отсутствовать.`

{% hint style="info" %}
Какие запросы, параметры и заголовки поддерживаются методом,- задается при его проектировании. Если Вы можете влиять на процесс проектирования, то предпочтительней заранее заложить возможность работы с POST-запросами вместе (*или вместо*) с GET-запросом в методах, в том числе для получения данных, так как это упрощает передачу сложных параметров и больших объемов данных.
{% endhint %}

## Настройка

### Настройка действия

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

Для взаимодействия бота с базой данных по API используется действие ["Вебхук"](/ru/deistviya/veb-khuki.md).

1. Перейдите на вкладку **"Действия"** и нажмите **"Добавить"**.

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

2. Выберите действие **"Вебхук"**.

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

3. Внесите необходимые для подключения данные.

<figure><img src="/files/8iWCN1Ru9jNMSs7iecqq" alt=""><figcaption></figcaption></figure>

Введите URL и выберите метод запроса.

{% hint style="success" %}
Выбор метода POST откроет возможность добавления тела запроса, которое будет необходимо для передачи параметров.
{% endhint %}

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

На вкладке **"Переменные действия"** добавьте аргументы, соответствующие тем параметрам, которые необходимо передать в запрос, в данном примере это будет один параметр order\_number.

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

Заполните необходимые заголовки и тело запроса. Данные для авторизации обычно передаются в заголовке `Authorization`, но это не единственный способ авторизации.

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

На вкладке **"Условия срабатывания"** задайте название функции и ее описание, таким образом бот будет знать, какое действие использовать при необходимости проверки статуса заказа.

## Настройка авторизации

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

### Авторизация Basic

Рассмотрим простой вариант авторизации Basic. Он предполагает передачу пары логина и пароля login:password, данные должны быть закодированы в Base64. Для кодирования можно использовать онлайн-сервисы, например <https://www.base64decode.org/>. В запросе формируется заголовок Authorization, в него добавляются закодированные данные после слова Basic, которое определяет схему авторизации.

```
Authorization: Basic <закодированные в Base64 данные>
```

### Передача данных для авторизации в URL

Данные для авторизации могут быть переданы в URL.

```
https://login:password12345@example.com/api/v1/users
```

{% hint style="danger" %}
Данный способ **не рекомендуется**, потому что данные передаются в открытом виде, что само по себе *является небезопасным действием.*
{% endhint %}

{% hint style="info" %}
Логин и пароль должны быть URL-encoded, если содержат спецсимволы, например: @, :, /, #, ?, %.

username = <user@example.com>\
password = p\@ss:word

URL-encoded:\
user%40example.com:p%40ss%3Aword

* Для кодирования можно использовать онлайн-сервисы, такие как <https://www.urlencoder.org/>.
  {% endhint %}

## Работа с действием

В инструкции бота необходимо прописать вызов функции действия и передачу номера заказа в аргумент этой функции.

{% code overflow="wrap" %}

```
При любом вопросе о статусе заказа, вызови функцию delivery_check и передай в неё номер заказа в аргумент order_number.
```

{% endcode %}

Бот выполнит запрос по API к Вашей базе данных и выведет клиенту информацию, которую получит от базы данных.

{% hint style="info" %}
Формат и объем информации, который будет доступен при запросе определяется при проектировании API.
{% 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.suvvy.ai/ru/deistviya/1s.-vzaimodeistvie-s-http-servisami.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.
