如何从Telegram WebApp接收数据?获取send方法传递的字符串
机器人端接收Telegram WebApp sendData数据的方法
当你在WebApp里调用window.Telegram.WebApp.sendData()发送数据时,Telegram会将这段数据封装成**回调查询(CallbackQuery)**推送给你的机器人。你需要在机器人后端监听回调查询事件,从中提取发送的字符串。
以下是几种主流开发方式的实现示例:
1. Python(python-telegram-bot v20+)
from telegram import Update from telegram.ext import ApplicationBuilder, CallbackQueryHandler, ContextTypes async def handle_webapp_data(update: Update, context: ContextTypes.DEFAULT_TYPE): # 提取WebApp发送的数据 webapp_data = update.callback_query.data # 若内容含特殊字符,可解码URL编码(可选) # import urllib.parse # webapp_data = urllib.parse.unquote(webapp_data) print(f"收到WebApp消息:{webapp_data}") # 会输出"WebApp message sent!" # 可选:给用户回复确认 await update.callback_query.answer("已收到WebApp消息") if __name__ == "__main__": app = ApplicationBuilder().token("你的机器人TOKEN").build() # 添加回调查询处理器 app.add_handler(CallbackQueryHandler(handle_webapp_data)) app.run_polling()
2. Node.js(node-telegram-bot-api)
const TelegramBot = require('node-telegram-bot-api'); const token = '你的机器人TOKEN'; const bot = new TelegramBot(token, { polling: true }); // 监听回调查询事件 bot.on('callback_query', (callbackQuery) => { const chatId = callbackQuery.message.chat.id; // 提取WebApp发送的数据 const webappData = callbackQuery.data; // 解码URL编码内容(可选) // const decodedData = decodeURIComponent(webappData); console.log(`收到WebApp消息:${webappData}`); // 回复用户 bot.sendMessage(chatId, `已收到你的消息:${webappData}`); // 必须调用该方法确认收到回调 bot.answerCallbackQuery(callbackQuery.id); });
3. 直接使用Telegram Bot API(Webhook方式)
若你不用框架,直接通过Webhook接收请求:
- 你的Webhook端点会收到POST请求,请求体为JSON格式
- 判断请求体中存在
callback_query字段 - 从
callback_query.data中获取WebApp发送的字符串
示例(Express.js):
const express = require('express'); const app = express(); app.use(express.json()); const TELEGRAM_BOT_TOKEN = '你的机器人TOKEN'; app.post('/webhook', (req, res) => { const update = req.body; if (update.callback_query) { const webappData = update.callback_query.data; console.log(`收到WebApp消息:${webappData}`); // 回复Telegram确认收到回调 res.sendStatus(200); } else { res.sendStatus(200); } }); app.listen(3000, () => { console.log('Webhook服务运行在3000端口'); });
注意事项
- sendData发送的内容会被Telegram自动做URL编码,若消息包含特殊字符(如&、=、空格等),需在后端解码后使用
- 确保机器人TOKEN正确,且已配置好Polling或Webhook
- 调用
sendData后WebApp默认会自动关闭,若需保持打开需额外处理,但回调查询仍会正常发送
内容的提问来源于stack exchange,提问作者Fogge
相关产品推荐
相关产品推荐

