
Ở bài viết Hướng dẫn cài đặt MTProxy mình đã hướng dẫn các bạn cách cài đặt Proxy để có thể truy cập được ứng dụng Telegram. Tuy nhiên cách này chỉ mới khắc phục được vấn đề truy cập Telegram, nếu bạn đang sử dụng máy chủ trong nước và kết nối với Telegram API phục vụ công việc tự động hóa ( thông báo giám sát server, cảnh báo bảo mật..vv) thì API sẽ hoạt động không ổn định hoặc không nhận được thông báo.
Để giải quyết vấn đề này một cách hiệu quả thì ở bài viết này mình sẽ hướng dẫn các bạn cách tạo Proxy cho Telegram API trên Cloudflare Worker. Việc cấu hình Cloudflare Worker khá đơn giản, linh hoạt và hoàn toàn miễn phí, cho phép tạo một Proxy hoạt động như cầu nối giữa hệ thống của bạn và Telegram API.
Cloudflare Worker là gì?
Cloudflare Workers là một nền tảng serverless do Cloudflare cung cấp, cho phép lập trình viên chạy mã JavaScript, TypeScript, hoặc WebAssembly trực tiếp trên mạng lưới toàn cầu của Cloudflare mà không cần sử dụng một máy chủ thực tế.
Tính năng nổi bật:
- Xử lý yêu cầu HTTP:
- Tùy chỉnh phản hồi HTTP, định tuyến, hoặc lọc yêu cầu.
- Ví dụ: Chuyển hướng URL, sửa header, hoặc trả về nội dung tùy chỉnh.
- API và ứng dụng nhẹ:
- Xây dựng API không cần backend truyền thống.
- Ví dụ: Gửi thông báo Telegram (như yêu cầu trước của bạn) hoặc xử lý dữ liệu từ form.
- Tăng tốc website:
- Tối ưu hóa nội dung (nén, cache) hoặc A/B testing ngay tại edge.
- Bảo mật:
- Kiểm tra hoặc chặn yêu cầu dựa trên quy tắc (IP, header, v.v.).
- Tích hợp với dịch vụ khác:
- Kết nối với Cloudflare KV (lưu trữ key-value), Durable Objects, hoặc các API bên ngoài như Telegram, AWS, v.v.
Telegram API Proxy
Để triển khai Proxy cho Telegram API dựa trên Cloudflare Worker, các bạn có thể sử dụng mã nguồn được chia sẻ bởi cộng đồng J2TEAM Community, chi tiết bạn có thể xem tại Github của tác giả tại: cf-worker-telegram
Tính năng nổi bật
- Chạy tất cả các phương thức của Telegram Bot API
- Hỗ trợ CORS đầy đủ cho các ứng dụng web
- Hiệu suất cao với mạng lưới toàn cầu của Cloudflare
- Trang tài liệu tích hợp sẵn
- Hỗ trợ tất cả các phương thức HTTP (GET, POST, PUT, DELETE)
Ưu điểm:
- Proxy này không lưu trữ hoặc sửa đổi token bot của bạn
- Tất cả các yêu cầu được chuyển tiếp trực tiếp đến máy chủ API của Telegram
- HTTPS được bắt buộc theo mặc định (yêu cầu của Cloudflare Workers)
- Không lưu trữ logs
- Tận dụng mạng lưới CDN toàn cầu của Cloudflare
- Hoàn hảo cho các ứng dụng web
Hướng dẫn cấu hình
Bước 1: Tạo tài khoản Cloudflare
Đầu tiên các bạn cần có tài khoản Cloudflare, nếu chưa từng sử dụng thì các bạn có thể tạo tài khoản mới theo hướng dẫn: Tại đây
Bước 2: Cấu hình Cloudflare Worker
Sau khi đăng nhập vào Cloudflare, các bạn truy cập Compute (Workers) >> Workers & Pages >> Start with Hello World!

Tiếp đó bạn hãy đặt lại tên cho Worker mới và nhấn Deploy

Sau khi tạo mới thành công, bạn tiếp tục nhấn vào Edit code

Bây giờ bạn hãy Copy đoạn code bên dưới
// Telegram Bot API base URL
const TELEGRAM_API_BASE = 'https://api.telegram.org';
// HTML template for documentation
const DOC_HTML = `<!DOCTYPE html>
<html>
<head>
<title>Telegram Bot API Proxy Documentation</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
line-height: 1.6;
max-width: 800px;
margin: 0 auto;
padding: 20px;
color: #333;
}
h1 { color: #0088cc; }
.code {
background: #f5f5f5;
padding: 15px;
border-radius: 5px;
font-family: monospace;
overflow-x: auto;
}
.note {
background: #fff3cd;
border-left: 4px solid #ffc107;
padding: 15px;
margin: 20px 0;
}
.example {
background: #e7f5ff;
border-left: 4px solid #0088cc;
padding: 15px;
margin: 20px 0;
}
</style>
</head>
<body>
<h1>Telegram Bot API Proxy</h1>
<p>This service acts as a transparent proxy for the Telegram Bot API. It allows you to bypass network restrictions and create middleware for your Telegram bot applications.</p>
<h2>How to Use</h2>
<p>Replace <code>api.telegram.org</code> with this worker's URL in your API calls.</p>
<div class="example">
<h3>Example Usage:</h3>
<p>Original Telegram API URL:</p>
https://api.telegram.org/bot{YOUR_BOT_TOKEN}/sendMessage
<p>Using this proxy:</p>
<div class="code">https://{YOUR_WORKER_URL}/bot{YOUR_BOT_TOKEN}/sendMessage</div>
</div>
<h2>Features</h2>
<ul>
<li>Supports all Telegram Bot API methods</li>
<li>Handles both GET and POST requests</li>
<li>Full CORS support for browser-based applications</li>
<li>Transparent proxying of responses</li>
<li>Maintains original status codes and headers</li>
</ul>
<div class="note">
<strong>Note:</strong> This proxy does not store or modify your bot tokens. All requests are forwarded directly to Telegram's API servers.
</div>
<h2>Example Code</h2>
<div class="code">
// JavaScript Example
fetch('https://{YOUR_WORKER_URL}/bot{YOUR_BOT_TOKEN}/sendMessage', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
chat_id: "123456789",
text: "Hello from Telegram Bot API Proxy!"
})
})
.then(response => response.json())
.then(data => console.log(data));
</div>
</body>
</html>`;
async function handleRequest(request) {
const url = new URL(request.url);
if (url.pathname === '/' || url.pathname === '') {
return new Response(DOC_HTML, {
headers: {
'Content-Type': 'text/html;charset=UTF-8',
'Cache-Control': 'public, max-age=3600',
},
});
}
// Extract the bot token and method from the URL path
// Expected format: /bot{token}/{method}
const pathParts = url.pathname.split('/').filter(Boolean);
if (pathParts.length < 2 || !pathParts[0].startsWith('bot')) {
return new Response('Invalid bot request format', { status: 400 });
}
// Reconstruct the Telegram API URL
const telegramUrl = `${TELEGRAM_API_BASE}${url.pathname}${url.search}`;
// Create headers for the new request
const headers = new Headers(request.headers);
// Forward the request to Telegram API
let body = undefined;
if (request.method !== 'GET' && request.method !== 'HEAD') {
try {
body = await request.arrayBuffer();
} catch (err) {
return new Response(`Failed to read request body: ${err.message}`, { status: 400 });
}
}
const proxyReq = new Request(telegramUrl, {
method: request.method,
headers: request.headers,
body,
redirect: 'follow',
});
try {
const tgRes = await fetch(proxyReq);
const res = new Response(tgRes.body, tgRes); // Copy response as-is
res.headers.set('Access-Control-Allow-Origin', '*');
res.headers.set('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
res.headers.set('Access-Control-Allow-Headers', 'Content-Type');
return res;
} catch (err) {
return new Response(`Error proxying request: ${err.message}`, { status: 500 });
}
}
// Handle OPTIONS requests for CORS
function handleOptions(request) {
const corsHeaders = {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS',
'Access-Control-Allow-Headers': 'Content-Type',
'Access-Control-Max-Age': '86400',
};
return new Response(null, {
status: 204,
headers: corsHeaders,
});
}
// Main event listener for the worker
addEventListener('fetch', event => {
const request = event.request;
// Handle CORS preflight requests
if (request.method === 'OPTIONS') {
event.respondWith(handleOptions(request));
} else {
event.respondWith(handleRequest(request));
}
});
Và dán vào file worker.js và nhấn Deploy là hoàn tất.

Để xem URL của Worker vừa tạo, bạn truy cập vào phần Setting >> Domains & Routes. Đây chính là URL mà bạn sẽ thay thế cho URL API mặc định của Telegram.

Bước 3: Thay thế URL mặc định
Cách sử dụng vô cùng đơn giản, bạn chỉ cần thay thế URL api.telegram.org
bằng URL Workers đã tạo, ví dụ:
- URL Telegram API mặc định:
https://api.telegram.org/bot{YOUR_BOT_TOKEN}/sendMessage
- URL Workers của bạn
https://telegram.trungkxxxxxxx.workers.dev/bot{YOUR_BOT_TOKEN}/sendMessage
Lưu ý: Bạn nhớ thay đúng URL Worker của bạn đã tạo ở Bước 2.
Bước 4: Kiểm tra hoạt động
Để kiểm tra hoạt động, mình tạo thử Script cảnh báo SSH về Telegram bên dưới:
#!/bin/bash
#damtrungkien.com
USERID="106670xxxx" # Nhập Chat ID Telegeam của bạn
KEY="5463311202:AAELZ-2xxxxtP2FIdz0mIvi7gN1liA" # Nhập Bot Token Telegeam của bạn
TIMEOUT="10"
URL="https://telegram.trungkixxxxxxx.workers.dev/bot$KEY/sendMessage" # Nhập URL PROXY
DATE_EXEC=🆘🆘🆘"$(date "+%d %b %Y %H:%M")"
TMPFILE='/tmp/ipinfo-$DATE_EXEC.txt'
if [ -n "$SSH_CLIENT" ]; then
IP=$(echo $SSH_CLIENT | awk '{print $1}')
PORT=$(echo $SSH_CLIENT | awk '{print $3}')
HOSTNAME=$(hostname -f)
#IPADDR=$(hostname -I | awk '{print $1}')
curl http://ipinfo.io/$IP -s -o $TMPFILE
CITY=$(cat $TMPFILE | jq '.city' | sed 's/"//g')
REGION=$(cat $TMPFILE | jq '.region' | sed 's/"//g')
COUNTRY=$(cat $TMPFILE | jq '.country' | sed 's/"//g')
ORG=$(cat $TMPFILE | jq '.org' | sed 's/"//g')
TEXT="$DATE_EXEC: IP $IP dang SSH voi ${USER} vao Team_Hieu - $ORG - $CITY, $REGION, $COUNTRY on port $PORT"
curl -s --max-time $TIMEOUT -d "chat_id=$USERID&disable_web_page_preview=1&text=$TEXT" $URL > /dev/null
rm $TMPFILE
fi
Và kết quả là khi SSH vào Server đã có thông báo về Telegram, như vậy là Proxy đã hoạt động tốt và tốc độ phản hồi gần như không có sự khác biệt so với đi qua api.telegram.org
.

Để xem log chi tiết, các bạn có thể vào Workers & Pages >> Logs , tại đây sẽ hiển thị chi tiết thông tin các Request đã gửi. Với mỗi Workers, Cloudflare cho 100,000 truy vấn (request) mỗi ngày trên tài khoản miễn phí, với số lượng trên thì các bạn có thể yên tâm sử dụng nhé.

Kết luận
Việc triển khai Proxy trên Cloudflare Worker giúp chủ động duy trì kết nối với Telegram API mà không bị gián đoạn bởi các chính sách chặn từ nhà mạng tại Việt Nam. Không cần đến VPS hay hạ tầng phức tạp, chỉ với một đoạn code nhỏ và vài phút cấu hình, bạn đã có thể tạo cho mình một proxy an toàn, đáng tin cậy và hoạt động 24/7. Đây là một giải pháp tối ưu cho những ai đang cần duy trì hoạt động của Bot Telegram tại Việt Nam trong bối cảnh hiện nay.
Chúc các bạn thực hiện thành công.!