«Арете — сервер мессенджеров, Max edition»
Расширение для 1С:Предприятия, добавляющее функционал создания Max-ботов, работающих напрямую из 1С
Технические требования
- Платформа 1С:Предприятие 8.3.25 и выше (возможно понижение, уточняйте перед приобретением)
- Любые конфигурации на управляемых формах — типовые и нетиповые
Возможности
Отправка и получение
Интерактив
Внутренние механики
Групповые чаты и каналы
Примеры кода
Параметры = Новый Структура;
Параметры.Вставить("text", "Заявка принята. Мы свяжемся с вами.");
АСМ_М.ОтправитьСообщение(Бот, Параметры, Вход);
Параметры = Новый Структура;
Параметры.Вставить("text", "Готово — документ проведён");
Параметры.Вставить("format", "html");
АСМ_М.ОтправитьСообщение(Бот, Параметры, Вход);
Параметры = Новый Структура;
Параметры.Вставить("text", "Прайс-лист");
АСМ_М.ВложитьФайл(Параметры, ДвоичныеДанные, "price.xlsx");
АСМ_М.ОтправитьСообщение(Бот, Параметры, Вход);
Параметры = Новый Структура;
Параметры.Вставить("text", "Фото с объекта");
АСМ_М.ВложитьИзображение(Параметры, ДвоичныеДанные, "photo.jpg");
АСМ_М.ОтправитьСообщение(Бот, Параметры, Вход);
ЗаказКлиента = Документы.ЗаказКлиента.НайтиПоНомеру("АМ-00009999");
Клавиатура = Неопределено;
АСМ_М.Кнопка_callback(Клавиатура, "Согласовать", Новый Структура("Заказ, Согласовано", ЗаказКлиента, Истина));
АСМ_М.Кнопка_callback(Клавиатура, "Отклонить", Новый Структура("Заказ, Согласовано", ЗаказКлиента, Ложь));
АСМ_М.Кнопка_link(Клавиатура, "Открыть в 1С", "https://example.com/doc", Истина);
Параметры = Новый Структура;
Параметры.Вставить("text", "Выберите действие:");
АСМ_М.ВложитьКлавиатуру(Параметры, Клавиатура);
АСМ_М.ОтправитьСообщение(Бот, Параметры, Вход);
Параметры = Новый Структура;
Параметры.Вставить("text", "Заказ оформлен :OK_HAND: Ожидайте уведомление.");
АСМ_М.ОтправитьСообщение(Бот, Параметры, Вход);
Вложения = АСМ_М.ПолучитьВложения(Бот, Событие); Для Каждого Вложение Из Вложения Цикл ЗаписатьФайлНаДиск(Вложение.ДвоичныеДанные, Вложение.ИмяФайла); КонецЦикла;
АСМ_Роутинг.ДобавитьРоут("СтартБота", Роутер, "ТипСобытия = 'bot_started' ИЛИ Текст = '/start'");
Указание процедуры для роута:
СтартБота("СтартБота", Роутер, Бот, Событие, Вход);
Срабатывание:
Процедура СтартаБота(Ключ, Роутер, Бот, Событие, Вход)
// Проверка условия ТипСобытия = 'bot_started' ИЛИ Текст = '/start'
Если АСМ_Роутинг.Нет(Ключ, Роутер, Событие, Вход) Тогда Возврат; КонецЕсли;
// Ответ на событие
Параметры = Новый Структура("text", "Добро пожаловать!");
АСМ_М.ОтправитьСообщение(Бот, Параметры, Вход);
КонецПроцедуры
Поступил заказ от #клиент на сумму #суммаФормирование ответа через использование шаблона:
ПараметрыШаблона = Новый Структура;
ПараметрыШаблона.Вставить("клиент", "ООО Ромашка");
ПараметрыШаблона.Вставить("сумма", 15000);
Текст = АСМ_Шаблонизатор.ВывестиПоШаблону("УведомлениеОЗаказе", "", ПараметрыШаблона);
Параметры = Новый Структура("text", Текст);
АСМ_М.ОтправитьСообщение(Бот, Параметры, Вход);
Схема решения
Разработка через искусственный интеллект
Подсистема сразу заточена под ИИ-разработку.
Агенты и среды
- Выгрузить подсистему по инструкции
- Дать задание ознакомиться с кодом и документацией
- Предоставить ТЗ
- Подключить https://github.com/ondysss/codepilot1c-edt
- Дать задание ознакомиться с кодом и документацией
- Предоставить ТЗ
Переносимость между базами
Функционал ботов отделён от подсистемы и может быть распространён на другие базы и конфигурации. Обработчик бота — это или общий модуль, или внутренняя обработка, или внешняя обработка. Предусмотренное в обработчике первоначальное заполнение (инициализация) создаёт необходимые боту состояния и шаблоны.
Отделение логики ботов от подсистемы даёт заказчику и программисту 1С плюсы при разработке и внедрении:
- Один бот — несколько клиентов. Один и тот же «картридж» (или его ветка) можно вести для нескольких заказчиков одновременно: общая логика сценария остаётся общей, а различия баз и токенов остаются на стороне подсистемы («консоли») и настроек
- Ускоренная доработка во внешней обработке. Когда весь код бота сосредоточен во внешней обработке, правки вносятся и проверяются моментально: обновили файл обработки — бот уже с новым поведением, без лишних циклов обновления конфигурации
- Быстрая доставка доработок. Перезаписали внешнюю обработку — применились изменения. Закончили разработку и перешли к эксплуатации — поместили обработку внутрь конфигурации (примерно на 15% ускорит реакцию бота)
- Независимость от информационного наполнения базы. Логика бота живёт в обработчике, а не «размазана» по данным конкретной информационной базы. Сценарий можно перенести на другую базу, не таща за собой чужие остатки, документы и настройки
- Git. Обработку можно выгрузить в XML-файлы и отправить на гитхаб, открывая путь к версионности и групповой разработке
Рассылки
Разовые и периодические рассылки заготовленного контента от имени ботов. К рассылкам прилагаются списки получателей: вручную или динамически по отборам системы компоновки данных; динамические списки обновляются регламентным заданием. Перед запуском доступна тестовая отправка на пользователей, отмеченных как тестовые получатели.
Подпушивания
Это дожимы незавершённых действий пользователя. Примеры:
- пользователь добавил товары в корзину, но не перешёл к оплате — через день приходит уведомление: «Ваши товары ждут вас в корзине»
- пользователь ответил на пять вопросов из шести в опросе — спустя время приходит приглашение допройти опрос.
Роутинг
Роутинг направляет входящие события на разные процедуры — в зависимости от типа события и его содержимого. Условия задаются строкой в обработчике бота. Подробнее — в руководстве по роутингу.
АСМ_Роутинг.ДобавитьРоут("СтартБота", Роутер, "ТипСобытия = 'bot_started'");
АСМ_Роутинг.ДобавитьРоут("Приветствие", Роутер, "Текст = 'Привет'");
АСМ_Роутинг.ДобавитьРоут("ПрисланаФотография", Роутер, "Фото");
АСМ_Роутинг.ДобавитьРоут("Помощь", Роутер, "Команда = '/help' ИЛИ ИмяКнопки = 'Помощь' ИЛИ Текст = '/help'");
#имя.
Роутер.Вставить("НачалоТекущегоДня", НачалоДня(ТекущаяДата()));
АСМ_Роутинг.ДобавитьРоут("СвежиеОстатки", Роутер, "ИмяКнопки = 'Остатки' И Дата > #НачалоТекущегоДня");
Роутер.Вставить("ПривилегированныеПользователи", ПривилегированныеПользователи());
АСМ_Роутинг.ДобавитьРоут(
"ОборотыЗаГод",
Роутер,
"Пользователь ВСписке #ПривилегированныеПользователи И (Текст = 'Обороты' ИЛИ Команда = '/sales')");
ДобавитьИменованноеУсловие и вызывается как @имя.
Роутер.Вставить("Администраторы", Справочники.АСМ_Пользователи.НайтиПоКоду(5));
АСМ_Роутинг.ДобавитьИменованноеУсловие("ЭтоАдминистратор", Роутер, "Пользователь ВИерархии #Администраторы");
АСМ_Роутинг.ДобавитьРоут(
"ОтчетДляАдминистраторов",
Роутер,
"@ЭтоАдминистратор И (ИмяКнопки = 'Отчет для администраторов' ИЛИ Текст = 'Отчет для администраторов')");
Шаблонизатор с версионностью
Собирает текст сообщений из справочника «Шаблоны». Шаблоны доступны пользователям для изменения в режиме 1С:Предприятия. Версионируются, и при ошибке заполнения доступен возврат к предыдущей версии. Подробнее — в руководстве по шаблонизатору.
Здравствуйте, #клиент! Сумма заказа: #сумма
@если #имя Здравствуйте, #имя! @иначе Здравствуйте! @конецесли
@если одна переменная: для числа «не ноль», для строки — заполнена.
@если #товаровВКорзине Товаров в корзине: #товаровВКорзине @иначе Корзина пуста @конецесли
Состав заказа: @для каждого позиция из #позиции цикл • #позиция.номенклатура — #позиция.количество шт. × #позиция.цена @конеццикла Итого позиций: #количество
@для каждого товар из #товары цикл #товар.наименование — #товар.цена @если #товар.скидка скидка: #товар.скидка @конецесли @конеццикла
ВывестиПоШаблону(Шаблон, "краткая", Параметры) — только выбранный фрагмент.
@область краткая Статус заявки #номер: #статус @конецобласти @область подробная Заявка #номер Клиент: #клиент.имя Статус: #статус @конецобласти
Журнал, статистика, администрирование
- Журнал вызовов API, работы обработчиков, рассылок
- Статистика принятых событий
- Уведомления администратору бота при наступлении событий
Оптимизация отправки файлов
Оптимизирована работа с любыми двоичными данными (фото, видео, файлы и прочее). Один и тот же файл можно отправлять сотни раз: на серверы Max он загрузится лишь один раз, в дальнейшем подставляется токен, пока он действителен. Если токен недействителен, подсистема отправит файл заново и запомнит новый токен.
Эмодзи 👽❌ 👾❌ 🌮💩🍦✅
Мы все любим эмодзи ❤️. В подсистему они загружены из репозиториев 📦 консорциума Unicode 🌐, являющихся "первоисточником первоисточников" 📜. Более 4300 штук 📚 доступны для отправки в текстах 💬 и кнопках 🔘.
Демонстрационный код
Для скачивания доступен текстовый файл с кодом обработчика: ДемонстрационныйОбработчик.bsl