Tạo Contact API trên CloudFlare Worker và Telegram API |
Trong bài viết này, tớ sẽ chia sẻ cách xây dựng một Contact API hiệu quả và miễn phí sử dụng CloudFlare Worker và Telegram API. Phương pháp này giúp bạn nhận thông báo trực tiếp từ contact form vào Telegram mà không cần thiết lập backend phức tạp.
Tại sao lại cần sử dụng CloudFlare Worker
Khi mới nhìn thấy tiêu đề, có thể nhiều bạn sẽ thắc mắc: Tại sao lại phải sử dụng CloudFlare Worker, mà không sử dụng trực tiếp Telegram API?
Nguyên nhân là bởi, để có thể sử dụng được API của Telegram, thì chúng ra cần các thông tin như Bot
Token
, Bot ID
,
... Mà những thông tin này đều là những thông tin nên được bảo mật, tránh việc kẻ gian lợi dụng những thông tin trên
để thực thi những hành động mình không mong muốn.
Điều kiện cần thiết
Trước khi bắt đầu, bạn cần chuẩn bị:
- Tài khoản CloudFlare
- Tài khoản Telegram
- Telegram Bot
- Chat ID của nhóm hoặc kênh Telegram
Bắt đầu thực hiện
Tạo Telegram Bot
- Liên hệ @BotFather trên Telegram
- Sử dụng lệnh /newbot để tạo bot mới
- Đặt tên và username cho bot
- Lưu lại API token
Tạo Telegram Group
Để bot có thể gửi tin nhắn, bạn cần:
- Tạo Telegram Group hoặc Telegram Channel
- Thêm Bot vào trong Group / Channel
- Chat 1 tin nhắn và tag Bot của bạn
- Sử dụng Telegram API để lấy Chat ID bằng API Token: Mở cửa
sổ trình duyệt và truy cập vào link sau:
https://api.telegram.org/bot<YourBOTToken>/getUpdates
(Thay <YourBOTToken> bằng API Token của Bot). Trong chat object, bạn sẽ thấy trường "id", lưu lại ID này, đó chính làChat ID
mà bạn cần. - Trong trường hợp object result của bạn bị trống:
{"ok":true,"result":[]}
Hãy xóa Bot khỏi group / channel, sau đó thực hiện lại từ bước 2.
Tạo CloudFlare Worker
- Truy cập vào màn hình Dashboard của CloudFlare và thực hiện tạo Worker
- Đặt tên cho worker và thực hiện Deploy
- Thực hiện chỉnh sửa code
- Dán đoạn code sau và thực hiện Deploy
export default { async fetch(request, env) { const url = new URL(request.url); const path = url.pathname; const corsHeaders = { 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Methods': 'POST,OPTIONS', 'Access-Control-Allow-Headers': 'Content-Type' }; if (request.method === 'OPTIONS') { return new Response(null, { headers: corsHeaders }); } if (request.method === 'POST' && path === '/api/contact') { try { const body = await request.json(); if (!body.email || !body.message) { return new Response('Request body invalid', { status: 400, headers: {'Content-Type': 'application/json'} }); } const text = `📬 CONTACT - New Message Received 👤 Name: ${body.name || 'Anonymous'} 📧 Email: ${body.email} 📝 Subject: ${body.subject || ''} 💬 Message: ${body.message}`; const payload = { chat_id: env.TELEGRAM.CHAT_ID, parse_mode: "HTML", text: text, } const TELEGRAM_API = `https://api.telegram.org/bot${env.TELEGRAM.API_TOKEN}/sendMessage`; return await fetch(TELEGRAM_API, { method: "POST", headers: {"Content-Type": "application/json"}, body: JSON.stringify(payload) }) } catch (error) { return new Response(JSON.stringify({error: error.message}), { status: 500, headers: {'Content-Type': 'application/json', ...corsHeaders} }); } } return new Response("Forbidden", { status: 403, headers: {"Content-Type": "text/plain"}, }); } }
- Tạo biến môi trường dùng cho Worker: Thay thế giá trị CHAT_ID và API_TOKEN bằng các giái trị đã được lưu lại ở
trên. Sau đó thực hiện deploy
Thực hiện test
Bạn có thể dùng một trong các cách sau để thực hiện test nhé.
Hãy thay location
bằng API của bạn nhé
curl --location 'https://your-worker.workers.dev/api/contact' --header 'Content-Type: application/json' --data-raw '{"name":"NOCOEM", "email": "[email protected]", "message": "Have a nice day!"}'
- Download file sau
contact.html 4.3KB
- Sau đó, hãy ở file mà bạn vừa download
- Bây giờ, hãy nhập những thông tin mà bạn muốn nhé.