Чтобы подключить нейросеть к 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С
Этот список я собрал по реальным доработкам, где приходилось исправлять чужие интеграции.
- Ключ в тексте модуля. Он попадает в хранилище конфигурации, в выгрузки и к каждому, кто видит код. Держите ключ в константе с ограниченным доступом или в конфиге на хостинге.
- Нет проверки кода состояния. Без проверки
КодСостоянияошибка провайдера читается как обычный ответ, и в документ записывается пустое значение или сообщение об ошибке. - Запрос внутри транзакции. Описано выше: блокировки и непроведённые документы при любом сбое сети.
- Короткий таймаут. Ответ на длинный запрос идёт дольше стандартных нескольких секунд, поэтому выставляйте таймаут явно.
- Нет ограничения на частоту. Если регламентное задание гонит тысячи строк номенклатуры подряд, провайдер начнёт отвечать ошибками превышения лимита. Нужны пауза между вызовами и повтор при коде ответа о перегрузке.
- Слепое доверие ответу. Модель может ошибиться. Для классификации и черновиков я оставляю человеку финальное подтверждение, а для автоматических записей проверяю результат по списку допустимых значений.
Если нужна помощь с подключением к вашей базе, под конфигурацию, версию платформы и требования к данным, я делаю интеграции нейросетей в рабочие системы от 50 000 ₽. Мелкую правку вроде добавления вызова в существующую обработку можно решить как задачу программиста на час, от 3 000 ₽/час.
Условия и возможности API нейросетей и платформы 1С:Предприятие меняются, поэтому перед запуском я уточняю их в документации провайдера и в справке платформы.
Частые вопросы
Нужно ли покупать дополнительные модули, чтобы подключить нейросеть к 1С?
Нет. Все нужные объекты уже есть в платформе 8.3: HTTPСоединение, HTTPЗапрос, работа с JSON. Нужны только доступ к API выбранной нейросети и ключ. Если типовую конфигурацию менять нельзя, весь код выносится в расширение.
Можно ли вызывать нейросеть прямо из формы документа?
Можно, но аккуратно. Вызов делается на сервере по нажатию кнопки, а не в обработчике записи или проведения. Если ответ нужен не сразу, лучше поставить задачу в очередь и получить результат фоновым заданием, чтобы форма не зависала на время ожидания.
Что делать, если сервер 1С не может обратиться к API нейросети?
Поставить между ними промежуточный обработчик. Сервер 1С обращается к вашему домену, а обработчик на хостинге вызывает нейросеть. Проверьте также, что исходящие запросы на нужный адрес разрешены на стороне сети организации. Смена провайдера в такой схеме не требует правок в конфигурации.
Можно ли отправлять в нейросеть данные клиентов из 1С?
Только обезличенные, либо при понимании, где хранятся и обрабатываются данные. Персональные данные граждан РФ подпадают под требования о локализации, поэтому имена, телефоны и реквизиты я убираю до отправки и подставляю обратно уже на стороне 1С. Для задач, где без них не обойтись, выбор модели и места размещения решается отдельно, до разработки.