Лайфхаки

Маленькие, полезные хитрости

Как создать telegram бота с нуля: пошаговое руководство для начинающих

17.03.2024 в 12:44

Как создать telegram бота с нуля: пошаговое руководство для начинающих

Есть три способа:

  1. Написать его вручную. Для этого подходит любой язык программирования, от PHP до Java, самый легкий для усвоения и популярный вариант — Python.
  2. Заказать его у программиста, который напишет бот на одном из языков программирования по вашему ТЗ.
  3. Собрать его на специальной платформе. Это проще и быстрее, потому что не требует навыков написания кода. Бот по этому способу собирается как в конструкторе, поэтому он дает меньше возможностей. Благо, платформ немало — можно подобрать максимально подходящую функциональность.

Создать бота в Telegram можно, например, через:

  • Manybot — бесплатный конструктор в самом Telegram для создания простых ботов с многоуровневым меню, опцией отправки файлов и автопостинга, а также выдачей доступа администраторам. Из минусов — неотключаемая реклама.
  • Botobot — конструктор ботов для ecommerce: с каталогом, корзиной, встроенной оплатой и поддержкой. Есть возможность аналитики продаж. В бесплатной версии доступно создание одного бота с количеством товаров до 20, в платной три тарифа — от 320 до 3700 руб. в месяц.
  • BorisBot позволяет строить автоворонки для разных сегментов аудитории на сайте, в соцсетях, в Telegram и других мессенджерах. Здесь можно создать специализированного бота для ресторана, коворкинга, комьюнити, мероприятия, экскурсии, образовательного проекта, а также телемедицины, поддержки пользователей и набора персонала. Либо выбрать готовое решение на маркетплейсе. Боты интегрируются с разными сервисами и обмениваются данными с CRM-системами. Есть бесплатная версия с ограничениями, платные в зависимости от специфики и объемов задач стоят от 990 и 7500 руб. в месяц.
  • Smartbot Pro — инструмент с готовыми сценариями чат-ботов для разных бизнес-задач, который интегрируется с CRM-системами и Google Таблицами. К боту в нем можно подключить прием оплаты, а для Telegram даже создать полнофункциональный интернет-магазин. Бесплатный тестовый доступ работает две недели, безлимитный доступ к конструктору стоит от 750 руб. в месяц.

Связанные вопросы и ответы:

1. Как создать telegram бота с нуля

Чтобы создать telegram бота с нуля, нужно зарегистрироваться на платформе telegram и получить токен через @BotFather. Далее необходимо выбрать язык программирования, например Python, и создать скрипт бота. После этого можно начать добавлять функционал, например, обработку команд и ответы на них.

2. Какие языки программирования можно использовать для создания telegram бота

Для создания telegram бота можно использовать различные языки программирования, такие как Python, JavaScript, PHP, Java и другие. Выбор языка зависит от ваших предпочтений и навыков в программировании.

3. Как добавить функционал обработки команд в telegram бота

Для добавления функционала обработки команд в telegram бота необходимо написать соответствующий код в скрипте бота. Например, в Python это можно сделать с помощью библиотеки python-telegram-bot, которая предоставляет удобный интерфейс для работы с API telegram.

4. Как настроить webhook для telegram бота

Для настройки webhook для telegram бота нужно иметь доступ к серверу, на котором будет хоститься бот. Сначала необходимо создать HTTPS сервер, получить SSL сертификат и установить его на сервер. Затем нужно добавить webhook URL в настройки бота через API telegram.

5. Какие инструменты можно использовать для тестирования telegram бота

Для тестирования telegram бота можно использовать специальные инструменты, такие как BotFather - инструмент для создания и настройки ботов, Bot API - интерфейс для взаимодействия с telegram ботами, а также различные онлайн сервисы для тестирования API.

6. Как отправить сообщение от telegram бота пользователю

Для отправки сообщения от telegram бота пользователю необходимо использовать методы API telegram, например sendMessage. В этом методе нужно указать chat_id - уникальный идентификатор чата, и text - текст сообщения, которое нужно отправить.

7. Как добавить кнопки и меню в telegram бота

Для добавления кнопок и меню в telegram бота необходимо использовать InlineKeyboardMarkup и ReplyKeyboardMarkup. InlineKeyboardMarkup позволяет добавить кнопки под сообщением, а ReplyKeyboardMarkup - добавить меню снизу экрана.

8. Как использовать базу данных для хранения данных telegram бота

Для хранения данных telegram бота можно использовать различные базы данных, такие как SQLite, MySQL, PostgreSQL и другие. Необходимо создать соединение с базой данных в скрипте бота и использовать SQL запросы для работы с данными, например сохранение и извлечение информации.

Что такое telegram бот и как он работает

Бот должен уметь отправлять запросы Телеграм-серверу и получать от него апдейты (updates, обновления).

Как получать апдейты в Bot API

Получать апдейты можно одним из двух способов:

    Поллинг — просто регулярно отправлять запрос к серверу Телеграма для получения обновлений,

    Вебхук — сделать так, чтобы Телеграм сам отправлял запросы по нужному URL.

Конечно, удобнее использовать библиотеки, чем делать http-запросы "руками".

Если вы попробуете, как написать Телеграм-бота на Python, вам предложат воспользоваться библиотеками python-telegram-bot и telebot. Но не стоит.

Ну, если вы только хотите познакомиться с разработкой ботов и написать своего hello-world-бота, то можете, конечно использовать и их. Но эти библиотеки могут далеко не всё. Среди разработчиков ботов лучшей библиотекой для ботов на Python считается. Она асинхронная, использует декораторы и содержит удобные инструменты для разработки. Ещё был хороший, но он давно не обновлялся.

Также ботов часто пишут на JavaScript, для этого обычно используется. Библиотеки есть и для многих других языков, но используют их реже.

Если же вы хотите использовать Telegram API, то можете воспользоваться Python'овскимии.

Пример кода бота

Если вы хотите получить какое-то представление о том, как вообще выглядит код бота, вот вам пример использования на aiogram с его странички на GitHub :

import asyncio from aiogram import Bot, Dispatcher, types async def start_handler(event: types.Message): await event.answer( f"Hello, {event.from_user.get_mention(as_html=True)} ?!", parse_mode=types.ParseMode.HTML, ) async def main(): bot = Bot(token=BOT-TOKEN) try: disp = Dispatcher(bot=bot) disp.register_message_handler(start_handler, commands={"start", "restart"}) await disp.start_polling() finally: await bot.close() asyncio.run(main())

Этот бот будет отвечать на команды/startи и/restart.

С какими языками программирования можно создать telegram бот

Откроем редактор кода и инициализируем проект через терминал с помощью команды npm -y. После этого в проекте появится файл package.json. Теперь мы можем добавить все необходимые библиотеки командой npm i, после которой через пробел прописываются названия необходимых нам библиотек. Все названия можно посмотреть в документации: в этом примере это будут telegraf и axios. 

Стоит отметить, что API погоды отдельно устанавливать не нужно — она работает по архитектуре клиент-сервер, что позволяет просто отправлять запросы и получать ответы. 

Пока устанавливаются библиотеки, можно прочитать документацию к ним. У telegraf.js есть несколько примеров готового бота. Можно взять первый пример и посмотреть, как он работает. 

Для этого создадим новый файл с именем bot.js и добавим в него следующий код: 

const { Telegraf } = require('telegraf'); const bot = new Telegraf(process.env.BOT_TOKEN); bot.start((ctx) => ctx.reply('Welcome')); bot.help((ctx) => ctx.reply('Send me a sticker')); bot.on('sticker', (ctx) => ctx.reply('')); bot.hears('hi', (ctx) => ctx.reply('Hey there')); bot.launch(); // Enable graceful stop process.once('SIGINT', () => bot.stop('SIGINT')); process.once('SIGTERM', () => bot.stop('SIGTERM'));

В package.json пропишем стартовый скрипт для этого файла. Для этого в разделе scripts добавим новый пункт со следующим содержанием: 

"start": "node bot.js"

Если мы запустим проект в терминале командой npm start, то увидим сообщение ”Bot token is required”. Получить токен можно через Telegram BotFather — официального бота мессенджера, который создает другие боты и управляет ими. В интерфейсе выбираем /start, затем — /newbot, и следом задаем имя и адрес. В этой инструкции это будет elbrusbootcampweatherbot.

После этого BotFather пришлет сообщение с токеном и ссылкой на бот. Копируем токен и вставляем его в третью строчку примера: 

const bot = new Telegraf(process.env.BOT_TOKEN);

Для проверки находим бота в поиске в Telegram по имени. Теперь бот запускается, но пока не выполняет никаких полезных функций. Чтобы разобраться, что именно нужно добавить, построчно разберем код из примера. 

Первая строка отвечает за подключение библиотеки telegraf, которая непосредственно взаимодействует с API Telegram и позволяет нам использовать определенные методы для работы с ботом. В следующей строке создаем нового бота и указываем ключ доступа к нему. 

Далее указано, как бот будет реагировать на различные команды: при нажатии /start он отправит сообщение welcome, при отправке стрикера — эмодзи и так далее. Последние две строчки нужны для того, чтобы выполнение ботом команд правильно завершалось в облачных сервисах. 

Другие методы кроме /start нам не понадобятся, поэтому их можно смело удалить: 

const { Telegraf } = require('telegraf'); const bot = new Telegraf(process.env.BOT_TOKEN); bot.start((ctx) => ctx.reply('Welcome')); bot.launch(); // Enable graceful stop process.once('SIGINT', () => bot.stop('SIGINT')); process.once('SIGTERM', () => bot.stop('SIGTERM'));

Добавим собственные методы: при отправке геолокации бот отвечает актуальном прогнозом погоды для этой территории. Первым делом напишем обработчик, который будет принимать сообщение от пользователя и выводить его в консоль.

Как зарегистрировать бота в telegram

Когда мы говорим о концепции состояния в телеграм-ботах, мы имеем в виду способ, с помощью которого бот сохраняет информацию о текущем контексте диалога с пользователем. Этот контекст может включать в себя выбранные опции, прогресс выполнения задачи или любую другую информацию, которая необходима для обработки запросов пользователя. Управление состоянием позволяет боту быть более информированным и контекстно-ориентированным во время диалога с пользователем.

Представьте, что вы разрабатываете бота для заказа пиццы. Концепция состояния позволит боту знать, что пользователь уже выбрал размер пиццы, тип теста и начал выбирать добавки. Без управления состоянием боту пришлось бы каждый раз спрашивать пользователя о всех этих деталях, что могло бы быть утомительным и неэффективным.

В зависимости от потребностей вашего бота, вы можете использовать локальное хранение или удаленное хранение.

Локальное хранение : В этом случае, данные о состоянии хранятся на сервере, где работает ваш бот. Это быстрый и простой способ управления состоянием. Однако, если сервер перезагружается или бот перезапускается, данные о состоянии могут быть утеряны. Пример кода на библиотекеtelebotдля локального хранения:

import telebot bot = telebot.TeleBot('YOUR_BOT_TOKEN') user_states = {} @bot.message_handler(func=lambda message: True) def handle_message(message): chat_id = message.chat.id if chat_id not in user_states: user_states = 'start' if user_states == 'start': # Обработка сообщения в состоянии "start" user_states = 'next_state' elif user_states == 'next_state': # Обработка сообщения в состоянии "next_state" user_states = 'start' # Остальная логика бота

Удаленное хранение : Для более надежного хранения состояния, особенно при работе с более сложными ботами или в средах с множеством инстансов бота, вы можете использовать удаленное хранение. Это может включать в себя базы данных или хранилища, такие как Redis. Пример кода наtelebotс использованием Redis для удаленного хранения:

import telebot import redis bot = telebot.TeleBot('YOUR_BOT_TOKEN') redis_db = redis.StrictRedis(host='localhost', port=6379, db=0) @bot.message_handler(func=lambda message: True) def handle_message(message): chat_id = message.chat.id current_state = redis_db.get(f'user_state_{chat_id}') if current_state == b'start': # Обработка сообщения в состоянии "start" redis_db.set(f'user_state_{chat_id}', 'next_state') elif current_state == b'next_state': # Обработка сообщения в состоянии "next_state" redis_db.set(f'user_state_{chat_id}', 'start') # Остальная логика бота

Обработка состояния с использованием FSM (Finite State Machine)

Finite State Machine (FSM) - это модель, которая описывает все возможные состояния, в которых может находиться ваш бот, и переходы между этими состояниями. Использование FSM делает управление состоянием структурированным и понятным.

FSM состоит из состояний, событий и переходов. Каждое состояние представляет собой определенный контекст, в котором находится бот, каждое событие - действие пользователя или бота, а переход - изменение состояния в ответ на событие.

Как подключить бота к API telegram

Этот вид кнопок появился вместе с Bot API в далёком 2015 году и представляет собой не что иное, как шаблоны сообщений (за исключением нескольких особых случаев, но о них позже). Принцип простой: что написано на кнопке, то и будет отправлено в текущий чат. Соответственно, чтобы обработать нажатие такой кнопки, бот должен распознавать входящие текстовые сообщения.

Напишем хэндлер, который будет при нажатии на команду/startотправлять сообщение с двумя кнопками:

Несмотря на то, что Telegram Bot APIуказывать просто строки вместо объектовKeyboardButton, при попытке использовать строку aiogram 3.x выкинет ошибку валидации и это не баг, а фича .
Живите теперь с этим ‍♂️

Что ж, запустим бота и обалдеем от громадных кнопок:

Как-то некрасиво. Во-первых, хочется сделать кнопки поменьше, а во-вторых, расположить их горизонтально.
Почему вообще они такие большие? Дело в том, что по умолчанию «кнопочная» клавиатура должна занимать на смартфонах столько же места, сколько и обычная буквенная. Для уменьшения кнопок к объекту клавиатуры надо указать дополнительный параметрresize_keyboard=True.

Как настроить обработку сообщений и команд бота


Боты часто должны иметь возможность хранить состояние пользователей и их данные. Например, бот мессенджера может хранить информацию о настройках пользователя, истории сообщений и другие данные.Для управления состоянием можно использовать базы данных или кэширование, как упомянуто выше. Также существуют специализированные библиотеки и фреймворки, такие как aiogram , которые предоставляют удобные средства для работы с состоянием и хранением данных в телеграм-ботах.

from aiogram import Bot, types from aiogram.dispatcher import Dispatcher from aiogram.types import ParseMode from aiogram.contrib.middlewares.logging import LoggingMiddleware from aiogram.utils import executor # Инициализация бота и диспетчера bot = Bot(token="YOUR_BOT_TOKEN") dp = Dispatcher(bot) dp.middleware.setup(LoggingMiddleware()) # Обработка команды /start @dp.message_handler(commands=) async def on_start(message: types.Message): # Сохранение состояния пользователя в базе данных user_id = message.from_user.id await message.answer("Добро пожаловать! Ваше состояние сохранено.") if __name__ == '__main__': from aiogram import executor executor.start_polling(dp, skip_updates=True)

Мы используем библиотеку aiogram для обработки команды/startи сохранения состояния пользователя. Библиотека упрощает управление состоянием и хранением данных пользователя.Важно подчеркнуть, что управление состоянием и хранение данных должны быть реализованы таким образом, чтобы быть масштабируемыми и надежными, особенно в условиях высокой нагрузки.

Как добавить функционал кнопок и меню в telegram бота


Python и django идеально подходят для работы с telegram ботом. Что такое бот? В этом контексте, бот — это интерфейс взаимодействия между вашим приложением и клиентом telegram. Этот интерфейс позволит отправлять сообщения в зависимости от бизнес логики вашего приложения.Я не буду расписывать здесь весь процесс создания и настройки веб приложения на django — врят ли у меня получится сделать это лучше чем у создателей официальной докумментации. Скажу только, что это не должно занять у вас больше десяти минут, если вы уже работали с этим фреймворком.Хочется сказать спасибо Павлу Дурову и его команде — благодаря возможности установки webHook, работать с ботом стало максимально просто и удобно. Все что необходимо это:
  • Создать своего бота при помощи интерфейса BotFather в клиенте телеграм и настроить его, следуя инструкциям папы бота
  • Установить webHook, используя свой token, который папа бот поможет вам получить. Для этого переходим по url: api.telegram.org/bot {{ token }}/setWebhook?url={{ url }} , где token — ваше кольцо аутентификации, а url — это ссылка, запрос на которую обрабатывает контроллер вашего телеграм бота. Отмечу так же, что использоваться может только https протокол, т.е. необходим SSL.
  • Создать контроллер, обрабатывающий url из пункта 2, создать бизнес логику для вашего бота. Привязать контроллер к обработчику url. В часть url необходимо так же добавить свой token чтобы обеспечить другие люди не могли слать запросы на этот адрес.

Как организовать хранение данных и работу с базой данных в telegram боте

Для начала быстро разберемся с юридической составляющей. В России власти заблокировали лишь серверы и сам сайт Телеграма ( UPD : уже разблокировали, поражение в этой войне было неминуемо). Использование мессенджера фактически не запрещено. Но не любой российский сервер будет исправно работать с ботами для этого мессенджера. Так что перед арендой лучше уточнить у техподдержки, подойдет ли их хостинг для телеграм-бота.

У хостинга для чат-бота должна быть поддержка нескольких языков программирования. Например, хостинг для телеграм-бота на Python должен поддерживать этот язык. Аналогично, написанный на NodeJS бот должен быть развернут на сервере, в который можно подгрузить язык NodeJS.

Если хостинг удовлетворяет этим требованиям, он подойдет для работы простого телеграм-бота, который выдает заготовленный ответ на слова-триггеры. Если же в работе ассистент использует машинное обучение, вам стоит обратить внимание на наличие графического ускорения — без него построение нейросети займет очень много времени. Впрочем, если ваш бот не будет обучаться во время общения с реальными собеседниками, то можно арендовать хостинг с графическим ускорением только на время разработки, а потом развернуть обученную нейросеть на обычном хостинге для Telegram-бота, без графики.

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

Для развертывания бота для Telegram лучше всего подходит VDS /VPS . Он не требует наличия домена в обязательном порядке, и к нему можно будет обратиться по выделенному IP-адресу, что удобно при развертывании бота. К тому же такие серверы лучше поддерживают увеличение масштабов проекта, так что при увеличении потока посетителей вам не придется переходить на другой сервер — достаточно будет просто сменить тариф или его настройки.

Запустите свой VDS-сервер в Timeweb

От 169 рублей в месяц

Заказать сервер

Выбираем тариф

О тарифах хостингов для бота Telegram стоит поговорить отдельно. Есть целый класс бесплатных хостингов — сюда входит, например, Heroku. Они могут оказаться полезными при тестировании бота — расположите свой чат-бот на Heroku и проверьте работоспособность всех функций, прежде чем арендовать хостинг и выкладывать свое творение. Но учтите, что работоспособность на этом хостинге будет непостоянной — обычно чат-боты работают по 30 секунд, а затем отключаются на неопределенное время. Так что для полноценного развертывания лучше выбрать другой хостинг. 

Выбор тарифа обычно обуславливается потоком клиентов, но не сложностью бота. Для развертывания как простенького, так и нейросетевого бота вам не потребуется много дискового пространства. Нет нужды и в больших вычислительных мощностях — большинству ботов более чем достаточно 512 МБ оперативной памяти. Поэтому можно выбирать самые недорогие тарифы.

Ключевое требование к хостингу — стабильность подключения, поэтому от shared-хостингов для телеграм-бота лучше сразу отказаться. А вот VPS/VDS сможет обеспечить надежное подключение. Предпочтительная ОС для сервера — Ubuntu, поскольку большинство модулей для языков программирования пишутся именно под нее. Тарифы на такие виртуальные серверы начинаются от 169 рублей в месяц.

Как настроить аналитику и мониторинг активности бота

Всем привет, меня зовут  Артем  и я телеграмщик. Я занимаюсь продвижением каналов и чатов в телеграм, контент-мейкерством, таргетингом и прочими диджитал делишками. Расскажу, как раскрутить бота в Телеграме и как вести трафик в Telegram-канал.

Можно много писать про то, какой он крутой, какой защищенный и какой удобный.

Скажу проще — Telegram предоставляет возможность с минимальными затратами в кратчайшие сроки монетизировать проекты — низкая конкуренции, большое количество горячей аудитории, простота работы, малый порог вхождения в нишу — вот основные преимущества площадки.

Кто-то скажет, да ладно, какая низкая конкуренция, вон одних видосо-каналов тьма тьмущая.

Да согласен, и даже это не мешает им всем развиваться и зарабатывать на продажах рекламы.

А теперь загляните в ВК-паблики вашего города — сколько плохих покупок, риелторов, суши-кафе-баров, сообществ мамочек, барахолок, пабликов по интересам?

А загляните в телеграм?

Есть там бот аренды авто вашем городе? Да в МСК возможно и есть, а вот в Калуге? Туле? Рязани?

А доставка пиццы с онлайн оплатой?

Может чат рыболовов вашего города?

Ну что ж, давайте небольшую предысторию….

На дворе апрель, пандемия и самоизоляция , малый бизнес сморщивается, словно он в холодной воде, бюджеты на маркетинг урезаются, сидишь читаешь, как люди разбивают свои кубышки, чтоб вдосталь затариться туалеточкой и гречей.

И тут эврика — надо создать чат-бота, под актуальную ситуацию. Решено, будем создавать.

Я нередко применял автоматизацию и геймификацию в ВК, ТГ, делал ботов помощников, минилендинги для WhatsApp. Так что здесь у меня опыт был.

Основные цели:

— определение стоимости подписчика (не дороже 5 рублей),

— создание площадки для продвижения своих проектов,

— сбор фрилансеров, админов каналов и чатов в подписную базу,

— поиск клиентов на консультацию по способам продвижения в Телеграм,

— поиск партнеров для ведения совместных проектов.

Поиск ЦА и рекламной площадки

Внимание! Тут будет немного годноты, для не телеграмщиков!

Как раскрутить бота в Телеграме? Виды источников трафика в ТГ:

— закуп рекламы в каналах и чатах ТГ, ВК, ИГ* и прочих.