С инструкцией по поэтапной установке и настройке Artix:TgBot можно ознакомиться разделе "Установка и настройка Artix Telegram Bot".
Установка Artix:TgBot
Для установки Artix:TgBot необходимо cкачать и запустить скрипт установки:
curl https://update.artix.su/static/cs/install_scripts/stable/telegram_bot/install.sh -o /tmp/install.sh chmod +x /tmp/install.sh /tmp/install.sh
Для проверки состояния Artix:TgBot выполните команду:
service artixcs-telegram-bot status
Обновление
Для обновления Artix:TgBot необходимо выполнить команды:
sudo apt update sudo apt install artixcs-telegram-bot
Для обновления можно использовать скрипт установки:
curl https://update.artix.su/static/cs/install_scripts/stable/telegram_bot/install.sh -o /tmp/install.sh chmod +x /tmp/install.sh /tmp/install.sh stable true
Настройка
Настройка работы Artix:TgBot осуществляется в конфигурационном файле application.properties, расположенном в директории /opt/artixcs-telegram-bot/.
| Наименование | Тип данных | Возможные значение | Описание | Примечания |
|---|---|---|---|---|
| server.port | целочисленный | Порт сервиса | По умолчанию 3300 | |
| su.artix.telegram.bot.token | строковый | Токен для подключения Telegram-бота к сторонним сервисам | По умолчанию your_token | |
| su.artix.telegram.bot.accountingservice.prefix | строковый | URL для доступа к бонусному серверу | По умолчанию | |
| su.artix.telegram.bot.accountingservice.user | строковый | Имя пользователя для доступа к бонусному серверу | По умолчанию Необходимо указать существующий терминал на бонусном сервере | |
| su.artix.telegram.bot.accountingservice.password | строковый | Пароль для доступа к бонусному серверу | По умолчанию значение не задано | |
| su.artix.telegram.bot.csservice.prefix | строковый | URL для доступа к кассовому серверу | По умолчанию | |
| su.artix.telegram.bot.csservice.user | строковый | Имя пользователя для доступа к кассовому серверу | По умолчанию admin | |
| su.artix.telegram.bot.csservice.password | строковый | Пароль для доступа к кассовому серверу | По умолчанию admin | |
| su.artix.telegram.bot.salerendererservice.prefix | строковый | URL для доступа к сервису sale-renderer | По умолчанию http://localhost:38067/v1/ | |
| su.artix.telegram.bot.counter.prefix | строковый | URL для доступа к сервису счетчиков | По умолчанию | |
| su.artix.telegram.bot.counter.user | строковый | Имя пользователя для доступа к сервису счетчиков | По умолчанию admin | |
| su.artix.telegram.bot.counter.password | строковый | Пароль для доступа к сервису счетчиков | По умолчанию admin | |
| su.artix.telegram.bot.registration.card.enable | логический |
| Включение регистрации новых пользователей | По умолчанию true |
| su.artix.telegram.bot.registration.card.lastname.fill | строковый |
| Требования к заполнению поля с фамилией при регистрации нового пользователя | По умолчанию
|
| su.artix.telegram.bot.registration.card.firstname.fill | строковый | Требования к заполнению поля с именем при регистрации нового пользователя | ||
| su.artix.telegram.bot.registration.card.middlenname.fill | строковый | Требования к заполнению поля с отчеством при регистрации нового пользователя | ||
| su.artix.telegram.bot.registration.card.birthday.fill | строковый | Требования к заполнению поля с датой рождения при регистрации нового пользователя | ||
| su.artix.telegram.bot.registration.card.gender.fill | строковый | Требования к заполнению поля с полом при регистрации нового пользователя | ||
| su.artix.telegram.bot.issuance.card.prefix | строковый | URL для доступа к сервису выдачи карт | По умолчанию http://localhost:8094 | |
| su.artix.telegram.bot.issuance.card.user | строковый | Имя пользователя для доступа к сервису выдачи карт | По умолчанию admin | |
| su.artix.telegram.bot.issuance.card.password | строковый | Пароль для доступа к сервису выдачи карт | По умолчанию admin | |
| su.artix.telegram.usecase.rule.subscribeuser.cache.unit | строковый | Единица измерения времени жизни кеша для пользователей, подписанных на Telegram-бот | По умолчанию DAYS | |
| su.artix.telegram.usecase.rule.subscribeuser.cache.duration | целочисленный | Продолжительность жизни кеша для пользователей, подписанных на Telegram-бот | По умолчанию 1 | |
| su.artix.telegram.usecase.rule.unsubscribeuser.cache.unit | строковый | Единица измерения времени жизни кеша для пользователей, заблокировавших чат с ботом | По умолчанию DAYS | |
| su.artix.telegram.usecase.rule.unsubscribeuser.cache.duration | целочисленный | Продолжительность жизни кеша для пользователей, заблокировавших чат с ботом | По умолчанию 1 | |
| su.artix.telegram.usecase.rule.statistics.trimmer.executestart | строковый | Cron-выражение для запуска подрезки статистики | По умолчанию 0 0 0 * * ? | |
| su.artix.telegram.usecase.rule.statistics.trimmer.duration | целочисленный | Количество дней, за которое необходимо сохранять статистику по пользователям, которые подписались или заблокировали чат с ботом | По умолчанию 365 | |
| spring.data.mongodb.uri | строковый | Имя (URN) и адрес (URL) ресурса в сети | По умолчанию mongodb://localhost/telegram_bot | |
| phone_number.out_mask | строковый | Маска номера телефона | По умолчанию Согласно заданному в настройке значению осуществляется поиск клиента в базе данных Например: Указанный в Telegram-боте номер телефона: 89111232533. Пример №1
Если в настройке задано значение "+7**********", то на кассовый сервер будет передаваться номер телефона в формате: " +79111232533".
Пример №2
Если в настройке задано значение "(***)-***-**-**", то на КС передается номер телефона в формате: " (911)-123-25-33".
| |
client.age.restrict | целочисленный | Ограничение возраста клиента | По умолчанию 18 | |
barcode.formats | строковый |
| Форматы отображаемых кодов | Настройка необходима для отображения в меню кнопки "Показать карту" Если в настройке не указан ни один из форматов, кнопка "Показать карту" не будет отображена |
card.number.mask | строковый | Маска номеров карт (макроподстановка) | По умолчанию Пример
number{cardNumber}card
Могут использоваться только латинские символы. | |
licencecenter.contragentId | строковый | Токен для авторизации на сервере лицензий | По умолчанию значение не задано Настройка обязательна для заполнения. Если настройка не задана, то чат с Telegram-ботом не запустится. | |
| serviceName | строковый | Наименование сервиса | По умолчанию | |
localeDirPath | строковый | Путь к сообщениям бота | По умолчанию Путь до файлов, в которых хранятся сообщения от Telegram-бота В директории по умолчанию хранится файл Дополнительно в директории хранится файл Сообщения для локализации считываются из файлов в порядке приоритета: в первую очередь из основного файла MessagesBundle_Русский.properties, затем из дополнительного Sample_MessagesBundle_Русский.properties. | |
welcome.bonus.enable | логический |
| Включение начисление приветственных бонусов | По умолчанию |
welcome.bonus.amount | целочисленный | Количество начисляемых приветственных бонусов | По умолчанию 1000 | |
welcome.bonus.days.active | целочисленный | Время жизни приветственных бонусов | По умолчанию 7 | |
welcome.bonus.acceptWeigh | целочисленный | Вес операций группы приветственных бонусов | По умолчанию 300 | |
Скрытые настройки | ||||
StartCommand.buttons.client_data.enable | логический | Отображение кнопки "Профиль" в Telegram-боте | По умолчанию Для включения отображения кнопки "Профиль" в файл нужно добавить настройку с значением | |
QueuePushMessage.requestsPerSecond | целочисленный | Количество сообщений, отправляемых в задаче на рассылку за одну секунду | По умолчанию Для изменения количества сообщений в файл нужно добавить настройку с необходимым значением | |
CleaningService.lifeDays | целочисленный | Количество дней до удаления завершенных задач из БД | По умолчанию Для изменения количества дней в файл нужно добавить настройку с необходимым значением Процесс удаления запускается раз в день или при перезапуске Artix:TgBot | |
spring.servlet.multipart.max-file-size | целочисленный | Максимальный размер файлов, принимаемых в запросах | По умолчанию Для увеличения лимита размера файлов, принимаемых в запросах, в файл нужно добавить настройку с необходимым значением | |
spring.servlet.multipart.max-request-size | целочисленный | Максимальный размер запросов | По умолчанию Для увеличения лимита размера принимаемых запросов в файл нужно добавить настройку с необходимым значением | |
image.barcode.width | целочисленный | Ширина генерируемых кодов (в пикселях) | По умолчанию | |
image.2D_barcode.height | целочисленный | Высота генерируемых двумерных кодов (в пикселях) | По умолчанию | |
image.linear_barcode.height | целочисленный | Высота генерируемых линейных кодов (в пикселях) | По умолчанию | |
image.barcode.frame.size | целочисленный | Размер дополнительный рамки вокруг изображения с кодом (в пикселях) | По умолчанию | |
server.port=3300
su.artix.telegram.bot.token = your_token
su.artix.telegram.bot.accountingservice.prefix = http://localhost:38054/ACC/rest/v1/
su.artix.telegram.bot.accountingservice.user = TELEGRAM_BOT_DEFAULT_TERMINAL
su.artix.telegram.bot.accountingservice.password =
su.artix.telegram.bot.csservice.prefix = http://localhost:38051/CSrest/rest/
su.artix.telegram.bot.csservice.user = admin
su.artix.telegram.bot.csservice.password = admin
su.artix.telegram.bot.salerendererservice.prefix = http://localhost:38067/v1/
su.artix.telegram.bot.counter.prefix = http://localhost:39021
su.artix.telegram.bot.counter.user = admin
su.artix.telegram.bot.counter.password = admin
# enable registration for new users (true, false)
su.artix.telegram.bot.registration.card.enable = true
# requirements for filling out fields when registering a new user (REQUIRED, OPTIONAL, DISABLE)
su.artix.telegram.bot.registration.card.lastname.fill = REQUIRED
su.artix.telegram.bot.registration.card.firstname.fill = REQUIRED
su.artix.telegram.bot.registration.card.middlenname.fill = REQUIRED
su.artix.telegram.bot.registration.card.birthday.fill = REQUIRED
su.artix.telegram.bot.registration.card.gender.fill = REQUIRED
su.artix.telegram.bot.issuance.card.prefix = http://localhost:8094
su.artix.telegram.bot.issuance.card.user = admin
su.artix.telegram.bot.issuance.card.password = admin
# Statistics (DAYS or MINUTES)
su.artix.telegram.usecase.rule.subscribeuser.cache.unit=DAYS
su.artix.telegram.usecase.rule.subscribeuser.cache.duration=1
su.artix.telegram.usecase.rule.unsubscribeuser.cache.unit=DAYS
su.artix.telegram.usecase.rule.unsubscribeuser.cache.duration=1
su.artix.telegram.usecase.rule.statistics.trimmer.executestart=0 0 0 * * ?
su.artix.telegram.usecase.rule.statistics.trimmer.duration=365
spring.data.mongodb.uri = mongodb://localhost/telegram_bot
phone_number.out_mask = 7**********
client.age.restrict = 18
#Форматы отображаемых кодов. Поддерживаемые форматы: QRCode,DataMatrix,Code128
barcode.formats=QRcode, DataMatrix, Code128
card.number.mask={cardNumber}
# токен для авторизации на сервере лицензий
licencecenter.contragentId =
serviceName=artixcs-telegram-bot
localeDirPath=/opt/artixcs-telegram-bot/locale
# welcome bonus
welcome.bonus.enable=false
welcome.bonus.amount=1000
welcome.bonus.days.active=7
welcome.bonus.acceptWeight=300
Создание бота
Для создания Telegram-бота необходимо:
- В приложении
Telegramнайти и запустить бота@BotFather. - Выбрать команду
/newbotи задать имя для будущего бота. - Токен, полученный от бота
@BotFather, указать в настройкеsu.artix.telegram.bot.tokenв конфигурационном файле/opt/artixcs-telegram-bot/application.properties. Перезапустить Artix:TgBot командой:
systemctl restart artixcs-telegram-bot
Telegram найти бота по имени и запустить.
Использование SpEL-выражения в файле с сообщениями от Telegram-бота
Для переноса строки необходимо использовать символ "\".
Для использования SpEL-выражения в файле с сообщениями от Telegram-бота, который хранится в директории /opt/artixcs-telegram-bot/locale, необходимо прописать выражение в фигурных скобках, поставив перед ними знак $:
${IT_IS_SPEL}
Модули для использования в SpEL-выражении:
| Наименование модуля | Описание | Примечания |
|---|---|---|
| BonusModule | Модуль для работы с сервером бонусов | Поддержаны следующие методы:
|
| CounterModule | Модуль для работы с сервером счетчиков | Поддержаны следующие методы:
|
| ClientModule | Модуль для работы с данными клиента | Поддержаны следующие методы:
|
Порядок обращения модулей определяется последовательностью их использования в SpEL-выражении. Используемые модули привязываются к клиенту, выполняющему запрос.
Помимо указанных модулей в SpEL-выражениях используются нативные конструкции языка Java.
title_menu = Добро пожаловать\n\
Накопленно ${#BonusModule.balance()} бонусных баллов\n\
Ожидается к начислению ${#BonusModule.inactiveBalance()} бонусных баллов\n\
Оплачивайте бонусами до 30% от стоимости покупки\n\
Ваш уровень: ${(#CounterModule.sumCounter('counterID').compareTo(new java.math.BigDecimal('10000.00')) < 0 || #ClientModule.emailConfirmed() != true) ? 'Начальный' : (#CounterModule.sumCounter('counterID').compareTo(new java.math.BigDecimal('30000.00')) < 0 ? 'Средний' : 'Высокий')}\n\
Начисление с каждой покупки: ${(#CounterModule.sumCounter('counterID').compareTo(new java.math.BigDecimal('10000.00')) < 0 || #ClientModule.emailConfirmed() != true) ? '5%' : (#CounterModule.sumCounter('counterID').compareTo(new java.math.BigDecimal('30000.00')) < 0 ? '7%' : '10%')}\
${#ClientModule.emailConfirmed() != true ? '' : 10000.00-#CounterModule.sumCounter('counterID') > 0 ? '\nДо следующего уровня осталось: ' + (10000.00-#CounterModule.sumCounter('counterID') + ' рублей') : 30000.00-#CounterModule.sumCounter('counterID') > 0 ? '\nДо следующего уровня осталось: ' + (30000.00-#CounterModule.sumCounter('counterID') + ' рублей') : '\nВы на максимальном уровне'}\
${#ClientModule.isProfileComplete() ? '' : '\nНе забудьте заполнить профиль, чтобы открыть переход на следующий уровень'}
На экране будет отображено:
title_menu = Добро пожаловать\n\
Накоплено ${#BonusModule.balance()} бонусных баллов\n\
${#BonusModule.expiringBalance().amountBurn() == 0 ? '' :\
'Успейте потратить бонусы: '.concat(#BonusModule.expiringBalance().amountBurn().movePointLeft(2)).concat(' до ').concat(new java.text.SimpleDateFormat("dd MMMM", T(java.util.Locale).of("ru")).format(#BonusModule.expiringBalance().dateEnd()))}\n\
На экране будет отображено:
Уточнения по работе с Telegram-ботом
- При ошибках валидации лицензии сервис Artix:TgBot продолжает работу, но все операции в чате с Telegram-ботом будут недоступны.
- Сессия создается сразу же, как только пользователь отправил сообщение в чат, и прерывается после 5-ти минут бездействия или при перезапуске бота.
- Измененные данные из раздела "Профиль" поступают на кассовый сервер каждые 10 секунд. Если в течение 10-ти секунд пользователь отправит несколько запросов на изменение, то все они будут отправлены на кассовый сервер как один запрос.
- В один момент времени пользователем может быть выполнена только одна задача. Например, если пользователь запросил список покупок и, не дожидаясь ответа, запросил список акций, то второй запрос выполнен не будет.

