
在中国大陆(墙内)使用Cloudflare Workers推送Telegram消息到墙外,需要解决Telegram API被防火长城(GFW)屏蔽的问题。Cloudflare Workers可以通过其边缘计算能力,部署在墙外的节点上,充当反向代理,绕过限制。以下是一个实现方案,包含代码和步骤,假设你已熟悉.NET、ReactJS和VueJS,具备一定的JavaScript基础。
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
async function handleRequest(request) {
// Telegram Bot Token and Chat ID (set these in Cloudflare Worker environment variables)
const TELEGRAM_BOT_TOKEN = 'YOUR_BOT_TOKEN' // Replace with your bot token
const TELEGRAM_CHAT_ID = 'YOUR_CHAT_ID' // Replace with your chat ID
// Check if the request is a POST
if (request.method !== 'POST') {
return new Response('Method Not Allowed', { status: 405 })
}
try {
// Parse the incoming JSON payload
const payload = await request.json()
const message = payload.message || 'No message provided'
// Construct Telegram API URL
const telegramUrl = `https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage`
// Send message to Telegram
const response = await fetch(telegramUrl, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
chat_id: TELEGRAM_CHAT_ID,
text: message,
parse_mode: 'Markdown' // Optional: supports Markdown formatting
})
})
// Check Telegram API response
if (!response.ok) {
const error = await response.text()
return new Response(`Telegram API error: ${error}`, { status: 500 })
}
return new Response('Message sent successfully', { status: 200 })
} catch (error) {
return new Response(`Error: ${error.message}`, { status: 500 })
}
}
实现步骤
- 创建Telegram Bot:
- 在Telegram中联系@BotFather,使用/newbot命令创建Bot,获取Bot Token。
- 获取你的Chat ID(可通过@get_id_bot或发送消息后检查API返回的chat.id)。
- 设置Cloudflare Worker:
- 登录Cloudflare仪表板,导航到“Workers and Pages” > “Create Application” > “Create Worker”。
- 给Worker命名(如telegram-proxy),点击“Deploy”。
- 点击“Quick Edit”,粘贴上述代码,替换YOUR_BOT_TOKEN和YOUR_CHAT_ID。
- 为安全起见,建议将TELEGRAM_BOT_TOKEN和TELEGRAM_CHAT_ID设置为环境变量:
- 在Worker设置中,点击“Settings” > “Variables” > “Add Variable”。
- 添加TELEGRAM_BOT_TOKEN和TELEGRAM_CHAT_ID,并在代码中通过env.TELEGRAM_BOT_TOKEN和env.TELEGRAM_CHAT_ID引用。
- 保存并部署Worker,获取Worker URL(形如https://telegram-proxy.your-subdomain.workers.dev)。
- 墙内推送消息:
- 在墙内,使用HTTP客户端(例如Python的requests库或你的.NET应用)向Worker URL发送POST请求,包含JSON格式的消息: jsonCopy
{ "message": "Hello from China!" }示例Python代码: pythonCopyimport requests url = "https://telegram-proxy.your-subdomain.workers.dev" payload = {"message": "Hello from China!"} response = requests.post(url, json=payload) print(response.text) - Worker接收请求后,通过墙外的Cloudflare节点调用Telegram API,将消息发送到指定Chat ID。
- 在墙内,使用HTTP客户端(例如Python的requests库或你的.NET应用)向Worker URL发送POST请求,包含JSON格式的消息: jsonCopy
- 注意事项:
- 网络限制:中国大陆可能屏蔽Cloudflare的部分IP。建议选择Cloudflare的墙外节点(如香港或新加坡)部署Worker。Cloudflare的JD Cloud合作在中国大陆有约35个数据中心,但为避免GFW干扰,优先选择非大陆节点。
- Telegram封锁:Telegram在中国被屏蔽,直接访问api.telegram.org不可行。Worker作为代理,需确保其运行在墙外环境。
- Blob限制:Cloudflare Workers不支持Blob对象,因此无法直接发送图片等二进制数据。如需发送图片,需将图片上传至可公开访问的URL,并通过sendPhoto方法发送。
- 安全性:为防止滥用,建议在Worker中添加密钥验证。例如,在请求中加入secret字段,并在Worker中检查: javascriptCopy
const SECRET = 'your-secret-key' if (payload.secret !== SECRET) { return new Response('Unauthorized', { status: 401 }) }
- 测试与调试:
- 使用curl或Postman向Worker URL发送测试POST请求,确保消息成功发送到Telegram。
- 检查Worker日志(在Cloudflare仪表板的“Workers” > “Logs”中)以排查错误。
扩展功能
- 定时推送:使用Cloudflare Cron Triggers设置定时任务,每天推送消息(如天气或通知)。在Worker仪表板的“Triggers”选项卡中配置Cron表达式。
- 集成AI工具:结合你的AI学习计划,使用Hugging Face模型或Cursor生成消息内容。例如,自动生成每日总结并推送。
- 多用户支持:扩展Worker,支持多个Chat ID,动态处理不同用户的消息。
保持更新
- 定期检查Telegram Bot API文档,了解新功能(如MarkdownV2格式或inline按钮)。
- 关注Cloudflare Workers的更新,学习新API(如Queues或KV存储)以优化性能。
- 参与GitHub上的相关项目(如cvzi/telegram-bot-cloudflare),获取社区支持。
通过Cloudflare Workers,你可以高效地从墙内推送消息到墙外的Telegram,结合你的技术栈,轻松集成到现有项目中。只要确保Worker部署在墙外节点,就能稳定绕过GFW限制。
有点意思,很简单,我也试试