Как запустить Python Telegram бота на VPS
Приветствую всех. Из этой статьи вы узнаете как запустить Telegram бота на виртуальном сервере, и настроить службу для его авто запуска и перезапуска.
Телеграм бот
Виртуальный сервер
Для демонстрации я буду использовать виртуальный сервер от Beget стоимостью 210 рублей в месяц. Вы можете использовать другого хостинг провайдера, или выбрать другую конфигурацию, в зависимости от вашего проекта.
Подключение к виртуальной машине
После того как вы создали VPS у вас откроется панель управления, где вы можете скопировать IP адрес машины и подключаться к ней по SSH.

Для этого можно использовать программу PuTTY или клиент OpenSSH, который входит в состав Windows 10. Для подключения по SSH выполните следующую команду:
И введите пароль который вы указали при создании VPS.
Подготовка сервера
После того как вы подключились к серверу, выполните команды которые обновят списки, и устаревшие пакеты до последней версии.
Загрузка и запуск бота
Перейдите в каталог home и создайте папку для вашего проекта выполнив команды.
Зайдите панель управления VPS и откройте Файловый менеджер.

Загрузите файлы вашего проекта на сервер, в моем случаи это только один файл main.py .

Установите зависимости вашего проекта, и запустите бота.
Примечание: Ubuntu 20.04 поставляется с установленной Python 3.8 из коробки, если для вашего проекта нужна другая версия, установите ее или используйте другую версию дистрибутива.
Теперь перейдите в Телеграм и протестируйте работу.

Авто запуск и перезапуск телеграм бота
Создайте systemd службу для бота.
Нажмите CTRL+S и CTRL+X что бы сохранить и выйти.
Выполните эти две команды что бы запустить службу.
Ваш бот запушен. Перейдите в Телеграм и убедитесь в этом.
Заключение
Ваш бот будет всегда запускаться при старте системы, и перезапускается при возникновении ошибки. Для примера вы можете специально вызвать исключения в одной из функций обернутой обработчиком, и отследить ее в журнале командой:
Как управлять чат-ботами
В этом разделе вы можете управлять чат-ботами: отвязывать страницы, аккаунт канала, обновлять права доступа. А также добавлять новые страницы к подключенному аккаунту или новый аккаунт вместо отвязанного.
Содержание
Перейдите на вкладку «Чат-боты» > «Главная» и нажмите на кнопку «Управление ботами».

Как добавить новый аккаунт или страницу
В этом разделе вы можете подключить чат-бот на дополнительную страницу канала Facebook или подключить чат-бот других каналов.
Как обновить права доступа в Facebook
Если отображаются не все ваши страницы или вы изменяли настройки в аккаунте социальной сети, вам понадобится обновить права перед добавлением новой страницы.
Внизу секции чат-ботов Facebook нажмите «Обновить права доступа».

Авторизуйтесь в аккаунте, который был подключен. Нажмите «Изменить настройки» и выберите cтраницу. Нажмите «Далее».

Выберите какие разрешения давать приложению SendPulse. Нажмите «Готово».

Просмотреть права доступа можно будет также на странице интеграций аккаунта Facebook и VKontakte.
Как отвязать страницу сообщества Facebook
Выберите подключенную страницу. Справа вы увидите выпадающее меню. Выберите опцию «Отвязать».

Появится дополнительное окно, нажмите «Отвязать» еще раз для подтверждения действия.

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

Появится дополнительное окно, нажмите «Отвязать» еще раз для подтверждения действия.

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

Разрешите сайту открыть приложение Telegram, если нужно.

В открывшемся приложении запустите чат-бота.

После того как права доступа обновлятся, вас перенаправит на страницу управления ботом.
Как отключить и удалить чат-бот Telegram
Перейдите в раздел «Чат-боты» > «Управление ботами». В списке подключенных ботов найдите нужный чат-бот. В выпадающем списке выберите «Отвязать».
Обратите внимание, что все виджеты связанные с ботом будут неактивны, а авторассылки остановлены.

Чтобы удалить чат-бот в выпадающем списке выберите «Удалить».
Обратите внимание, что удаление чат-бота приведет к удалению всех настроек, виджетов и цепочек для данного бота.
Как обновить права доступа Instagram
Перейдите в раздел «Чат-боты» > «Управление ботами». В списке подключенных ботов найдите нужный чат-бот. В выпадающем списке выберите «Обновить права доступа».

Нажмите «Продолжить как …» или войдите в другой аккаунт Facebook, с которым у вас связан чат-бот Instagram.

После того как права доступа обновлятся, вас перенаправит на страницу управления ботом.
Как отключить и удалить чат-бот Instagram
Перейдите в раздел «Чат-боты» > «Управление ботами». В списке подключенных ботов найдите нужный чат-бот. В выпадающем списке выберите «Отвязать».
Обратите внимание, что все виджеты связанные с ботом будут неактивны, а авторассылки остановлены.

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

Подтвердите удаление, поставив галочку напротив «Да, я уверен» и нажмите «Удалить бота».
Обратите внимание, что удаление чат-бота приведет к удалению всех настроек, виджетов и цепочек для данного бота.
Телеграм боты и отправка сообщений в Telegram
Создаем Бота в Telegram на базе веб-платформы Falcon Space.
Falcon Space — это платформа для создания веб-решений с управлением через SQL. Все создается и управляется на SQL. Телеграм бот управляется полностью 1 хранимой процедурой на SQL!
На основе Falcon Space вы можете создать систему личных кабинетов на сайте со встроенным телеграм ботом.
1. Находим бота BotFather -> команда /newbot -> даем ему описание, имя (заканчивается на Bot) и картинку. (подробнее — http://aftamat4ik.ru/pishem-bota-telegram-na-c/ ). В итоге получаем token
2. В web.config / AppSettings настраиваем следующие параметры:
- proxyUrl — указываем прокси для Телеграма в таком виде http://45.89.19.84:11498 (если прокси не нужен, то просто оставляем пустыми поля)
- proxyUser, proxyPassword — указываем пользователя и пароль прокси.
- telegramToken — указываем токен, который мы получили при создании бота в Телеграм (в botFather).
- telegramOnlyTextMessages — если 1, то в обработку бота будут попадать только текстовые сообщения.
- @parameters — различные доп параметры (будут впоследствии расширяться)
- @text — текст от пользователя телеграм
- @messageID — идентификатор сообщения от пользователя (можно использовать для указания reply)
- @chatID — ID чата, в который мы потом отправим ответ.
- @messageType — тип сообщения
- @updateType — тип пришедшего обновления от хука бота
- @telegramUsername — логин юзера в телеграм (для нас это идентификатор)
- @firstName — имя пользователя
- SELECT 1 — Result и Msg
- SELECT 2 — набор команд для telegram (актуально если SELECT1.Result=1). Type, Text, ChatID, replyMessageID, DisableNotification, Channel, ButtonsJSON, parseMode
- SELECT 3 — внешние действия, которые могут быть вызваны по команде от телеграм бота.
- Для прокси можно использовать IPv4 и IPv6
- Прокси можно купить здесь — https://proxy.market/
- В as_users добавлены 2 поля telegram и telegramChatID, а также добавлена хранимая процедура [as_user_getUser] (проверьте, что они есть в вашей базе).
- Чтобы работало внешнее действие типа telegram в системе должна быть хранимая процедура as_user_getUser
- В телеграм находим бота (например, наш бот FalconSpaceBot)
- Пишем ему /start для инициализации (осуществляется привязка вашего пользователя к чату).
- Выполняем различные команды, например /getupdates — если команда прописана в чате, то она будет обработана и выдан ответ.
- Для перевода строки в сообщении бота используйте Char(10);
- Проверьте что прокси прописан в web.config
- Проверьте что прокси не просрочен
- Проверьте что бот в целом отвечает.на ваши команды в телеграм (если не отвечает)
- Попробуйте запустить заново бота /Controls/Stuff/StartTelegramBot (либо перезапустите пул приложения в IIS)
- Проверьте as_trace (коды TG и Exception). В нем пишутся ошибки и инициализация и завершение потока бота.
- Сделать as_print в процедуре и посмотреть попадает ли туда бот.
- Бот может остановиться если вы запущена локальная отладка (в этом случае возникает конфликт обновлений, поэтому необходимо отключать бота при локальном запуске — в web.config убирать токен).
- Бот может падать если выключается автоматически пул IIS. Необходимо его настроить так, чтобы он не отключался при простое.
- Text — название кнопки.
- CallbackData — данные для передачи в процедуру
- Url — если указан, то кнопка будет открывать указанный адрес. ВАЖНО! Вводите корректный URL, иначе будет исключение и вся исходная команда не будет работать.
- ResizeKeyboard — Requests clients to resize the keyboard.
- OneTimeKeyboard — Requests clients to hide the keyboard as soon as it’s been used.
- currentCommand — текущая рабочая команда (в рамках которой пользователь вводит данные).
- currentCommandStep — текущий шаг в команде (для определения какой текст вывести в рамках команды).
- currentCommandData — здесь накапливаются данные по выполнению команды.
3. В таблице as_users добавляем 2 поля:
4. Создаем хранимую процедуру такого вида (в разделе Системный SQL / Telegram Bot):
5. Проверяем, что работает бот. Подписываемся на него в telegram и выполняем /start (при этом мы получим отклик Привет. ). Если нет отклика, значит бот не запущен. Попробуйте его перезапустить в разделе Системный SQL (Старт телеграм бот).
6. Чтобы подписать пользователя на некие действия, необходимо сначала чтобы он указал свой телеграм в профиле (поле as_users.telegram). Затем он должен сделать любую команду в телеграме, отправив боту к примеру /start
Хранение привязки чата к пользователю системы
В as_users есть 2 поля: telegram и telegramChatID. При первом обращении, система через хранимую процедуру обновит поле telegramChatID для соответствующего пользователя с заданным telegram. После этого он сможет получать сообщения от telegram.
Использование бота
Включение/выключение бота
Бот включается при запуске всего веб приложения (Global.asax/app_start).
Чтобы его выключить в вручную можно из-под админа использовать команду (перейти на URL) /Controls/Stuff/StopTelegramBot
Для включения — /Controls/Stuff/StartTelegramBot
Детали реализации бота
Реализован в виде отдельного потока, который крутится бесконечно и ожидает приема от бота обновлений. Если есть обновление, то запускает для него процедуру обработки этого обновления (сообщения в нем)
Howto по Telegram боту
Не работает бот Telegram. Что делать?
Как отправить сообщение пользователю в Телеграм
Для этого используем Внешнее действие (в формах и др элементах) с кодом telegram.
Также сообщение можно отправлять через уведомления (если включено Немедленное уведомление).
У пользователя должны быть корректно проставлены поля telegram (заносится сначала вручную для пользователя его логин) и telegramChatID(проставляется автоматически при первом обращении юзера к боту через Телеграм) в as_users. Также можно указать имя в виде ‘@username’ — тогда отправка будет по логину телеграма (если он есть в tg_settings).
buttonsJSON задает настройки кнопок.
parseMode задает формат обработки сообщений (по умолчанию html. Возможные значения html, default, markdown, markdownv2).
ВАЖНО! Необходима реализация процедуры tg_getChatID:
Как отправить сообщение в закрытый чат
Для этого используем символ «—» и chatID в параметре to
Передается chatID. Для групп это отрицательное число, которое можно получить либо экспортом сообщений группы в JSON (и там можно будет найти chat_id), либо через запрос вида:
Примечание: бот необязательно должен быть администратором группы.
Как отправить сообщение в пользователю по chatID
Для этого используем символ «#» и chatID в параметре to
Как отправить сообщение в канал Телеграм
Для этого используем Внешнее действие (в формах и др элементах) с кодом telegram.
Бот должен быть добавлен администратором в канал при этом.
ВАЖНО! Необходима реализация процедуры tg_getChatID
Как сделать рассылку пользователям при сохранении формы.
Указываем всех пользователей в SELECT 2 + связываем с настройками показа данного сообщения (т.е. показываем тем. кто разрашил отправку на этот тип уведомлений. Поля настроек могут меняться). Пример:
Как работать с кнопками Телеграм

Кнопки могут быть либо Inline (в чате при ответе), либо Reply(внизу под чатом).
Кнопки передаются в виде JSON в параметре SELECT 2 ButtonsJSON:
Для Inline кнопок указываем:
Для reply кнопок команда используется в поле text. Также для них есть 2 настройки:
В процедуру для инлайн кнопок будет передаваться как команда поле callbackData, а для reply кнопок — поле text.
Дополнительная информация о кнопках Телеграм:
Использование Эмоджи в сообщениях
Выбираем символ, на страницу символа берем его код UTF16 LE
В SQL используем этот код следующим образом:
Как блокировать телеграм аккаунты в боте
Указываем в начале процедуры action следующий код
В итоге бот ничего не будет отвечать клиенту.
Также вы можете настроить хранение в статуса блокирования как отдельный столбец в таблице tg_settings.
Как выводить html теги в сообщениях
Для этого используется параметр paseMode=’html’ (это значение используется по умолчанию).
Есть альтернативные способы разметки — default, markdown, markdownv2.
ВАЖНО. В html режиме отправка сообщения в телеграм поддерживает только эти теги b,strong,i,em,u,ins,s,strike,a,code,pre. Если будут запрещенные теги, то сообщение не отправится. Детали — https://core.telegram.org/bots/api#html-style
Как быстро подписать пользователя на телеграм бота
Для этого даем ему ссылку вида: https://t.me/FalconSpaceBot?start=1, где FalconSpaceBot — это имя вашего бота.
Пользователь переходит на бота и нажимает там кнопку Запустить. При этом ваша команда /start должна учитывать что в этом случае придет она как /start 1
Т.е. используем left () для определения команды start, а не точное соответствие.
Логирование команд боту от пользователей
В начале процедуры action установите сохранение в trace. В дальнейшем можно анализировать все сообщения через страницу диагностики /diag
Многоступенчатые команды в боте
Для этого используются следующие поля в tg_settings:
Пример кода такой команды:
В примере указан полный код процедуры бота с обработкой start, меню и бизнес-логикой ступенчатой команды. Также в коде есть пример как использовать Эмоджи в боте.