В системе так-же предусмотрен бот для монтажников (в зачаточном состоянии)
Настройка БД
Настройка работы с базой данных и создание таблиц:
mysql -D acp < /usr/acp/ACP/modules/Telegram/Telegram.sql
Создание бота
(если у вас уже есть бот, эту часть можно пропустить)
Эту операцию нужно делать с устройства где установлен Telegram.
- Заходим https://t.me/botfather .
Если есть аккаунт нажимаем кнопку “Send message”.
Если нету, то регистрируемся в Telegram-е, затем снова заходим и нажимаем “Send message”,
или можно сразу зайти в Telegram, в поиске вбить BotFather и перейти к диалогу с ним. - На главном экране бота нажимаем “Start”.
- Покажется список возможных команд для обращения к BotFather.
Нам нужно ввести команду/newbot. - BotFather спросит имя нашего бота.
Это имя будет отображаться в деталях контакта. Вводим имя бота, например, Testbot. - Следующий шаг нас спрашивают Имя пользователя бота (username).
Этот параметр будет использоваться для запросов к боту.
От 5 до 32 символов, регистр-чувствительная латиница, цифры и нижние подчеркивания.
Имя пользователя бота должно заканчиваться на bot. Вводим имя пользователя (username), напримерTestWork_bot. - Вы зарегистрировали вашего бота – внимательно осмотрите финальное сообщение на предмет параметров:
Линк Телеграм-бота
Например:https://t.me/TestWork_bot
а так же очень важный параметр - токен.
Например:167953392:AAHVUmXdEOTzLbdzSuV23QuEBTmDMjzg - Бот успешно создан!
Настройка
- Для нормальной работы через webhook вам необходимо открыть порт 443,или 80, 88, 8443 для входящих POST запросов.
Важно: Телеграм не работает с портом 9443. Обязательно включить шифрование. Необходимо создать конфигурацию доступа веб-сервера Apache для работы Telegram-бота.
Заходим в директории, где находится конфиг Apache.
Создание конфигурации веб-сервера для Telegram-бота- В
telegram_httpd.confменяем порт з 9443 на 8443. Создайте директорию со сложным названием:
Создание каталога для Telegram-ботаmkdir /usr/acp/cgi-bin/TelegramAAHVUmXdEOTzLbdzSuV23QuEBTmDMjzg/
Название директории желательно сделать сложным и уникальным, для этого можно использовать токен (или его часть).- Скопируйте в эту директорию файл
telegram_bot.cgi
Привязка телеграм-ботаln -s /usr/acp/ACP/modules/Telegram/telegram_bot.cgi /usr/abills/cgi-bin/TelegramAAHVUmXdEOTzLbdzSuV23QuEBTmDMjzg/
- Необходимо прописать в
конфигеобязательные параметры (ниже в таблице).
В config.pl нужно добавить:
| Параметр | Описание |
|---|---|
$conf{TELEGRAM_TOKEN}=' '; | Обязательный параметр. Пример: |
$conf{TELEGRAM_BOT_NAME}=' '; | Обязательный параметр. Пример: |
| Подпись и номер телефона разделяются знаком ' | ' а каждый следующий номер знаком ' ; ' Пример: |
| Подпись и url разделяются знаком ' | ' а каждый следующий url знаком ' ; ' Пример: |
| Ссылка на произвольный телеграм канал. Пример: |
| Ссылка на сайт провайдера. Пример: |
| Локализация бота. По умолчанию, доступны три значения: |
$conf{TELEGRAM_MSGS_BOT_ENABLE} = 1; | Позволяет пользователю отвечать на сообщения тех. поддержки. |
$conf{TELEGRAM_USER_PORTAL} = 'url'; | Прописать URL к личному кабинету пользователя (Портал абонента). |
$conf{TELEGRAM_TERMINAL} = 'url'; | Прописать URL к сервису с картой где будут отображаться терминалы |
$conf{TELEGRAM_PAYMENT_CREDENTIAL} = 'string' | Здесь можно указать информацию для платежных реквизитов по оплате |
$conf{MONEY_UNIT_NAMES}='руб.' | Название валюты, используется ботом |
| $conf{MONEY_UNIT_NAMES_NEW} = 'рубль;рубля;рублей'; | Склонение слов в зависимости от количества |
$conf{TELEGRAM_NUMBER_EXPR} = '^380/0'; | Регулярное выражение для номера телефона. В примере |
| Текст, который будет отображаться для ввода карт пополнения. |
Проверьте появился ли доступ к файлу (https://YOUR.URL:YOURPORT/TelegramAAHVUmXdEOTzLbdzSuV23QuEBTmDMjzg/telegram_bot.cgi).
Если доступ есть – можно установить вебхук, соединение с Bot API Telegram.
Если используется действующий SSL-сертификат:
curl -F "url=https://YOUR.URL:YOURPORT/TelegramAAHVUmXdEOTzLbdzSuV23QuEBTmDMjzg/telegram_bot.cgi" https://api.telegram.org/bot<YOURTOKEN>/setWebhook
Если используется самоподписанный SSL-сертификат:
Установка WebHook
curl -F "url=https://YOUR.URL:YOURPORT/TelegramAAHVUmXdEOTzLbdzSuV23QuEBTmDMjzg/telegram_bot.cgi" -F "certificate=@/usr/abills/Certs/server.crt" https://api.telegram.org/bot<YOURTOKEN>/setWebhook
Примечание:
- в поле CN (Common Name) сертификата должен быть ваш домен или IP, иначе Telegram его не примет.
- при любом изменении/обновлении самоподписанного сертификата, его необходимо обновить с помощью команды выше (сертификат указываем явно).
Успешное выполнение команды установки вебхука выглядит примерно так:
{"ok":true,"result":true,"description":"Webhook was set"}После настройки телеграм бота нужно перезапустить бота "Остановить и блокировать/Остановить бота", а затем нажать кнопку "Перезапустить бота".
Интерфейс бота
Бот загружает файлы из папки /usr/acp/ACP/modules/Telegram/buttons-enabled/
Каждый файл - это отдельная кнопка, которая добавляется в меню.
Для подключения новых функций, необходимо скопировать нужные вам кнопки (или создать ссылку) из папки /usr/acp/ACP/modules/Telegram/buttons-avaiable/
Пример
mkdir /usr/acp/ACP/modules/Telegram/buttons-enabled/ ln -s /usr/acp/ACP/modules/Telegram/buttons-avaiable/Send_message.pm /usr/acp/ACP/modules/Telegram/buttons-enabled/
На сегодняшний день доступны следующие функции.
| Название файла | Кнопка | Описание |
|---|---|---|
| Balance.pm | Баланс | Выводит состояние счета, информацию о плановых списания. При недостатке денег появляется кнопка "Пополнить счет". Обязательно добавить параметр с ссылкой на кабинет пользователя: $conf{TELEGRAM_BALANCE_URL} = 'https://localhost:9443/index.cgi'; |
| Internet_info.pm | Интернет | Выводит информацию о подключенных услугах. |
| Isp_info.pm | О компании | Выводит информацию о компании (Данные заполняются в Настройка>Другое>Параметры организации) |
| Make_payment.pm | Пополнить счет | Подсказка о том как пополнить счет (текст нужно заполнять самому в файле) |
| Send_message.pm | Отправить сообщение | Позволяет пользователю создать сообщение в службу поддержки. |
| Services_and_account.pm | Услуги и счет | Расширенная версия кнопки Интернет, включает в себя также информацию о счете. Есть возможность взять кредит или отменить приостановление. |
| Msgs_reply.pm | Позволяет пользователю отвечать на сообщения тех. поддержки. | |
| Privat_payment.pm | Оплата PrivatBank | Позволяет перейти на страницу оплаты PrivatBank для совершения оплаты (Должен быть подключен модуль Privat_terminal.pm) |
| Easypay_payment.pm | Оплата Easypay | Позволяет перейти на страницу оплаты Easypay для совершения оплаты (Должен быть подключен модуль Easypay.pm) |
| City24_payment.pm | Оплата City24 | Позволяет перейти на страницу оплаты City24 для совершения оплаты (Должен быть подключен модуль City24.pm) |
| Liqpay_payment.pm | Оплата Liqpay | Позволяет перейти на страницу оплаты Liqpay для совершения оплаты (Должен быть подключен модуль Liqpay.pm) |
| Crm_new_lead.pm | Оставить заявку | Позволяет добавлять потенциальных клиентов через Телеграм. Если пользователя не найдено по номеру телефона, ему будет предложено оставить заявку на подключение. |
| Set_credit.pm | Кредит | Возможность взятия кредита. |
| Equipment_info.pm | Проверка связи | Информация о состоянии подключения оптического терминала (в сети или выключен терминал) и состоянии порта оптического терминала, подключен ли к нему роутер. Для роботы кнопки потребуется включить API, в том числе следующие параметры:
Шаблон для отображения действий при ошибке: modules/Telegram/templates/telegram_equipment_info_error.tpl |
Установка и работа Telegram-пуллера (без webhook)
В АСР Казна-39 боты работают БЕЗ webhook. Вместо webhook используется отдельный сервис kazna-telegram-poll, который сам опрашивает Telegram методом long-polling (getUpdates) и передаёт полученные апдейты в CGI-скрипты бота. Это позволяет работать без публичного HTTPS-порта и внешнего доступа к серверу.
Как это работает:
- Сервис kazna-telegram-poll запускает скрипт telegram_poll_to_cgi.pl.
- Скрипт читает токены ботов из config.pl ($conf{TELEGRAM_TOKEN} — бот абонентов, $conf{TELEGRAM_ADMIN_TOKEN} — бот админов/монтажников).
- Для каждого бота запускается свой цикл long-polling: скрипт вызывает getUpdates и получает новые апдейты (сообщения, нажатия кнопок).
- Полученный апдейт (JSON) передаётся в CGI-скрипт бота (telegram_bot.cgi или telegram_admin_bot.cgi) — так, будто пришёл webhook.
- CGI-скрипт выполняет логику бота (отправляет ответ абоненту через Bot API и т.д.).
- Скрипт запоминает offset обработанного апдейта в файле var/Telegram/telegram_offset_user.txt (и _admin.txt), чтобы не обрабатывать один апдейт дважды.
Что переделано для работы (важно):
- При старте пуллер снимает webhook у бота (deleteWebhook) — иначе getUpdates возвращает ошибку 409 Conflict.
- Пуллер автоматически создаёт в cgi-bin каталог Telegram<префикс_токена>/ и симлинк на telegram_bot.cgi (нужен для совместимости с логикой бота).
- Доставка апдейтов идёт через FastCGI-пул (acp-fcgi-index): апдейт отправляется как FastCGI-запрос в сокет /run/acp-fcgi-index/index.sock — как это делает nginx. В пуле код биллинга уже скомпилирован, поэтому НЕТ повторной компиляции биллинга на каждый апдейт (раньше пуллер запускал perl telegram_bot.cgi — это давало заметную постоянную нагрузку на CPU). Если FastCGI-пул недоступен — пуллер автоматически откатывается на прямой запуск perl.
Что требуется для работы с ботами Telegram:
- Созданный бот и его токен (получить у @BotFather).
- Токены прописаны в config.pl: $conf{TELEGRAM_TOKEN} и $conf{TELEGRAM_ADMIN_TOKEN}.
- Параметр $conf{BILLING_URL} — используется для формирования HTTP_HOST при доставке апдейтов.
- Модуль Perl JSON (libjson-perl) и IO::Socket::UNIX.
- Настроенный FastCGI-пул (acp-fcgi-index) — для работы без повторной компиляции.
- Таблицы БД модуля Telegram (см. раздел «Настройка БД» выше).
Установка пуллера (идемпотентно):
sudo bash misc/telegram/install.sh
Инсталлер сам: определяет каталог установки, копирует пуллер в cgi-bin, ставит systemd-юнит kazna-telegram-poll и запускает сервис.
Файлы:
- Эталон пуллера: misc/telegram/telegram_poll_to_cgi.pl
- Инсталлер: misc/telegram/install.sh
- systemd-юнит: misc/telegram/kazna-telegram-poll.service
- Рабочая копия: <PREFIX>/cgi-bin/telegram_poll_to_cgi.pl
Проверка:
systemctl status kazna-telegram-poll journalctl -u kazna-telegram-poll -n 30
Отключение (при необходимости):
systemctl disable --now kazna-telegram-poll

