Tạo API trên CloudFlare Worker và Telegram API như thế nào?

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.
Please wait 0 seconds...
Scroll Down and click on Go to Link for destination
Congrats! Link is Generated
Tạo Contact API trên CloudFlare Worker và Telegram API
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

  1. Liên hệ @BotFather trên Telegram
    Liên hệ @BotFather trên Telegram
  2. Sử dụng lệnh /newbot để tạo bot mới
    Sử dụng lệnh /newbot để tạo bot mới
  3. Đặt tên và username cho bot
    Đặt tên và username cho bot
  4. Lưu lại API token

Tạo Telegram Group

Để bot có thể gửi tin nhắn, bạn cần:

  1. Tạo Telegram Group hoặc Telegram Channel
    Tạo Telegram Group

  2. Thêm Bot vào trong Group / Channel
    Thêm Bot vào trong Group
  3. Chat 1 tin nhắn và tag Bot của bạn
    Chat 1 tin nhắn và tag Bot của bạn
  4. 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.
  5. 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

  1. Truy cập vào màn hình Dashboard của CloudFlare và thực hiện tạo Worker
    Tạo CloudFlare Worker
  2. Đặt tên cho worker và thực hiện Deploy
    Đặt tên cho worker và thực hiện Deploy
  3. Thực hiện chỉnh sửa code
    Thực hiện chỉnh sửa code
  4. 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"},
        });
      }
    }
    
    Dán đoạn code sau và thực hiện Deploy
  5. 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
    Tạo biến môi trường dùng cho Worker

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!"}'
  1. Download file sau
    contact.html 4.3KB
  2. Sau đó, hãy ở file mà bạn vừa download
    Html Contact Form
  3. Bây giờ, hãy nhập những thông tin mà bạn muốn nhé.

Tóm lại

Trên đây chỉ là một ví dụ rất rất đơn giản cho một trường hợp sử dụng CloudFlare Worker. Bạn hoàn toàn có thể tùy biến nó để phục vụ cho các bài toán khác nhau của bản thân. Và bài viết đến đây là hết, nếu bạn có bất kì thắc mắc gì, hãy comment cho mình biết nhé.

Đăng nhận xét

Tham gia cuộc trò chuyện