Xin chào! Cảm ơn bạn
đã ghé thăm Blog của tôi.
Xin chào! Cảm ơn bạn
đã ghé thăm Blog của tôi.

Ở 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 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:
Để 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
Ưu điểm:
Đầ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
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.

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ụ:
https://api.telegram.org/bot{YOUR_BOT_TOKEN}/sendMessagehttps://telegram.trungkxxxxxxx.workers.dev/bot{YOUR_BOT_TOKEN}/sendMessageLưu ý: Bạn nhớ thay đúng URL Worker của bạn đã tạo ở Bước 2.
Để 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
fiVà 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é.

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.!
Chào mọi người, mình là Kiên – hiện đang công tác tại Phòng Kỹ thuật AZDIGI. Trong quá trình làm việc mình có cơ hội được tiếp xúc với khá nhiều các vấn đề liên quan đến Website/Hosting/VPS/Server, do đó mình viết lại các hướng dẫn này nhằm chia sẻ kiến thức, cũng như tạo một môi trường để chúng ta giao lưu và học hỏi lẫn nhau.
2026 - Website được phát truyền nội dung bởi Đàm Trung Kiên
Hãy để lại thông tin của bạn. Đội ngũ chuyên gia của chúng tôi sẽ trực tiếp phân tích nhu cầu và tư vấn giải pháp công nghệ phù hợp, tối ưu hiệu quả cho công việc của bạn hoàn toàn miễn phí.
Tìm kiếm bài viết...