«Арете — сервер мессенджеров, Max edition»
Создание первого бота
Создайте и заполните элемент справочника "Боты"
Основная страница бота:
- Наименование — как будете отличать бота в списках.
- Мессенджер — Max.
- Способ получения событий — опрос (polling). Для первого запуска выберите polling: 1С сама спрашивает события у Max, публиковать HTTP-сервис не нужно. Webhook оставьте на потом, когда будет постоянный HTTPS-адрес.
- Флаг «Используется» включён.
Основные настройки бота - Запишите элемент
-
На закладке "Токен" введите токен бота через кнопку "Создать"
Ввод токена max-бота - Закладку "Обработчик" пока пропустите
-
На закладке "Опрос" через кнопку "Создать" задайте настройки для работы через /GET Updates. Все значения
можно оставить по умолчанию.
Настройка polling max-бота - Закладку "Вебхук" пока пропустите
-
На закладке "Настройки" через кнопку "Создать" задайте общие настройки бота. Все значения кроме часового
пояса можно оставить по умолчанию. Часовой пояс используется при расчёте даты в роутах — укажите часовой
пояс по Гринвичу для своего региона.
Общая настройка max-бота - Остальные значения можно не трогать
- Важно — запишите элемент снова для обновления кэша настроек бота
Первичная проверка работоспособности бота
Кнопка "Кто я" вызывает метод GET /me
- Нажмите "Кто я"
- Успешный вызов метода завершится открытием окна с показом ответа в формате JSON
Вызов метода GET /me max-бота
Создание первого сценария ("простейший бот")
Создадим следующий сценарий:
- При старте бот сообщает о том, что он стартован
- При отправке "Привет" бот нас приветствует в ответ
- При отправке любого другого текста кроме "Привет" бот выводит отправленный ему текст
- При отправке фото или видео бот сообщает о получении фото или видео
Важно — заменяйте Роутер = АСМ_НастройкиПовтИсп.СобратьРоутер(Бот); на Роутер = СобратьРоутер(Бот); на этапе доработки, для выключения кэширования роутинга.
- Создайте внешнюю обработку
-
Вставьте код в модуль объекта внешней обработки
Первый сценарий Функция СведенияОбОбработчике() Экспорт Сведения = АСМ_Служебный.СведенияОбОбработчике(); Сведения.Наименование = "Первый бот"; Сведения.Версия = "1.0"; Сведения.Информация = "Обработчик первого max-бота"; Возврат Сведения; КонецФункции Функция ИнициализацияОбработчика(Бот) Экспорт СведенияОбОбработчике = СведенияОбОбработчике(); АСМ_Служебный.СоздатьШаблоныОбработчика(СведенияОбОбработчике); АСМ_Служебный.СоздатьСостоянияОбработчика(СведенияОбОбработчике); Возврат Истина; КонецФункции Функция СобратьРоутер(Бот) Экспорт Роутер = АСМ_Роутинг.ИнициализироватьРоутер(Бот); Роутер.Вставить("Сработало", 0); АСМ_Роутинг.ДобавитьРоут("СтартБота", Роутер, "ТипСобытия = 'bot_started'"); АСМ_Роутинг.ДобавитьРоут("Привет", Роутер, "Текст = 'Привет'"); АСМ_Роутинг.ДобавитьРоут("ФотоВидео", Роутер, "Фото ИЛИ Видео"); АСМ_Роутинг.ДобавитьРоут("ЛюбойТекст", Роутер, "Текст ЗАПОЛНЕН И #Сработало = 0"); Возврат Роутер; КонецФункции Процедура ОбработатьСобытие(Бот, Событие, Вход) Экспорт Роутер = АСМ_НастройкиПовтИсп.СобратьРоутер(Бот); Роутер.Вставить("Состояния", Вход.Состояния); СтартБота ("СтартБота", Роутер, Бот, Событие, Вход); Привет ("Привет", Роутер, Бот, Событие, Вход); ФотоВидео ("ФотоВидео", Роутер, Бот, Событие, Вход); ЛюбойТекст ("ЛюбойТекст", Роутер, Бот, Событие, Вход); КонецПроцедуры Процедура СтартБота(Ключ, Роутер, Бот, Событие, Вход) Если АСМ_Роутинг.Нет(Ключ, Роутер, Событие, Вход) Тогда Возврат КонецЕсли; Роутер.Сработало = Роутер.Сработало + 1; СтрП = Новый Структура; СтрП.Вставить("text", "Бот стартован!"); АСМ_М.ОтправитьСообщение(Бот, СтрП, Вход, "Стартован бот"); КонецПроцедуры Процедура Привет(Ключ, Роутер, Бот, Событие, Вход) Если АСМ_Роутинг.Нет(Ключ, Роутер, Событие, Вход) Тогда Возврат КонецЕсли; Роутер.Сработало = Роутер.Сработало + 1; СтрП = Новый Структура; СтрП.Вставить("text", "Привет, сейчас " + ТекущаяДата()); АСМ_М.ОтправитьСообщение(Бот, СтрП, Вход, "Ответ на привет"); КонецПроцедуры Процедура ФотоВидео(Ключ, Роутер, Бот, Событие, Вход) Если АСМ_Роутинг.Нет(Ключ, Роутер, Событие, Вход) Тогда Возврат КонецЕсли; Роутер.Сработало = Роутер.Сработало + 1; ЭтоФото = АСМ_М.СуществуетВложение("image", Событие); ЭтоВидео = АСМ_М.СуществуетВложение("video", Событие); Если ЭтоФото Тогда Текст = "Прислана фотография"; Иначе Текст = "Прислано видео"; КонецЕсли; СтрП = Новый Структура; СтрП.Вставить("text", Текст); АСМ_М.ОтправитьСообщение(Бот, СтрП, Вход, "Прислано фото или видео"); КонецПроцедуры Процедура ЛюбойТекст(Ключ, Роутер, Бот, Событие, Вход) Если АСМ_Роутинг.Нет(Ключ, Роутер, Событие, Вход) Тогда Возврат КонецЕсли; Роутер.Сработало = Роутер.Сработало + 1; СтрП = Новый Структура; СтрП.Вставить("text", "Прислан текст: " + Событие.message.body.text); АСМ_М.ОтправитьСообщение(Бот, СтрП, Вход, "Ответ на любой текст (кроме привет)"); КонецПроцедуры - Запишите внешнюю обработку. Название (в качестве примера) — "МаксБот.epf"
-
Задайте обработку в качестве обработчика. Для этого, снова откройте элемент справочника "Боты",
на закладке "Обработчик" через кнопку "Создать" пропишите расположение "Внешняя обработка" и
задайте путь до файла обработки.
Назначение обработчика max-бота
Запуск созданного сценария
-
Откройте обработку "Получение событий"
Обработка получения событий - Выберите бота, нажмите "Старт"
Уведомление — выбранный способ старта бота не является оптимальным, но является самым простым и демонстративным. Для работы бота в продуктивном режиме используйте регламентные задания или настроенные вебхуки.
Отслеживание входящих и исходящих событий
Для отслеживания предназначен "Журнал"
Что дальше
Для следующего шага в освоении подсистемы Вы можете подключить к созданному боту демонстрационный обработчик
Или, ознакомьтесь с возможностями роутинга и шаблонизатора
Возможные проблемы и способы их решения
-
Изменение параметров роутинга на приводит к изменению сценария — роутинг
кешируется, и при изменении его параметров нужно либо явно очищать кэш через
ОбновитьПовторноИспользуемыеЗначения, либо на этапе разработки отключить кеширование, заменив строкуРоутер = АСМ_НастройкиПовтИсп.СобратьРоутер(Бот);сценария на строкуРоутер = СобратьРоутер(Бот);(потом не забыть вернуть обратно) - Выполнение завершается с ошибкой — убедитесь, что внешняя обработка доступна с сервера 1С (если вариант работы 1С:Предприятия — клиент-серверный)
- Выполнение всё равно завершается с ошибкой — расследуйте причину ошибки через журнал, в нём отражается всё происходящее с ботами, в том числе ошибки