Telegram Bot

Telegram là ứng dụng chat chạy trên điện thoại (IOS/Android) hay trên Windows Desktop.

Lợi ích của việc dùng Telegram là bảo mật và free.

Telegram Bot là một robot được tạo ra để chat với mọi người biết tên nó. Robot này làm việc với chủ đề nào và thông minh cỡ nào tùy thuộc vào việc lập trình cho nó làm việc.

Khi người dùng chat với Telegram Bot, nội dung chat được lưu trữ tạm ở server của Telegram. Có hai cách để Telegram Bot nhận được nội dung chat:

  1. Định kỳ dùng phương thức getUpdate để lấy về các câu chat chưa được xử lý.
  2. Dùng Webhook: Telegram sẽ gời nội dung chat đến một trang web được user cung cấp trước, mỗi khi có câu chat mới.

Phương pháp dùng webhook được khuyến khích vì Telegram có kế hoạch bỏ phương thức getUpdate.

Mỗi khi nhận được nội dung chat, chúng ta phải lập trình để xử lý và gởi trả lời.

Công việc xử lý thường dùng Regular Expression, tra cứu CSDL… Đặc biệt là có thể dùng phương pháp tra cứu từ gần đúng, thí dụ với độ chính xác 70%, chúng ta có thể tìm được siêu việt khi dữ liệu đầu vào là siu vịt, tìm được thanh niên thay vì thằng nein

Một Telegram Bot được tạo sẵn tên là BotFather, có nhiệm vụ giúp chúng ta tạo Telegram Bot cho riêng mình.

Cách tạo Telegram Bot

Mở ứng dụng Telegram trên điện thoại hoặc mở trang https://web.telegram.org

Nếu chưa đăng ký thì Telegram sẽ yêu cầu số điện thoại, tương tự như Viber.

Nhập vào ô Search: BotFather và Enter

Telegram sẽ mở cửa sổ chat với BotFather, các câu lệnh được hướng dẫn như sau:

You can control me by sending these commands:

/newbot - create a new bot
/token - generate authorization token
/revoke - revoke bot access token
/setname - change a bot's name
/setdescription - change bot description
/setabouttext - change bot about info
/setuserpic - change bot profile photo
/setinline - change inline settings
/setcommands - change bot commands list
/setjoingroups - can your bot be added to groups?
/setprivacy - what messages does your bot see in groups?
/deletebot - delete a bot
/cancel - cancel the current operation
  1. Click /newbot và cho tên của bot muốn tạo ra, phải kết thúc bằng _bot

Sau khi tạo được bot, BotFather sẽ cho biết id hay token của bot, dạng

211647512:ATKUf8ywxscEWfeSNzTfjPx2eH5t-jFBP7g

Token nảy là định danh đặc biệt chỉ dành riêng cho bot này, được dùng để đăng ký trang web của webhook hay dùng để gởi tin nhắn.

2. Vì webhook dùng giao thức https nên webserver, thí dụ nginx, trên RPi phải cài đặt ssl. Đặc biệt phải ghi server_name chính xác. Server name có thể dùng DDNS.

Câu lệnh tạo file crt như sau:

openssl req -newkey rsa:2048 -sha256 -nodes -keyout /etc/nginx/ssl/nginx.key -x509 -days 365 -out /etc/nginx/ssl/nginx.crt -subj "/C=VN/ST=HCM/L=HCM City/O=YOUR_NAME Company/CN=YOUR_DOMAIN"

Sau đó, đăng ký webhook như sau

curl -F "url=https://YOUR_DOMAIN/telegram/YOUR_FILE.php" -F "certificate=@/etc/nginx/ssl/nginx.crt" https://api.telegram.org/botYOUR_TOKEN/setWebhook

YOUR_FILE.php (file callback) là file đặt trên webserver của RPi, dùng để nhận nội dung chat từ telegram.

Chú ý
  1. CN phải đúng với domain của webserver
  2. Cấu hình nginx đúng với domain name
  3. Dòng lệnh setWebhook phải có @ trước tên CRT
  4. DDNS vẫn dùng được
  5. Chỉ cần mở cổng SSL 443 hay 8443
  6. WebHook chậm, thời gian phản hồi là vài giây
  7. Có thể mở 2 WebHook trên cùng một IP, dùng 2 port SSL khác nhau
  8. Lỗi lập trình trên file callback (web server không gởi trả lời OK 200) khiến telegram vẫn gời lại tin cũ
  9. Vì Telegram Bot tự động trả lời mọi câu chat nên để phục vụ riêng cho một nhóm cần phải lọc chat_id

Thí dụ (nội dung trang feedback như sau)

<?php
$botToken = "211647512:ATKUf8ywxscEWfeSNzTfjPx2eH5t-jFBP7g";
$website = "https://api.telegram.org/bot".$botToken;

//Thông tin nhận được từ Telegram server
$content = file_get_contents("php://input");
$update = json_decode($content, TRUE);
$text = $update["message"]["text"];
$chatId = $update["message"]["chat"]["id"];

//Tạo nội dung trả lời, nhại lại câu chat và in nghiêng
$msg  = "_${text}_";
//Gởi trả lời 
file_get_contents($website . "/sendmessage?chat_id=" . $chatId . "&text=" . urlencode($msg)); 
?>

 

Leave a Comment

Filed under Software

Leave a Reply