Chatbot tự động khá hữu ích để kích thích tương tác. Chúng tôi có thể tạo chatbot cho Slack, Discord và các nền tảng khác.
Trong bài viết này, tôi sẽ hướng dẫn bạn cách xây dựng một chatbot Telegram sẽ cho bạn biết tử vi của mình. Vậy hãy bắt đầu!
Cách nhận mã thông báo bot của bạn
Để thiết lập bot mới, bạn cần nói chuyện với BotFather. Không, anh ấy không phải là người – anh ấy cũng là một bot và anh ấy là ông chủ của tất cả các bot Telegram.
- Tìm kiếm @botfather trong Telegram.

2. Bắt đầu cuộc trò chuyện với BotFather bằng cách nhấp vào nút Bắt đầu.

3. Loại /newbot
và làm theo lời nhắc để thiết lập bot mới. BotFather sẽ cung cấp cho bạn một mã thông báo mà bạn sẽ sử dụng để xác thực bot của mình và cấp cho nó quyền truy cập vào API Telegram.

Ghi chú: Đảm bảo bạn lưu trữ mã thông báo một cách an toàn. Bất kỳ ai có quyền truy cập mã thông báo của bạn đều có thể dễ dàng thao túng bot của bạn.
Cách thiết lập môi trường mã hóa của bạn
Hãy thiết lập môi trường viết mã. Mặc dù có sẵn nhiều thư viện khác nhau để tạo bot Telegram, chúng tôi sẽ sử dụng thư viện pyTelegramBotAPI. Đây là một triển khai Python đơn giản nhưng có thể mở rộng cho API Bot Telegram với cả khả năng đồng bộ và không đồng bộ.
Cài đặt thư viện pyTelegramBotAPI bằng pip:
pip install pyTelegramBotAPI
Tiếp theo, hãy mở trình chỉnh sửa mã yêu thích của bạn và tạo một .env
tệp để lưu trữ mã thông báo của bạn như sau:
export BOT_TOKEN=your-bot-token-here
Sau đó, chạy source .env
lệnh để đọc các biến môi trường từ .env
tập tin.
Cách tạo Bot đầu tiên của bạn
Tất cả các triển khai API được lưu trữ trong một lớp duy nhất được gọi là TeleBot
. Nó cung cấp nhiều cách để nghe tin nhắn đến cũng như các chức năng như send_message()
, send_document()
và những người khác để gửi tin nhắn.
Tạo một cái mới bot.py
tệp và dán đoạn mã sau vào đó:
import os
import telebot
BOT_TOKEN = os.environ.get('BOT_TOKEN')
bot = telebot.TeleBot(BOT_TOKEN)
Trong đoạn mã trên, chúng tôi sử dụng os
thư viện để đọc các biến môi trường được lưu trữ trong hệ thống của chúng tôi.
Nếu bạn còn nhớ, chúng tôi đã xuất một biến môi trường có tên là BOT_TOKEN
ở bước trước. Giá trị của BOT_TOKEN
được đọc trong một biến gọi là BOT_TOKEN
. Hơn nữa, chúng tôi sử dụng các TeleBot
class để tạo một phiên bản bot và chuyển BOT_TOKEN
với nó.
Sau đó chúng ta cần đăng ký trình xử lý tin nhắn. Các trình xử lý thư này chứa các bộ lọc mà thư phải vượt qua. Nếu một tin nhắn vượt qua bộ lọc, chức năng trang trí được gọi và tin nhắn đến được cung cấp dưới dạng đối số.
Hãy định nghĩa một trình xử lý thư xử lý thư đến /start
và /hello
mệnh lệnh.
@bot.message_handler(commands=['start', 'hello'])
def send_welcome(message):
bot.reply_to(message, "Howdy, how are you doing?")
Bất kỳ tên nào cũng được chấp nhận cho một chức năng được trang trí bởi trình xử lý thông báo, nhưng nó chỉ có thể có một tham số (thông báo).
Hãy thêm một trình xử lý khác lặp lại tất cả các tin nhắn văn bản đến cho người gửi.
@bot.message_handler(func=lambda msg: True)
def echo_all(message):
bot.reply_to(message, message.text)
Đoạn mã trên sử dụng một lambda
biểu thức để kiểm tra một tin nhắn. Vì chúng tôi cần lặp lại tất cả các tin nhắn, chúng tôi luôn quay lại True
từ lambda
chức năng.
Bây giờ bạn có một bot đơn giản đáp ứng /start
và /hello
các lệnh với một tin nhắn tĩnh và lặp lại tất cả các tin nhắn đã gửi khác. Thêm phần sau vào cuối tệp của bạn để khởi chạy bot:
bot.infinity_polling()
Đó là nó! Chúng tôi đã sẵn sàng một bot Telegram. Hãy chạy tệp Python và truy cập Telegram để kiểm tra bot.
Tìm kiếm bot bằng tên người dùng của nó nếu bạn không thể tìm thấy nó. Bạn có thể kiểm tra nó bằng cách gửi các lệnh như /hello
và /start
và các văn bản ngẫu nhiên khác.

Lưu ý: Tất cả các trình xử lý thư đều được kiểm tra theo thứ tự mà chúng được khai báo trong tệp nguồn.
Để biết thêm thông tin về cách sử dụng thư viện pyTelegramBotAPI, bạn có thể tham khảo tài liệu của họ tài liệu.
Cách mã hóa Bot Tử vi
Hãy chuyển sự chú ý của chúng ta sang việc xây dựng Bot Tử vi của chúng ta ngay bây giờ. Chúng tôi sẽ sử dụng chuỗi tin nhắn trong bot. Trước tiên, bot sẽ hỏi cung hoàng đạo của bạn, sau đó hỏi ngày, sau đó nó sẽ trả lời bằng tử vi cho ngày cụ thể đó.
Về cơ bản, bot tương tác với API để lấy dữ liệu tử vi.
Chúng tôi sẽ sử dụng API Tử vi mà tôi đã tạo trong một hướng dẫn khác. Nếu bạn muốn tìm hiểu cách xây dựng một cái, bạn có thể xem qua hướng dẫn này. Đảm bảo bạn khám phá các API tại đây trước khi bắt đầu.
Cách lấy dữ liệu tử vi
Hãy tạo một hàm tiện ích để lấy dữ liệu tử vi cho một ngày cụ thể.
import requests
def get_daily_horoscope(sign: str, day: str) -> dict:
"""Get daily horoscope for a zodiac sign.
Keyword arguments:
sign:str - Zodiac sign
day:str - Date in format (YYYY-MM-DD) OR TODAY OR TOMORROW OR YESTERDAY
Return:dict - JSON data
"""
url = "https://horoscope-app-api.vercel.app/api/v1/get-horoscope/daily"
params = {"sign": sign, "day": day}
response = requests.get(url, params)
return response.json()
Trong mã Python ở trên, chúng tôi đã tạo một hàm chấp nhận hai đối số chuỗi – sign
và day
– và trả về dữ liệu JSON. Chúng tôi gửi yêu cầu GET trên URL API và vượt qua sign
và day
làm tham số truy vấn.
Nếu bạn kiểm tra chức năng, bạn sẽ nhận được kết quả tương tự như bên dưới:
{
"data":{
"date": "Dec 15, 2022",
"horoscope_data": "Lie low during the day and try not to get caught up in the frivolous verbiage that dominates the waking hours. After sundown, feel free to speak your mind. You may notice that there is a sober tone and restrictive sensation today that leaves you feeling like you will never be able to break free from your current situation. Don't get caught in this negative mindset."
},
"status": 200,
"success": true
}
Lưu ý: Bạn có thể khám phá thêm về requests
thư viện bằng Python trong hướng dẫn này.
Cách thêm trình xử lý tin nhắn
Bây giờ chúng ta có một hàm trả về dữ liệu tử vi, hãy tạo một trình xử lý tin nhắn trong bot của chúng ta để yêu cầu cung hoàng đạo của người dùng.
@bot.message_handler(commands=['horoscope'])
def sign_handler(message):
text = "What's your zodiac sign?\nChoose one: *Aries*, *Taurus*, *Gemini*, *Cancer,* *Leo*, *Virgo*, *Libra*, *Scorpio*, *Sagittarius*, *Capricorn*, *Aquarius*, and *Pisces*."
sent_msg = bot.send_message(message.chat.id, text, parse_mode="Markdown")
bot.register_next_step_handler(sent_msg, day_handler)
Hàm trên hơi khác một chút so với các hàm khác mà chúng tôi đã xác định trước đó. Chức năng tử vi của bot sẽ được gọi bởi /horoscope
chỉ huy. Chúng tôi đang gửi tin nhắn văn bản tới người dùng, nhưng lưu ý rằng chúng tôi đã đặt parse_mode
đến đánh dấu trong khi gửi tin nhắn.
Vì chúng tôi sẽ sử dụng chuỗi thông báo, chúng tôi đã sử dụng register_next_step_handler()
phương pháp. Phương thức này chấp nhận hai tham số: thông điệp được gửi bởi người dùng và chức năng gọi lại nên được gọi sau tin nhắn. Như vậy, chúng tôi vượt qua sent_msg
biến và một cái mới day_handler
hàm mà chúng ta sẽ định nghĩa tiếp theo.
Hãy xác định day_handler()
chức năng chấp nhận tin nhắn.
def day_handler(message):
sign = message.text
text = "What day do you want to know?\nChoose one: *TODAY*, *TOMORROW*, *YESTERDAY*, or a date in format YYYY-MM-DD."
sent_msg = bot.send_message(
message.chat.id, text, parse_mode="Markdown")
bot.register_next_step_handler(
sent_msg, fetch_horoscope, sign.capitalize())
Chúng tôi lấy cung hoàng đạo từ message.text
thuộc tính. Tương tự như chức năng trước, nó cũng hỏi ngày mà bạn muốn biết tử vi.
Cuối cùng, chúng tôi sử dụng cùng một register_next_step_handler()
phương pháp và vượt qua sent_msg
các fetch_horoscope
chức năng gọi lại, và sign
.
Bây giờ chúng ta hãy xác định fetch_horoscope()
chức năng chấp nhận tin nhắn và dấu hiệu.
def fetch_horoscope(message, sign):
day = message.text
horoscope = get_daily_horoscope(sign, day)
data = horoscope["data"]
horoscope_message = f'*Horoscope:* {data["horoscope_data"]}\\n*Sign:* {sign}\\n*Day:* {data["date"]}'
bot.send_message(message.chat.id, "Here's your horoscope!")
bot.send_message(message.chat.id, horoscope_message, parse_mode="Markdown")
Đây là chức năng cuối cùng mà chúng ta nhận được dấu hiệu từ tham số chức năng và ngày từ message.text
thuộc tính.
Tiếp theo, chúng tôi lấy tử vi bằng cách sử dụng get_daily_horoscope()
chức năng và xây dựng thông điệp của chúng tôi. Cuối cùng, chúng tôi gửi tin nhắn với dữ liệu tử vi.
Trình diễn bot
Khi bạn chạy tệp Python, bạn có thể kiểm tra chức năng này. Đây là bản trình diễn:
Các bước tiếp theo được đề xuất
Hiện tại, bot ngừng hoạt động ngay khi chúng tôi dừng ứng dụng Python của mình. Để làm cho nó luôn chạy, bạn có thể triển khai bot trên các nền tảng như Heroku, Render, v.v.
Đây là một liên kết đến repo GitHub cho dự án này – vui lòng kiểm tra nó.
Bạn cũng có thể thêm nhiều chức năng hơn cho bot bằng cách khám phá API Telegram.
Cảm ơn vì đã đọc! Bạn có thể theo dõi tôi trên Twitter.