Репозиторий шаблона разработки «Чат-бот Telegram». Код микросервиса для обработки сообщений.
Регистрация сотрудника в чат-боте может быть произведена:
-
Администратором. Администратор создает новую запись справочника "Пользователи чат-бота" и указывает в ней сотрудника. После сохранения записи администратору становится доступно действие "Получить рег. токен". Данный токен администратор отправляет сотруднику, а сотрудник в последствии использует его для регистрации в чат-боте.

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

Авторизация сотрудника происходит при каждом открытии главного меню чат-бота и по прошествии заданного времени с момента последней авторизации (время повтора авторизации задается в конфигурационном файле чат-бота в параметре USER_CHECK_INTERVAL, значение по умолчанию - 60 сек.). Авторизация заключается в том, что происходит поиск записи справочника "Пользователи чат-бота", в которой поле "ИД пользователя" (скрыто с формы) совпадает с ИД текущего пользователя в Telegram.
- В случае, если запись справочника "Пользователи чат-бота не найдена", чат-бот предлагает пользователю пройти процедуру регистрации.
- В случае, если запись справочника "Пользователи чат-бота найдена" и находится в состоянии "Закрыта", пользователю выводится сообщение "Ваша учетная запись заблокирована".
- В случае, если запись справочника "Пользователи чат-бота найдена" и находится в состоянии "Действующая", пользователь может выполнять действия в чат-боте.
- Чат-бот запрашивает наименование контрагента.

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

- Если список найденных контрагентов занимает больше 5 строк, то в список кнопок добавляются «Далее» и «Назад» для перехода по списку записей. Список записей, получаемых из сервиса интеграции, ограничивается 200 записями, т.к. при большем количестве найденных записей перемещаться по ним будет неудобно.
- При нажатии на кнопку с наименованием нужного пользователю контрагента, выводится информация о нем в текстовом виде.

- Чат-бот предлагает выбрать тип документа, по которому пользователь хочет осуществить поиск. Для этого чат-бот получает список типов документов из справочника "Типы документов" в Directum RX и выводит их наименования в виде кнопок клавиатуры в чат с пользователем.

- После выбора типа документа чат-бот предлагает ввести наименование документа.

- После ввода наименования документа чат-бот отправляет запрос в сервис интеграции Directum RX для получения списка документов с фильтром по типу документа и наименованию. Список ограничивается 200 документами, т.к. при большем количестве найденных записей перемещаться по ним будет неудобно. Если найдено более 5 документов, то в список кнопок добавляются «Далее» и «Назад» для перехода по списку записей. В список попадают только те документы, на которые у текущего сотрудника есть права на просмотр.

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

- Чат-бот запрашивает у пользователя описание заявки в свободной форме.
- После ввода текста заявки бот дает возможность пользователю прикрепить к сообщению вложения (например, фото или видео).

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

Конфигурация чат-бота задается в файле _ConfigSettings.xml (необходимо создать копию файла _ConfigSettings.xml.example):
- LOGS_PATH - Путь к папке для записи логов.
- TELEGRAM_BOT_API_KEY - API ключ телеграм-бота. Создать нового бота или получить его ключ можно через телеграм-бота @BotFather.
- INTEGRATION_SERVICE_URL - адрес сервиса интеграции Directum RX.
- INTEGRATION_USER_LOGIN - логин пользователя Directum RX, через которого будут отправляться запросы к сервису интеграции.
- INTEGRATION_USER_PASSWORD - пароль пользователя Directum RX
- SMTP_ADDRESS - адрес ящика электронной почты для отправки кода подтверждения при регистрации пользователя.
- SMTP_LOGIN - логин ящика электронной почты.
- SMTP_PASSWORD - пароль от ящика электронной почты.
- SMTP_HOST - адрес сервера электронной почты.
- SMTP_PORT - порт сервера электронной почты.
- SMTP_SECURE - тип шифрования подключения к почтовому серверу. Возможные значения: Auto, None, SslOnConnect, StartTls, StartTlsWhenAvailable.
- ENTITIES_ON_PAGE - количество сущностей, выводимых на одной "странице" при выводе списка сущностей в виде кнопок клавиатуры. Значение по умолчанию - 4.
- MAX_TOTAL_LENGTH_IN_MARKUP - максимальное суммарное количество символов в кнопках клавиатуры, рахмещаемых в однй строке. При превышении данного значения, кнопка переносится на следующую строку. Значение по умолчанию - 50.
- USER_CHECK_INTERVAL - Интервал в секундах для проверки авторизации пользователя в Directum RX. Значение по умолчанию - 60.
- Выполнить публикацию проекта Self-Contained.
- Содержимое заархивировать в zip, назвать BotWorkerService.zip
- Скопировать архив в \etc_builds_package
- На основе _ConfigSettings.xml.example создать _ConfigSettings.xml в папке \etc\services_config\BotWorkerService
- Добавить в конфиге ServiceRunner'а (\etc_services_config\ServiceRunner) строку:
<ServiceSetting Name="BotWorkerService" Config="BotWorkerService\_ConfigSettings.xml" Package="BotWorkerService.zip" ConfigWatcherEnabled="false" Disabled="false" />
- Склонировать репозиторий в локальную папку, либо скачать zip-архив;
- Собрать проект с помощью dotnet;
- Настроить конфигурацию чат-бота и логирования;
- Запустить сервис.
- Сделать fork репозитория TelegramBotIntegration для своей учетной записи;
- Склонировать созданный в п. 1 репозиторий в папку;
Рекомендуемый вариант для проектов внедрения.
- В системе контроля версий с поддержкой git создать новый репозиторий;
- Склонировать репозиторий TelegramBotIntegration в папку с ключом --mirror;
- Перейти в папку из п. 2;
- Импортировать клонированный репозиторий в систему контроля версий командой: git push --mirror <Адрес репозитория из п. 1>
- Расширение списка сущностей для получения их справочной информации в чат-боте.
- Структурирование и расширение сбора информации для отправки заявок.
- Вывод свойств документа при отправке в чат.
