Как создать Telegram-бота

Автоматические чат-боты весьма полезны для стимулирования взаимодействия. Мы можем создавать чат-ботов для Slack, Discord и других платформ.

Для увлекательных разговоров чат-бот Telergam действительно полезен. В этом уроке мы узнаем, как создать чат-бота Telegram и использовать его для подготовки текстовых сообщений с подробными ответами.


Шаги по созданию бота Telegram

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

Шаг 1:

Откройте свое приложение и в строке поиска введите «BotFather» и нажмите «Запустить».

Шаг 2:

Введите «/newbot».

telegram

Шаг 3:

Введите уникальное имя бота.

Шаг 4:

Теперь введите уникальное имя пользователя для своего бота.

Помните: имя пользователя должно заканчиваться на «bot». Например, «Tetris_bot» или «Tetrisbot».

Шаг 5:

После указания уникального имени пользователя вы получите сообщение, подобное приведенному ниже. Оно содержит токен для доступа к HTTP API. Обеспечьте безопасность своего токена и храните его в безопасном месте.

telegram

Шаг 6:

Создайте фляжное приложение для ответа веб-перехватчика.

Прежде всего, вам нужно будет установить python и flask на свой компьютер.

pip install Flask
from flask import Flask
 
app = Flask(__name__)
 
@app.route('/')
def index():
    return "<h1>Welcome!</h1>"
 
if __name__ == '__main__':
   app.run(threaded=True)

Запустите этот код, чтобы проверить, правильно ли работает фляжное приложение. Когда вы запустите код, вы получите ссылку на сервер, например «http://127.0.0.1:5000/». Нажмите на эту ссылку, и вы будете перенаправлены на веб-страницу, где увидите ответ «Добро пожаловать!»

Шаг 7:

Скачайте NGROK и введите в нем команду «ngrok http 5000», после выполнения этой команды вы получите ссылки. Из них скопируйте ссылку HTTPS и вставьте ее в свой браузер. Вы увидите ответ «Добро пожаловать!» так же, как и в предыдущем шаге.

Шаг 8:

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

https://api.telegram.org/bot<Your Bot Token>/setWebhook?url=<URL, который вы получили от NGROK>

После запуска ссылки в веб-браузере вы получите ответ, показанный на изображении ниже:

Шаг 9:

Теперь нам нужно будет получить ответ JSON от бота на любой текст, который мы пишем боту.

Откройте VS Code, добавьте следующий код и запустите его по той же ссылке Ngrok, по которой вы запускали предыдущий код.

from flask import Flask
from flask import request
from flask import Response
import requests
 
app = Flask(__name__)
 
@app.route('/', methods=['GET', 'POST'])
def index():
    if request.method == 'POST':
        msg = request.get_json()
        print(msg)
       
        return Response('ok', status=200)
    else:
        return "<h1>Welcome!</h1>"
 
 
if __name__ == '__main__':
   app.run(debug=True)

В BotFather, где вы получаете токен для своего чат-бота Telegram, вы также можете указать URL-адрес для перенаправления на своего бота Telegram.

После этого нажмите Start Bot, чтобы начать чат с ботом. Затем введите любое сообщение, которое вы хотите, например, «тестовый бот» или что угодно.

После написания «тестового бота» вашему боту теперь перейдите к Vscode и загрузите следующий JSON в свой терминал:

telegram

Здесь мы видим, что сообщение, которое мы написали боту, мы можем получить на бэкэнде в виде текста.

Шаг 10:

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

from flask import Flask
from flask import request
from flask import Response
import requests
 
TOKEN = "<Your Bot Token>"
app = Flask(__name__)
 
def parse_message(message):
    print("message-->",message)
    chat_id = message['message']['chat']['id']
    txt = message['message']['text']
    print("chat_id-->", chat_id)
    print("txt-->", txt)
    return chat_id,txt
 
def tel_send_message(chat_id, text):
    url = f'https://api.telegram.org/bot{TOKEN}/sendMessage'
    payload = {
                'chat_id': chat_id,
                'text': text
                }
   
    r = requests.post(url,json=payload)
    return r
 
@app.route('/', methods=['GET', 'POST'])
def index():
    if request.method == 'POST':
        msg = request.get_json()
       
        chat_id,txt = parse_message(msg)
        if txt == "hi":
            tel_send_message(chat_id,"Hello!")
        else:
            tel_send_message(chat_id,'from webhook')
       
        return Response('ok', status=200)
    else:
        return "<h1>Welcome!</h1>"
 
if __name__ == '__main__':
   app.run(debug=True)

Мы получим приведенный ниже ответ в Telegram Bot:

Telegram

Шаг 11:

Теперь мы также можем получить изображение от бота. Добавьте в код функцию отправки изображений.

Для получения дополнительных параметров вы можете следовать документации.

from flask import Flask
from flask import request
from flask import Response
import requests

TOKEN = "<Ваш токен>"
 
app = Flask(__name__)
 
def tel_parse_message(message):
    print("message-->",message)
    try:
        chat_id = message['message']['chat']['id']
        txt = message['message']['text']
        print("chat_id-->", chat_id)
        print("txt-->", txt)
 
        return chat_id,txt
    except:
        print("NO text found-->>")
 
def tel_send_message(chat_id, text):
    url = f'https://api.telegram.org/bot{TOKEN}/sendMessage'
    payload = {
                'chat_id': chat_id,
                'text': text
                }
   
    r = requests.post(url,json=payload)
 
    return r
 
def tel_send_image(chat_id):
    url = f'https://api.telegram.org/bot{TOKEN}/sendPhoto'
    payload = {
        'chat_id': chat_id,
        'photo': "https://raw.githubusercontent.com/fbsamples/original-coast-clothing/main/public/styles/male-work.jpg",
        'caption': "This is a sample image"
    }
 
    r = requests.post(url, json=payload)
    return r
 
@ app.route('/', methods=['GET', 'POST'])
def index():
    if request.method == 'POST':
        msg = request.get_json()
        try:
            chat_id, txt = tel_parse_message(msg)
            if txt == "hi":
                tel_send_message(chat_id,"Hello, world!")
            elif txt == "image":
                tel_send_image(chat_id)
 
            else:
                tel_send_message(chat_id, 'from webhook')
        except:
            print("from index-->")
 
        return Response('ok', status=200)
    else:
        return "<h1>Welcome!</h1>"
 
if __name__ == '__main__':
    app.run(threaded=True)

Вот ответ, который вы получите от telegram-бота:

telegram

Шаг 12:

Подобным образом вы можете отправить аудио. Для получения дополнительных параметров вы можете следовать документации.

def tel_send_audio(chat_id):
    url = f'https://api.telegram.org/bot{TOKEN}/sendAudio'
 
    payload = {
        'chat_id': chat_id,
        "audio": "http://www.largesound.com/ashborytour/sound/brobob.mp3",
 
    }
 
    r = requests.post(url, json=payload)
 
    return r

Добавьте этот код в свою индексную функцию:

elif txt == "audio":
    tel_send_audio(chat_id)

Вот такой ответ вы получите в Telegram:

telegram

Шаг 13:

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

def tel_send_document(chat_id):
    url = f'https://api.telegram.org/bot{TOKEN}/sendDocument'
 
    payload = {
        'chat_id': chat_id,
        "document": "http://www.africau.edu/images/default/sample.pdf",
 
    }
 
    r = requests.post(url, json=payload)
 
    return r

Добавьте этот код в свою индексную функцию:

elif txt == "file":
    tel_send_document(chat_id)

Вот такой ответ вы получите в боте:

telergram

Шаг 14:

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

def tel_send_poll(chat_id):
    url = f'https://api.telegram.org/bot{TOKEN}/sendPoll'
    payload = {
        'chat_id': chat_id,
        "question": "In which direction does the sun rise?",
        "options": json.dumps(["North", "South", "East", "West"]),
        "is_anonymous": False,
        "type": "quiz",
        "correct_option_id": 2
    }
 
    r = requests.post(url, json=payload)
 
    return r

Добавьте этот код в свою индексную функцию:

elif txt == "poll":
     tel_send_poll(chat_id)

Такой ответ вы получите в мессенджере:

Шаг 15:

Создайте код, чтобы получить кнопку в телеграмм-боте:

def tel_send_button(chat_id):
    url = f'https://api.telegram.org/bot{TOKEN}/sendMessage'
 
    payload = {
        'chat_id': chat_id,
        'text': "What is this?",
                'reply_markup': {'keyboard': [[{'text': 'supa'}, {'text': 'mario'}]]}
    }
 
    r = requests.post(url, json=payload)
 
    return r

Добавьте этот код в свою индексную функцию:

elif txt == "button":
     tel_send_button(chat_id)

Этот ответ будет выведен в чат-боте:

telegram

Шаг 16:

Создайте код для получения встроенной кнопки в Telegram:

def tel_send_inlinebutton(chat_id):
    url = f'https://api.telegram.org/bot{TOKEN}/sendMessage'
 
    payload = {
        'chat_id': chat_id,
        'text': "What is this?",
        'reply_markup': {
            "inline_keyboard": [[
                {
                    "text": "A",
                    "callback_data": "ic_A"
                },
                {
                    "text": "B",
                    "callback_data": "ic_B"
                }]
            ]
        }
    }
    r = requests.post(url, json=payload)
    return r

Напишите код в индексную функцию:

elif txt == "inline":
     tel_send_inlinebutton(chat_id)

В Telegram вы получите следующий ответ:

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

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

Надеюсь, вам понравилось создавать своего первого бота Telegram. Если вы столкнулись с какими-либо трудностями, сообщите нам об этом в комментарии.

Команда SystemLog
Команда SystemLog

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *