banner

Как создать Telegram-бота с кнопками с нуля: пошаговая инструкция

trafficcardinal написал 07.07.2022
15 мин
0
1162
Содержание
banner banner
Telegram боты — отличное решение для автоматизации множества маркетинговых задач. Арбитраж трафика — не исключение. Ранее мы уже рассказывали, как создать чат-бота с нуля под слив на дейтинг. Сегодня же речь пойдет о создании Telegram-бота с кнопками под слив на беттинг.

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

*Спойлер: в конце статьи вас будет ждать файл с готовым ботом.

Какие задачи стоят перед ботом?

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

В чем суть:
  1. Есть сайт букмекерской конторы.
  2. В нем есть возможность поставить ставку на разные виды спорта.
  3. В каждом виде спорта есть свои лиги, страны и т. д.
  4. Всю эту информацию мы соберем и будем выводить в виде каталога.
  5. Подписчики бота смогут сами выбрать, на какое событие хотят сделать ставку, и уже потом получат ссылку на лендинг.
Скрин интересующей нас навигации сайта БК на примере MostBet

Скрин навигации бота

Либо альтернатива:
  1. У вас есть несколько схем от капперов.
  2. Вы создаете меню, разбивая схемы по разным категориям.
  3. Пользователь заходит и видит не очередной пост с одним прогнозом, а полноценный каталог.
  4. Благодаря богатому выбору он с большим шансом будет вовлечен.
По такому же принципу можно сделать и своего бота — только дать пользователю больше выбора с помощью меню. К слову, эта же тема актуальна и в гембле при сливе через схемы.

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

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

Создание простого Telegram-бота с кнопками

Первое, что нужно сделать, — настроить наш сервер, создать бота в самом Telegram и получить токен. Для этого:
1. Регистрируемся и авторизируемся на pythonanywhere.
2. Запускаем Bash-консоль, ждем пока сервер будет настроен.

Главное меню бесплатного хостинга pythonanywhere.

3. Инсталлируем pyTelegramBotAPI — модуль, с помощью которого наш бот будет взаимодействовать с API Telegram. Это делается вводом следующей команды:

pip3.9 install --user pyTelegramBotAPI

Консоль сервера

*3.9 — используемая и сервером pythonanywhere, и Telegram версия Python. Используйте свежую (данная актуальна лишь на момент написания материала) версию, иначе будет ошибка.

4. Запрашиваем у Telegram токен для нашего бота. Для этого просто пишем официальному боту для управления ботами @BotFather и следуем его указаниям. Там ничего сложного, нужно лишь указать название бота в формате ИМЯ_bot. Приставка _bot обязательна. И да, название не должно нарушать правила мессенджера. Когда бот @BotFather выдаст токен — сохраняем его отдельно.

Получение токена через официальный бот Телеги @BotFather

5. Пишем код для логики бота в блокнот или любой другой текстовый редактор:

import telebot #подгружаем модуль телебот
from telebot import types # для указания типов кнопок

bot = telebot.TeleBot('ТОКЕН СЮДА') #задаем токен
@bot.message_handler(commands=['start']) #задаем реакцию на команду /start
def start(message):
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
btn1 = types.KeyboardButton("👋 Поздороваться") #создаем кнопку Поздороваться
btn2 = types.KeyboardButton("Меню") #создаем кнопку Меню
markup.add(btn1, btn2)
bot.send_message(message.chat.id, text="Привет, {0.first_name}! Я тестовый бот для читателей trafficcardinal.com".format(message.from_user), reply_markup=markup) #создаем текст для вывода при активации команды /start

@bot.message_handler(content_types=['text']) #задаем реакцию на новые сообщения #(нажатия кнопок — тоже сообщения)

def func(message):
if(message.text == "👋 Поздороваться"): #задаем реакцию на кнопку Поздороваться
bot.send_message(message.chat.id, text="Привет, {0.first_name}! Я тестовый бот для читателей trafficcardinal.com".format(message.from_user)) #создаем текст для вывода при активации кнопки Поздороваться
elif(message.text == "Меню"): #задаем реакцию на кнопку Меню
markup = types.ReplyKeyboardMarkup(resize_keyboard=True) #обновляем тип используемых кнопок
btna1 = types.KeyboardButton("А1") #создаем кнопку А1
btna2 = types.KeyboardButton("А2") #создаем кнопку А2
back = types.KeyboardButton("Вернуться в главное меню") #создаем кнопку Вернуться в главное меню
markup.add(btna1, btna2, back) #обновляем кнопки у пользователя
bot.send_message(message.chat.id, text="Меню", reply_markup=markup) #создаем текст для вывода при активации кнопки Меню

elif(message.text == "А1"): #задаем реакцию на кнопку А1
bot.send_message(message.chat.id, "А1") #создаем текст для вывода при активации кнопки А1

elif message.text == "А2": #задаем реакцию на кнопку А2
bot.send_message(message.chat.id, text="А2") #создаем текст для вывода при активации кнопки А2

elif (message.text == "Вернуться в главное меню"): #задаем реакцию на кнопку Вернуться в главное меню
markup = types.ReplyKeyboardMarkup(resize_keyboard=True) #обновляем тип используемых кнопок
button1 = types.KeyboardButton("👋 Поздороваться") #создаем кнопку Поздороваться
button2 = types.KeyboardButton("Меню") #создаем кнопку Меню
markup.add(button1, button2) #обновляем кнопки у пользователя
bot.send_message(message.chat.id, text="Вы вернулись в главное меню", reply_markup=markup) #создаем текст для вывода при активации кнопки Вернуться в главное меню
else: #задаем реакцию на ВСЕ ОСТАЛЬНЫЕ ситуации
bot.send_message(message.chat.id, text="На такую комманду я не запрограммировал..") #создаем текст реакции для всех остальных ситуаций

bot.polling(none_stop=True) #запрещаем скрипту «спать» — нужно чтобы бот был всегда был онлайн

Находим фрагмент bot = telebot.TeleBot('ТОКЕН СЮДА') #задаем токен — вставляем токен из ответа @BotFather (см. предыдущий раздел).

Сохраняем файл как «bot.py».


6. Загружаем файл на сервер.

Добавление python-скрипта на сервер

7. Запускаем бота, нажав Run.

Инициация обработки скрипта

8. Проверяем результат. Бот должен создать указанные кнопки и реагировать на их нажатия.

Общий принцип работы бота с кнопками

Получилось? Неплохо, поздравляем! Но для полноценного бота под слив трафика двух кнопок маловато, не так ли? Чтобы создать бота под свои нужды, внимательно присмотритесь к коду выше. Символом # отмечены фрагменты кода, которые не будут обрабатываться сервером. В них указаны пояснения ко всему, что происходит в коде.

Для расширения функциональности бота нас интересуют следующие фрагменты:
  • #задаем реакцию на кнопку;
  • #обновляем тип используемых кнопок;
  • #создаем кнопку (обычно несколько раз подряд);
  • #обновляем кнопки у пользователя;
  • #создаем текст для вывода при активации кнопки.

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

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

Создаем бота с кнопкой для Telegram под слив на беттинг

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

  1. Добавить больше кнопок в раздел Меню, исходя их видов спорта.
elif(message.text == "Меню"): #ничего не меняли
markup = types.ReplyKeyboardMarkup(resize_keyboard=True) #ничего не меняли
btna1 = types.KeyboardButton("Футбол") #заменили текст А1 на Футбол
btna2 = types.KeyboardButton("Баскетбол") #заменили текст А2 на баскетбол
btna3 = types.KeyboardButton("ММА") #создали новую кнопку ММА
btna4 = types.KeyboardButton("Формула-1") #создали новую кнопку Формула-1
back = types.KeyboardButton("Вернуться в главное меню") #ничего не меняли
markup.add(btna1, btna2, btna3, bnta4, back) #добавили кнопки btna3 и btna4
bot.send_message(message.chat.id, text="Меню", reply_markup=markup) #ничего не меняли

  1. Добавить реакцию на каждую кнопку раздела с меню, с учетом того, что у каждого элемента меню будет свое подменю.
elif(message.text == "Футбол"): #задаем реакцию на кнопку Футбол (бывшая кнопка А1)
markup = types.ReplyKeyboardMarkup(resize_keyboard=True) #обновляем тип используемых кнопок
btna1b1 = types.KeyboardButton("Лига A1B1") #cоздаем кнопку Лига A1B1
btna1b2 = types.KeyboardButton("Лига A1B2") #cоздаем кнопку Лига A1B2
back = types.KeyboardButton("Вернуться в главное меню") #cоздаем кнопку Вернуться в главное меню
markup.add(btna1b1, btna1b2, back) #обновляем кнопки у пользователя
bot.send_message(message.chat.id, text="Футбол", reply_markup=markup) #создаем текст для вывода при активации кнопки Футбол

По такому же принципу задаем реакцию для нажатия на каждую из кнопок раздела меню — в зависимости от того, сколько нам их нужно.

Создание более сложного меню


  1. Создать реакцию на кнопки подменю для каждой из категорий меню. По такому же принципу.
elif(message.text == "Лига A1B1"): #задаем реакцию на кнопку Лига A1B1
markup = types.ReplyKeyboardMarkup(resize_keyboard=True) #обновляем тип используемых кнопок
btna1b1c1 = types.KeyboardButton("Оффер A1B1С1") #cоздаем кнопку Лига A1B1C1
btna1b2c2 = types.KeyboardButton("Оффер A1B1С2") #cоздаем кнопку Лига A1B1C2
back = types.KeyboardButton("Вернуться в главное меню") #cоздаем кнопку Вернуться в главное меню
markup.add(btna1b1c1, btna1b1c2, back) #обновляем кнопки у пользователя
bot.send_message(message.chat.id, text="Лига A1B1", reply_markup=markup) #создаем текст для вывода при активации кнопки Лига A1B1


По такому же принципу задаем реакцию для нажатия на каждую из кнопок разделов подкатегорий меню — в зависимости от того, сколько нам их нужно.

  1. Создать реакцию на каждый оффер для каждого раздела из подкатегорий меню.

elif(message.text == "Оффер A1B1C1"): #задаем реакцию на кнопку Оффер A1B1C1
markup = types.InlineKeyboardMarkup() #обновляем тип используемых кнопок ОБРАТИТЕ ВНИМАНИЕ — ЗДЕСЬ УЖЕ ДРУГОЙ ТИП
btn_my_site= types.InlineKeyboardButton(text='Наш сайт', url='https://trafficcardinal.com') #cоздаем кнопку со ссылкой
markup.add(btn_my_site) #обновляем кнопки у пользователя
bot.send_message(message.chat.id, "Нажми на кнопку и перейди на наш сайт.", reply_markup = markup) #создаем текст для вывода при активации кнопки Оффер A1B1C1

Создание меню с несколькими уровнями вложений и инлайн-кнопкой для перехода по ссылке.

Именно здесь можно уже не просто писать текст, а интегрировать полноценные креативы.

  1. При необходимости сделать большую глубину вложений — просто повторяйте шаги 2-3.
  2. Не забываем добавлять красоты, например, подойдут смайлики.
  3. Сохраняем изменения (совет — делайте это в отдельный файл).
  4. Загружаем новую логику работы бота на сайт.

Готовый Telegram-бот с меню

В конце статьи вы сможете скачать готовый бот с меню. К сожалению, код бота получился слишком длинным для того, чтобы размещать его в «теле» статьи. Правильно ли писать настолько длинный код под столь простую задачу с точки зрения алгоритмизации? Нет. И в следующей статье мы будет это исправлять, делая код более оптимальным и универсальным.

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

Демонстрация оформления бота под беттинг

Итак, что же может бот:
  • Здороваться по имени пользователя при инициации команды /start.
  • Перемещаться по навигационному меню на 4 вложения.
  • Перемещаться «Вперед» и «Назад» между страницами меню.
  • Возвращаться в главное меню с любого «этажа» вложенных подменю.
  • Выводить инлайн-кнопку со ссылкой.
Демонстрация оформления бота под беттинг

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

  • Изменить текст в кавычках, описывающий кнопки, на нужный вам. Например, «А1» на «Футбол».
  • Вместо ссылки на наш сайт вставить ссылки на продвигаемые вами офферы. Либо же на смартлинк.
  • Вместо надписи «Нажми на кнопку и перейди на наш сайт» добавить ваши креативы, исходя из специфики офферов.
*Совет: Обращайте внимание на консоль сервера. Если вы случайно накосячите с кодом — она укажет вам, где именно ошибка. Даже лишний пробел может привести к тому, что бот не будет работать.

Подводя итоги

Как видите, создать бота с кнопками не так уж и сложно. Пусть даже и приходится долго ковыряться с кодом. Не слишком удобно, не так ли? Мы такого же мнения. Именно поэтому статья и разбита на три части. Во второй части мы научим вас делать бота, код которого не придется ковырять, — достаточно будет лишь создать структуру меню в txt-файле. До скорой встречи, друзья!
telegram-icon-small
telegram-icon-big

TrafficCardinal в телеграме

Только полезный контент и бесплатные плюшки.

2-3 раза в день