cloudflare serverless 和 telegram bot 的联动 一个怎样的项目 [[Cloudflare]] [[Serverless]] 这边怎么做 [[Telegram bot]] 这边怎么做 中间有遇到什么问题 一个抓取汇率的项目,使用无服务边缘函数,需要的时候直接请求即可,初版不提供参数,代码写死,主要是为了验证方案本身的可行性。
大致逻辑 Cloudflare 创建项目,编写代码,包括如何处理 bot 的访问的相关代码 Telegram 申请 bot,获取 API Token,并配置在 Cloudflare 项目的环境参数内 通过请求 https://api.telegram.org/bot<你的TOKEN>/setWebhook?url=<你的WORKER网址>的方式,让 bot 明白该去怎样相应,大功告成 Cloudflare serverless 怎么做 在控制台的 Computer & AI 下的 WOkers& Pages 内创建一个Helloworld的项目,起名为 exchangerate 通过询问Gemini,选择了一个无需key即可请求的api,并书写最简单的代码 export default { async fetch(request) { // 目标:获取 1 欧元 (EUR) 兑换成 人民币 (CNY) 和 美元 (USD) 的汇率 const url = "https://api.frankfurter.app/latest?from=EUR&to=CNY,USD"; try { const response = await fetch(url); const data = await response.json(); const cnyRate = data.rates.CNY; const usdRate = data.rates.USD; const date = data.date; const message = `📅 日期: ${date}\n💶 1 EUR = ¥${cnyRate} CNY\n💶 1 EUR = $${usdRate} USD`; return new Response(message, { headers: { "content-type": "text/plain;charset=UTF-8" }, }); } catch (error) { return new Response("汇率获取失败: " + error.message, { status: 500 }); } } }; 上述代码可以直接Deploy,访问后的结果为 📅 日期: 2026-01-11 💶 1 EUR = ¥8.1288 CNY 💶 1 EUR = $1.1642 USD 修改代码,以人民币为基准,并增加反向汇率计算,更直观的理解 export default { async fetch(request) { // 目标:获取 1 人民币 (CNY) 兑换成 日元 (JPY) 和 美元 (USD) 的汇率 const url = "https://api.frankfurter.app/latest?from=CNY&to=JPY,USD"; try { const response = await fetch(url); const data = await response.json(); const jpyRate = data.rates.JPY; const usdRate = data.rates.USD; const date = data.date; // 计算,100目标货币对应多少人民币,方便出国后的汇率速算 const jpy100toCNY = 1 / jpyRate * 100 const usd100toCNY = 1 / usdRate * 100 // 格式化数字为小数点后两位 let formatter = new Intl.NumberFormat('zh-CN', { minimumFractionDigits: 2, maximumFractionDigits: 2, }); const message = `📅 日期: ${date}\n💶 1 CNY = ¥${jpyRate} JPY\n💶 1 CNY = $${usdRate} USD`; const message2 = `💶 100 JPY = ¥${formatter.format(jpy100toCNY)} CNY\n💶 100 USD = ¥${formatter.format(usd100toCNY)} CNY` const realMessage = message+"\n"+message2 return new Response(message+"\n"+message2, { headers: { "content-type": "text/plain;charset=UTF-8" }, }); } catch (error) { return new Response("汇率获取失败: " + error.message, { status: 500 }); } } }; Deploy 后可直接访问,该访问结果在未来会显示在tg bot上 📅 日期: 2026-01-09 💶 1 CNY = ¥22.577 JPY 💶 1 CNY = $0.14322 USD 💶 100 JPY = ¥4.43 CNY 💶 100 USD = ¥698.23 CNY Telegram bot 怎么做 在telegram中搜索 @botFather 后创建新的 bot,起个唯一的ID,获取其API Token,类似于 712345678:AAH_xxxx…. 在 cloudflare 的项目内修改代码,增加处理 bot 访问的数据返回,记得Deploy export default { async fetch(request) { // 这里建议在 Workers 的 Settings -> Variables 里添加名为 BOT_TOKEN 的变量 // 如果为了快速测试,也可以直接把 Token 字符串写在这里(不推荐长期使用) const BOT_TOKEN = "你的_TELEGRAM_BOT_TOKEN"; // 目标:获取 1 人民币 (CNY) 兑换成 日元 (JPY) 和 美元 (USD) 的汇率 const url = "https://api.frankfurter.app/latest?from=CNY&to=JPY,USD"; try { ... // 1. 如果是 Telegram 传来的消息 (POST 请求) if (request.method === "POST") { try { const payload = await request.json(); if (payload.message) { const chatId = payload.message.chat.id; // 调用 Telegram API 发送回信 await fetch(`https://api.telegram.org/bot${BOT_TOKEN}/sendMessage`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ chat_id: chatId, text: messageText, }), }); } } catch (e) { return new Response("Error parsing JSON", { status: 400 }); } return new Response("OK"); // 告诉 Telegram 我们收到了 } return new Response(message+"\n"+message2, { headers: { "content-type": "text/plain;charset=UTF-8" }, }); } catch (error) { return new Response("汇率获取失败: " + error.message, { status: 500 }); } } }; 绑定Webhook,让telegram bot知道该去请求什么,直接在浏览器中构造网址,访问https://api.telegram.org/bot<你的TOKEN>/setWebhook?url=<你的WORKER网址>,worker地址一般形似.workers.dev,是Cloudflare分配的 如果网页显示 {"ok":true,"result":true,"description":"Webhook was set"},说明联动成功 在telegram中搜索该bot的ID,然后开始使用,只要给它输入,它就会返回相关内容 排错 常见的错误为,telegram bot不给相应,此时可以以下方式排查:
...