Содержание
Описание задачи
Создание TG бота для поддержки клиентов сервиса Жираф Go, с помощью которого будет происходить переадресация в чат франчайзи из того города, который выбирает пользователь. Так же чат-бот не предназначен для общения, только переадресация. Исходя из этого при отправке команды “/start” мы предлагаем выбрать город, а если пользователь не понял и отправил ещё какое-то сообщение, то мы более развернуто ему отвечаем о том, что необходимо перейти в чат соответствующего ему города.
Вид бота:

Создание и оформление бота, получение токена
Создаём бота в TG с помощью @BotFather
Смотрите инструкцию в YouTube -> https://www.youtube.com/watch?v=tq8VrdBfRik
Установка библиотеки python-telegram-bot
P.S.: Разумеется на сервере должен быть установлен python
Чтобы установить python-telegram-bot нужно выполнить команду:
pip install python-telegram-bot
Код бота
Название файла – bot.py, разместил по пути /var/bot-support/
Код:
from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup
from telegram.ext import Application, CommandHandler, MessageHandler, filters, ContextTypes
# Замените 'YOUR_BOT_TOKEN' на токен вашего бота
BOT_TOKEN = 'YOUR_BOT_TOKEN'
# Список чатов и их ссылки
chats = [
{"name": "Город1", "link": "https://t.me/1"},
{"name": "Город2", "link": "https://t.me/2"},
{"name": "Город3", "link": "https://t.me/3"},
]
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
keyboard = [
[InlineKeyboardButton(chat["name"], url=chat["link"])]
for chat in chats
]
reply_markup = InlineKeyboardMarkup(keyboard)
await update.message.reply_text('Выберите город:', reply_markup=reply_markup)
async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
keyboard = [
[InlineKeyboardButton(chat["name"], url=chat["link"])]
for chat in chats
]
reply_markup = InlineKeyboardMarkup(keyboard)
await update.message.reply_text(
'Этот чат не предназначен для общения, пожалуйста выберите город и задайте ваш вопрос представителю Жираф Go в этом городе.',
reply_markup=reply_markup
)
def main() -> None:
application = Application.builder().token(BOT_TOKEN).build()
application.add_handler(CommandHandler("start", start))
application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, handle_message))
application.run_polling()
if __name__ == '__main__':
main()
Пояснение к коду:
- Импорт библиотек: Импортируются необходимые модули из
python-telegram-bot. - Токен бота: Замените
YOUR_BOT_TOKENна токен вашего бота, который вы получили у @BotFather. - Список чатов: Замените значения в
chatsна нужные вам названия и ссылки. - Функция
start: Эта функция отвечает на команду/startи отправляет сообщение с кнопками.
Запуск бота, команда
Переходим по пути (/var/bot-support/), где лежит наш файл бота (bot.py) и выполняем команду:
python bot.py
Готово!
Автоматическая загрузка скрипта на сервере
Шаг 1: Создание файла службы systemd
- Создайте файл службы
systemdдля вашего бота. Обычно такие файлы размещаются в каталоге/etc/systemd/system/. Назовем файл,tg_bot._support.service
sudo nano /etc/systemd/system/tg_bot_support.service
2. Добавьте следующий текст в файл службы. Не забудьте заменить пути и имя пользователя на соответствующие вашему окружению:
[Unit] Description=Telegram Bot After=network.target [Service] User=your_username WorkingDirectory=/path/to/your/bot ExecStart=/usr/bin/python3 /path/to/your/bot/bot.py Restart=on-failure [Install] WantedBy=multi-user.target
Пояснение:
- [Unit]: Описывает службу.
Description: Описание службы.After: Указывает, что эта служба должна запускаться послеnetwork.target, то есть после установления сетевых соединений.
- [Service]: Настройки самой службы.
User: Указывает пользователя, от имени которого будет запущен бот.WorkingDirectory: Каталог, в котором находится ваш скрипт.ExecStart: Команда для запуска скрипта.Restart: Указывает, что служба должна перезапускаться в случае сбоя.
- [Install]: Настройки для установки службы.
WantedBy: Определяет, когда служба должна быть запущена.
В моём случае конечный код будет выглядеть так:
[Unit] Description=Telegram Bot After=network.target [Service] User=root WorkingDirectory=/var/bot-support ExecStart=/usr/bin/python3 /var/bot-support/bot.py Restart=on-failure [Install] WantedBy=multi-user.target
Шаг 2: Загрузка и запуск службы
- Загрузите новый файл службы
systemd:
sudo systemctl daemon-reload
2. Включите службу, чтобы она запускалась автоматически при загрузке системы:
sudo systemctl enable tg_bot_support.service
3. Запустите службу вручную, чтобы убедиться, что все работает:
sudo systemctl start tg_bot_support.service
4. Проверьте статус службы, чтобы убедиться, что она работает корректно:
sudo systemctl status tg_bot_support.service
Вы должны увидеть что-то вроде этого, если все работает правильно:

Остановка, запуск, перезапуск процесса
- Остановка
sudo systemctl stop tg_bot_support.service
2. Запуск
sudo systemctl start tg_bot_support.service
3. Перезапуск
sudo systemctl restart tg_bot_support.service
Также, не забываем проверять статус процесса, выполнен ли он. Команда:
sudo systemctl status tg_bot_support.service
