Универсальная подсистема Telegram-ботов для 1С

Поддерживаемые платформы и конфигурации

#

Минимальные системные требования
1 Версия платформы «1С: Предприятие» 8.3.11.2867 и выше
2 Виды поддерживаемых конфигураций Любая конфигурация на управляемых формах
3 Вариант «1С:Предприятие» Клиент-серверный, файловый
4 Рекомендуемое разрешение экрана 1024x768
5 Оперативная память 2048 Мб и выше
6 ЦП Процессор с архитектурой x86-64 (Intel с поддержкой EM64T, AMD с поддержкой AMD64)
7 Свободное место на HDD 10Гб и выше


Установка подсистемы

Во избежание непредвиденных обстоятельств, перед началом установки подсистемы рекомендуем создать резервную копию базы.

Установка дистрибутива "Универсальная подсистема telegram-ботов для 1С"

После создания копии основной базы приступим к скачиванию и установки дистрибутива подсистемы. На нашем сайте в разделе "Личный кабинет" - "Временные ссылки и дистрибутивы" скачиваем полный дистрибутив "Универсальная подсистема telegram-ботов для 1С". После скачивания открываем и распаковываем архив, в котором находятся необходимые для установки файлы. Запускаем файл setup.exe, который запустит процесс установки дистрибутива. В мастере установки нажимаем "Далее" и дожидаемся окончания. После можно переходить к следующему шагу.

Установка дистрибутива телеграм.png

Разрешение вносить изменения в состав конфигурации

После того как дистрибутив подсистемы установлен продолжим установку. Откроем конфигурацию в режиме "Конфигуратор". Если Ваша конфигурация полностью типовая, тогда напротив корня структуры конфигурации увидим замок с желтым кубом. Это означает, что конфигурация находится на поддержке. Если же замка нет, тогда можно перейти к следующему шагу установки. Чтобы разрешить вносить изменения перейдем в раздел "Конфигурация" - "Поддержка" - "Настройка поддержки".

Снятие поддержки.png

В открывшемся окне "Настройка поддержки" необходимо включить возможность изменения конфигурации, путем нажатия на одноименную кнопку.
Включить возможность редактирования.png

Перед Вами появится предупреждение конфигуратора, которое сообщает о том, что включение возможности изменения приведет к невозможности выполнять обновления конфигурации полностью автоматически. Нажимаем "Да", так как далее настроим правило в котором конфигурация будет редактироваться с сохранением поддержки.

Предупреждение.png


После нажатия кнопки "Да" откроется следующее окно "Настройка правил поддержки", в котором отмечаем два чек-бокса "Объект поставщика редактируется с сохранением поддержки. После этого закрываем настройки поддержки и можем наблюдать, что напротив корня структуры конфигурации исчез замок и остался только желтый куб. Это говорит нам о том, что теперь можно вносить изменения в состав конфигурации и при этом она не будет снята с поддержки.

Включена возможность редактирования.png

Добавление подсистемы в конфигурацию

После того как стала доступна возможность изменения конфигурации, перейдем в раздел "Конфигурация" и выберем пункт меню "Сравнить, объединить с конфигурацией из файла". 

Выбор пункта сравнить, объединить.png

Откроется проводник Windows, в котором необходимо выбрать файл подсистемы в формате 1Cv8.cf. По умолчанию (если при установки дистрибутива не изменялся путь) файл подсистемы расположен: C:\Users\Имя_пользователя\AppData\Roaming\1C\1cv8\tmplts\SoftOnIT\telegram
Далее будет предложено поставить подсистему на поддержку, нажмем "Да".

Поставить на поддержку.png

Далее в окне сравнения необходимо обязательно убрать галочку с корневого элемента конфигурации в колонке "Основная конфигурация".

Сравнение и объединение.png

Далее в этом же окне необходимо нажать кнопку "Действия" и в выпадающем меню выбрать пункт "Отметить по подсистемам файла". В появившемся окне отмечаем галочку только напротив подсистемы "Telegram", как показано на скриншоте ниже. Далее нажимаем кнопку "Установить".

Установка.png

Далее необходимо развернуть дерево конфигурации и перейти "Общие" - "Подсистемы". Напротив строки "Telegram" необходимо проверить наличие установленной галочки, если галки нет, устанавливаем и жмем "Выполнить".

Подсистемы активировать.png

Следом появится еще одно окно "Настройка правил поддержки", где нужно отметить галочку "Объект редактируется с сохранением поддержки" в разделе "Новые объекты поставщика"  и нажать "ОК".

Сохранение поддержки.png

После этого остается только выбрать каталог на диске, куда сохранить настройки объединения и дождаться объединения. Результатом успешной установки подсистемы будет диалоговое окно с сообщением об удачном завершении.  

Сохранение поддержки.png

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

Обновление основной конфигурации.png

Обновление подсистемы

Проверка и установка обновлений "Универсальная подсистема Telegram-ботов для 1С"

Для проверки обновлений перейдите в настройки подсистемы telegram "Telegram -> Настройки Telegram"

Telegram-Настройки_Telegram.png

Если в окне настроек есть блок обновлений, как на скриншоте, значит у Вас установлена не последняя версия и есть возможность обновиться. 

Окно настроек_Обновление.png

Нажимаем на гиперссылку "Скачать обновление" и попадаем на наш сайт по пути "Техподдержка" - "Личный кабинет". Если у Вас есть действующая подписка, тогда в разделе "Универсальная подсистема Telegram-ботов для 1С" на ряду с последней версией нажмите кнопку "Скачать"

Загрузка обновлений telegram на сайте softonit.png

Во избежание непредвиденных обстоятельств, перед началом установки обновления подсистемы рекомендуем создать резервную копию базы.

После скачивания распаковываем архив и запускаем установщик обновления файл setup.exe. Следуем указаниям установщика и устанавливаем файл обновления в выбранный Вами каталог.

Установка дистрибутива телеграм

Следующим шагом откроем конфигуратор базы, установим выделение корня структуры конфигурации и перейдем в раздел "Конфигурация" - "Поддержка" - "Обновить конфигурацию".
В появившемся окне "Обновление конфигурации" необходимо выбрать источник обновления конфигурации. Выбираем второй вариант "Выбор файла обновления" и нажимаем "Далее".

Обновление конфигурации

Далее необходимо указать в проводнике файл обновления, который был установлен ранее. Обычно он расположен в каталоге с номером версии обновления, например, 1_0_0_3\1Cv8.cfu. 

Файл обновления

Далее появится окно "Обновление конфигурации", в котором нам сообщают о возможности обновления. Соглашаемся и нажимаем "ОК".

Обновление конфигурации

Далее в окне сравнения необходимо обязательно убрать галочку с корневого элемента конфигурации в колонке "Основная конфигурация".

Окно обновления конфигурации

Далее в этом же окне необходимо нажать кнопку "Действия" и в выпадающем меню выбрать пункт "Отметить по подсистемам новой конфигурации поставщика".
В появившемся окне отмечаем галочку только напротив подсистемы "Telegram", как показано на скриншоте ниже. Далее нажимаем кнопку "Установить" и "Выполнить".

Установка по подсистемам новой конфигурации поставщика

После этого сохраняем настройки объединения в любой каталог на жестком диске. Далее в окне "Настройки правил поддержки" необходимо активировать чек-бокс "Объект редактируется с сохранением поддержки" как на скриншоте ниже.

Сохранение поддержки

После чего получаем сообщение об успешном завершении.

Завершено


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

Обновление основной конфигурации.png

Настройка подсистемы

Описание работы подсистемы конфигурации

Справочники

Справочник "Telegram боты"

Справочник предназначен для хранения списка ботов в конфигурации. Т.е. те боты, с которыми мы работаем.
Имя бота и токен - это системные реквизиты, которые нам становятся известны при создании бота.
Активность - включает или выключает работу с ботом в конфигурации.
Способ взаимодействия с ботом. Конфигурация может взаимодействовать с ботом двумя способами через Web hook (новые сообщения сами отправляются серверу 1С. Этот способ не всегда возможно использовать) и используя Периодический запрос (периодический опрос сервера Telegram на предмет новых сообщений). Во избежание сложных настроек и вопросов "почему мы не можем настроить", мы рекомендуем вам использовать периодический запрос.
Ограниченный доступ - флаг, который определяет что делать с новыми пользователями, которые "стучатся" боту и пишут ему сообщения. Если галочка снята, то любой пользователь, который напишет боту автоматически может работать с ботом и полностью использовать все его команды без ограничений. Если флаг установлен, то после того, как пользователь напишет боту, бот запишет в справочники Пользователи Telegram этого пользователя с отключенной галочкой доступ, пользователя уведомит о том, что пока администраторы в 1С не подтвердят, вашу учетную запись, вы не сможете работать с ботом. Мы рекомендуем вам по умолчанию установить галочку. Чтобы отсечь не нужные контакты и обезопасить себя.

Для тех, кто хочет использовать web hook.
Адрес - HTTPS-адрес, на который бот будет отправлять обновления без секретного ключа.
Ключ - секретный ключ, по которому будут идентифицироваться сообщения Telegram.
Самоподписанный сертификат - если вы используете самоподписанный сертификат, то необходимо установить этот флаг.
Имя сертификата - PEM-файл самоподписанного сертификата.
После того, как все для web hook настроено, необходимо нажать "Отправить настройки", чтобы бот понял, что вы переходите на webhook модель взаимодействия.
Важно! Нельзя одновременно использовать периодический запрос и web hook. Так же обратите внимание, что если Telegram запрещен в вашей стране, то вы не сможете использовать этот способ взаимодействия.

Если все верно настроено, нажмите на кнопку "Обновить статус". И вы узнаете какой статус у бота на данный момент.

Справочник "Пользователи Telegram"

Справочник хранит профили пользователей, которые взаимодействуют с ботами Telegram. Реквизиты этого справочника стандартные для профиля.
Наименование - наименование профиля
Имя профиля - имя профиля в Telegram.
Фамилия, Имя - информация из профиля Telegram.
(!) Активность - обратите внимание, что если галочка снята, то пользователь не сможет взаимодействовать с ботом. По умолчанию для новых пользователей для ботов с огранчиенным доступом (см. выше) эта галочка снята.
Язык - язык пользователя установленный в Telegram.
Пользователь - связь со стандартным справочником Пользователи. Позволяет соединить пользователя Telegram и пользователя информационной базы.
Табличная часть "Обозначения" - подстроки, как можно именовать пользователей. К Telegram не имеет никакого отношения. Позволяет в командах использовать сокращения имен пользователей для их идентификации.

Справочник "Прокси-серверы"

Этот справочник виден только тогда, когда установлена галочка "Использовать прокси-серверы для отправки и получения данных Telegram". Возможна работа с серверами прокси по протоколам HTTPS и SOCKS5. Работа с этим справочником необходима для стран в которых запрещен Telegram. Механизмы, которые используются в конфигурации позволяют эффективно вести оценку используемым прокси и использовать только те из них, которые стабильно работают. Ведется статистика использования каждого прокси и каждый из них имеет свою интегрированную оценку (время ответа сервера, успешных/не успешных запросов к прокси, .
Так же стоит иметь ввиду, что есть возможность из формы списка этого справочника открыть сайт с прокси и подобрать себе нужный прокси бесплатно.

Справочник "Команды"

Этот справочник - сердце подсистемы. Именно он понимает нужно ли выполнять действия команды или нет. Суть справочника проста, если выполняются на закладках "Условия И" и/или "Условия ИЛИ" (или их комбинация), то будут выполнены все действия этой команды в табличной части "Действия".

Telegram - База знаний (2).jpg Справочник содержит табличные части:
Табличная часть "Входящий текст" на закладке "Условия И" - табличная часть где проверяется входящий текст, который прислал боту Telegram пользователь. Команда сработает, если сработают все условия в этой табличной части одновременно. Т.е. если в табличной части будут две строки:
Условия И
То что бы команда выполнилась необходимо чтобы введенный текст содержал обе эти подстроки:
Т.е. выполнится команда если пользователь введет: "Получить последние остатки" или "Какие последние остатки?". Т.е. одновременно в тексте присутствует слово "получить" и "остатки".

Закладки «Условие ИЛИ» - команда сработает, если сработает хотя бы одно условия в табличной части. Т.е. если в табличной части будут две строки. То, что бы команда выполнилась необходимо чтобы введенный текст содержал хотя бы одну из этих подстрок.
Пример: команда выполнится если пользователь введет: "Получить остатки" или "Какие остатки?". Т.е. в тексте присутствует слово "остатки", хотя нет "последние".

Табличная часть "Параметры" - на этой закладке означает что будут проверены все указанные параметры по условиям и необходимо одновременное выполнение всех условий с параметрами. Что такое параметры и зачем они нужны, мы рассмотрим ниже.

Табличная часть "Входящий текст" - Если одновременно есть строки и во входящем тексте "Условия И" и "Условия ИЛИ", то между этими условиями будет поставлено "И".
Применить остальные команды - флаг, который означает, что если команда будет выполнена, то больше никакие команды не нужно применять.

Пример для понимания как это все работает. Пользователь написал нашему боту: "Сколько сейчас времени?".
В "Условиях И" есть строка "содержит - сколько", в "Условиях ИЛИ" две строки: "равно - времени", "равно - время".
Анализ текста будет произведен так (ВходящийТекст СОДЕРЖИТ "сколько") И (ВходящийТекст РАВНО "времени" ИЛИ ВходящийТекст РАВНО "время"). Если все верно для входящего текста, то будут выполнены команды.

Табличная часть "Действия" - действия, которые будут выполнены, если будут выполнены условия И/ИЛИ с их параметрами.

Справочник "Действия"

То, что будет выполнено, если условия в команде будут выполнены. Действия могут быть какими угодно. Что-то записать в информационную базу, что-то ответить пользователю, выполнить какую-то обработку данных и т.п.. Действия выполняются в порядке их следования в таблице сверху вниз
Активность - выполнять действие или нет.
Алгоритм - код на языке 1С, который может что-то выполнить.
Табличная часть "Действия над параметрами" - что сделать над параметрами. Параметры рассмотрим ниже.

Пример действия приветствия пользователя.

Действие.png

Этот код вернет отправит пользователю текстовое сообщение и отобразит клавиатуру с наименованием "Стартовая". Справа есть панель с быстрыми действиями, которые могут быть выполнены. После того, как воспользуемся кнопкой справа, в текст алгоритма вставиться текст, который позволит что-то отправить пользователю. Вдаваться в подробности программирования в этой части мы не будем, но подчеркнем, что эта возможность есть и она "базовая", т.е. эта возможность доступна пользователям соответствующих редакций.

Справочник "Условия"

Здесь мы можем задать условия параметров действий. Суть этого справочника в следующем. Для каждого чата есть какой-то контекст его выполнения. Пользователь, который пишет команды может использовать сразу несколько связанный между собой условий. Примером такого поведения является текущее местоположение в древовидном меню. В самом начале мы в главном меню. Щелкнули на кнопку "Инфо по клиенту", мы перешли на следующий уровень и там свое меню. И т.д. Или какие-то другие данные связанные между собой в цепочку.
Пример: если мы захотим ввести новое задание, нам необходима тема, описание, файлы вложения и т.д. Без введенной темы, мы не можем ввести описание.

Чтобы добавить в команду проверку параметров, необходимо подготовить условия проверки в справочнике «Условия». Закладка «Проверка параметров» содержит таблицу с условиями проверки значения параметра. Строки в таблице имеют логическую связку «И». С помощью галочки «Есть программная проверка» можно добавить произвольный программой код на языке 1С, который при выполнении вернет переменной Результат значение Истина или Ложь.
Параметры - это переменные, которые хранятся для каждого пользователя подсистемы. Эти переменные можно задействовать при программировании своих команд и действий.

Табличная часть "Проверка параметров" - список проверяемых реквизитов.
Рисунок3.jpg

Справочник "Emoji"

Это справочник смайликов. По умолчанию они не хранятся в информационной базе. Их можно подгрузить. Смысл такой, что каждый такой смайлик по сути это символ в Unicode-кодировке. В справочнике можно увидеть какому изображению какой код соответствует.

Справочник "Клавиатуры"

Это кнопки, которые добавляются либо внизу над вводимым текстом нового сообщения, либо в режиме "inline", т.е. прям в выводимом боту/ботом сообщении.
Элементы этого справочника могут быть либо заданы жестко, либо программно, либо вообще это скрытая клавиатура.

Документы "Входящие сообщения"

То, что присылают нам пользователи. История об этих действиях сохраняется и мы всегда можем проанализировать когда, кто и что присылал боту. Установив константу "Срок хранения сообщений Telegram" в настройках можно задать сколько дней хранить эти сообщения.

Документы "Исходящие сообщения"

То, что отправляет конфигурация боту Telegram. История об этих действиях сохраняется и мы всегда можем проанализировать когда, кто и что присылал боту. Установив константу "Срок хранения сообщений Telegram" в настройках можно задать сколько дней хранить эти сообщения.

Создание и настройка Telegram-бота

Для начала необходимо, установить мессенджер.
Убедитесь, что Telegram не заблокирован в вашей стране и корректно работает на вашем устройстве. Если мессенджер заблокирован, то вы можете использовать на десктопе или мобильном телефоне прокси-сервера.
1. Далее зарегистрируйтесь в сервисе (если вы еще этого не делали)
2. В поиске найдите бота с именем BotFather - это "отец" всех ботов. Этот бот позволяет создавать других ботов и введите команду /newbot.

Добавление нового бота @fatherbot

3. После этого мессенджер попросит вас придумать имя бота: можете ввести произвольное имя. Далее вводим уникальное имя бота (username), не должно содержать пробелы, самое главное, чтобы оно заканчивалось на "_bot". Например, softonit_first_bot.
4. Далее, бот отобразит для доступа по HTTP специальный токен. На скриншоте выше он начинается как "2019695642..." Это токен для доступа из подсистемы. Запомните его.
5. Открываем Telegram -> Настройки Telegram. Там щелкаем на гиперссылку Telegram-боты. Это список наших ботов. Бот может быть не один, но практически всегда нам достаточно будет и одного.
Справочник telegram ботов
6. Открываем первого бота, который уже существует и вносим его токен и название.

2021-10-25_10-19-23.png

7. После вставки токена и имени бота, нажимаем проверка связи. Если все хорошо, то вам будет выдано сообщение "Проверка связи с ботом выполнена успешно".
8. Перейдем на закладку "Настройки получения обновлений", где можно настроить расписание работы бота. Установите время получения обновлений с серверов Telegram.
9. Если все введено на шаге 8, но у вас ошибка (например, Telegram заблокирован в вашей стране). Установите галочку в настройках Telegram "Использовать прокси-серверы для отправки и получения данных Telegram" и открыв появившийся справочник "Прокси-серверы" заполните список ваших прокси.
10.Возвращаемся к мессенджеру Telegram и сделаем последние шаги по настройке бота. Введем ему описание и изображение.

Изменить описание бота
Зададим изображение. OK. Send me the new profile photo for the bot. означает, что бот просит скинуть ему фото профиля будущего бота. Просто перетащите фото в BotFather:

Изменить картинку бота

После этого настройку бота можно считать выполненной как в 1С, так и в самом мессенджере.

Способы взаимодействия с ботом

На текущий момент есть три способа взаимодействия с telegram-ботами:
1) Периодический запрос на основе регламентного задания (Стабильный способ для серверных баз)
2) Периодический запрос на основе обработки "Периодическое обновление телеграм" (Стабильный способ для файловых баз)
3) Вебхук (webhook) самый быстрый и эффективный способ, но его тяжело настроить (поэтому рекомендуем использовать первые два способа).

Ниже приведены схемы работы периодического запрос и webhook.

Периодический запрос:
Принцип работы периодического запроса.jpg

Схема периодический запрос.jpg

Webhook:
Важно обратить внимание, на то, что сервер телеграм будет работать только с портами 80, 88, 443, 8443

Принцип работы вебхук
Схема вебхук

Настройка Webhook

1

Для настройки вебхука необходимо запустить конфигуратор от имени администратора и выполнить публикацию базы на веб сервере, с включенным HTTP-сервисом «Telegram», более подробнее про публикацию базы 1С на веб-сервере IIS по ссылке (https://softonit.ru/blog/articles/it/publishing-1C-databases-on-the-IIS-web-server/)

Публикация на веб-сервер.png
2

Проверяем подключение к HTTP-сервису по адресу http://имя_хоста/имя_публикации/hs/telegram, если переход выполняется успешно, но требует авторизацию переходим к пункту 3, если при переходе не требует авторизации и открывается страница со словами «Привет. HTTP-сервис Telegram НЕ доступен по этому адресу» переходим к пункту 4, а в любом ином случае возвращаемся к первому пункту и пытаемся опубликовать правильно.

3

Если веб-публикация требует авторизации, необходимо «вшить» логин и пароль в файл публикации, для сервера IIS это делается следующем образом:
1. Находим папку с нашей web-публикацией, по умолчанию она находится в C:\inetpub\wwwroot\имя_публикации, в моем случае “webka”.
2. Делаем копию данной папки, и называем ее любым другим именем, например “webka_webhook”.
3. В скопированной папке открываем файл «default.vrd» любым текстовым редактором производим изменения файла:
      a. Если имеется тэг <ws>, полностью, со всем содержимым удаляем его.
      b. В теге <httpServices> удаляем все наполнение, кроме <service name="Telegram" rootUr………./>
      c. В теге <point> вносим изменения, как на скриншоте, логин и пароль для подключения к ИБ, и параметр enable=”false” запретит подключение в режиме тонкого клиента.
Тег point       d. Сохраняем изменения
4. Открываем “Диспетчер служб IIS” в древе подключений находим нашу публикацию (в моем случае “webka”), щелкаем по ней правой кнопкой мыши и нажимаем «Добавить приложение»
5. В открывшемся окне заполняем физический путь, до скопированного каталога (в моем случае «C:\inetpub\wwwroot\webka_webhook»), заполняем псевдоним «webka_webhook», нажимаем «ОК» и в диспетчере IIS перезапускаем сервер.
6. Проверяем переход по новой публикации, в моем случае http://имя_хоста/webka_webhook/hs/telegram, если не запрашивает авторизацию и пишет «Привет. HTTP-сервис Telegram НЕ доступен по этому адресу», переходим к пункту 4, иначе еще раз внимательно проходим пункт 3.

4

Для работы с вебхука, необходимо иметь постоянный адрес к базе через интернет, а именно фиксированное доменное имя или белый IP. Пытаемся подключится к публикации через интернет http://внешний IP или доменное имя/имя публикации/hs/telegram, если переход удался переходим к следующему пункту, иначе проверяем настройки маршрутизатора.

5

Очень важно, чтобы Ваше соединение было защищено SSL сертификатом, иначе телеграм-сервер не захочет взаимодействовать. (Если не знаете как получить сертификат бесплатно, воспользуйтесь данной инструкцией https://softonit.ru/blog/articles/it/Installing-creating-free-Lets-Encrypt-certificate-in-IIS-Windows-for-1C-Company/

6

Пробуем перейти к публикации по HTTPS протоколу https://внешний IP или доменное имя/имя публикации/hs/telegram, обращаем на наличие SSL сертификата, он не должен быть просроченным или вызывать подозрения…

ssl
7

Публикация готова! Осталось перенастроить бота, для этого, в 1с открываем справочник «Боты», выбираем необходимого бота и изменяем параметр «Способ взаимодействия с ботом» на «Вебхук»

8

После изменения способа взаимодействия, появится вкладка «Настройки Webhook», нажимаем на нее и выполняем шаги в последовательности указанной на скришоте

>
webhook
9

(Ускорение работы для файловых баз) Для того, чтобы добиться максимально быстрого отклика Telegram-бота необходимо поддерживать сеанс вебхука в 1С, рекомендуется создать .bat файл с данным текстом:

:beginning
    curl "http://localhost:88/uit_webhook/hs/telegram"
    cls
    ping -n 1 -w 10000 192.168.254.254> NUL
goto beginning

Замените адрес "...localhost:88/uit_webhook..." на свой локальный адрес расположения вебхука. Добавьте .bat файл в планировщик заданий, чтобы он запускался при запуске компьютера

10

Настройка вебхука завершена!

Добавление собственных команд и действий

Постановка задачи

Пусть пользователь в Telegram отправит боту команду "Последний добавленный контрагент" или "/LastPartner" а в ответ на эту команду, 1С вернет наименование элемента справочника "Контрагенты", который был добавлен самым последним. Если элементов в справочнике нет, то необходимо просигнализировать об этом.

Решение

Для начала необходимо добавить команду. Именно команда определяет какое действие необходимо выполнить. Так как у нас команда может быть введена несколькими способами, то нам надо воспользоваться вкладкой "Условия ИЛИ".
Добавление команды

Условие ИЛИ сработает, когда одно из условий будет выполнено. Теперь перейдем к действиям. При написании алгоритма можно воспользоваться кнопками справа для быстрой вставки кода нужных команд:

Добавление действия

Ну и получившийся результат:

Результат выполнения команды

Выводы

Понятно, что это элементарный пример, но наша задача передать суть работы команд и действий. А этот пример как нельзя кстати все это описывает.
Далее в статьях будет описан более подробный механизм работы и  примерм сценария работы.


Действия

Действия – это программный код на языке 1С (весь код выполняется на сервере, другими словами с директивой &НаСервере). Помимо использования стандартного кода 1С работы с информационной базой, в системы телеграм-бот, есть процедуры и функции, которые часто используются при написании действий.

Вспомогательные объекты, процедуры и функции работы с ними.

Параметры действия.

Установить и получить значение параметра действия.

Это можно сделать во вкладке «Действия над параметрами», если значение статическое. Если его необходимо получить программным способом, то используются процедура и функция:

Важно! Параметры должны быть предварительно созданы в справочнике «Параметры действий».

1.       УстановитьПараметрДействия(НакопленныеДанные.НастройкиБота.Ссылка, НакопленныеДанные.ИдентификаторЧата, ПараметрДействия("НаименованиеПараметра"), ЗначениеПараметра); - записывает значение параметра в справочник если он был заранее создан в справочнике.

 

2.       ЗначениеПараметра(НакопленныеДанные.Параметры, "НаименованиеПараметра"); - возвращает значение параметра из справочника или «Неопределено» если параметр не задан или не был записан.

Пример:

Создаем в справочнике параметр ПлановоеВремя, т.к. будем передавать туда дату в виде строки, то тип параметра ставим «Строка»


Параметр действия.jpg

ПлановоеВремяСтрокой = «20221031100000»;

УстановитьПараметрДействия(НакопленныеДанные.НастройкиБота.Ссылка, НакопленныеДанные.ИдентификаторЧата, ПараметрДействия("ПлановоеВремя"), ПлановоеВремяСтрокой);

Первые два параметра необходимы, чтобы привязать значение переменной к конкретному боту и чату.

ДатаДокумента = ЗначениеПараметра(НакопленныеДанные.Параметры, "ПлановоеВремя");

Сообщить (Дата(ДатаДокумента)); // 31.10.2022 11:00:00


Таким образом можно сохранять, получать и обрабатывать, значение различных объектов, для необходимых операций.


Произвольный параметр.

В него можно записать произвольную таблицу значение с набором нужных данных в формате Json строки. Параметр не надо заранее создавать. Это регистр каждая запись содержит данные о боте, чате и значение параметра. 

Создание и запись значения в произвольный параметр:


СтрокаJSON = TelegramСервер.ЗаписьТаблицыЗначенийВJSONСтроку([ТаблицаЗначений]);  

TelegramСервер.УстановитьПроизвольныйПараметр(НакопленныеДанные.НастройкиБота.Ссылка,
НакопленныеДанные.ИдентификаторЧата
"НаименованиеПараметра", СтрокаJSON);


 - В регистре TelegramПроизвольныеПараметры будет создана запись с идентификаторами бота и чата, с названием параметра и записано его значение, в виде Json строки, предварительно подготовленной. 


Пример: Есть запрос, для выборки документов по определенным условиям. Заполняем таблицу значений выбранными данными. Переводим таблицу в Json строку и записываем в произвольный параметр.

2022-12-02_14-13-29.png

...


Рис.1.png

Данные по боту и сеансу

В процессе написания команды могут возникнуть вопросы, где получить дополнительные данные типа идентификатора бота и тому подобное? Для этого существую две специализированные структуры: НастройкиБота  и НакопленныеДанные .
Первая, как понятно из названия, содержит в себе параметры бота и имеет следующий вид:
  • Ссылка - СправочникСсылка.TelegramБоты - ссылка на бота 
  • Наименование - Строка - наименование бота
  • Токен - Строка - токен бота
  • ОграниченныйДоступ - Булево - Если Истина, то у новых пользователей бота ограниченный доступ
Вторая - содержит данные с информацией по сеансу пользователя и имеет следующие поля: 
  •   ИдентификаторЧата - Число - идентификатор чата с пользователем.
  •   ИдентификаторОбновления - Число - идентификатор получения обновления сообщения.
  •   ИдентификаторСообщения - Число - идентификатор сообщения.
  •   НастройкиБота - Структура - настройки бота.
  •   Ошибки - Структура - список ошибок, которые возникли в процессе проверок/действий.
  •   Параметры - Структура - параметры сеанса текущего пользователя Telegram.
  •   Сообщения - Структура - список сообщений, которые будут отправлены боту.
  •   ФИОПользователяTelegram - Строка - ФИО пользователя в профиле Telegram.
  •   ИмяПользователяTelegram - Строка - имя пользователя в профиле Telegram.
  •   ИмяПрофиля - Строка - имя профиля Telegram.
  •   ПользовательTelegram - СправочникСсылка.TelegramПользователи - кто прислал сообщение в Telegram.
  •   Пользователь - СправочникСсылка.Пользователи - кто прислал сообщение в Telegram.
  •   ТекстСообщения - Строка - текст последнего сообщения
  •   ТипСообщения - Перечисления.TelegramТипСообщения - тип последнего сообщения (текст, фото, стикер, документ, аудио, документ, запрос).
  •   ДатаСообщения - Дата - дата последнего сообщения Telegram.
  •   Сообщение - ДокументСсылка.TelegramСообщениеВходящее - последнее сообщение Telegram.

Использование клавиатур

С каждым сообщением бот может отправлять разный набор кнопок как по количеству, так и по назначению. Кнопки можно расположить непосредственно под сообщением «Встроенная клавиатура» (InlineKeyboardButton), или зафиксировать под тестовым полем для ввода сообщения «Стандартная клавиатура» (KeyboardButton).


Стандартная клавиатура

Основной плюс – ее не нужно выводить с каждым сообщением. Клавиатура будет оставаться под строкой ввода ответа пока ее не удалить или не заменить на другую.

В окне создания клавиатуры указываем ее имя для обращения к ней при выводе сообщения и добавляем набор кнопок указывая номера строк и текст. Текст будет написан на кнопке, и он же будет отправляться сообщением боту при нажатии на кнопку.




Встроенная клавиатура

Создание встроенной клавиатуры аналогично стандартной. Добавляются еще два столбца:

URL – можно указать ссылку;

Callback_data – данные (которые будут возвращены боту при нажатии), поэтому можно дописывать различные идентификаторы и т.п. например «/dok00-00001245», это не портит вид, но можно обработав данные выполнить различные варианты действий например найти документ по номеру;


Нажатие на кнопку не выводит текст в чат. А просто отправляется боту. Используя это, а также в место «Отправить сообщение» - «Редактировать сообщение». Получаем возможность не выводя новый экран Сообщение + Клавиатура, изменить это же.


 


Программная клавиатура

Стандартная и встроенная клавиатуры, могут быть созданы с помощью языка 1С. Это необходимо при вариативности создания клавиатуры.

Пример: Создание списка документов в виде кнопок, для последующего выбора.




В этом примере будет выведен список документов в виде кнопок. Количество кнопок, надписи на кнопках, и команда, формируются динамически в зависимости от состава таблицы значений «СписокДокументов», который в одном из примеров выше был передан клавиатуре из действия.  Сама клавиатура является «Встроенной», об этом говорит признак "inline_keyboard".


Части кода для создания клавиатуры можно быстро добавлять с помощью кнопок на правой панели. В текст кнопок также можно вставлять смайлики.  


Оформление текста сообщения

Текст сообщения можно оформить, используя HTML или Markdown разметку. Возможность оформления сообщения ограничены. Поддерживаются следующие возможности:


Как видно из таблицы набор оформления для HTML шире. Для украшения также можно использовать смайлики (emoji), выбрав из предлагаемого набора или найдя в интернете таблицу кодов и вставив желаемый в текст.

Также в текст можно добавлять команды в формате /[английский текст, цифры, _ и -], при нажатии на такую команду она отправиться боту.


Результат.jpg

Общая схема работы Telegram-бота. Пример сценария



Пример сценария.

Сценарий: Вывод списка документов со статусом «ожидается», с возможностью выбора нужного документа.


1.       Сообщение пользователя – «Ожидается», было отправлено нажатием кнопки [Ожидается]. 




2. В команде «Список транспорта» выполнилось условие. Поэтому начнет выполняться действие «Список транспорт».
 

3.       Полный код действия «Список транспорт» в Приложении №1


Здесь описаны некоторые блоки:  

Из сообщения полученного ботом берем ссылку на бота.



Записываем значение «ожидается» для параметра действия с именем «Статус».





Собранные данные о списке документов помещаем в регистр для хранения данных в формате JSON, чтобы при последующих действиях по новой не собирать информацию с базы, а использовать уже подготовленную.




Формируем данные для отправки сообщения и переходи к созданию клавиатур «Список транспорт», а также «Вид обработки».


4. Создадим клавиатуру «Список транспорт»


Из переданного в действии Сообщения.СписокДокументов, берем данные (текс, префикс и ключ для команды) и формируем кнопки. Эта клавиатура будет под сообщением.



5. Создадим клавиатуру «Вид обработки».

Эта клавиатура будет расположена под полем вводы ответа.




Работа с прокси-серверами

Подсистема ботов Telegram позволяет работать с прокси-серверами с учетом состояния каналов для разных прокси.
Справочник предназначен для хранения информации о промежуточных прокси-серверах, через которые будет работать конфигурация взаимодействуя с ботом.
Мы можем внести несколько прокси и работать через них. При этом подсистема умеет:

1. Загрузить список бесплатных прокси
2. Предпринимать попытки отправки через другой прокси, если по какой-то причине попытка неудачна.
3. Собирать статистику отправки через разные прокси и в начале пытаться отправлять с помощью прокси, по убыванию успешности отправки прокси

Отправленное сообщение увеличивает вес прокси, не отправленное сообщение вес уменьшает. Это позволяет хорошим прокси "всплыть" в верх и использоваться чаще, а те, через которые отправка осуществляется плохо, будут внизу и, соответственно, использоваться реже.

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

  • сумма успешных и неуспешных отправлений за месяц;
  • успешность последней отправки;
  • сумма успешных и неуспешных отправлений за текущий день 

Каждый из указанных показателей имеет свой коэффициент - 7/12, 3/12 и 2/12 соответственно. Коэффициенты подобраны эвристически.

При этом неуспешное отправление при суммировании за день засчитывается не за -1 а за -0,8. Такую оценку словами можно описать примерно так: "если прокси хорошо отправлял в течении предыдущего месяца (читай 30 предшествующих дней, то скорее всего будет выбран он, однако если в течении дня прокси работал нестабильно и последняя отправка была неудачной, то возможно его рейтинг снизится).

Каждая отправка и не отправка через прокси-сервер записывается и влияет на его рейтинг.

Реквизиты справочника:

  • Активность - использовать прокси-сервер для отправки сообщений или нет.
  • Протокол - протокол прокси-сервера (https или socks5).
  • Сервер - имя прокси-сервера (IP-адрес или DNS-имя).
  • Порт - порт прокси-сервера.
  • Пользователь - имя пользователя прокси-сервера.
  • Пароль - пароль пользователя подключения прокси-сервера.
  • Комментарий - произвольный комментарий.

Предопределенные команды

Команды для "Управление IT-Отделом 8"

Предопределенные команды для "Управление IT-Отделом 8" находятся по данной ссылке.

 Начать курс обучения1