+7 (999) 881-15-11

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

Расширение для 1С:Предприятия, добавляющее функционал создания Max-ботов, работающих напрямую из 1С

Лицензионное соглашение

Технические требования

  • Платформа 1С:Предприятие 8.3.25 и выше (возможно понижение, уточняйте перед приобретением)
  • Любые конфигурации на управляемых формах — типовые и нетиповые

Возможности

Отправка и получение

Сообщения
Файлы
Фото / изображения
Видео
Медиаколлекции
Аудио
Эмодзи (больше 4300) и стикеры
Контакты
Местоположение

Интерактив

Клавиатуры — с реализацией привязки к кнопкам любых данных 1С (ссылки, структуры и прочее)
Редактирование сообщений
Удаление сообщений
Информирование о действиях бота (например, "Идёт отправка видео...")

Внутренние механики

Авторассылки по спискам пользователей
Напоминания о незавершённых действиях (подпушивания)
Вебхуки
long-polling
Роутинг
Шаблонизатор
Автоматическое отслеживание ранее отправленных файлов
Журнал событий
Статистика

Групповые чаты и каналы

Полноценная работа с групповыми чатами и каналами
Администрирование (блокировки, права, статистика, описание и прочее)

Примеры кода

Отправка простого сообщения
Параметры = Новый Структура;
Параметры.Вставить("text", "Заявка принята. Мы свяжемся с вами.");
АСМ_М.ОтправитьСообщение(Бот, Параметры, Вход);
Сообщение с HTML-разметкой
Параметры = Новый Структура;
Параметры.Вставить("text", "Готово — документ проведён");
Параметры.Вставить("format", "html");
АСМ_М.ОтправитьСообщение(Бот, Параметры, Вход);
Прикладывание файла
Параметры = Новый Структура;
Параметры.Вставить("text", "Прайс-лист");
АСМ_М.ВложитьФайл(Параметры, ДвоичныеДанные, "price.xlsx");
АСМ_М.ОтправитьСообщение(Бот, Параметры, Вход);
Прикладывание фотографии
Параметры = Новый Структура;
Параметры.Вставить("text", "Фото с объекта");
АСМ_М.ВложитьИзображение(Параметры, ДвоичныеДанные, "photo.jpg");
АСМ_М.ОтправитьСообщение(Бот, Параметры, Вход);
Прикладывание клавиатуры
В кнопку можно вложить всё, что сериализуется в 1С. Подсистема сама корректно отправит идентификатор и восстановит значения при нажатии кнопки.
ЗаказКлиента = Документы.ЗаказКлиента.НайтиПоНомеру("АМ-00009999");

Клавиатура = Неопределено;
АСМ_М.Кнопка_callback(Клавиатура, "Согласовать", Новый Структура("Заказ, Согласовано", ЗаказКлиента, Истина));
АСМ_М.Кнопка_callback(Клавиатура, "Отклонить", Новый Структура("Заказ, Согласовано", ЗаказКлиента, Ложь));
АСМ_М.Кнопка_link(Клавиатура, "Открыть в 1С", "https://example.com/doc", Истина);

Параметры = Новый Структура;
Параметры.Вставить("text", "Выберите действие:");
АСМ_М.ВложитьКлавиатуру(Параметры, Клавиатура);
АСМ_М.ОтправитьСообщение(Бот, Параметры, Вход);
Отправка эмодзи
Параметры = Новый Структура;
Параметры.Вставить("text", "Заказ оформлен :OK_HAND: Ожидайте уведомление.");
АСМ_М.ОтправитьСообщение(Бот, Параметры, Вход);
Скачивание входящих файлов/видео/фото и пр.
Вложения = АСМ_М.ПолучитьВложения(Бот, Событие);
Для Каждого Вложение Из Вложения Цикл
	ЗаписатьФайлНаДиск(Вложение.ДвоичныеДанные, Вложение.ИмяФайла);
КонецЦикла;
Роутинг входящих событий
Указание роута:
АСМ_Роутинг.ДобавитьРоут("СтартБота", Роутер, "ТипСобытия = 'bot_started' ИЛИ Текст = '/start'");
Указание процедуры для роута:
СтартБота("СтартБота", Роутер, Бот, Событие, Вход);
Срабатывание:
Процедура СтартаБота(Ключ, Роутер, Бот, Событие, Вход)
	// Проверка условия ТипСобытия = 'bot_started' ИЛИ Текст = '/start'
	Если АСМ_Роутинг.Нет(Ключ, Роутер, Событие, Вход) Тогда Возврат; КонецЕсли;
	// Ответ на событие
	Параметры = Новый Структура("text", "Добро пожаловать!");
	АСМ_М.ОтправитьСообщение(Бот, Параметры, Вход);
КонецПроцедуры
Использование шаблонизатора для ответа
Содержимое шаблона:
Поступил заказ от #клиент на сумму #сумма
Формирование ответа через использование шаблона:
ПараметрыШаблона = Новый Структура;
ПараметрыШаблона.Вставить("клиент", "ООО Ромашка");
ПараметрыШаблона.Вставить("сумма", 15000);

Текст = АСМ_Шаблонизатор.ВывестиПоШаблону("УведомлениеОЗаказе", "", ПараметрыШаблона);
Параметры = Новый Структура("text", Текст);
АСМ_М.ОтправитьСообщение(Бот, Параметры, Вход);

Схема решения

Схема решения

Разработка через искусственный интеллект

Подсистема сразу заточена под ИИ-разработку.

Агенты и среды
  • Cursor
  • GitHub Copilot
  • Claude
  • ChatGPT
  • Google Gemini
  • и другие

При использовании конфигуратора:
  • Выгрузить подсистему по инструкции
  • Дать задание ознакомиться с кодом и документацией
  • Предоставить ТЗ
При использовании EDT:

Переносимость между базами

Функционал ботов отделён от подсистемы и может быть распространён на другие базы и конфигурации. Обработчик бота — это или общий модуль, или внутренняя обработка, или внешняя обработка. Предусмотренное в обработчике первоначальное заполнение (инициализация) создаёт необходимые боту состояния и шаблоны.

Отделение логики ботов от подсистемы даёт заказчику и программисту 1С плюсы при разработке и внедрении:

Рассылки

Разовые и периодические рассылки заготовленного контента от имени ботов. К рассылкам прилагаются списки получателей: вручную или динамически по отборам системы компоновки данных; динамические списки обновляются регламентным заданием. Перед запуском доступна тестовая отправка на пользователей, отмеченных как тестовые получатели.

Подпушивания

Это дожимы незавершённых действий пользователя. Примеры:

Роутинг

Роутинг направляет входящие события на разные процедуры — в зависимости от типа события и его содержимого. Условия задаются строкой в обработчике бота. Подробнее — в руководстве по роутингу.

Тип события
АСМ_Роутинг.ДобавитьРоут("СтартБота", Роутер, "ТипСобытия = 'bot_started'");
Точное совпадение текста
АСМ_Роутинг.ДобавитьРоут("Приветствие", Роутер, "Текст = 'Привет'");
Входящее фото
АСМ_Роутинг.ДобавитьРоут("ПрисланаФотография", Роутер, "Фото");
Несколько способов вызвать помощь
АСМ_Роутинг.ДобавитьРоут("Помощь", Роутер, "Команда = '/help' ИЛИ ИмяКнопки = 'Помощь' ИЛИ Текст = '/help'");
Переменная: граница по дате
Значение кладётся в роутер и подставляется через #имя.
Роутер.Вставить("НачалоТекущегоДня", НачалоДня(ТекущаяДата()));
АСМ_Роутинг.ДобавитьРоут("СвежиеОстатки", Роутер, "ИмяКнопки = 'Остатки' И Дата > #НачалоТекущегоДня");
Переменная: пользователь в списке, И и ИЛИ
Роутер.Вставить("ПривилегированныеПользователи", ПривилегированныеПользователи());
АСМ_Роутинг.ДобавитьРоут(
	"ОборотыЗаГод",
	Роутер,
	"Пользователь ВСписке #ПривилегированныеПользователи И (Текст = 'Обороты' ИЛИ Команда = '/sales')");
Именованное условие и сочетание И / ИЛИ
Условие задаётся один раз через ДобавитьИменованноеУсловие и вызывается как @имя.
Роутер.Вставить("Администраторы", Справочники.АСМ_Пользователи.НайтиПоКоду(5));
АСМ_Роутинг.ДобавитьИменованноеУсловие("ЭтоАдминистратор", Роутер, "Пользователь ВИерархии #Администраторы");

АСМ_Роутинг.ДобавитьРоут(
	"ОтчетДляАдминистраторов",
	Роутер,
	"@ЭтоАдминистратор И (ИмяКнопки = 'Отчет для администраторов' ИЛИ Текст = 'Отчет для администраторов')");

Шаблонизатор с версионностью

Собирает текст сообщений из справочника «Шаблоны». Шаблоны доступны пользователям для изменения в режиме 1С:Предприятия. Версионируются, и при ошибке заполнения доступен возврат к предыдущей версии. Подробнее — в руководстве по шаблонизатору.

Подстановка переменных
Здравствуйте, #клиент!
Сумма заказа: #сумма
Условие: есть имя или нет
@если #имя
Здравствуйте, #имя!
@иначе
Здравствуйте!
@конецесли
Условие: корзина пуста или нет
В @если одна переменная: для числа «не ноль», для строки — заполнена.
@если #товаровВКорзине
Товаров в корзине: #товаровВКорзине
@иначе
Корзина пуста
@конецесли
Обход коллекции
Состав заказа:

@для каждого позиция из #позиции цикл
• #позиция.номенклатура — #позиция.количество шт. × #позиция.цена
@конеццикла

Итого позиций: #количество
Обход коллекции и условие по полю элемента
@для каждого товар из #товары цикл
#товар.наименование — #товар.цена
@если #товар.скидка
скидка: #товар.скидка
@конецесли
@конеццикла
Именованные области
Вызов: ВывестиПоШаблону(Шаблон, "краткая", Параметры) — только выбранный фрагмент.
@область краткая
Статус заявки #номер: #статус
@конецобласти

@область подробная
Заявка #номер
Клиент: #клиент.имя
Статус: #статус
@конецобласти

Журнал, статистика, администрирование

Оптимизация отправки файлов

Оптимизирована работа с любыми двоичными данными (фото, видео, файлы и прочее). Один и тот же файл можно отправлять сотни раз: на серверы Max он загрузится лишь один раз, в дальнейшем подставляется токен, пока он действителен. Если токен недействителен, подсистема отправит файл заново и запомнит новый токен.

Эмодзи 👽❌ 👾❌ 🌮💩🍦✅

Мы все любим эмодзи ❤️. В подсистему они загружены из репозиториев 📦 консорциума Unicode 🌐, являющихся "первоисточником первоисточников" 📜. Более 4300 штук 📚 доступны для отправки в текстах 💬 и кнопках 🔘.

Демонстрационный код

Для скачивания доступен текстовый файл с кодом обработчика: ДемонстрационныйОбработчик.bsl