+7 (999) 881-15-11

«Арете — сервер мессенджеров, Max edition»

Создание первого бота

Создайте и заполните элемент справочника "Боты"

Основная страница бота:

  1. Наименование — как будете отличать бота в списках.
  2. Мессенджер — Max.
  3. Способ получения событий — опрос (polling). Для первого запуска выберите polling: 1С сама спрашивает события у Max, публиковать HTTP-сервис не нужно. Webhook оставьте на потом, когда будет постоянный HTTPS-адрес.
  4. Флаг «Используется» включён.
    Основные настройки бота
    Основные настройки бота
  5. Запишите элемент
  6. На закладке "Токен" введите токен бота через кнопку "Создать"
    Ввод токена max-бота
    Ввод токена max-бота
  7. Закладку "Обработчик" пока пропустите
  8. На закладке "Опрос" через кнопку "Создать" задайте настройки для работы через /GET Updates. Все значения можно оставить по умолчанию.
    Настройка polling max-бота
    Настройка polling max-бота
  9. Закладку "Вебхук" пока пропустите
  10. На закладке "Настройки" через кнопку "Создать" задайте общие настройки бота. Все значения кроме часового пояса можно оставить по умолчанию. Часовой пояс используется при расчёте даты в роутах — укажите часовой пояс по Гринвичу для своего региона.
    Общая настройка max-бота
    Общая настройка max-бота
  11. Остальные значения можно не трогать
  12. Важно — запишите элемент снова для обновления кэша настроек бота

Первичная проверка работоспособности бота

Кнопка "Кто я" вызывает метод GET /me

  1. Нажмите "Кто я"
  2. Успешный вызов метода завершится открытием окна с показом ответа в формате JSON
    Вызов метода GET /me max-бота
    Вызов метода GET /me max-бота

Создание первого сценария ("простейший бот")

Создадим следующий сценарий:

  • При старте бот сообщает о том, что он стартован
  • При отправке "Привет" бот нас приветствует в ответ
  • При отправке любого другого текста кроме "Привет" бот выводит отправленный ему текст
  • При отправке фото или видео бот сообщает о получении фото или видео

Важно — заменяйте Роутер = АСМ_НастройкиПовтИсп.СобратьРоутер(Бот); на Роутер = СобратьРоутер(Бот); на этапе доработки, для выключения кэширования роутинга.

  1. Создайте внешнюю обработку
  2. Вставьте код в модуль объекта внешней обработки

    Первый сценарий
    Функция СведенияОбОбработчике() Экспорт
    	
        Сведения = АСМ_Служебный.СведенияОбОбработчике();
        Сведения.Наименование = "Первый бот";
        Сведения.Версия = "1.0";
        Сведения.Информация = "Обработчик первого max-бота";
        Возврат Сведения;
    
    КонецФункции
    
    Функция ИнициализацияОбработчика(Бот) Экспорт
    	
    	СведенияОбОбработчике = СведенияОбОбработчике();
    	АСМ_Служебный.СоздатьШаблоныОбработчика(СведенияОбОбработчике);
    	АСМ_Служебный.СоздатьСостоянияОбработчика(СведенияОбОбработчике);
    	Возврат Истина;
    	
    КонецФункции
    
    Функция СобратьРоутер(Бот) Экспорт
    	
        Роутер = АСМ_Роутинг.ИнициализироватьРоутер(Бот);
        Роутер.Вставить("Сработало", 0);
    
        АСМ_Роутинг.ДобавитьРоут("СтартБота",   Роутер, "ТипСобытия = 'bot_started'");
        АСМ_Роутинг.ДобавитьРоут("Привет",      Роутер, "Текст = 'Привет'");
        АСМ_Роутинг.ДобавитьРоут("ФотоВидео",   Роутер, "Фото ИЛИ Видео");
        АСМ_Роутинг.ДобавитьРоут("ЛюбойТекст",  Роутер, "Текст ЗАПОЛНЕН И #Сработало = 0");
        Возврат Роутер;
    	
    КонецФункции
    
    Процедура ОбработатьСобытие(Бот, Событие, Вход) Экспорт
    	
        Роутер = АСМ_НастройкиПовтИсп.СобратьРоутер(Бот);
        Роутер.Вставить("Состояния", Вход.Состояния);
    	
        СтартБота	("СтартБота",	Роутер, Бот, Событие, Вход);
        Привет      ("Привет",      Роутер, Бот, Событие, Вход);
        ФотоВидео   ("ФотоВидео",   Роутер, Бот, Событие, Вход);
        ЛюбойТекст  ("ЛюбойТекст",  Роутер, Бот, Событие, Вход);
    	
    КонецПроцедуры
    
    Процедура СтартБота(Ключ, Роутер, Бот, Событие, Вход)
    	
        Если АСМ_Роутинг.Нет(Ключ, Роутер, Событие, Вход) Тогда Возврат КонецЕсли;
        Роутер.Сработало = Роутер.Сработало + 1;
    
        СтрП = Новый Структура;
        СтрП.Вставить("text", "Бот стартован!");
        АСМ_М.ОтправитьСообщение(Бот, СтрП, Вход, "Стартован бот");
    	
    КонецПроцедуры
    
    Процедура Привет(Ключ, Роутер, Бот, Событие, Вход)
    	
        Если АСМ_Роутинг.Нет(Ключ, Роутер, Событие, Вход) Тогда Возврат КонецЕсли;
        Роутер.Сработало = Роутер.Сработало + 1;
    
        СтрП = Новый Структура;
        СтрП.Вставить("text", "Привет, сейчас " + ТекущаяДата());
        АСМ_М.ОтправитьСообщение(Бот, СтрП, Вход, "Ответ на привет");
    	
    КонецПроцедуры
    
    Процедура ФотоВидео(Ключ, Роутер, Бот, Событие, Вход)
    	
        Если АСМ_Роутинг.Нет(Ключ, Роутер, Событие, Вход) Тогда Возврат КонецЕсли;
        Роутер.Сработало = Роутер.Сработало + 1;
    
        ЭтоФото = АСМ_М.СуществуетВложение("image", Событие);
        ЭтоВидео = АСМ_М.СуществуетВложение("video", Событие);
    
        Если ЭтоФото Тогда
            Текст = "Прислана фотография";
        Иначе
            Текст = "Прислано видео";
        КонецЕсли;
    
        СтрП = Новый Структура;
        СтрП.Вставить("text", Текст);
        АСМ_М.ОтправитьСообщение(Бот, СтрП, Вход, "Прислано фото или видео");
    	
    КонецПроцедуры
    
    Процедура ЛюбойТекст(Ключ, Роутер, Бот, Событие, Вход)
    	
        Если АСМ_Роутинг.Нет(Ключ, Роутер, Событие, Вход) Тогда Возврат КонецЕсли;
        Роутер.Сработало = Роутер.Сработало + 1;
    
        СтрП = Новый Структура;
        СтрП.Вставить("text", "Прислан текст: " + Событие.message.body.text);
        АСМ_М.ОтправитьСообщение(Бот, СтрП, Вход, "Ответ на любой текст (кроме привет)");
    	
    КонецПроцедуры

  3. Запишите внешнюю обработку. Название (в качестве примера) — "МаксБот.epf"
  4. Задайте обработку в качестве обработчика. Для этого, снова откройте элемент справочника "Боты", на закладке "Обработчик" через кнопку "Создать" пропишите расположение "Внешняя обработка" и задайте путь до файла обработки.
    Назначение обработчика max-бота
    Назначение обработчика max-бота

Запуск созданного сценария

  1. Откройте обработку "Получение событий"
    Обработка получения событий
    Обработка получения событий
  2. Выберите бота, нажмите "Старт"
Max-бот стартован. Теперь, если Вы что-то пишите в бота, он отвечает.

Уведомление — выбранный способ старта бота не является оптимальным, но является самым простым и демонстративным. Для работы бота в продуктивном режиме используйте регламентные задания или настроенные вебхуки.

Отслеживание входящих и исходящих событий

Для отслеживания предназначен "Журнал"

Журнал событий ботов
Журнал событий ботов

Что дальше

Для следующего шага в освоении подсистемы Вы можете подключить к созданному боту демонстрационный обработчик

Или, ознакомьтесь с возможностями роутинга и шаблонизатора

Возможные проблемы и способы их решения

  • Изменение параметров роутинга на приводит к изменению сценария — роутинг кешируется, и при изменении его параметров нужно либо явно очищать кэш через ОбновитьПовторноИспользуемыеЗначения, либо на этапе разработки отключить кеширование, заменив строку Роутер = АСМ_НастройкиПовтИсп.СобратьРоутер(Бот); сценария на строку Роутер = СобратьРоутер(Бот); (потом не забыть вернуть обратно)
  • Выполнение завершается с ошибкой — убедитесь, что внешняя обработка доступна с сервера 1С (если вариант работы 1С:Предприятия — клиент-серверный)
  • Выполнение всё равно завершается с ошибкой — расследуйте причину ошибки через журнал, в нём отражается всё происходящее с ботами, в том числе ошибки