在 Telegraf.js 中接收 Telegram Web App 发送的数据

在 telegraf.js 中接收 telegram web app 发送的数据

本文详细阐述了如何在 Telegraf.js 框架下有效接收来自 Telegram Web App 通过 Telegram.WebApp.sendData() 方法发送的数据。核心机制在于,sendData() 触发的是一个标准的 Telegram 消息事件,数据会封装在 ctx.message.web_app_data.data 字段中。文章提供了前端 Web App 和后端 Telegraf.js 的示例代码,并强调了数据解析、错误处理及安全考量等最佳实践。

理解 Telegram Web App 与 Telegraf.js 的数据交互

Telegram Web App 允许开发者在 Telegram 聊天界面内嵌入功能丰富的网页应用。当用户在 Web App 中完成特定操作后,通常需要将一些数据回传给机器人进行处理。Telegram.WebApp.sendData(data) 是 Web App 提供的一个关键方法,用于将数据发送回与之关联的 Telegram 机器人。

对于 Telegraf.js 这样的机器人框架而言,接收这些数据的方式与处理普通用户消息略有不同,但并非完全独立。关键在于,sendData() 方法实际上会触发一个特殊的“消息”事件,该消息的 web_app_data 字段中包含了 Web App 发送的实际数据。

在 Telegraf.js 中接收 Web App 数据

要从 Telegram.WebApp.sendData() 接收数据,Telegraf.js 机器人需要监听常规的 message 事件。不同于一些开发者可能预期的 web_app_data 专用事件,sendData() 产生的数据会作为 message 对象的一部分传递。

在 message 事件的处理函数中,你可以通过 ctx.message.web_app_data 属性来访问 Web App 发送的数据。这个属性本身是一个对象,其中包含一个 data 字段,即为 Web App 通过 sendData() 发送的原始字符串。

示例代码:

首先,在你的前端 Web App 中,你需要使用 Telegram.WebApp.sendData() 发送数据。通常,这些数据会被 JSON 字符串化以便于传输复杂结构。

1. 前端 Web App 代码 (index.html 或 app.js):

            Web App 数据发送示例                body { font-family: Arial, sans-serif; text-align: center; margin-top: 50px; }        button { padding: 10px 20px; font-size: 16px; cursor: pointer; }        

Telegram Web App 数据发送

点击按钮将数据发送给机器人。

// 确保 Telegram Web App SDK 已加载并初始化 if (window.Telegram && window.Telegram.WebApp) { window.Telegram.WebApp.ready(); document.getElementById('sendDataButton').addEventListener('click', () => { const dataToSend = { action: 'user_authentication', userId: window.Telegram.WebApp.initDataUnsafe?.user?.id || 'unknown', username: window.Telegram.WebApp.initDataUnsafe?.user?.username || 'unknown_user', timestamp: Date.now() }; // 将数据 JSON 字符串化后发送 window.Telegram.WebApp.sendData(JSON.stringify(dataToSend)); // 可选:发送数据后关闭 Web App window.Telegram.WebApp.close(); }); } else { console.error("Telegram Web App SDK 未加载或未初始化。"); alert("请在 Telegram 内部打开此 Web App。"); }

2. 后端 Telegraf.js 机器人代码 (bot.js):

const { Telegraf, Markup } = require('telegraf');require('dotenv').config(); // 用于加载 .env 文件中的 BOT_TOKENconst bot = new Telegraf(process.env.BOT_TOKEN);// 替换为你的 Web App 的实际 URLconst WEB_APP_URL = 'https://your-domain.com/your-web-app-path';// 处理 /start 命令,提供一个打开 Web App 的按钮bot.start(async (ctx) => {    ctx.reply('欢迎使用!点击下方按钮打开 Web App 进行操作:', {        reply_markup: Markup.inlineKeyboard([            Markup.button.webApp('打开 Web App', WEB_APP_URL)        ])    });});// 监听所有消息事件,包括来自 Web App 的数据bot.on('message', async (ctx) => {    // 检查消息是否包含 web_app_data    if (ctx.message && ctx.message.web_app_data) {        const receivedRawData = ctx.message.web_app_data.data;        console.log('从 Web App 接收到原始数据:', receivedRawData);        try {            // 尝试将接收到的数据解析为 JSON 对象            const parsedData = JSON.parse(receivedRawData);            // 回复用户,显示接收到的数据            await ctx.reply(`已从 Web App 接收到数据:n```jsonn${JSON.stringify(parsedData, null, 2)}n````, {                parse_mode: 'MarkdownV2'            });            // 根据接收到的数据执行业务逻辑            if (parsedData.action === 'user_authentication') {                console.log(`用户 ${parsedData.userId} (${parsedData.username}) 已通过 Web App 完成认证。`);                await ctx.reply(`感谢您的认证,${parsedData.username}!`);                // 这里可以进行数据库更新、用户状态管理等操作            } else {                await ctx.reply('接收到未知类型的 Web App 数据。');            }        } catch (e) {            console.error('解析 Web App 数据失败:', e);            await ctx.reply(`从 Web App 接收到非 JSON 格式数据或解析错误:`${receivedRawData}``, {                parse_mode: 'MarkdownV2'            });        }    } else if (ctx.message && ctx.message.text) {        // 处理其他类型的文本消息        await ctx.reply(`我收到了您的消息:"${ctx.message.text}"`);    } else {        // 处理其他非文本、非 Web App 数据的消息类型        await ctx.reply('我收到了一个消息,但它不是文本或 Web App 数据。');    }});// 启动机器人bot.launch();// 优雅地停止机器人(处理 SIGINT 和 SIGTERM 信号)process.once('SIGINT', () => bot.stop('SIGINT'));process.once('SIGTERM', () => bot.stop('SIGTERM'));

注意事项与最佳实践

数据格式化: Telegram.WebApp.sendData() 接收的是一个字符串。如果需要发送复杂的对象,务必在前端使用 JSON.stringify() 将其转换为 JSON 字符串,并在后端使用 JSON.parse() 进行解析。错误处理: 在后端解析数据时,始终使用 try…catch 块来处理 JSON.parse() 可能抛出的错误,以应对前端发送了无效 JSON 字符串的情况。数据验证: 从 Web App 接收到的数据应被视为用户输入,必须进行严格的验证和清理,以防止安全漏洞(如 SQL 注入、XSS 等)。用户反馈: 机器人接收到数据并处理后,应及时给用户一个反馈,告知数据已收到并处理,提升用户体验。Web App URL 配置: 确保 WEB_APP_URL 变量指向你的实际 Web App 地址,并且该 URL 已在 BotFather 中配置为你的 Web App 域名。initDataUnsafe 的使用: 在 Web App 中,window.Telegram.WebApp.initDataUnsafe 包含了启动 Web App 的用户信息,可以用于在发送数据时附带用户身份信息,方便后端进行关联。但请注意,initDataUnsafe 并非完全安全,其数据应在后端进行哈希校验以确保未被篡改。

总结

通过上述方法,Telegraf.js 开发者可以有效地从 Telegram Web App 接收数据,实现机器人与 Web App 之间的双向通信。核心在于理解 Telegram.WebApp.sendData() 会触发一个带有 web_app_data 字段的常规 message 事件,并在此事件处理器中正确地解析和处理数据。遵循最佳实践,可以确保数据传输的健壮性和安全性。

以上就是在 Telegraf.js 中接收 Telegram Web App 发送的数据的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1530303.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
React组件中安全处理外部链接的实践与“Script error”解析
上一篇 2025年12月20日 21:53:26
Leaflet 地图初始化时控制瓦片图层显示
下一篇 2025年12月20日 21:53:34

相关推荐

  • Debian邮件服务器SSL证书安装方法

    在debian邮件服务器上安装ssl证书的步骤如下: 1. 安装OpenSSL工具包 首先,确保你的系统上已经安装了OpenSSL工具包。如果没有安装,可以使用以下命令进行安装: sudo apt-get updatesudo apt-get install openssl 2. 生成私钥和证书请求…

    2026年9月26日
    100
  • windows照片应用打不开怎么办 windows照片应用打不开的修复方法

    windows照片应用打不开怎么办 windows照片应用打不开的修复方法windows照片应用打不开怎么办 windows照片应用打不开的修复方法windows照片应用打不开怎么办 windows照片应用打不开的修复方法windows照片应用打不开怎么办 windows照片应用打不开的修复方法

    首先重启照片应用并结束相关进程,若无效则通过“应用和功能”修复或重置;仍无法解决时使用PowerShell重新安装应用,同时可运行系统故障排除工具检测问题;最后检查用户权限,创建新账户测试以排除配置损坏可能。 如果您尝试打开Windows照片应用时遇到无法启动或闪退的问题,可能是由于应用缓存损坏、系…

    2026年9月26日 • 用户投稿
    100
  • 兄弟“畅享绣” APP 登陆 App Store,iOS 用户开启智能刺绣新体验

    兄弟“畅享绣” APP 登陆 App Store,iOS 用户开启智能刺绣新体验兄弟“畅享绣” APP 登陆 App Store,iOS 用户开启智能刺绣新体验兄弟“畅享绣” APP 登陆 App Store,iOS 用户开启智能刺绣新体验兄弟“畅享绣” APP 登陆 App Store,iOS 用户开启智能刺绣新体验

    近日,兄弟(中国)商业有限公司宣布其智能刺绣设计应用“畅享绣”已完成 ios 系统适配及操作体验优化,现已正式上线 app store。苹果用户可通过 iphone 或 ipad 设备,便捷地将手绘图案转化为刺绣作品,以科技力量赋能传统工艺,开启全民创意刺绣新纪元。 此次 iOS 版本的发布,意味着…

    2026年9月26日 • 用户投稿
    000
  • 修复Android计算器应用崩溃:避免空值和无效字符

    修复Android计算器应用崩溃:避免空值和无效字符修复Android计算器应用崩溃:避免空值和无效字符修复Android计算器应用崩溃:避免空值和无效字符修复Android计算器应用崩溃:避免空值和无效字符

    本文旨在帮助开发者解决Android计算器应用因尝试解析空字符串或包含无效字符的字符串而导致的崩溃问题。通过在解析前进行字符串的预处理,包括判空和去除空格,可以有效避免 NumberFormatException 异常,从而提升应用的稳定性和用户体验。文章提供了详细的代码示例和注意事项,帮助开发者更…

    2026年9月26日 • 用户投稿
    000
  • 多模态AI如何识别特殊符号 多模态AI符号理解能力解析

    多模态AI如何识别特殊符号 多模态AI符号理解能力解析多模态AI如何识别特殊符号 多模态AI符号理解能力解析多模态AI如何识别特殊符号 多模态AI符号理解能力解析多模态AI如何识别特殊符号 多模态AI符号理解能力解析

    多模态ai理解特殊符号主要依靠数据训练与上下文分析。首先,它通过大规模标注数据学习符号在不同场景中的常见用法,例如社交媒体中的“@”或“#”;其次,结合图像和文本的上下文进行语义推理,判断如“$”是货币单位还是情绪表达;最后,借助ocr与视觉特征识别图像中的符号,并通过跨模态联合建模提升准确性。 ☞…

    2026年9月26日 • 用户投稿
    800
  • sublime怎么格式化less文件_sublime LESS文件美化方法

    sublime怎么格式化less文件_sublime LESS文件美化方法sublime怎么格式化less文件_sublime LESS文件美化方法sublime怎么格式化less文件_sublime LESS文件美化方法sublime怎么格式化less文件_sublime LESS文件美化方法

    使用插件可实现Sublime Text格式化LESS文件。1. 安装HTML-CSS-JS Prettify插件,通过命令面板搜索并安装;2. 确保文件语法设为Less;3. 配置Prettify支持Less,在用户设置中启用less_enable;4. 全选代码后右键选择Prettify Code…

    2026年9月26日 • 用户投稿
    000
  • Matrixport 获不丹格列普正念之城金融服务牌照

    Matrixport 获不丹格列普正念之城金融服务牌照Matrixport 获不丹格列普正念之城金融服务牌照Matrixport 获不丹格列普正念之城金融服务牌照Matrixport 获不丹格列普正念之城金融服务牌照

    2025年9月26日,全球领先的一站式数字资产金融服务平台 Matrixport 正式宣布,成功取得不丹格列普正念之城管理局(GMCA)颁发的金融服务牌照(FSL)。这一里程碑事件不仅巩固了 Matrixport 在合规化加密金融领域的先锋地位,也进一步推动格列普正念之城(GMC)向国际级金融科技与…

    2026年9月26日 • 用户投稿
    000
  • 剪映pc版怎么裁剪画面_剪映PC版视频画面裁剪教程

    剪映pc版怎么裁剪画面_剪映PC版视频画面裁剪教程剪映pc版怎么裁剪画面_剪映PC版视频画面裁剪教程剪映pc版怎么裁剪画面_剪映PC版视频画面裁剪教程剪映pc版怎么裁剪画面_剪映PC版视频画面裁剪教程

    剪映PC版支持通过基础裁剪、关键帧动态裁剪及缩放位移组合实现画面比例调整与区域去除。首先导入视频并拖入轨道,进入“画面”选项点击“裁剪”,可选择预设比例或自由调节;需动态裁剪时,在时间轴设置起始关键帧,移动播放头后调整裁剪框,系统自动记录变化;精细控制则结合“等比缩放”与“X/Y轴偏移”,配合关键帧…

    2026年9月26日 • 用户投稿
    000
  • MAC怎么让程序坞(Dock)自动隐藏_macOS程序坞自动显示与隐藏设置

    MAC怎么让程序坞(Dock)自动隐藏_macOS程序坞自动显示与隐藏设置MAC怎么让程序坞(Dock)自动隐藏_macOS程序坞自动显示与隐藏设置MAC怎么让程序坞(Dock)自动隐藏_macOS程序坞自动显示与隐藏设置MAC怎么让程序坞(Dock)自动隐藏_macOS程序坞自动显示与隐藏设置

    1、通过系统设置可开启程序坞自动隐藏,进入“系统设置→桌面与程序坞”,启用“自动隐藏和显示程序坞”功能,鼠标移至屏幕底部即可滑出;2、使用终端命令defaults write com.apple.dock autohide -bool true并重启Dock进程也可实现;3、还可通过终端调整隐藏延迟…

    2026年9月26日 • 用户投稿
    000
  • NVIDIA RTX 4090是不是性能过剩了?

    RTX 4090是否性能过剩取决于用途:1. 游戏方面,在主流游戏如《守望先锋2》《赛博朋克2077》中性能明显溢出,多数玩家难以用满其能力;2. 生产力领域,凭借24GB显存和强大算力,它在AI训练、3D渲染等任务中仍具价值;3. 技术体验上,DLSS 3、Reflex等技术提供低延迟与未来兼容性…

    2026年9月26日
    1200
  • Debian OpenSSL如何进行数字签名验证

    在debian系统上使用openssl进行数字签名验证,可以按照以下步骤操作: 准备工作 安装OpenSSL:确保你的Debian系统已经安装了OpenSSL。如果没有安装,可以使用以下命令进行安装: sudo apt updatesudo apt install openssl 获取公钥:数字签名…

    2026年9月26日
    600
  • 解决Android计算器应用崩溃问题:数字输入处理优化

    解决Android计算器应用崩溃问题:数字输入处理优化解决Android计算器应用崩溃问题:数字输入处理优化解决Android计算器应用崩溃问题:数字输入处理优化解决Android计算器应用崩溃问题:数字输入处理优化

    本文将指导你如何解决Android计算器应用在数字输入时发生的崩溃问题。如摘要所述,崩溃通常是由于尝试将空字符串或null值传递给Double.parseDouble()方法引起的。以下是详细的解决方案和最佳实践。 问题分析 在Android计算器应用中,当用户点击数字按钮时,通常会将按钮上的数字追…

    2026年9月26日 • 用户投稿
    000
  • Claude是否能用于编写剧本 AI生成剧情内容的能力与使用体验

    Claude是否能用于编写剧本 AI生成剧情内容的能力与使用体验Claude是否能用于编写剧本 AI生成剧情内容的能力与使用体验Claude是否能用于编写剧本 AI生成剧情内容的能力与使用体验Claude是否能用于编写剧本 AI生成剧情内容的能力与使用体验

    本文将围绕利用AI工具进行剧本创作这一问题展开探讨。文章会首先介绍AI在剧情生成方面的核心能力,接着通过详细的步骤讲解,指导用户如何借助AI工具进行剧本的构思、撰写与优化,从而让用户了解整个操作流程。最后,会结合实际使用体验,分析其在创作过程中的优势与需要注意的方面,帮助创作者更有效地利用这一技术。…

    2026年9月26日 • 用户投稿
    700
  • windows卡在欢迎界面怎么办_Windows卡在欢迎界面无法进入系统解决方法

    windows卡在欢迎界面怎么办_Windows卡在欢迎界面无法进入系统解决方法windows卡在欢迎界面怎么办_Windows卡在欢迎界面无法进入系统解决方法windows卡在欢迎界面怎么办_Windows卡在欢迎界面无法进入系统解决方法windows卡在欢迎界面怎么办_Windows卡在欢迎界面无法进入系统解决方法

    强制重启进入安全模式排查问题,确认是否因第三方程序导致;2. 创建新用户账户以绕过损坏的配置文件;3. 禁用非必要启动项和服务释放系统资源;4. 使用sfc和DISM命令修复系统文件与镜像;5. 卸载最近更新或驱动解决兼容性问题,最终恢复系统正常登录。 如果您在启动Windows系统时,发现设备长时…

    2026年9月26日 • 用户投稿
    200
  • win8电脑自动重启是什么原因_Win8自动重启原因及修复

    win8电脑自动重启是什么原因_Win8自动重启原因及修复win8电脑自动重启是什么原因_Win8自动重启原因及修复win8电脑自动重启是什么原因_Win8自动重启原因及修复win8电脑自动重启是什么原因_Win8自动重启原因及修复

    答案:Windows 8电脑无故重启主因是系统崩溃、硬件故障或软件冲突。应先关闭“系统失败时自动重启”以查看蓝屏代码,再更新驱动、运行SFC扫描修复系统文件,排查内存、散热及电源问题,并进行病毒查杀。 如果您发现Windows 8电脑在使用过程中无故自动重启,这通常是由系统崩溃、硬件故障或软件冲突引…

    2026年9月26日 • 用户投稿
    000
  • 《流放之路2》国服98元起 9月11日开启不删档测试

    《流放之路2》国服98元起 9月11日开启不删档测试《流放之路2》国服98元起 9月11日开启不删档测试《流放之路2》国服98元起 9月11日开启不删档测试《流放之路2》国服98元起 9月11日开启不删档测试

    《流放之路2》国服名为《流放之路:降临》,定价从98元起,豪华版分为四个档次,价格区间为198元至798元,另有典藏版售价2888元。目前游戏已在腾讯wegame平台开启预购,国服预充值不删档测试定于2025年9月11日正式开启! 98元“基础创始人资格包”包含9800点券、测试资格以及数字原声带。…

    2026年9月26日 • 用户投稿
    400
  • sublime如何安装monokai pro主题_sublime Monokai Pro主题安装教程

    sublime如何安装monokai pro主题_sublime Monokai Pro主题安装教程sublime如何安装monokai pro主题_sublime Monokai Pro主题安装教程sublime如何安装monokai pro主题_sublime Monokai Pro主题安装教程sublime如何安装monokai pro主题_sublime Monokai Pro主题安装教程

    确保安装Package Control,通过官网获取代码在Sublime控制台运行;2. 使用Ctrl+Shift+P打开命令面板,通过Package Control搜索并安装Monokai Pro;3. 再次打开命令面板选择“Monokai Pro: Activate Theme”启用主题,或手动…

    2026年9月26日 • 用户投稿
    200
  • MySQL中窗口函数用法 窗口函数在数据分析中的实际案例

    窗口函数是在一组数据行上执行计算并为每一行返回一个值的函数。它与普通聚合函数不同,保留原始数据行并进行行级计算。常见函数包括row_number()、rank()、dense_rank()以及结合over()使用的sum()、avg()等。例如,在计算销售排名时,使用rank() over(orde…

    2026年9月26日
    000
  • 蓝猫 AI 如何生成复古风图标?蓝猫 AI 复古风图标生图全解析

    蓝猫 AI 如何生成复古风图标?蓝猫 AI 复古风图标生图全解析蓝猫 AI 如何生成复古风图标?蓝猫 AI 复古风图标生图全解析蓝猫 AI 如何生成复古风图标?蓝猫 AI 复古风图标生图全解析蓝猫 AI 如何生成复古风图标?蓝猫 AI 复古风图标生图全解析

    蓝猫ai生成复古风图标的关键在于理解复古核心元素并精准控制生成过程。首先需准备不同时期复古图标数据集并进行风格训练,如8-bit游戏、早期网页设计等;其次通过关键词引导与风格控制,如使用“8-bit pixel art icon”等描述,并提供色彩饱和度、线条粗细等参数调整;第三步可在生成后添加噪点…

    2026年9月26日 • 用户投稿
    100
  • windows商店打不开怎么办_Microsoft Store应用商店打不开修复教程

    windows商店打不开怎么办_Microsoft Store应用商店打不开修复教程windows商店打不开怎么办_Microsoft Store应用商店打不开修复教程windows商店打不开怎么办_Microsoft Store应用商店打不开修复教程windows商店打不开怎么办_Microsoft Store应用商店打不开修复教程

    使用UU加速器优化网络连接,2. 重置Microsoft Store缓存,3. 启用TLS 1.1和1.2协议,4. 更换为Google公共DNS,5. 重置Microsoft Store应用本身,可依次排查并解决商店无法打开问题。 如果您尝试打开Microsoft Store应用商店,但应用无法加…

    2026年9月26日 • 用户投稿
    000

发表回复

登录后才能评论
关注微信