AI · 9 мин чтения

Как подключить нейросеть к 1С: HTTP-запрос и внешний сервис

Чтобы подключить нейросеть к 1С, достаточно уметь отправить POST-запрос с JSON и прочитать JSON в ответе. Ни специальных библиотек, ни внешних компонентов не нужно: в платформе 1С:Предприятие 8.3 для этого есть HTTPСоединение, HTTPЗапрос, ЗаписьJSON и ЧтениеJSON. Ниже два способа, которые я использую: прямой вызов API из конфигурации и вызов через промежуточный обработчик на обычном PHP-хостинге. К каждому есть рабочий код и список мест, где всё обычно ломается.

Два способа соединить 1С и языковую модель

Первый способ: 1С сама ходит в API нейросети. В конфигурации или расширении пишется функция, которая собирает JSON, отправляет его на адрес провайдера и достаёт текст из ответа. Второй способ: между 1С и нейросетью стоит ваш небольшой обработчик. 1С отправляет запрос на него, а он уже обращается к модели.

Выбор зависит от трёх вещей: доступен ли API провайдера с сервера, где крутится 1С, где вы готовы хранить ключ и нужно ли вам менять модель без правки конфигурации.

Критерий Прямой HTTPЗапрос из 1С Промежуточный обработчик
Где лежит ключ API В константе или регистре сведений базы 1С В конфиг-файле на хостинге, вне публичной папки
Смена модели или провайдера Правка кода или настроек в базе Правка одного файла, 1С не трогаем
Доступность API с сервера 1С Нужен прямой выход к адресу провайдера Достаточно выхода к вашему обработчику
Фильтрация данных до отправки В коде 1С В коде обработчика, единое место для всех баз
Что нужно поддерживать Только конфигурацию Конфигурацию и скрипт на хостинге

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

Бесплатный материал

🎁 Полезный скрипт в подарок

Подпишитесь на Telegram - пришлю готовый скрипт по этой теме.

Без спама. Отписка в 1 клик.

Как интегрировать ИИ в 1С напрямую: HTTPЗапрос из конфигурации

Ниже функция, которая отправляет вопрос в API Claude и возвращает текст ответа. Эндпоинт /v1/messages, метод POST, обязательные заголовки x-api-key, anthropic-version и content-type. Для других провайдеров меняются адрес, заголовки и структура JSON, а каркас остаётся тем же. Название модели и ключ я не зашиваю в код, а беру из констант: идентификаторы моделей устаревают, и менять их удобнее в настройках, чем в модуле.

&НаСервере
Функция СпроситьНейросеть(Вопрос)

    Ключ = Константы.КлючAPIНейросети.Получить();
    Модель = Константы.МодельНейросети.Получить();

    Сообщения = Новый Массив;
    Сообщения.Добавить(Новый Структура("role, content", "user", Вопрос));

    Тело = Новый Структура;
    Тело.Вставить("model", Модель);
    Тело.Вставить("max_tokens", 1024);
    Тело.Вставить("messages", Сообщения);

    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку();
    ЗаписатьJSON(ЗаписьJSON, Тело);
    ТелоЗапроса = ЗаписьJSON.Закрыть();

    Запрос = Новый HTTPЗапрос("/v1/messages");
    Запрос.Заголовки.Вставить("content-type", "application/json");
    Запрос.Заголовки.Вставить("x-api-key", Ключ);
    Запрос.Заголовки.Вставить("anthropic-version", "2023-06-01");
    Запрос.УстановитьТелоИзСтроки(ТелоЗапроса, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);

    Соединение = Новый HTTPСоединение("api.anthropic.com", 443, , , , 60, Новый ЗащищенноеСоединениеOpenSSL);
    Ответ = Соединение.ОтправитьДляОбработки(Запрос);

    Если Ответ.КодСостояния <> 200 Тогда
        ВызватьИсключение "Нейросеть вернула код " + Ответ.КодСостояния + ": " + Ответ.ПолучитьТелоКакСтроку();
    КонецЕсли;

    ЧтениеJSON = Новый ЧтениеJSON;
    ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
    Данные = ПрочитатьJSON(ЧтениеJSON, Истина);
    ЧтениеJSON.Закрыть();

    Возврат Данные["content"][0]["text"];

КонецФункции

Разберу места, на которых спотыкаются чаще всего.

Кодировка и чтение ответа

Тело запроса нужно устанавливать именно через УстановитьТелоИзСтроки с явной кодировкой UTF‑8 и без BOM. Если оставить умолчания, кириллица в вопросе может уйти с BOM и API вернёт ошибку разбора JSON. Ответ читается с параметром Истина в ПрочитатьJSON: тогда объекты приходят соответствиями, и к полям можно обращаться по строковому ключу, как в последней строке функции.

Таймаут и вызов на сервере

В примере таймаут 60 секунд, это пятый по счёту параметр после порта, пользователя, пароля и прокси. Ответ языковой модели на длинный запрос приходит не мгновенно, и стандартные несколько секунд ожидания не хватит. Вызов выполняется только на сервере, поэтому у процедуры директива &НаСервере. Из клиентского кода вызывайте её через обычную серверную процедуру формы.

Не вызывайте нейросеть внутри проведения документа

Это ошибка, которую я видел чаще остальных. Если запрос к API стоит в обработчике проведения или в записи объекта, транзакция висит открытой всё время ожидания ответа. Другие пользователи упираются в блокировки, а при сбое сети документ не проводится. Правильнее поставить задачу в очередь: записать вопрос в регистр сведений, а ответ получать регламентным или фоновым заданием и класть результат в тот же регистр. Пользователю достаточно кнопки «Обновить» или оповещения, когда ответ готов.

Внешний сервис для 1С: прокси-обработчик на обычном PHP-хостинге

Когда прямой выход с сервера 1С к API закрыт или не хочется держать ключ в базе, ставлю между ними обработчик. Он принимает от 1С короткий запрос, проверяет секретный токен, обращается к нейросети и отдаёт назад чистый текст. Работает на обычном хостинге сайта, где уже есть PHP: отдельный VPS не требуется, расходов на сервер нет.

Файл лежит в публичной папке, а конфиг с ключами остаётся уровнем выше, вне доступа из браузера:

<?php
// ai-config.php лежит выше публичной папки и возвращает массив:
// ['token' => '...', 'api_key' => '...', 'model' => '...']
$config = require __DIR__ . '/../ai-config.php';

header('Content-Type: application/json; charset=utf-8');

$sent = $_SERVER['HTTP_X_TOKEN'] ?? '';
if (!hash_equals($config['token'], $sent)) {
    http_response_code(403);
    echo json_encode(['error' => 'forbidden']);
    exit;
}

$input = json_decode(file_get_contents('php://input'), true);
$prompt = trim($input['prompt'] ?? '');
if ($prompt === '') {
    http_response_code(400);
    echo json_encode(['error' => 'empty prompt']);
    exit;
}

$payload = json_encode([
    'model' => $config['model'],
    'max_tokens' => 1024,
    'messages' => [['role' => 'user', 'content' => $prompt]],
], JSON_UNESCAPED_UNICODE);

$ch = curl_init('https://api.anthropic.com/v1/messages');
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 60,
    CURLOPT_HTTPHEADER => [
        'content-type: application/json',
        'x-api-key: ' . $config['api_key'],
        'anthropic-version: 2023-06-01',
    ],
    CURLOPT_POSTFIELDS => $payload,
]);
$raw = curl_exec($ch);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$data = json_decode((string)$raw, true);
if ($code !== 200) {
    http_response_code(502);
    echo json_encode(['error' => $data['error']['message'] ?? 'upstream error']);
    exit;
}

echo json_encode(['text' => $data['content'][0]['text'] ?? ''], JSON_UNESCAPED_UNICODE);

На стороне 1С функция из предыдущего раздела упрощается. Соединение создаётся с адресом вашего домена, путь запроса указывает на файл обработчика, ключ API из заголовков уходит, вместо него передаётся X-Token. Тело запроса это структура с единственным полем prompt, ответ читается так же, но текст лежит в поле text. Смена модели теперь делается правкой конфига на хостинге, а база 1С об этом не знает.

Отдельный плюс обработчика: логирование. Я пишу в файл или в таблицу MySQL время, размер запроса и код ответа, так видно, где появляются таймауты и сколько запросов делает каждая база.

Когда вместо PHP лучше n8n

Если после ответа нейросети нужно что-то ещё, например разложить результат по нескольким системам, отправить уведомление в Telegram и дождаться подтверждения, собирать цепочку проще в n8n. 1С вызывает один вебхук, остальное живёт в визуальном сценарии. Но n8n это отдельный сервис: его нужно где-то развернуть, обновлять и оплачивать хостинг под него. Для одного простого вызова «вопрос и ответ» хватает PHP-файла на уже оплаченном хостинге.

Что отправлять из 1С в нейросеть, а что нет

Техническая часть здесь проще юридической. В 1С лежат персональные данные клиентов, контрагентов и сотрудников, и просто отправить их во внешний сервис нельзя. Я исхожу из правила: в запрос уходит только то, без чего модель не ответит, и в обезличенном виде.

  • Классификация номенклатуры по названию: отправляем название и список категорий, никаких данных о покупателях.
  • Черновик ответа на письмо: передаём текст вопроса без ФИО, телефонов и реквизитов, подставляем их уже в 1С.
  • Краткое описание товара для сайта по характеристикам: уходят только технические поля.
  • Анализ комментариев в заказах: перед отправкой вычищаем имена и контакты.

Если в задаче без персональных данных не обойтись, вопрос какую модель и где её размещать решается отдельно, с учётом требований к локализации данных граждан РФ. В таких случаях я рассматриваю модели, которые работают на российских серверах, а решение по хранению принимаю до написания кода. Хранить контакты клиентов во внешних облачных таблицах я не предлагаю.

Отдельный момент: доступность API зарубежных провайдеров зависит от региона сервера, с которого идёт запрос. Это ещё один довод в пользу промежуточного обработчика: если провайдера придётся заменить, меняется один файл, а конфигурация 1С остаётся без правок.

Обратное направление: нейросеть или сценарий вызывает 1С

Иногда вызов идёт в другую сторону: бот, сценарий n8n или сайт должны спросить что-то у 1С, например остаток товара или статус заказа. Для этого в платформе есть HTTP-сервисы. В конфигураторе создаётся объект «HTTP-сервис» с шаблоном URL и методом, в обработчике метода читается запрос и формируется ответ. Затем база публикуется на веб-сервере.

На практике такая схема нужна для ИИ-ассистентов, которые отвечают клиентам по наличию и срокам. Модель сама в базу не ходит: ваш обработчик получает вопрос, вызывает HTTP-сервис 1С за точными данными и передаёт их модели как контекст ответа. Так остаток берётся из учёта, а не выдумывается. Принцип тот же, что в моём ИИ-чатботе для сайта: модель отвечает по фактам, которые ей подали. Для защиты закрываю HTTP-сервис авторизацией и отдельным пользователем 1С с минимальными правами, только на чтение нужных данных.

Типичные ошибки при подключении нейросети к 1С

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

  1. Ключ в тексте модуля. Он попадает в хранилище конфигурации, в выгрузки и к каждому, кто видит код. Держите ключ в константе с ограниченным доступом или в конфиге на хостинге.
  2. Нет проверки кода состояния. Без проверки КодСостояния ошибка провайдера читается как обычный ответ, и в документ записывается пустое значение или сообщение об ошибке.
  3. Запрос внутри транзакции. Описано выше: блокировки и непроведённые документы при любом сбое сети.
  4. Короткий таймаут. Ответ на длинный запрос идёт дольше стандартных нескольких секунд, поэтому выставляйте таймаут явно.
  5. Нет ограничения на частоту. Если регламентное задание гонит тысячи строк номенклатуры подряд, провайдер начнёт отвечать ошибками превышения лимита. Нужны пауза между вызовами и повтор при коде ответа о перегрузке.
  6. Слепое доверие ответу. Модель может ошибиться. Для классификации и черновиков я оставляю человеку финальное подтверждение, а для автоматических записей проверяю результат по списку допустимых значений.

Если нужна помощь с подключением к вашей базе, под конфигурацию, версию платформы и требования к данным, я делаю интеграции нейросетей в рабочие системы от 50 000 ₽. Мелкую правку вроде добавления вызова в существующую обработку можно решить как задачу программиста на час, от 3 000 ₽/час.

Условия и возможности API нейросетей и платформы 1С:Предприятие меняются, поэтому перед запуском я уточняю их в документации провайдера и в справке платформы.

Частые вопросы

Нужно ли покупать дополнительные модули, чтобы подключить нейросеть к 1С?

Нет. Все нужные объекты уже есть в платформе 8.3: HTTPСоединение, HTTPЗапрос, работа с JSON. Нужны только доступ к API выбранной нейросети и ключ. Если типовую конфигурацию менять нельзя, весь код выносится в расширение.

Можно ли вызывать нейросеть прямо из формы документа?

Можно, но аккуратно. Вызов делается на сервере по нажатию кнопки, а не в обработчике записи или проведения. Если ответ нужен не сразу, лучше поставить задачу в очередь и получить результат фоновым заданием, чтобы форма не зависала на время ожидания.

Что делать, если сервер 1С не может обратиться к API нейросети?

Поставить между ними промежуточный обработчик. Сервер 1С обращается к вашему домену, а обработчик на хостинге вызывает нейросеть. Проверьте также, что исходящие запросы на нужный адрес разрешены на стороне сети организации. Смена провайдера в такой схеме не требует правок в конфигурации.

Можно ли отправлять в нейросеть данные клиентов из 1С?

Только обезличенные, либо при понимании, где хранятся и обрабатываются данные. Персональные данные граждан РФ подпадают под требования о локализации, поэтому имена, телефоны и реквизиты я убираю до отправки и подставляю обратно уже на стороне 1С. Для задач, где без них не обойтись, выбор модели и места размещения решается отдельно, до разработки.

Есть задача?

Обсудим в мессенджере

Расскажите, что нужно сделать — отвечу в течение 4 часов в рабочее время. Первая консультация бесплатно.

Продолжая пользование настоящим сайтом Вы выражаете своё согласие на обработку Ваших персональных данных (файлов куки) с использованием Yandex.Metrika.
Понятно