«Арете — сервер мессенджеров, Max edition»
Создание первого бота
Свой бот выводят на связь через карточку в 1С, токен Max, приём событий и минимальный обработчик. Установка расширения и заполнение справочников — отдельно, в руководстве по установке. Готовый учебный сценарий — в подключении демобота.
Перед началом
Нужны установленное расширение, действующая лицензия и инициализация подсистемы
(методы Max, справочники роутинга, эмодзи, регламент «Очистка журнала»).
Роль — АСМ — Администратор подсистемы.
С сервера 1С должен уходить HTTPS к API Max.
Для первого запуска берите polling: 1С сама спрашивает события у Max, публиковать HTTP-сервис не нужно. Webhook оставьте на потом, когда будет постоянный HTTPS-адрес.
Бот в Max
В кабинете разработчика Max создайте бота и скопируйте токен. Документация API: dev.max.ru/docs-api. Токен храните только в регистре «АСМ — Токены», в код обработчика его не вшивайте.
Карточка бота в 1С
Справочник АСМ — Боты. Новый элемент:
- Наименование — как будете отличать бота в списках.
- Мессенджер — Max.
- Способ получения событий — опрос (polling).
- Флаг «Используется» включён.
Ключ для привязки регламентных заданий подсистема заполняет сама.
Из карточки открываются связанные регистры: токены, опросы, вебхуки, обработчики, настройки бота.
В настройках сразу укажите часовой пояс — от него считается Дата в роутах.
Токен и «Кто я»
- Из карточки бота откройте Токены, добавьте запись, вставьте токен, включите «Используется».
- Команда «Кто я» в карточке бота вызывает метод API и показывает JSON.
Если в ответе имя и идентификатор бота — связь с Max есть, до обработчика ещё не дошли. Ошибка на этом шаге почти всегда токен, сеть или то, что бот в 1С не «используется».
Получение событий
Опрос (polling)
1С периодически запрашивает обновления. Позиция опроса хранится в регистре Max-маркер.
- В карточке бота заполните Опросы (polling): длительность long polling, таймаут соединения, лимит событий за запрос, сервер API.
- Откройте обработку Регламентные задания подсистемы, создайте задание вида «Опрос» для этого бота и запустите его.
Пока отлаживаете, удобнее обработка Получение событий: опрос идёт, пока открыта форма, без ожидания регламента.
Webhook
Max сам шлёт HTTP POST на опубликованный сервис АСМ_Вебхук (корневой URL asm_webhook, шаблон /{Ключ}).
Нужны публикация HTTP-сервиса на веб-сервере 1С, запись в регистре Вебхуки (адрес, секрет, ключ)
и регистрация webhook на стороне Max. Для первого бота это лишний контур — вернётесь, когда polling уже отвечает в чат.
Первый обработчик
Логика бота живёт не в расширении АСМ, а в обработчике — общем модуле, внутренней или внешней обработке, либо в файле, лежащем в хранилище записи регистра АСМ — Обработчики. Для первого бота проще внешняя обработка: правите файл — поведение меняется без обновления конфигурации.
В регистре укажите бота, расположение, имя (или путь к .epf), включите «Используется».
Для внутренней обработки отметьте, модуль объекта это или модуль менеджера.
«Режим разработки» включает отладочные возможности на время отладки.
Обработчик отдаёт подсистеме четыре точки входа. Ниже — минимальный комплект: ответ на старт диалога.
Функция СведенияОбОбработчике() Экспорт Сведения = АСМ_Служебный.СведенияОбОбработчике(); Сведения.Наименование = "Первый бот"; Сведения.Версия = "1.0"; Сведения.Информация = "Ответ на старт диалога"; Возврат Сведения; КонецФункции
Функция ИнициализацияОбработчика(Бот) Экспорт Сведения = СведенияОбОбработчике(); АСМ_Служебный.СоздатьШаблоныОбработчика(Сведения); АСМ_Служебный.СоздатьСостоянияОбработчика(Сведения, Бот); Возврат Истина; КонецФункции
/start. Результат кэшируется на сеанс.
Функция СобратьРоутер(Бот) Экспорт Роутер = АСМ_Роутинг.ИнициализироватьРоутер(Бот); АСМ_Роутинг.ДобавитьРоут( "СтартБота", Роутер, "ТипСобытия = 'bot_started' ИЛИ Текст = '/start'"); Возврат Роутер; КонецФункции
Процедура ОбработатьСобытие(Бот, Событие, Вход) Экспорт
Роутер = АСМ_НастройкиПовтИсп.СобратьРоутер(Бот);
СтартБота("СтартБота", Роутер, Бот, Событие, Вход);
КонецПроцедуры
Процедура СтартБота(Ключ, Роутер, Бот, Событие, Вход)
Если АСМ_Роутинг.Нет(Ключ, Роутер, Событие, Вход) Тогда Возврат; КонецЕсли;
Параметры = Новый Структура("text", "Добро пожаловать!");
АСМ_М.ОтправитьСообщение(Бот, Параметры, Вход);
КонецПроцедуры
Подробнее про ключи, Нет() и кэш — в руководстве по роутингу.
После правки СобратьРоутер сбросьте кэш повтотно используемых значений или откройте новый сеанс.
Проверка
- Напишите боту в Max
/startили откройте диалог заново (событиеbot_started). - Должно прийти «Добро пожаловать!».
- В Журнале — входящее событие и исходящая отправка.
- В справочниках Чаты и Пользователи появятся записи.
Нет ответа, а «Кто я» уже работал: смотрите, запущено ли получение событий, включён ли обработчик, совпал ли ключ роута с вызовом процедуры, нет ли исключения в журнале.
Что дальше
- Роутинг — команды, кнопки, вложения, именованные условия.
- Шаблонизатор — тексты из справочника, версии, откат.
- Демобот — готовый набор методов Max API, если ещё не разворачивали.
- Файл ДемонстрационныйОбработчик.bsl — полный модуль демо для копирования приёмов.
Частые ошибки
- Токен есть, «Кто я» молчит — исходящий HTTPS с сервера 1С до API Max не проходит.
- Опрос не заведён или регламент не запущен: бот в Max живой, 1С событий не видит.
- Обработчик не «используется» или указано не то имя модуля / путь к
.epf. - Для внешней обработки включён безопасный режим без нужных прав — вызовы HTTP из обработчика падают.
- Ключ в
ДобавитьРоути в вызове процедуры различаются —Нет()всегда уводит в выход. - Поменяли роуты и ждёте эффект без сброса кэша
СобратьРоутер. - Webhook без публикации
АСМ_Вебхуки без регистрации URL в Max.