Cách xây dựng một Telegram Bot bằng PHP đơn giản


Telegram là một dịch vụ nhắn tin tức thời khá phổ biến vì có tính bảo mật cao. Nó có đầy đủ các tính năng mà bạn đang mong đợi từ một nền tảng trò chuyện hiện đại, bao gồm nền tảng chatbot - hoạt động dựa trên phần mềm mà bạn có thể lập trình để nó tự động đọc và trả lời tin nhắn với người dùng khác.

{tocify} $title={Table of Contents}

Trong bài hướng dẫn này, ritiensinh.com sẽ hướng dẫn cho độc giả cách mà bạn có thể viết một con bot Telegram cho riêng mình trong vòng chưa đầy 30 phút bằng PHP

Bước 1: Thiết lập hồ sơ cho Telegram Bot

$ads={1}

- Bước đầu tiên trong việc tạo Bot Telegram là thiết lập hồ sơ cho nó để mình còn dùng về sau. Đây cũng là cách để bạn nhận một mã thông báo cho API Telegram

Để thiết lập hồ sơ bot mới, bạn hãy đăng nhập vào tài khoản Telegram của bạn và bắt đầu cuộc trò chuyện với BotFather (@BotFather), vì ta cần một tài khoản chính thức cho phép bạn tạo và quản lý bot. Trong cuộc chuyện của BotFather, các bạn hãy nhập lệnh /newbot

BotFather sẽ phản hồi với nội dung yêu cầu bạn chọn tên hiển thị và tên người dùng cho bot của bạn. Tên người dùng phải kết thúc bằng “bot” và không trùng lặp username của bot người khác. Trong ví dụ của ritiensinh.com, thì tớ đã giải quyết tên hiển thị là BOT NÈ và tên người dùng là ritiensinhlabot .


Khi bạn đã có tên người dùng hợp lệ, BotFather sẽ tự động hoàn tất việc tạo bot của bạn và trả lời một đoạn nội dung trong đó có kèm một mã thông báo cho Telegram API, duy nhất cho bot đó. Đảm bảo không chia sẻ mã thông báo của bạn với bất kỳ ai.

Bước 2: Tạo Webhook cho Bot của bạn

- Bước tiếp theo trong công đoạn tạo bot Telegram là thiết lập webhook và nó sẽ giao tiếp với con bot của bạn. Webhook là cách API thông báo cho bạn biết rằng có điều gì đó đã xảy ra, điều này giúp bạn tiết kiệm thời gian vì không phải truy vấn API mất vài phút (hoặc vài giây) một lần để tìm xem ví dụ: một tin nhắn mới đã được gửi hay chưa.

Telegram chỉ sử dụng một loại webhook, nó sẽ gửi cho bạn một update đối tượng bất cứ khi nào có bất kỳ điều gì xảy ra.

Thiết lập webhook cực kỳ dễ dàng. Chỉ có hai điều bạn cần biết: mã thông báo API của bạn (là đoạn mã bạn được cung cấp từ BotFather trong bước 1) và URL nơi bạn sẽ lưu trữ dữ liệu cho bot của mình. URL sẽ giống như thế này https://ritiensinh.com/ritiensinhlabot.php - Hãy đảm bảo rằng URL bạn cung cấp có https ở đầu URL và khóa hợp lệ, nếu không Telegram sẽ không gửi webhook. (Webhook Telegram sẽ không hoạt động trên host offline - ex: localhost từ WAMPP)

Nếu đáp ứng được tất cả thì tiếp tục, nhập  https://api.telegram.org/bot<yourtoken>/setwebhook?url=https://yourdomain.com/yourbot.php trên thanh URL. Rồi đấy webhook đã hoạt động thành công, nếu thất bại xem lại các bước trước đó đã đáp ứng hợp lệ hết chưa nhé.

Bước 3: Viết Logic cho Bot của bạn

Bây giờ là lúc dành cho thời gian vui vẻ! Tại thời điểm này, bạn có mọi thứ bạn cần để viết logic cho bot Telegram của mình. Đây là cách tôi sẽ tiếp tục…

Tôi lập trình quá ít để thậm chí có IDE trên máy tính của mình, vì vậy tôi sẽ mở Notepad và bắt đầu viết mã của mình vào đó. Vì đây là PHP, hãy chắc chắn rằng logic của bạn được kết hợp chặt chẽ với nhau <?php?>.

Điều đầu tiên cần làm là khởi tạo một biến giúp chúng tôi dễ dàng gọi Telegram API. Đơn giản đó là $path = "https://api.telegram.org/bot<yourtoken>.

Vì chúng tôi sẽ nhận được các bản cập nhật bằng webhook, hãy tạo và điền vào một mảng với dữ liệu cập nhật đó: $update = json_decode(file_get_contents("php://input"), TRUE)

Bây giờ, để thuận tiện sau này, hãy trích xuất hai phần dữ liệu quan trọng từ bản cập nhật đó - ID trò chuyện và tin nhắn (nếu cập nhật không phải do tin nhắn mới, trường này có thể trống và chúng tôi sẽ viết mã cho sau đó):
$chatId = $update["message"]["chat"]["id"]; $message = $update["message"]["text"];{codeBox}
Trong trường hợp bạn vẫn chưa đoán được bot này sẽ làm gì, tôi muốn nó cho tôi biết thời tiết hiện tại cho vị trí tôi chọn. Đối với điều đó, tôi sẽ tạo một /weather [location]lệnh.

Để làm điều đó, hãy tạo một ifcâu lệnh để xem liệu thư bắt đầu bằng /weather. Chúng ta có thể thực hiện điều đó với strpos()hàm cho chúng ta biết vị trí của một chuỗi con trong một chuỗi:
if (strpos($message, "/weather") === 0) {
}{codeBox}

Được lồng trong ifcâu lệnh đó , hãy viết một số mã để trích xuất vị trí bằng cách cắt bỏ chín ký tự đầu tiên của thông báo (là số ký tự được sử dụng hết bởi lệnh /weather, cũng như khoảng trống sẽ theo sau nó):

if (strpos($message, "/weather") === 0) {
$location = substr($message, 9);if (strpos($message, "/weather") === 0) {
$location = substr($message, 9);
}
}{codeBox}

 Nếu bot này được sử dụng trong quá trình sản xuất, chúng tôi sẽ phải thêm một số thao tác làm sạch đầu vào để đảm bảo vị trí có định dạng phù hợp. Nhưng không phải vậy, vì vậy chúng tôi sẽ không lo lắng về điều đó.

Bây giờ chúng ta sẽ lấy dữ liệu thời tiết cho vị trí đó từ OpenWeatherMap:

$weather = json_decode(file_get_contents("http://api.openweathermap.org/data/2.5/weather?q=".$location."&appid=mytoken"), TRUE)["weather"]["main"];

Ở đây chúng ta nên thực hiện một số loại xử lý lỗi, nhưng tôi sẽ không bận tâm. Thay vào đó, chúng ta hãy hy vọng điều tốt nhất và xử lý phản hồi của bot của chúng tôi bằng cách sử dụng Telegram API:

$ads={2}

file_get_contents($path."/sendmessage?chat_id=".$chatId."&text=Here's the weather in ".$location.": ". $.weather);

Nói chung, đây là mã trông như thế nào:

<?php
$path = "https://api.telegram.org/bot<yourtoken>;

$update = json_decode(file_get_contents("php://input"), TRUE);

$chatId = $update["message"]["chat"]["id"];
$message = $update["message"]["text"];

if (strpos($message, "/weather") === 0) {
$location = substr($message, 9);
$weather = json_decode(file_get_contents("http://api.openweathermap.org/data/2.5/weather?q=".$location."&appid=mytoken"), TRUE)["weather"][0]["main"];
file_get_contents($path."/sendmessage?chat_id=".$chatId."&text=Here's the weather in ".$location.": ". $weather);
}
?>

Bước 4: Tải Bot của bạn lên Máy chủ Web Bảo mật
Với logic được thực hiện và hoàn thành, hãy lưu mã của bạn dưới dạng tệp PHP. Sau đó, tải tệp lên URL bạn đã sử dụng trước đó để thiết lập webhook.

Tôi có lưu trữ web của riêng mình mà tôi sử dụng cho một trang web cá nhân, vì vậy tôi sẽ tải tệp lên thư mục gốc của trang web bằng cPanel.

Bước 5: Kiểm tra, tinh chỉnh và khoe khoang về Bot mới của bạn
Bây giờ đã đến lúc thử nghiệm bot Telegram mới của bạn! Sau khi sửa một số lỗi trong mã của tôi (một vài dấu giọng nói bị giảm và phân tích cú pháp dữ liệu thời tiết của OpenWeatherMap không chính xác), bot thời tiết của tôi đã hoạt động. Tôi đã bắt đầu một cuộc trò chuyện riêng với bot của mình (BotFather sẽ cung cấp cho bạn khả năng xử lý của nó) và thử nghiệm lệnh thời tiết của tôi:

Final Thoughts

It’s crude, but it works! You most certainly can program a Telegram bot in less than half an hour. However, if you’re planning to use your bot in production, you should definitely spend some time thinking about the edge cases: unexpected user inputs, external API failure, and so on and so forth.


Đăng nhận xét

Bài cũ Bài mới