Пишем Telegram-бота с заявкой! (Python)

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Сегодня, мы будем писать Telegram Bot с заявкой. Например: Пользователи заполняют анкеты и после эти данные отправляются Администратору.

Для этого мы будем использовать библиотеку pyTelegramBotAPI (telebot).

pyTelegramBotAPI - это легкая и хорошая библиотека для написания Telegram Bot!

Установка библиотеки

Для установки на Windows самой библиотеки telebot нам понадобиться открыть cmd или терминал и написать:

pip install pyTelegramBotAPI

Для установки на macOS нужно написать:

pip3 install pyTelegramBotAPI

Начало кода

Для начало необходимо получить наш токен бота. Для этого нужно перейти в @BotFather и создать бота. После вы получите токен и его нужно вставить его в переменную TOKEN которую мы сейчас создадим, вставить нужно вместо YOUR_TOKEN .

И так, импортируем сначала саму библиотеку:

import telebot

TOKEN = 'YOUR_TOKEN'
ADMIN_ID = 'YOUR_ID'

В переменной TOKEN мы будем хранить наш токен полученный от BotFather

В переменной ADMIN_ID нам нужно вставить наш айди от аккаунта телеграм. Ваш ID можно узнать через бота @getmyid_bot

Теперь давайте напишем приветствие бота:

import telebot

TOKEN = 'YOUR_TOKEN'
ADMIN_ID = 'YOUR_ID'

bot = telebot.TeleBot(TOKEN)

name = None
username = None
user1_mess = None
user2_mess = None
user3_mess = None

@bot.message_handler(commands=['start'])
def start_message(message):
    global name, username
    name = message.from_user.first_name
    username = message.from_user.username
    bot.send_message(message.chat.id, "Привет! Это бот для заявок. Чтобы подать заявку, заполните анкеты")

bot.polling()

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

bot.polling()

Как мы видим, бот работает!

Теперь давайте приступим к анкетам:

import telebot

TOKEN = 'YOUR_TOKEN'
ADMIN_ID = 'YOUR_ID'

bot = telebot.TeleBot(TOKEN)

name = None
username = None
user1_mess = None
user2_mess = None
user3_mess = None


@bot.message_handler(commands=['start'])
def start_message(message):
    global name, username
    name = message.from_user.first_name
    username = message.from_user.username
    bot.send_message(message.chat.id, "Привет! Это бот для заявок. Чтобы подать заявку, заполните анкеты")
    form1(message)

И да, в функции start_message в конце не забываем написать form1(message) благодаря которому после приветствия перекидывает нас на следующую функцию, которую мы сейчас и создадим.

Давайте напишем первый вопрос:

def form1(message):
    bot.send_message(message.chat.id, "1. Как вас зовут?")
    bot.register_next_step_handler(message, form2)

Благодаря коду bot.register_next_step_handler(message, form2) бот ждет, пока пользователь не отправит сообщение, и после его отправки переходит к следующей функции form2, сейчас мы его и создадим

Делаем вторую функцию:

def form2(message):
    global user1_mess
    user1_mess = message.text
    bot.send_message(message.chat.id, "2. Сколько вам лет?")
    bot.register_next_step_handler(message, form3)

Делаем переременную user1_mess глобальным и меняем его значение на message.text. В нем будет храниться текст пользователя. Эта переменная хранит текст введенный в предыдущей фукции.

Также делаем и с третьей функцией:

def form3(message):
    global user2_mess
    user2_mess = message.text
    bot.send_message(message.chat.id, "3. Укажите номер телефона:")
    bot.register_next_step_handler(message, result)

Вы наверное заметили, что в коде bot.register_next_step_handler(message, result) на этот раз указывает на функцию result. Давайте его создадим

Делаем функцию result:

def result(message):
    global user3_mess
    user3_mess = message.text
    bot.send_message(message.chat.id, "Спасибо за заявку! Скоро наш менеджер свяжется с вами. Всего доброго!")
    admin_app(ADMIN_ID)

Здесь просто пишем сообщение и код admin_app(ADMIN_ID) который перекидывает к функции admin_app.

Напомню, что Переменные user3_mess, user2_mess и user1_mess хранят тексты введенные в предыдущей функции.

И так, создаем функцию для отправки введенных данных пользователя Администратору/Менеджеру

Делаем функцию admin_app для отправки данных Админу:

def admin_app(ADMIN_ID):
    ankets = f'''Новая заявка от {name}!
Имя: {user1_mess}
Возраст: {user2_mess}
Номер телефона: {user3_mess}

Telegram:
Name: {name}
Username: @{username}'''

    bot.send_message(ADMIN_ID, ankets)

Создаем переменную ankets где будут заполненные анкеты пользователя и отправляем Админу. Вы помните, что мы создавали переменную ADMIN_ID? Так вот, на этот аккаунт с таким айди будут отправляться заявки пользователей.

Не забываем в конце кода написать:

bot.polling()

Полный код:

import telebot

TOKEN = 'YOUR_TOKEN'
ADMIN_ID = 'YOUR_ID'

bot = telebot.TeleBot(TOKEN)

name = None
username = None
user1_mess = None
user2_mess = None
user3_mess = None


@bot.message_handler(commands=['start'])
def start_message(message):
    global name, username
    name = message.from_user.first_name
    username = message.from_user.username
    bot.send_message(message.chat.id, "Привет! Это бот для заявок. Чтобы подать заявку, заполните анкеты")
    form1(message)


def form1(message):
    bot.send_message(message.chat.id, "1. Как вас зовут?")
    bot.register_next_step_handler(message, form2)

def form2(message):
    global user1_mess
    user1_mess = message.text
    bot.send_message(message.chat.id, "2. Сколько вам лет?")
    bot.register_next_step_handler(message, form3)

def form3(message):
    global user2_mess
    user2_mess = message.text
    bot.send_message(message.chat.id, "3. Укажите номер телефона:")
    bot.register_next_step_handler(message, result)

def result(message):
    global user3_mess
    user3_mess = message.text
    bot.send_message(message.chat.id, "Спасибо за заявку! Скоро наш менеджер свяжется с вами. Всего доброго!")
    admin_app(ADMIN_ID)

def admin_app(ADMIN_ID):
    ankets = f'''Новая заявка от {name}!
Имя: {user1_mess}
Возраст: {user2_mess}
Номер телефона: {user3_mess}

Telegram:
Name: {name}
Username: @{username}'''

    bot.send_message(ADMIN_ID, ankets)

    
bot.polling()

Запускаем и проверяем:

Ура! Все работает прекрасно!

Также вы можете в переменной ADMIN_ID указать айди вашей группы, куда нужно отправлять уведомления о новых заявок (не забудьте добавить бота в группу).

Источник: https://habr.com/ru/articles/753060/


Интересные статьи

Интересные статьи

Всем привет! В предыдущих статьях (часть 1 и часть 2) я описывал мой опыт в части "наколенной" разработки системы алертинга и проверки состояния для сервиса, работающего на удаленном сервере, коммуник...
Всем привет! Меня зовут Кирилл Быков, и я — наставник по направлению «Python-разработчик» в Яндекс-Практикуме. Тема передачи знаний меня интересовала всегда, ещё со школьных олимпиад, продолжилас...
В данной статье будет описано, как создать простой kafka producer и kafka consumer, а затем протестировать их.
Меня зовут Александр, я руковожу backend-разработкой в КТS. Сегодня расскажу, как написать асинхронный краулер.Такая задача часто встречается на практике, когда нужно реализовать периодическую синхрон...
На работе я занимаюсь поддержкой пользователей и обслуживанием коробочной версии CRM Битрикс24, в том числе и написанием бизнес-процессов. Нужно отметить, что на самом деле я не «чист...