Плагин 1С в Алисе AI для бизнеса: как устроен и что показала проверка
Я подключил плагин "1С:Предприятие" из Яндекс 360 к тестовой базе и посмотрел, что он делает на самом деле. Сначала штатно, с расширением и публикацией, потом через журналирующий прокси, чтобы видеть каждый вызов. Ниже без домыслов: какие методы вызывает Алиса, как выглядит ее токен, где расширение ведет себя странно и почему в итоге мы стали отдавать этот протокол со своего шлюза.
Что в комплекте
Архив, который Яндекс дает администратору: расширение API_Яндекс.cfe, обработка "Подготовка публикации JWT", файл default.vrd и две инструкции, для администратора и для пользователя. Расширение добавляет в конфигурацию HTTP-сервис с корнем ApiV1. Файл default.vrd описывает публикацию этого сервиса и содержит блок проверки токенов: издатель neuroaccounting.ya.ru, получатель 1c-onprem, открытый ключ Яндекса и правило "имя пользователя 1С берется из поля sub токена".
Последнее правило и есть главная особенность схемы. Алиса приходит с подписанным токеном, в котором написано имя пользователя. 1С сверяет подпись и пускает под этим именем без пароля. Отсюда требование завести служебного пользователя: его имя должно совпасть с тем, что вписано в плагине.
Стенд
Файловая демо-база Бухгалтерии предприятия 3.0 на свежей платформе, публикация в IIS отдельным сайтом, наружу через туннель. Расширение поставил, default.vrd подложил, служебного пользователя завел. Между туннелем и IIS поставил маленький прокси, который пишет в файл заголовки, тело запроса и тело ответа. Без него виден только код ответа, а хотелось видеть протокол целиком.
Первая заминка случилась еще до Алисы: перепубликация базы из конфигуратора затирает подложенный default.vrd, и публикация снова начинает требовать пароль. Правило простое: сначала публикуем, потом правим файл, потом не публикуем поверх. В инструкции Яндекса об этом нет.
Что вызывает Алиса
На вопрос "найди первые 10 товаров" в первый раз ушло ровно три вызова:
GET /hs/ApiV1/custom_code/list_metadata_objects?metaType=Справочники&nameMask=Номенклатура
GET /hs/ApiV1/custom_code/get_metadata_structure?metaType=Справочники&name=Номенклатура
POST /hs/ApiV1/custom_code/runQuery {"queryText": "ВЫБРАТЬ ПЕРВЫЕ 10 ..."}
Алиса сама пишет в чате, что справочники это "резервный путь", а готовые инструменты дают документы и ведомости. Готовых инструментов оказалось больше, чем три: documentsTypes отдает все типы документов конфигурации с синонимами, documents отдает документы за период по списку типов с суммами, контрагентами и назначением платежа, accounts отдает план счетов, accounts/balance_sheet строит оборотно-сальдовую ведомость по счетам за период, с раскрытием субсчетов и разбивкой по субконто.
Вид метаданных приходит по-русски, "Справочники", хотя сервис понимает и латиницу. Запросы идут с нескольких адресов Яндекса, с заголовком Traceparent и подписью YandexUserproxy в User-Agent. Токен живет 45 минут и выпускается почти на каждый вызов. Внутри: адрес публикации целиком, издатель, имя пользователя, получатель, время выпуска и срок.
Метаданные Алиса читает не каждый раз: после первого чтения список объектов и структура живут у нее, и в следующих разговорах она идет сразу в запрос.
Где расширение ведет себя странно
Первое, что бросилось в глаза в логе: на ошибочный запрос расширение отвечает кодом 200 и телом из одного слова. Успешный ответ runQuery это не JSON, а распечатка массива средствами 1С, с отступами и квадратными скобками. Ошибка запроса, например несуществующий объект, приходит как слово "Структура". Не разобранное тело запроса как "Неопределено". Похоже на вызов Строка() от результата вместо сериализации.
Следствие видно в поведении Алисы: она не понимает причину отказа и повторяет тот же запрос три-четыре раза подряд с разных адресов, потом ищет обход. В моем случае она достала номенклатуру через оборотно-сальдовую ведомость по счету 41, когда прямой запрос молча отказал. Умно, но долго, и на большой базе это лишняя нагрузка.
Второе: длина адреса. Вызов documents со списком из трех десятков типов документов в строке запроса получил 404, короткие списки проходили. Обычное ограничение веб-сервера на длину URL, но плагин его не обходит.
Третье, и это уже про безопасность. Все методы у меня открылись без токена Яндекса вообще, под обычной авторизацией 1С с пустым паролем служебного пользователя. Расширение токен не проверяет, проверяет только публикация. Если публикация настроена не так, как в default.vrd из архива, а хостер или администратор настроил ее по-своему, опубликованную базу защищает только имя пользователя. И еще: методы documents и balance_sheet отдают наружу прямые ссылки на объекты базы с внутренними идентификаторами.
Что сделано хорошо
Готовые инструменты продуманы под бухгалтера. Ответ documents это готовый деловой JSON: тип, номер, дата, организация, контрагент, ИНН, сумма, проведен, назначение платежа. Ведомость отдается по организациям с сальдо и оборотами в рублях и валюте. Для типовой Бухгалтерии этого хватает на большинство вопросов руководителя без единого произвольного запроса.
Сама Алиса на этих данных отвечает хорошо: таблица, короткий вывод, уточняющий вопрос. Ошибки в бизнес-логике есть, как у любой модели, но не больше, чем у ChatGPT или Claude на той же базе.
Почему мы стали отдавать этот протокол сами
Наш сервис уже подключает 1С к ChatGPT и Claude без публикации базы: обработка в базе сама ходит на шлюз по исходящему соединению. После разбора протокола стало ясно, что плагину Яндекса можно отдать то же самое. Поле адреса в плагине свободное, подпись токена проверяется открытым ключом из их же комплекта, формат ответов снят с живого стенда.
Что получилось. Клиент выдает в кабинете ключ для Алисы, вписывает адрес в плагин и все. Веб-сервер, публикация, расширение, служебный пользователь, белый адрес и сертификат не нужны. Работает с файловой базой, с облаком, с УПП и УТ 10.3, куда расширение не встанет. Ошибки отдаются Алисе текстом, и она перестает повторять запрос вслепую. Ссылки с идентификаторами наружу не уходят, персональные данные маскируются, каждый вызов виден в журнале. Одинаковые вызовы в пределах минуты отвечаются из памяти, чтобы повторы Алисы не били по базе.
И что не изменилось. Протокол чужой, Яндекс может его менять; неизвестные вызовы мы пишем в журнал, чтобы увидеть это первыми. Пункты про счета и ведомости в торговых конфигурациях не работают ни у них, ни у нас: там нет бухгалтерского регистра, и об этом Алисе говорится прямо. Точность ответов остается на модели.
Пошаговая инструкция подключения: Как подключить Алису AI для бизнеса к 1С без публикации базы. Разборы по конфигурациям и типовым заминкам в разделе Практика.