Размещаем бота для Telegram: от выбора хостинга до запуска
Чат-боты для Telegram — простой, изящный и легковесный способ вывести общение с клиентами на новый уровень. Виртуальный собеседник может заниматься рассылкой по фильтрам, предлагать клиенту интересные для него товары и услуги, сообщать последние новости или забавно реагировать на определенные реплики человека — их функционал ограничивается лишь фантазией разработчика. Но чтобы чат-бот работал корректно и мог реализовать свой потенциал, после разработки нужно подобрать подходящий хостинг для него. Об этом я и расскажу в статье, а также о том, как настроить сервер и разместить чат-бота для Telegram.
Выбираем хостинг для телеграм-бота
Для начала быстро разберемся с юридической составляющей. В России власти заблокировали лишь серверы и сам сайт Телеграма (UPD: уже разблокировали, поражение в этой войне было неминуемо). Использование мессенджера фактически не запрещено. Но не любой российский сервер будет исправно работать с ботами для этого мессенджера. Так что перед арендой лучше уточнить у техподдержки, подойдет ли их хостинг для телеграм-бота.
У хостинга для чат-бота должна быть поддержка нескольких языков программирования. Например, хостинг для телеграм-бота на Python должен поддерживать этот язык. Аналогично, написанный на NodeJS бот должен быть развернут на сервере, в который можно подгрузить язык NodeJS.
Если хостинг удовлетворяет этим требованиям, он подойдет для работы простого телеграм-бота, который выдает заготовленный ответ на слова-триггеры. Если же в работе ассистент использует машинное обучение, вам стоит обратить внимание на наличие графического ускорения — без него построение нейросети займет очень много времени. Впрочем, если ваш бот не будет обучаться во время общения с реальными собеседниками, то можно арендовать хостинг с графическим ускорением только на время разработки, а потом развернуть обученную нейросеть на обычном хостинге для Telegram-бота, без графики.
Обратите внимание на наличие круглосуточной технической поддержки. Если у хостинга таковой нет, лучше отказаться от него в пользу более клиентоориентированной компании, пусть даже у нее будут более высокие расценки. Оптимальным будет хостинг с бесплатной помощью в администрировании сервера.
Для развертывания бота для Telegram лучше всего подходит VDS/VPS. Он не требует наличия домена в обязательном порядке, и к нему можно будет обратиться по выделенному IP-адресу, что удобно при развертывании бота. К тому же такие серверы лучше поддерживают увеличение масштабов проекта, так что при увеличении потока посетителей вам не придется переходить на другой сервер — достаточно будет просто сменить тариф или его настройки.
Выбираем тариф
О тарифах хостингов для бота Telegram стоит поговорить отдельно. Есть целый класс бесплатных хостингов — сюда входит, например, Heroku. Они могут оказаться полезными при тестировании бота — расположите свой чат-бот на Heroku и проверьте работоспособность всех функций, прежде чем арендовать хостинг и выкладывать свое творение. Но учтите, что работоспособность на этом хостинге будет непостоянной — обычно чат-боты работают по 30 секунд, а затем отключаются на неопределенное время. Так что для полноценного развертывания вашего детища они не подойдут.
Выбор тарифа обычно обуславливается потоком клиентов, но не сложностью бота. Для развертывания как простенького, так и нейросетевого бота вам не потребуется много дискового пространства. Нет нужды и в больших вычислительных мощностях — большинству ботов более чем достаточно 512 МБ оперативной памяти. Поэтому можно выбирать самые недорогие тарифы.
Ключевое требование к хостингу — стабильность подключения, поэтому от shared-хостингов для телеграм-бота лучше сразу отказаться. А вот VPS/VDS сможет обеспечить надежное подключение. Предпочтительная ОС для сервера — Ubuntu, поскольку большинство модулей для языков программирования пишутся именно под нее. Тарифы на такие виртуальные серверы начинаются от 50 рублей в месяц.
Настраиваем сервер для Telegram-бота
Рассмотрим настройку сервера на примере размещения бота, написанного на Python, который будет автоматически присылать ответы на различные команды.
После аренды VPS нам нужно подключиться к нему по протоколу SSH через специальный клиент (например, Termius), используя данные из личного кабинета на хостинге для телеграм-бота. Вам потребуются Hostname, Login, Password, Port. Вводим их в поля нового подключения. Вот как это будет выглядеть в Termius:
Сохраняем подключение, возвращаемся на главный экран программы (здесь появляется наше новое подключение) и нажимаем на название сервера, которое мы вводили до этого:
Готово, мы попали в консоль сервера:

Отсюда мы сможем управлять сервером, подгружать нужные нам модули и библиотеки. Этим и займемся. Чтобы бот работал, серверу потребуется модуль языка Python. Мы рассматриваем бота, написанного на третьей версии языка, поэтому нам нужно установить python3. Для этого введем в консоль сервера следующие команды:
Не забудем и про библиотеки. На «Питоне» ботов для Telegram обычно пишут с помощью библиотеки TelegramBotAPI. Для ее установки введем команду:
Теперь нам нужно установить удобный менеджер процессов PM2 и язык программирования NodeJS с менеджером пакетов npm для его работы:
Какой хостинг выбрать для чат-бота?
Чат-боты — это не всегда такие же сложные и продвинутые программы, как, например, голосовые помощники на основе нейросетей. Тем не менее, они используются не только для весёлых тестов, но и берут на себя часть работы сотрудников технической поддержки. В этом материале мы поможем понять, нужен ли вашему чат-боту хостинг, подойдёт ли самый дешёвый и что делать, если посетителей становится всё больше.
Быстрое погружение в матчасть
Большинство из вас сталкивается с чат-ботами почти каждый день. Это и автоматические ответы сообществ в социальных сетях, и боты в мессенджерах, и онлайн-консультанты на сайтах, которых все ненавидят, а также мобильные приложения и множество других разновидностей. К более сложным относятся уже полноценные интеллектуальные помощники — например, Алиса и Siri тоже могут общаться в форме чата.
Чтобы в дальнейшем избежать путаницы, разделим чат-ботов на два царства:
Кстати, один из первых текстовых помощников появился ещё в 1966 году — это была программа Элиза, которая пародировала диалог с психотерапевтом, реагируя на ключевые слова. Её можно отнести к простейшим чат-ботам.
Создан, чтобы помогать
Для чего же нужен текстовый собеседник? Говоря формальным языком, он должен выявить вашу потребность или проблему и удовлетворить / решить её. Чаще всего в чат-ботах нуждаются компании, когда техподдержка начинает страдать от наплыва однотипных запросов. Собрав все популярные «боли» клиентов, можно создать автоматического помощника с готовыми ответами и решить множество проблем.
Если вы уже нацелились на разработку своего чат-бота, то нужно определиться, будет ли он простейшим или продвинутым. Следующий этап будет состоять из сбора данных, их обработки и структурирования, создания программы по автоматическому поиску ответов (для простейшего варианта) или обучения нейросети (для продвинутого варианта). Сюда же входит разработка интерфейса собственного чата, но этот шаг можно пропустить, если вы используете готовые виджеты или мессенджеры. К тому же, необходимо обеспечить круглосуточную доступность и отказоустойчивость — в этом вам поможет удалённый сервер или хостинг.
После всех локальных подготовок и тестов можно приступить к выбору хостинга для чат-бота.
Выбор хостинга
Первое, на что стоит обратить внимание — для аудитории какой страны вы планируете внедрять своего ассистента. Например, боту в сообществе ВКонтакте, важно выбрать хостинг с серверами в стране, где ВКонтакте не запрещён — обычно выбор падает на Россию. Для Telegram-бота тоже можно рассматривать российских провайдеров, поскольку с мессенджера официально сняли блокировку.
Также если вы хотите собирать и анализировать данные ваших пользователей, то стоит заранее позаботиться о соблюдении законов о локализации персональных данных. Например, для работы с клиентами из России необходимо выбрать хостинг-провайдера, серверы которого физически находятся на территории РФ.
С юридическими тонкостями разобрались, теперь перейдём к определению характеристик хостинга. Для этого вернёмся к нашим двум царствам чат-ботов.
Простейший хостинг для простейшего чат-бота
Какой хостинг выбрать для чат-бота из царства Простейших? Если бот небольшой и обрабатывает не так много запросов, для него подойдут самые дешёвые тарифы. Можно даже воспользоваться бесплатными серверами мессенджеров. Но учтите, что если к вам хлынут клиенты, и вы станете слишком часто отправлять запросы о появлении новых сообщений, вашего чат-бота могут забанить. Поэтому для масштабного использования и развития ассистента хостинг — необходимая вещь.
На первых порах можно попробовать бесплатный хостинг для бота — это вполне неплохой вариант для тестирования. Но важно учесть, что подобные услуги имеют ограниченные настройки и подходят для совсем простых ботов. И при росте числа пользователей, скорее всего, придётся перейти на более мощные ресурсы.
Для комфортной инфраструктуры и возможности расширения вашего алгоритма стоит рассмотреть хостинг с наличием СУБД, веб-сервера, SSL-сертификата и, конечно же, технической поддержки.
При этом даже если ваша программа просто делает запросы в базу данных и собирает информацию о запросах, стоит также предусмотреть, что база со временем будет расти. Поэтому выбирайте хостинг-провайдера, у которого можно легко проапгрейдить тариф в случае необходимости. Отличный вариант — облачные серверы.
Продвинутый хостинг для продвинутого чат-бота
Если ваш виртуальный ассистент — это целая нейросеть или даже комбинация нейросетей, то, возможно, ещё на этапе её создания вам понадобится не просто хостинг, а сервер с графическими ускорителями, чтобы оперативно её реализовать. Обучение нейросетей на GPU происходит гораздо быстрее.
Ну а главный секрет — на самом деле для готового продвинутого чат-бота можно выбрать точно такой же хостинг, как и для простейшего. Чаще всего уже обученные нейросети работают довольно быстро и занимают не так много места.
Но всё-таки стоит предусмотреть дополнительное пространство на диске, если вы планируете обрабатывать поступающие запросы и делать вашего ассистента лучше.
Важный нюанс 1
При выборе хостинга также важно ориентироваться на то, поддерживает ли он нужное вам ПО, фреймворки и язык программирования.
Важный нюанс 2
Для shared-хостинга вам потребуется домен, чтобы отправлять запросы к нему. Для VPS же домен не обязателен, и вы можете обращаться к нему по выделенному IP-адресу.
Если вы планируете быстро развивать и расширять вашего бота, то лучше сразу присмотреться к варианту VPS: на нём можно поставить практически всё, что угодно, и в любой момент при необходимости повысить тариф.
Я хочу конкретные цифры!
Для чат-ботов, которые со временем точно потребуют масштабирования ресурсов, как мы уже писали, подойдёт облачный сервер. Рекомендуем начать с тарифа Cloud-2 c процессором на 2 ядра, диском 20 ГБ и объёмом памяти 1 024 МБ. Его стоимость составит 399 рублей в месяц или 0,59 рублей в час.
Осталось только посчитать, сколько средств вам может сэкономить внедрение чат-бота — если он будет хорошо справляться со своими обязанностями, прибыль может оказаться значительно выше этих затрат. Но это уже другая история.
Хостинг для чат-бота — незаменимый инструмент, если вам важно, чтобы даже самый дотошный клиент смог получить ответ на свой вопрос в любое время дня и ночи. Выбирайте подходящий тариф, запускайте умного ассистента и готовьтесь принимать благодарности от вашей службы поддержки!
Создание и хостинг телеграм бота. От А до Я
Привет, хабрчане! Какой бы заезженной не была тема создания телеграм бота на python3, я не нашёл инструкций, где показан путь от первой строчки кода до деплоинга бота (по крайней мере все методы, что я видел, немного устарели). В этой статье я хочу показать процесс создания бота от написания BotFather-у до деплоинга бота на Heroku.
Статья получилась длинной, советую пробежаться глазами по содержанию и кликнуть по интересующему вас пункту.
P.S. Пишите если нужна статья по созданию более сложного бота, т.е. с вебхуками, БД с настройками юзеров и т.д.
BotFather
Для начала нам надо зарегистрировать нашего бота в Telegram. Для этого:
В поиске вбиваем @BotFather и переходим в диалог с Отцом Ботов.
Пишем /newbot. Указываем имя бота (то, что отображается в диалогах). Указываем его логин, по которому его можно булет найти.
P.S. Оно должно заканчиваться на Bot/bot
Вот. Нам дали API ключ и ссылку на бота. Желательно сохранить API ключ и перейти в диалог с ботом, чтобы потом не копаться в переписке с BotFather
Дальше добавим ему пару команд: пропишем /setcommands и одним сообщением, т.к. /setcommands не добавляет команды, а задаёт их с нуля, пошлём ему команды.
На этом работа с BotFather закончилась, перейдём к следующей части.
Установка и настройка pipenv. Первый запуск.
Для начала создадим файл, в котором будет основной код бота bot.py. Если бот большой, то сразу создавайте файлы, куда вы вынесете функции, классы и т.д, иначе читаемость кода стремится к нулю. Я добавлю parser.py
Установим pipenv, если его конечно ещё нет.
Установим pipenv в папку проекта.
Установим интересующие нас библиотеки. Я буду работать с PyTelegramBotAPI. Также для парсинга добавим BeautifulSoup4.
Начинаем писать код!
Открываем bot.py, импортируем библиотеки и создаём главные переменные.
Запустим бота. Посмотри наличие ошибок.
Если ошибок не появилось, то продолжим.
Хэндлеры. Отвечаем на команды и сообщения
Пришло время научить бота отвечать нам. Возможно даже сделать его ответы полезными.
Основы взаимодействия. Ответ на команды
Для взаимодействия с пользователем, т.е. для ответа на его команды и сообщения используются хэндлеры.
Начнём с самого простого: ответим на команды /start и /go
Сейчас разберёмся что это и как это работает. Передаём в message_handler параметр commands равный массиву со строками — командами, на которые он будет отвечать описанным ниже образом. (На все эти команды он ответит одинаково). Далее используем send_message, в него записываем id чата (его можно достать из message.chat.id), в который отправить сообщение и, собственно, само сообщение. Нельзя забыть написать bot.polling() в конце кода, иначе бот сразу же выключиться. Почему так мы узнаем позже.
Теперь можно запустить бота и написать ему /start или /go и он ответит.
P.S. Сообщение может быть не только строкой, а, в принципе, чем угодно.
Это json объект, хранящий информацию об отправителе, чате, и самом сообщении.
Основы взаимодействия. Ответ на текстовые сообщения.
Теперь обработаем текстовые сообщения бота. Самое важное что нам нужно знать это то, что текст сообщения храниться в message.text и то, что, чтобы обрабатывать текст в message_handler нужно передавать content_types=[‘text’].
Добавим вот такой код.
Тут мы довабили пару переменных: вынесли текст сообщения (в нижнем регистре, чтобы не было лишних проблем с теми кто пишет капсом, заборчиком и т.д.) в переменную text, вынесли message.chat.id в отдельную переменную, чтобы каждый раз не обращаться к message. Также мы построили небольшое ветвление, для ответа на определённые сообщения, а также ответ на случай непонятного боту сообщения.
Основы взаимодействия. Ответ на картинки, документы, аудио и прочие.
Для ответа на картинки, стикеры, документы, аудио и т.д. нужно всего лишь поменять content_types=[‘text’].
Рассмотрим пример с картинкой, добавив этот код.
text, audio, document, photo, sticker, video, video_note, voice, location, contact, new_chat_members, left_chat_member, new_chat_title, new_chat_photo, delete_chat_photo, group_chat_created, supergroup_chat_created, channel_chat_created, migrate_to_chat_id, migrate_from_chat_id, pinned_message
Строим цепочку ответов.
Пришло время закончить с элементарными действиями и начать что-то серьёзное. Попробуем построить цепочку ответов. Для этого нам понадобиться register_next_step_handler(). Создадим простой пример, на котором и разберёмся как работает register_next_step_handler().
И так, в первой функции добавился bot.register_next_step_handler(msg, askAge), в него мы передаём сообщение, которые хотим послать, и следующий щаг, к которому перейти после ответа пользователя.
Во второй функции всё поинтересней, здесь идёт проверка ввёл ли пользователь число, и, если нет, то функция рекурсивно вызывает сама себя, с сообщением «Возраст должен быть числом, введите ещё раз.». Если пользователь ввёл всё верно, то он получает ответ.
Но, есть тут проблема. Можно повторно вызвать команду /go или /start, и начнётся бардак.
Пофиксить это несложно, добавим переменную для проверки состояния выполнения скрипта.
С построением простых цепочек мы разобрались, пойдём дальше.
Добавляем парсер в цепочку.
Для начала нужен сам парсер. Обратим внимание на то, что во вкладках «Лучшее» и «Всё подряд» есть дополнительные фильтры: сутки, неделя, месяц и ≥10, ≥25, ≥50, ≥100 соответственно.
Парсер конечно можно написать и в 1 функцию, но я разобью на 2, так будет проще читать код.
По итогу парсер возвращает нам строку с заголовками статей, основываясь на наших запросах.
Пробуем, используя полученные знания, написать бота связанного с парсером. Я решил создать отдельный класс (это скорее всего неправильный метод, но это уже относится к питону, а не к основной теме статьи), и в объекте этого класса хранить изменяемые данные.
Теория. Методы взаимодействия с ботом.
Мы используем long polling для получения данных о сообщениях от бота.
Есть же вариант использовать в корне другой метод — вебхуки. Так бот сам будет отправлять нам данные о получении сообщения и т.д. Но этот метод сложнее в настройке, и, для простого показательного бота я решил его не использовать.
Также в дополнительных материалах будут ссылки на всё, что использовалось и о чём говорилось.
Маркапы. Добавляем клавиатуры для быстрого ответа.
Наконец основной код дописан. Теперь можно передохнуть и написать маркапы. Я думаю вы неоднократно видели их, но всё же, приложу скриншот. [SCREENSHOT]
Я выведу маркапы в отдельный файл — markups.py.
В параметры маркапа указываем ширину строки и изменение размеров кнопок, иначе они огромны.
Применим полученные знания к нашему боту.
Ура! С кодом впринципе разобрались. Теперь самое важное — деплоинг бота не хероку.
Деплоим бота на Heroku.
Для начала надо зарегистрироваться на Хероку и на Гитхабе.
Теперь создаём репозиторий на гитхабе. (нажмите плюсик слева от вашего аватара)
Сейчас нам нужен Procfile (Procfile.windows для windows). Создаём его и записываем в него bot: python3 bot.py
Теперь удаляем TOKEN из bot.py, здесь он не нужен, ведь мы будем загружать этот файл на гитхаб. Через тот же терминале, что использовали для запуска бота, заливаем файлы на гитхаб. (Предворительно удалите папку __pycache__).
Гит просит логин и пароль, спокойно вводим и преступаем к деплоингу бота на хероку. Пишем всё в том же терминале.
Теперь возвращаем TOKEN в bot.py, здесь он нужен, ведь мы будем загружать этот файл на хероку.
Поздравляю!
Работа окончена, бот работает удалённо.
Ссылки
Заключение
Если кому-то было интересно, то цель написания статьи выполнена. Если кому-то хочется увидеть статью про более сложного бота (с вебхуками, подключенной БД с настройками пользователей и т.д.) — пишите.
Бесплатный хостинг Telegram-бота на Google Cloud Platform
Почему GCP?
При написание телеграмм ботов столкнулся с вопросом, как быстро и бесплатно сделать так, чтобы бот работал постоянно. Варианты с Heroku и Pythonanywhere имеют слишком маленькие лимиты, если у вас более одного бота. Поэтому я решил воспользоваться GCP. Платформа предоставляет бесплатно 300$ на год + огромные скидки при использование этих средств(до 94%).
Как захостить вашего бота?
Шаг 1. Регистрация на GCP
Вводим свои данные и карточку. Деньги с карточки не будут списываться, если вы сами не активируете платную подписку.
Шаг 2. Создаём виртуальную машину
Необходимо создать новый экземпляр.
Если вы не будете развертывать БД на виртуальной машине, то можете взять g1-small, иначе советую n1-standart.
Необходимо будет выбрать также ОС. Я выбрал Debian GNU/Linux 9 (stretch).
Всё, ВМ создана. Обычные её развертывание занимает от 1 до 5 минут.
Шаг 3. Настройка виртуальной машины
Вы можете подключиться по SSH со своего ПК или же взаимодействовать через платформу.
Для этого нажмите на SSH.
У вас откроется терминал Linux в новом окне.
Теперь перейдем к настройке. Сначала вводим команду:
для обновления информации об новейших версиях пакетов.
Сам Python устанавливать не нужно, он уже есть.
Теперь необходимо установить все необходимые библиотеки. Есть небольшой нюанс, все библиотеки необходимо устанавливать дважды:
для использования через коману python3, и
для systemd. Данная утилита поможет вам запустить бота и перезапускать его, если он упадёт.
Самый простой способ запускать бота через python3, но он будет выключаться, если вы будете отключаться. Можно использовать screen, но бот не будет сам перезапускаться. Также можно использовать crontab с проверкой порта, но мне кажется этот вариант сложнее, чем systemd.
Шаг 4. Заливаем бота на сервер
После этого разархивируем его командой:
Теперь ваш бот хранится в папке с названием архива.
Второй способ через Git. Я думаю, не стоит объяснять как это сделать людям, которые умеют его использовать.
После установки его командой:
Вы можете клонировать его себе на ВМ.
После этого переходим к настройке systemd. Для этого переходим в его директорию:
И создаём файл bot.service:
Вписываем в открывшиеся окно следующее:
Закройте и соханите файл. Закрывается с помощью команды Ctrl+X.
После этого введите команды по очереди:
Если всё будет хорошо, вы увидите примерно следующее:
Всё, теперь ваш бот работает самостоятельно. Надеюсь моя статья поможет вам захостить вашего бота.
1.Проверьте вашего бота на ошибки
Запустите вашего бота и проверьте его работу прежде, чем запускать его через systemd. Для этого перейдите в папку с ботом и запустите через python.
2.Добавьте в файлы с py-скриптами кодировку
Вставить в начале файла.
3.Ошибки в systemd
Если вы проверяли бота на ошибки и он нормально работал, но он не хочет запускаться в systemd, то вы можете посмотреть логи и понять в чём ошибка просмотрев файл:
Вы можете скачать этот файл и просмотреть на своём компьютере через Notepad++.
4.Апдейт бота
Если вы хотите дописать или залить новую версию бота, то введите команду:
Провидите все необходимые манипуляции. А потом введите следующие команды, чтобы он опять заработал:





