Chào mọi người, gần đây mình có nhận được câu hỏi về cách tạo bot telegram thế nào. Hôm nay mình sẽ hướng dẫn mọi người code một con bot với chức năng mỗi khi có thành viên mới tham gia group thì nó sẽ chào mừng giống như thế này.
![Tạo Bot Telegram chào mừng thành viên mới group [A-Z] 1 bot telegram welcome new member](https://vomanhkien.com/wp-content/uploads/2020/09/bot-telegram-welcome-new-member.png)
Rồi ok bắt đầu nhé.
Đăng ký kênh youtube để nhận video hướng dẫn chi tiết tại đây
Contents
Telegram là gì?
Cho bạn nào chưa biết thì telegram là một dịch vụ nhắn tin tuyệt vời hơn tất cả những ứng dụng mình đã dùng qua, và đặc biệt là nó không hề có quảng cáo và bảo mật cao.
Đầu tiên là phải tạo con bot đã
Để có thể tạo được một con bot thì bạn có thể chat với BotFather (Bot bố) bảo nó sản xuất cho bạn một đứa con để cho nó phục vụ bạn.
Bạn chat với nó lệnh bên dưới để tạo bot mới
/newbot
Nó sẽ yêu cầu bạn nhập nhập tên của con BOT. Bạn nhập tên mà bạn thích vào, ví dụ mình đặt là: Thị Màu
Sau đó bạn tiếp tục nhập username của bot, bạn lưu ý là tên phải viết liền không dấu và phải kết thúc bằng từ khoá bot
, mình tiếp tục đặt là: thimau_bot
Sau khi tạo thành công thì bạn sẽ có được thông báo kèm TOKEN thế này:
![Tạo Bot Telegram chào mừng thành viên mới group [A-Z] 2 bot telegram token](https://vomanhkien.com/wp-content/uploads/2020/09/bot-telegram-token.png)
Vậy là đã xong bước tạo bot, tiếp đến là thêm bot vào group mà bạn muốn.
Mình lại tạo group và đặt tên là Hội chửa hoang
và thêm con Thị Màu
vào làm trưởng hội, cấp cho nó quyền sinh quyền sát luôn.
![Tạo Bot Telegram chào mừng thành viên mới group [A-Z] 3 bot telegram tao group](https://vomanhkien.com/wp-content/uploads/2020/09/bot-telegram-tao-group-1024x280.png)
Sau đó thì thêm Thị Màu
làm admin group đó
![Tạo Bot Telegram chào mừng thành viên mới group [A-Z] 4 bot telegram them admin](https://vomanhkien.com/wp-content/uploads/2020/09/bot-telegram-them-admin-567x1024.png)
Tiếp đến là mở cửa cho tất cả bạn bè của Thị Màu
vào group
![Tạo Bot Telegram chào mừng thành viên mới group [A-Z] 5 bot telegram public group](https://vomanhkien.com/wp-content/uploads/2020/09/bot-telegram-public-group-1024x484.png)
Group này có thể chứa chấp tối đa là 200k bạn của Thị Màu
nha mọi người.
Tiếp theo thì vọc code thôi
Tất cả API của Telegram đều có ở đây bạn có thể vào để xem thêm.
Mục tiêu đặt ra là bot sẽ gửi một tin nhắn chào mừng khi có thành viên mới join group, vậy thì ta cần có một api để bắt biết lúc nào có người join vào và 1 api để gửi tin nhắn.
Bắt đầu tìm kiếm trong docs xem có gì.
Telegram cung cấp cho bạn api để get được những hoạt động mới trong group có tên getUpdates
Bạn có thể mở trình duyệt lên và thử đường dẫn này xem nó lấy được gì về nhé
https://api.telegram.org/bot_BOT_TOKEN_/getUpdates
bạn thay _BOT_TOKEN_
bằng token khi nãy bạn mới lấy được ở bước trên trên.
Kết quả trả về nó đại loại thế này:
{
"ok": true,
"result": [
{
"update_id": 210414451,
"message": {
"message_id": 2,
"from": {
"id": 565007961,
"is_bot": false,
"first_name": "Nguyên",
"last_name": "Nguyên"
},
"chat": {
"id": -1001421779945,
"title": "Hội chửa hoang",
"username": "hoichuahoang",
"type": "supergroup"
},
"date": 1600944809,
"new_chat_participant": {
"id": 565007961,
"is_bot": false,
"first_name": "Nguyên",
"last_name": "Nguyên"
},
"new_chat_member": {
"id": 565007961,
"is_bot": false,
"first_name": "Nguyên",
"last_name": "Nguyên"
},
"new_chat_members": [
{
"id": 565007961,
"is_bot": false,
"first_name": "Nguyên",
"last_name": "Nguyên"
}
]
}
}
]
}
API getUpdates
khi nào call thì mới trả về kết quả, vậy chả nhẽ cứ vài phút lại call một lần 🤔 🤔 mà như vậy thì khi có người join vào group nó lại không chào ngay.
May quá Telegram có cung cấp cho chúng ta Webhook. Nếu bạn chưa biết Webhook là gì thì hiểu đơn giản nó là callback, do server Telegram đảm nhiệm, mỗi khi có một hành động nhất định thì bên đó sẽ call api mà bạn chỉ định sẵn.
Vậy để làm được điều đó thì bạn chỉ cần gọi api setWebhook
params của api này là url, certificate, max_connections, allowed_updates
chi tiết bạn xem trong docs nhé.
Vậy là đã xong vấn đề lấy được hành động mới, giờ làm sao để gửi tin nhắn vào group
Bạn chỉ cần call api sendMessage
là xong, api này giúp bạn có thể gửi một đoạn text vào group, còn nếu bạn muốn gửi những loại khác như ảnh, audio, … thì có những api khác trong docs nhé.
Coi như xong phần research chuyển qua phần code thôi.
Code gửi tin nhắn vào group
Trước khi code thì cần nghĩ sau khi code xong thì cho code lên đâu để chạy đã nhé, không có đến lúc làm xong lại để chạy ở localhost thì nó không có làm việc được đâu. 🤣 🤣
Bạn có thể sử dụng Heroku, Vercel, Vultr, … lần này thì mình sử dụng Vercel để chứa code nhé, chi tiết bạn có thể tham khảo thêm tại đây.
Tạo một thư mục mới chứa code đặt tên là thimau-telegram-bot
cấu trúc thư mục như thế này:
- api/
--- telegram.ts
- package.json
- index.html
Bật terminal lên chạy lệnh yarn init
hoặc npm init
sau đó nhập thông tin vào và tiếp tục
Sau đó cài đặt 2 lib tiếp tục gõ lệnh yarn add axios && yarn add --dev @vercel/node
Chạy xong xuôi thì nó ra được file package.json
thế này
{
"name": "thimau-telegram-bot",
"version": "1.0.0",
"main": "index.js",
"repository": "https://github.com/kungfu321/thimau-telegram-bot.git",
"author": "Vo Manh Kien <[email protected]>",
"license": "MIT",
"devDependencies": {
"@vercel/node": "^1.8.1"
},
"dependencies": {
"axios": "^0.20.0"
}
}
Quay lại file telegram.ts
hồi nãy thêm code vào
import { NowRequest, NowResponse } from "@vercel/node";
import axios from "axios";
export default async (req: NowRequest, res: NowResponse) => {
try {
res.status(200).json({ success: true });
} catch (error) {
console.log(error);
res.status(400).json({ success: false });
}
};
À quên các bạn nhớ cài Vercel vào để run dev nhé và sau còn deploy app lên nữa, Cách cài thì xem ở đây. Nếu không thì bạn phải chạy và config nodejs để chạy và push lên git rồi vào app quản lý vercel để deploy.
Bạn chạy vercel dev
sau đó ra trình duyệt bật localhost:3000/api/telegram
xem có gì xảy ra không, nếu trả về { success: true }
là ok.
Tiếp theo thì thêm đoạn code này vào,
...
const body = req.body.message;
console.log(body);
const teleToken = req.query.token;
if (body.new_chat_member) {
const newMember = body.new_chat_member;
const data = {
chat_id: `@${body.chat.username}`,
text: `Hi <i><b>${parseUsername(newMember.first_name, newMember.last_name)}</b></i>,\nChào mừng bạn đến với <strong>${body.chat.title}</strong>.\nChúc bạn chửa hoang thành công.`,
parse_mode: "HTML"
};
await axios.post(
`https://api.telegram.org/bot${teleToken}/sendMessage`,
data
);
}
...
Đại loại thì mình lấy params trong body của request mà telegram trả về ra, rồi lấy token ra. Check xem hoạt động mới đó có phải là thành viên mới join hay không thông qua object new_chat_member
nếu new_chat_member
có tức là có thành viên mới.
Sau đó lấy data trong object ra và tạo một object mới có tên data
để tạo một request sendMessage
gửi tin nhắn vào group. Chi tiết params có thể xem tại đây.
Sau đó thì call một request bằng axios thôi.
Dưới đây là code đầy đủ.
Bật Postman
lên và chạy thử thôi. http://localhost:3000/api/telegram
để method là POST
và chọn như hình.
![Tạo Bot Telegram chào mừng thành viên mới group [A-Z] 6 bot telegram postman](https://vomanhkien.com/wp-content/uploads/2020/09/bot-telegram-postman-1024x722.png)
Fill seed data vào
{
"message": {
"message_id": 7,
"from": {
"id": 565007961,
"is_bot": false,
"first_name": "Nguyên"
},
"chat": {
"id": -1001270066558,
"title": "Hội chửa hoang",
"username": "hoichuahoang",
"type": "supergroup"
},
"date": 1594911555,
"new_chat_participant": {
"id": 565007961,
"is_bot": false,
"first_name": "Nguyên"
},
"new_chat_member": {
"id": 565007961,
"is_bot": false,
"first_name": "Nguyên"
},
"new_chat_members": [
{
"id": 565007961,
"is_bot": false,
"first_name": "Nguyên"
}
]
}
}
Nó trả về { success: true }
là ok.
Check xem đã có tin nhắn trong group chưa, nếu có rồi thì đã thành công.
Bây giờ deploy lên vercel thôi, bạn chỉ cần gõ lệnh vercel --prod
chờ lúc cho nó build là xong, bạn sẽ nhận lại một link dạng: https://thimau-telegram-bot.velcel.app
Bước cuối cùng của cuộc tình
Quay lại Postman
tạo một request mới
https://api.telegram.org/bot_BOT_TOKEN_/setWebhook
param là { "url": "https://thimau-telegram-bot.velcel.app" }
Sau khi nhận được thông báo thành công thì coi như đã hoàn thành.
Giờ thì bạn thử join vào group xem sẽ nhận được thông báo chào mừng ngay.
Tạm kết
Vậy là mình đã hướng dẫn xong bạn làm một con bot để thao tác với Telegram, nền tảng này còn rất nhiều thứ hay ho có thể khai thác.
Nếu bạn không muốn tự code thì có thể sử dụng những nền tảng họ đã build sẵn, tất nhiên là mất phí rồi.
Nếu có bất kỳ thắc mắc nào có thể để lại comment ở bên dưới, đừng quên join group để cùng thảo luận nhé.