1С и Битрикс24 — это место, где у российских компаний живут заказы, документы, обращения клиентов и сделки. Нейросеть в этих системах полезна не как «чат для сотрудника», а как ещё один участник процесса: прочитать письмо и поставить задачу в нужный отдел, разобрать счёт на поля, ответить клиенту в открытой линии, сделать короткое резюме звонка. Ниже — как подключить GPT, Claude и DeepSeek к 1С и Битрикс24 через OpenAI-совместимый API PlusVibe, с примерами кода, которые мы запустили перед публикацией, и расчётом стоимости.
Почему именно API, а не готовый модуль
И 1С:Предприятие 8.3, и Битрикс24 умеют отправлять HTTP-запросы. Значит, любую модель можно вызвать одним POST-запросом из кода конфигурации или обработчика — без отдельной платформы и без привязки к одному производителю модели. PlusVibe даёт для этого один адрес https://plusvibeapi.ru/v1 в формате OpenAI: тот же запрос работает с моделями OpenAI, Anthropic, DeepSeek, Google и Alibaba, меняется только поле model. Список моделей и цены — на странице «Модели».
Для компании важнее техники обычно бухгалтерия, и здесь всё оформляется как обычная закупка услуги:
- Рубли и счёт на организацию. Баланс пополняется безналичным переводом по счёту, который формируется в кабинете по ИНН. Работать можно по оферте или по подписанному договору. Подробно — в статье «Оплата API нейросетей по счёту».
- Закрывающие документы по факту потребления. Акт формируется на сумму фактически потреблённых услуг за календарный месяц; формат первичного документа (акт или УПД) согласуется, обмен через ЭДО — по запросу. Документы выставляются «Без НДС»: оператор сервиса работает на УСН.
- Постоплата. Начинают все с предоплаты; после оплаченных периодов организация может оформить договорную постоплату с лимитом и сроком оплаты, которые фиксируются письменно. Условия — в статье «Постоплата за API для юрлиц».
- Модели на серверах в России. Если в текстах встречаются персональные данные или внутренние документы, есть модели, которые работают на серверах в России, — их список в статье «Модели на серверах в России».
Какие задачи закрывает нейросеть в 1С и Битрикс24
- Классификация входящих обращений. Письмо или сообщение из формы раскладывается по категориям («заказ», «возврат», «рекламация»…) и помечается как срочное — дальше это задача или маршрут в 1С либо в CRM.
- Описания товаров. Из характеристик номенклатуры генерируется текст для карточки на сайте или маркетплейсе.
- Разбор документов в JSON. Счёт, письмо или скан, распознанный в текст, превращается в поля с заранее известной структурой: номер, дата, ИНН, сумма.
- Ответы клиентам в открытых линиях Битрикс24. Чат-бот отвечает на типовые вопросы и передаёт остальное менеджеру.
- Резюме звонков. Расшифровка звонка (её можно получить через API транскрибации) сжимается в 2–3 пункта и следующий шаг для карточки сделки.
Пример для 1С: классификация обращения
В платформе 1С:Предприятие 8.3 (начиная с версии 8.3.6) для этого хватает штатных объектов: HTTPСоединение, HTTPЗапрос, ЗаписьJSON и ЧтениеJSON. Код ниже — функция общего модуля с флагом «Сервер». Она собирает тело запроса в формате OpenAI, отправляет его методом POST и разбирает ответ. Модель — deepseek-v4.1-flash, одна из самых дешёвых в каталоге; параметр response_format с типом json_object заставляет её вернуть валидный JSON.
// Общий модуль с флагом «Сервер». Классифицирует обращение через API PlusVibe.
Функция КлассифицироватьОбращение(КлючAPI, ТекстОбращения) Экспорт
Сообщения = Новый Массив;
Сообщения.Добавить(Новый Структура("role, content", "system",
"Ты классифицируешь входящие обращения клиентов. Верни JSON с полями category "
+ "(одно из: заказ, возврат, рекламация, бухгалтерия, другое) и urgent (true или false)."));
Сообщения.Добавить(Новый Структура("role, content", "user", ТекстОбращения));
Тело = Новый Структура;
Тело.Вставить("model", "deepseek-v4.1-flash");
Тело.Вставить("temperature", 0);
Тело.Вставить("max_tokens", 200);
Тело.Вставить("response_format", Новый Структура("type", "json_object"));
Тело.Вставить("messages", Сообщения);
Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку();
ЗаписатьJSON(Запись, Тело);
ТекстТела = Запись.Закрыть();
Заголовки = Новый Соответствие;
Заголовки.Вставить("Authorization", "Bearer " + КлючAPI);
Заголовки.Вставить("Content-Type", "application/json");
Запрос = Новый HTTPЗапрос("/v1/chat/completions", Заголовки);
Запрос.УстановитьТелоИзСтроки(ТекстТела, КодировкаТекста.UTF8,
ИспользованиеByteOrderMark.НеИспользовать);
Соединение = Новый HTTPСоединение("plusvibeapi.ru", 443, , , , 60,
Новый ЗащищенноеСоединениеOpenSSL());
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
ТекстОтвета = Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);
Если Не (Ответ.КодСостояния = 200) Тогда
ВызватьИсключение СтрШаблон("API вернул код %1: %2", Ответ.КодСостояния, ТекстОтвета);
КонецЕсли;
ОтветAPI = ПрочитатьJSONИзСтроки(ТекстОтвета);
Содержимое = ОтветAPI["choices"][0]["message"]["content"];
Разбор = ПрочитатьJSONИзСтроки(Содержимое);
Возврат Новый Структура("Категория, Срочно", Разбор["category"], Разбор["urgent"]);
КонецФункции
Функция ПрочитатьJSONИзСтроки(Текст)
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(Текст);
Результат = ПрочитатьJSON(Чтение, Истина); // Истина — читать в Соответствие
Чтение.Закрыть();
Возврат Результат;
КонецФункции
Несколько деталей, на которых обычно спотыкаются:
ОтправитьДляОбработки— это метод POST уHTTPСоединение. Таймаут в 60 секунд задан шестым параметром конструктора.- Тело записывается в UTF-8 без BOM — третий параметр
УстановитьТелоИзСтроки. - Ответ читается в
Соответствие(второй параметрПрочитатьJSONравенИстина), а не вСтруктура: так разбор не упадёт, если в JSON встретится ключ, который не является допустимым именем свойства. - Поле
contentв ответе — строка с JSON, поэтому её разбираем второй раз. - Если нужно проверять сертификат сервера, передайте в
ЗащищенноеСоединениеOpenSSLвторым параметром объект сертификатов удостоверяющих центров, напримерНовый СертификатыУдостоверяющихЦентровОС.
Выполнить 1С-код вне платформы мы не можем, поэтому проверили ровно тот же запрос через curl — тело совпадает с тем, что собирает функция:
curl https://plusvibeapi.ru/v1/chat/completions \
-H "Authorization: Bearer $PLUSVIBE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-v4.1-flash",
"temperature": 0,
"max_tokens": 200,
"response_format": {"type": "json_object"},
"messages": [
{"role": "system", "content": "Ты классифицируешь входящие обращения клиентов. Верни JSON с полями category (одно из: заказ, возврат, рекламация, бухгалтерия, другое) и urgent (true или false)."},
{"role": "user", "content": "Добрый день! Пришла партия с браком, 12 коробок повреждены. Нужна замена до пятницы, иначе встанет производство."}
]
}'
Ответ API (фрагмент):
{
"model": "deepseek-v4.1-flash",
"choices": [
{
"message": {
"role": "assistant",
"content": "{\"category\":\"рекламация\",\"urgent\":true}"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 113,
"completion_tokens": 165,
"completion_tokens_details": {
"reasoning_tokens": 151
}
}
}
Функция вернёт структуру с категорией «рекламация» и признаком срочности Истина. Обратите внимание на completion_tokens: DeepSeek V4.1 Flash сначала рассуждает, и токены рассуждения оплачиваются как выходные. Даже с ними такой запрос стоил меньше двух тысячных рубля — x-pv-cost-rub: 0.00147478 в заголовке ответа.
Где хранить ключ: не в тексте модуля и не на клиенте. Вызывайте функцию только на сервере, а ключ держите, например, в константе с ограниченными правами или в безопасном хранилище, если ваша конфигурация построена на БСП.
Пример для Битрикс24: чат-бот открытой линии
Чат-бот в Битрикс24 — это REST-приложение с правом (scope) imbot. Бот регистрируется методом imbot.register; для работы в открытых линиях указывается тип TYPE = 'O', а в EVENT_MESSAGE_ADD — адрес вашего обработчика. После этого бота можно выбрать в настройках открытой линии. Когда клиент пишет, портал присылает на обработчик событие ONIMBOTMESSAGEADD: текст лежит в data[PARAMS][MESSAGE], идентификатор диалога — в data[PARAMS][DIALOG_ID], а в auth — адрес REST портала и токен доступа. Ответ отправляется методом imbot.message.add.
Ниже — обработчик на PHP 8 без сторонних библиотек. Он подойдёт и для облачного портала (обработчик размещается на вашем сервере), и для коробочной версии. Файл handler.php начинается с открывающего тега PHP — в листинге он опущен, добавьте его первой строкой.
// Обработчик событий чат-бота Битрикс24 (событие ONIMBOTMESSAGEADD).
// Ключи читаем из переменных окружения, а не из кода.
const PV_URL = 'https://plusvibeapi.ru/v1/chat/completions';
const SYSTEM_PROMPT = 'Ты консультант интернет-магазина «Тепломаркет». Отвечай кратко и вежливо, по-русски. '
. 'Доставка по Москве — 1–2 дня, по России — 3–7 дней. Если вопрос о статусе конкретного заказа — '
. 'попроси номер заказа и скажи, что передашь вопрос менеджеру.';
function askAi(string $question): string
{
$body = [
'model' => 'gpt-5.6-luna',
'max_tokens' => 400,
'messages' => [
['role' => 'system', 'content' => SYSTEM_PROMPT],
['role' => 'user', 'content' => $question],
],
];
$ch = curl_init(PV_URL);
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 60,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('PLUSVIBE_API_KEY'),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode($body, JSON_UNESCAPED_UNICODE),
]);
$raw = curl_exec($ch);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($raw === false || $code !== 200) {
return 'Извините, сейчас не могу ответить. Передаю вопрос менеджеру.';
}
$data = json_decode($raw, true);
return $data['choices'][0]['message']['content'] ?? '';
}
function bitrixCall(array $auth, string $method, array $params): array
{
$ch = curl_init($auth['client_endpoint'] . $method . '.json');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 15,
CURLOPT_POSTFIELDS => http_build_query($params + ['auth' => $auth['access_token']]),
]);
$raw = curl_exec($ch);
curl_close($ch);
return json_decode((string) $raw, true) ?? [];
}
if (PHP_SAPI === 'cli') {
// Локальная проверка без портала: php handler.php "вопрос"
echo askAi($argv[1] ?? 'Здравствуйте!'), PHP_EOL;
exit;
}
$event = $_REQUEST['event'] ?? '';
$auth = $_REQUEST['auth'] ?? [];
// Событие должно прийти именно от вашего приложения.
if (($auth['application_token'] ?? '') !== getenv('B24_APPLICATION_TOKEN')) {
http_response_code(403);
exit;
}
if ($event === 'ONIMBOTMESSAGEADD') {
$params = $_REQUEST['data']['PARAMS'];
$answer = askAi($params['MESSAGE']);
bitrixCall($auth, 'imbot.message.add', [
'BOT_ID' => (int) getenv('B24_BOT_ID'),
'DIALOG_ID' => $params['DIALOG_ID'],
'MESSAGE' => $answer,
]);
}
Что мы проверили: запустили этот файл в PHP 8.3 и вызвали askAi() с живым API:
$ php handler.php "Здравствуйте, сколько ехать котлу до Казани?"
Здравствуйте! Доставка котла до Казани обычно занимает 3–7 дней. Если подскажете номер заказа, передам вопрос менеджеру для уточнения статуса.
Затем отправили на обработчик событие ONIMBOTMESSAGEADD в том формате, в каком его присылает портал, а вместо портала подставили заглушку REST. Обработчик ответил 200 и вызвал imbot.message.add с таким телом:
POST /rest/imbot.message.add.json
{
"BOT_ID": "42",
"DIALOG_ID": "chat17",
"MESSAGE": "Уточните, пожалуйста, номер заказа. Я передам вопрос менеджеру для проверки статуса.",
"auth": "tok"
}
Событие с чужим application_token получило 403 — так обработчик отсекает запросы не от вашего приложения. Сохраните application_token при установке приложения и BOT_ID из ответа imbot.register в переменных окружения.
Для резюме звонков бот не нужен: достаточно входящего вебхука портала и метода crm.timeline.comment.add, который добавляет комментарий в карточку сделки. Запрос к нейросети при этом такой же, как выше, — меняются только промпт и модель. Мы проверили этот сценарий на claude-haiku-5.5: из короткой расшифровки модель собрала три пункта (запрос клиента, бюджет, договорённость о замере) и следующий шаг. Запрос стоил 0,0067 ₽.
Похожий бот для Telegram разобран в статье «Telegram-бот с AI API».
Разбор документа в JSON: structured outputs
Когда результат читает не человек, а 1С, нужен JSON с фиксированными полями и типами. Для этого в response_format передаётся JSON Schema со strict: true — модель заполняет ровно эти поля. Режим поддерживают модели GPT-5.x; подробнее о трёх способах получить JSON — в статье «Structured Outputs: JSON Schema в ответах LLM» и в разделе документации «Structured outputs».
curl https://plusvibeapi.ru/v1/chat/completions \
-H "Authorization: Bearer $PLUSVIBE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.6-luna",
"max_tokens": 1500,
"messages": [
{"role": "system", "content": "Извлеки реквизиты из текста счёта. Если поля нет в тексте — верни null."},
{"role": "user", "content": "Счёт на оплату № 418 от 14.10.2026. Поставщик: ООО «Север-Логистик», ИНН 7701234567, КПП 770101001. Покупатель: ООО «Ромашка». Транспортно-экспедиционные услуги, 3 рейса — 54 000,00 руб. Без НДС. Итого к оплате: 54 000,00 руб. Оплатить до 21.10.2026."}
],
"response_format": {
"type": "json_schema",
"json_schema": {
"name": "invoice",
"strict": true,
"schema": {
"type": "object",
"additionalProperties": false,
"required": ["number", "date", "supplier_name", "supplier_inn", "total_rub", "vat", "due_date"],
"properties": {
"number": {"type": "string"},
"date": {"type": "string", "description": "YYYY-MM-DD"},
"supplier_name": {"type": "string"},
"supplier_inn": {"type": "string"},
"total_rub": {"type": "number"},
"vat": {"type": ["string", "null"]},
"due_date": {"type": ["string", "null"], "description": "YYYY-MM-DD"}
}
}
}
}
}'
Поле content ответа:
{
"number": "418",
"date": "2026-10-14",
"supplier_name": "ООО «Север-Логистик»",
"supplier_inn": "7701234567",
"total_rub": 54000,
"vat": "Без НДС",
"due_date": "2026-10-21"
}
Дата приведена к формату ISO, сумма стала числом, а «Без НДС» попало в нужное поле. Запрос занял 232 входных и 68 выходных токенов и стоил 0,0022 ₽. В 1С такой ответ разбирается той же функцией ПрочитатьJSONИзСтроки, а поля сразу ложатся в реквизиты документа. Проверяйте ИНН и суммы на стороне 1С — контрольная сумма ИНН и сверка с итогом документа надёжнее любой модели.
Сколько стоит обработать 1 000 документов
Возьмём типичный документ или письмо примерно на 1 500 токенов (около страницы текста) и ответ на 200 токенов — это 1,5 млн входных и 0,2 млн выходных токенов на тысячу документов. Цены — из каталога PlusVibe на 16 октября 2026 года, за 1 млн токенов:
| Модель | Вход, ₽/1M | Выход, ₽/1M | 1 000 документов |
|---|---|---|---|
| deepseek-v4.1-flash | 1,91 | 7,63 | ≈ 4,4 ₽ |
| claude-haiku-5.5 | 3 | 13 | ≈ 7,1 ₽ |
| gpt-5.6-luna | 3,4 | 20,37 | ≈ 9,2 ₽ |
| qwen3.6-35b (серверы в России) | 11,45 | 65,39 | ≈ 30,3 ₽ |
| claude-sonnet-5.5 | 59 | 294 | ≈ 147,3 ₽ |
Для классификации и извлечения полей обычно хватает первых трёх строк: разница в стоимости между ними — единицы рублей на тысячу документов, поэтому выбирайте по качеству на своих примерах. Тяжёлые модели оправданы там, где нужен длинный связный текст или сложный разбор. Учтите две поправки: у рассуждающих моделей выходных токенов больше, чем видно в ответе, а повторяющийся системный промпт может читаться из кеша дешевле — см. «Кэширование промпта». Цены меняются; актуальные на момент чтения: deepseek-v4.1-flash — 1,91 ₽/1M вход · 7,63 ₽/1M выход, gpt-5.6-luna — 3,4 ₽/1M вход · 20,37 ₽/1M выход, claude-haiku-5.5 — 3 ₽/1M вход · 13 ₽/1M выход.
Безопасность: ключи и лимиты
Все ограничения в PlusVibe задаются на уровне API-ключа, поэтому выпускайте отдельный ключ под каждую интеграцию: один для 1С, другой для бота Битрикс24, третий для тестовой базы. Баланс у них общий, а траты видны по каждому ключу.
- Лимит расхода, ₽. Когда списания по ключу его достигают, запросы получают 402, остальные ключи продолжают работать. Ошибка в цикле обработки или утечка ключа обойдётся не дороже лимита.
- Разрешённые модели. Ключ 1С можно ограничить одной моделью, под которую написан код; запрос к другой получит 403.
- Белый список IP. У сервера 1С и обработчика Битрикс24 обычно постоянный адрес — укажите его, и украденный ключ с другого адреса работать не будет.
- Лимит цены за 1 млн токенов — страховка от случайного переключения на дорогую модель.
Ключ не должен попадать в клиентский код, в выгрузки конфигурации и в репозиторий обработчика. Расходы удобно выгружать в свою отчётность через GET /v1/generations. Все настройки и примеры — в статье «Контроль расходов на API нейросетей в команде».
Частые вопросы
Нужен ли отдельный модуль или расширение для 1С?
Нет. Запрос отправляется штатными объектами платформы 8.3 — HTTPСоединение и HTTPЗапрос, JSON собирается и разбирается через ЗаписьJSON и ЧтениеJSON. Код можно положить в общий модуль, обработку или расширение конфигурации — как принято у вас.
Можно ли оплатить API по счёту и получить закрывающие документы?
Да. Счёт формируется в кабинете по ИНН организации, оплата — безналичным переводом в рублях. Акт выставляется на фактическое потребление за календарный месяц, обмен через ЭДО доступен по запросу. Документы выставляются «Без НДС».
Какую модель выбрать для разбора документов?
Начните с недорогой: gpt-5.6-luna поддерживает строгий JSON Schema, deepseek-v4.1-flash — режим json_object. Прогоните 20–30 своих документов и сравните поля с эталоном. Модель меняется одной строкой в поле model, код интеграции остаётся прежним.
Можно ли не отправлять данные за рубеж?
Для этого в каталоге есть модели, которые работают на серверах в России, например qwen3.6-35b. Их список и правила обработки данных — в статье «Модели на серверах в России».
Что будет, если ключ утечёт?
Ущерб ограничен лимитом расхода ключа, а белый список IP не даст пользоваться им с чужого адреса. Скомпрометированный ключ отключается в кабинете, остальные интеграции продолжают работать.



