Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
Telegraf.js中接收Telegram Web App发送数据的实用指南_创想鸟

Telegraf.js中接收Telegram Web App发送数据的实用指南

Telegraf.js中接收Telegram Web App发送数据的实用指南

本教程详细阐述了如何在telegraf.js框架中有效接收和处理来自telegram web app的`telegram.webapp.senddata()`方法发送的数据。我们将通过具体代码示例,演示如何利用`bot.on(‘message’)`事件监听器来捕获包含web app数据的消息,并解析其内容,从而实现前后端数据交互,解决开发者在集成web app时遇到的数据接收难题。

1. 理解Telegram Web App与数据交互

Telegram Web App是Telegram提供的一种强大功能,允许开发者在Telegram客户端内运行基于Web的交互式应用。通过Web App,用户可以在不离开Telegram界面的情况下完成复杂操作,例如表单填写、游戏互动或支付。

在Web App中,window.Telegram.WebApp.sendData(data)方法是实现Web App与Telegram Bot后端通信的关键。它允许Web App向Bot发送任意字符串数据。当Web App调用此方法后,Telegram客户端会将这些数据封装成一条特殊的消息发送给与该Web App关联的Bot。

2. 前端Web App数据发送

在你的前端Web App中,通过Telegram.WebApp对象调用sendData方法来发送数据。请注意,sendData方法只接受一个字符串作为参数。如果需要发送结构化数据(如JSON对象),则必须先将其序列化为JSON字符串。

以下是一个前端Web App发送数据的示例:

// 确保Telegram Web App脚本已加载if (window.Telegram && window.Telegram.WebApp) {    const dataToSend = {        action: 'auth_complete',        userId: '12345',        token: 'some_secure_token'    };    // 将JavaScript对象序列化为JSON字符串    const jsonStringData = JSON.stringify(dataToSend);    // 发送数据到Telegram Bot    window.Telegram.WebApp.sendData(jsonStringData);    // 可选:发送数据后关闭Web App    // window.Telegram.WebApp.close(); } else {    console.error('Telegram WebApp object not found.');}

在实际应用中,你可能在用户完成某个操作(如点击按钮、表单提交)后调用sendData。

3. Telegraf.js后端数据接收

在Telegraf.js中接收来自Telegram.WebApp.sendData()的数据,与接收普通消息的处理方式略有不同。许多开发者可能会尝试使用bot.on(‘web_app_data’)或类似的事件监听器,但这些通常不会直接生效。实际上,Telegram.WebApp.sendData()发送的数据会被Telegram封装成一条普通的“消息”,但这条消息会包含一个特殊的web_app_data字段。

因此,正确的做法是使用bot.on(‘message’)监听器来捕获所有传入的消息,然后检查消息对象中是否存在web_app_data字段。

3.1 识别Web App数据消息

当Web App通过sendData()发送数据时,Telegraf.js接收到的ctx.message对象将具有以下结构:

{  "message_id": 123,  "from": { /* ... */ },  "chat": { /* ... */ },  "date": 1678888888,  "web_app_data": {    "data": "{"action":"auth_complete","userId":"12345","token":"some_secure_token"}"  }}

可以看到,实际发送的数据字符串位于ctx.message.web_app_data.data。

3.2 Telegraf.js接收代码示例

以下是Telegraf.js Bot如何接收并处理这些数据的示例:

const { Telegraf } = require('telegraf');const bot = new Telegraf(process.env.BOT_TOKEN);// 定义你的Web App URLconst FRONT_URL = 'https://your-web-app-domain.com'; // 请替换为你的实际Web App URL// Bot启动命令,用于打开Web Appbot.start(async (ctx) => {    ctx.reply('欢迎使用Web App集成示例!点击下方按钮打开Web App。', {        reply_markup: {            inline_keyboard: [                [{ text: '打开我的Web App', web_app: { url: FRONT_URL } }]            ]        }    });});// 监听所有消息bot.on('message', (ctx) => {    // 检查消息是否包含web_app_data字段    if (ctx.message && ctx.message.web_app_data) {        const receivedDataString = ctx.message.web_app_data.data;        console.log('从Web App接收到原始数据:', receivedDataString);        try {            // 尝试将接收到的JSON字符串解析为JavaScript对象            const parsedData = JSON.parse(receivedDataString);            console.log('解析后的Web App数据:', parsedData);            // 根据解析后的数据执行业务逻辑            if (parsedData.action === 'auth_complete') {                ctx.reply(`认证成功!用户ID: ${parsedData.userId}`);                // 在这里可以进行用户认证、数据库更新等操作            } else {                ctx.reply(`接收到未知Web App动作: ${parsedData.action}`);            }        } catch (e) {            // 处理JSON解析失败的情况            ctx.reply(`接收到非JSON格式的Web App数据: ${receivedDataString}`);            console.error('解析Web App数据失败:', e);        }    } else {        // 处理其他类型的普通消息        // ctx.reply('收到一条普通消息。');    }});// 启动Botbot.launch();// 优雅关闭Botprocess.once('SIGINT', () => bot.stop('SIGINT'));process.once('SIGTERM', () => bot.stop('SIGTERM'));

4. 注意事项

数据格式一致性: Telegram.WebApp.sendData()只接受字符串。因此,在前端发送复杂数据时务必使用JSON.stringify()将其序列化,并在后端使用JSON.parse()进行反序列化。确保前后端的数据格式约定一致。安全性与数据验证: 永远不要信任来自客户端的任何数据。对接收到的web_app_data进行严格的验证和清理,以防止恶意注入、格式错误或不符合预期的内容。错误处理: 在解析JSON数据时,务必使用try-catch块来捕获潜在的解析错误,避免Bot崩溃。用户反馈: 在Bot接收并处理完Web App数据后,及时向用户发送反馈消息,告知操作结果,提升用户体验。Web App关闭: 在某些场景下,Web App完成数据发送后可能需要自动关闭。可以通过调用window.Telegram.WebApp.close()来实现。

总结

通过本教程,我们详细了解了如何在Telegraf.js中接收和处理来自Telegram Web App的Telegram.WebApp.sendData()方法发送的数据。核心在于利用bot.on(‘message’)监听器,并检查ctx.message.web_app_data.data字段来获取Web App发送的字符串数据。结合JSON序列化与反序列化,以及必要的错误处理和数据验证,开发者可以轻松实现Bot与Web App之间高效、安全的双向数据交互。

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

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

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
JavaScript Service Worker应用实践
上一篇 2025年12月20日 21:54:59
JavaScript中的性能分析(Profiling)有哪些方法和工具?
下一篇 2025年12月20日 21:55:15

相关推荐

  • 使用OSHI库精确测量磁盘活动时间和传输速率

    使用OSHI库精确测量磁盘活动时间和传输速率使用OSHI库精确测量磁盘活动时间和传输速率使用OSHI库精确测量磁盘活动时间和传输速率使用OSHI库精确测量磁盘活动时间和传输速率

    本文详细介绍了如何利用OSHI库的HWDiskStore类来精确测量磁盘活动时间百分比和数据传输速率。通过获取磁盘读写操作、总传输时间等累积性统计数据的快照,并计算两次快照之间的差值,可以准确分析特定时间段内的磁盘活跃度及每秒传输次数,从而有效监控系统磁盘性能。 OSHI库与磁盘性能监控 oshi(…

    2026年9月25日 • 用户投稿
    000
  • Chrome浏览器怎么查看某个插件的资源占用_插件资源占用情况监控技巧

    Chrome浏览器怎么查看某个插件的资源占用_插件资源占用情况监控技巧Chrome浏览器怎么查看某个插件的资源占用_插件资源占用情况监控技巧Chrome浏览器怎么查看某个插件的资源占用_插件资源占用情况监控技巧Chrome浏览器怎么查看某个插件的资源占用_插件资源占用情况监控技巧

    首先使用Shift+Esc打开Chrome任务管理器,查看各扩展程序的CPU和内存占用情况,识别高耗能插件;接着通过chrome://extensions页面禁用或删除异常扩展;最后可启用chrome://flags中的悬停显示内存功能,便于实时监控标签页资源消耗。 如果您发现Chrome浏览器运行…

    2026年9月25日 • 用户投稿
    100
  • VBA使用API_04:创建按钮

    VBA使用API_04:创建按钮VBA使用API_04:创建按钮VBA使用API_04:创建按钮VBA使用API_04:创建按钮

    在创建了窗体的基础上,接下来我们将进一步添加一个按钮来增强程序的交互性。按钮是windows系统中预定义的控件,因此无需额外注册,直接使用createwindowex函数即可。在创建窗体之后、显示窗体之前,我们可以插入代码来创建这个按钮。 按钮的父窗口句柄(hWndParent)应当设置为之前创建的…

    2026年9月24日 • 用户投稿
    100
  • 淘宝品牌库申请入口在哪里?需要注意什么?2025最新操作指南

    淘宝品牌库申请入口在哪里?需要注意什么?2025最新操作指南淘宝品牌库申请入口在哪里?需要注意什么?2025最新操作指南淘宝品牌库申请入口在哪里?需要注意什么?2025最新操作指南淘宝品牌库申请入口在哪里?需要注意什么?2025最新操作指南

    在淘宝平台成功入驻品牌库不仅能增强店铺的权威性,还能享受官方流量倾斜与营销资源支持。然而,大多数商家往往因找不到申请入口或材料反复被驳回而止步不前。本文将全面解析pc端与手机端的品牌库申请路径,并分享7条提高审核通过率的关键技巧。 一、淘宝品牌库申请入口详细指引 1. PC端操作路径 登录【淘宝商家…

    2026年9月24日 • 用户投稿
    100
  • DeepSeek R1T2— TNG推出的改进型AI语言模型,基于DeepSeek

    DeepSeek R1T2— TNG推出的改进型AI语言模型,基于DeepSeekDeepSeek R1T2— TNG推出的改进型AI语言模型,基于DeepSeekDeepSeek R1T2— TNG推出的改进型AI语言模型,基于DeepSeekDeepSeek R1T2— TNG推出的改进型AI语言模型,基于DeepSeek

    deepseek r1t2 是 tng 在 deepseek 原始模型基础上开发的增强型语言模型。该模型采用 tri-mind 架构,融合了 deepseek r1-0528、r1 和 v3-0324 三个基础模型的优势,通过 assembly of experts(aoe)技术整合推理能力、结构化…

    2026年9月24日 • 用户投稿
    900
  • 微软终止Cortana支持:Windows 10迎来重大调整

    微软终止Cortana支持:Windows 10迎来重大调整微软终止Cortana支持:Windows 10迎来重大调整微软终止Cortana支持:Windows 10迎来重大调整微软终止Cortana支持:Windows 10迎来重大调整

    N软网消息,微软近日宣布,将在Windows 10系统中停止对Cortana的支持。这是继Windows 11中取消Cortana支持之后的进一步动作,微软正将重心转移到Windows Copilot、Microsoft 365 Copilot以及Bing Chat等新技术上。 曾有人预计,微软会在…

    2026年9月24日 • 用户投稿
    100
  • 如何在Java中使用Collections.shuffle打乱列表

    使用Collections.shuffle()可随机打乱列表元素,但列表必须为可变类型。Arrays.asList()返回固定列表,直接使用会抛出UnsupportedOperationException;正确做法是将其复制到ArrayList等可修改列表中再调用shuffle。基本用法示例如Lis…

    2026年9月24日
    300
  • 2025年比较好用的生成图片AI工具前十推荐

    2025年比较好用的生成图片AI工具前十推荐2025年比较好用的生成图片AI工具前十推荐2025年比较好用的生成图片AI工具前十推荐2025年比较好用的生成图片AI工具前十推荐

    2025年AI图片生成工具将更加智能、精准且深度融入创作流程,具备超写实生成、多模态输入、实时交互和3D建模能力,代表工具包括Midjourney、Stable Diffusion、DALL-E 4、Adobe Firefly Max等,未来将朝个性化、多模态融合与实时协作发展,同时面临版权、伦理、…

    2026年9月24日 • 用户投稿
    100
  • vivo浏览器网页内容无法复制怎么办_vivo浏览器解除网页限制复制文本方法

    可通过阅读模式、打印预览、查看源代码、OCR识别或控制台命令五种方法解决网页内容无法复制问题,具体操作依次为:启用浏览器阅读模式后复制;利用打印预览界面选择文字;查看页面源代码搜索并提取文本;对截图使用图文识别功能获取文字;通过开发者工具控制台输入document.body.contentEdita…

    2026年9月24日
    400
  • 如何通过BIOS设置优化游戏性能与系统稳定性?

    如何通过BIOS设置优化游戏性能与系统稳定性?如何通过BIOS设置优化游戏性能与系统稳定性?如何通过BIOS设置优化游戏性能与系统稳定性?如何通过BIOS设置优化游戏性能与系统稳定性?

    启用XMP/DOCP可显著提升游戏帧数与系统响应,通过让内存运行于标称高频低时序,改善最低帧稳定性;正确设置需在BIOS中开启对应配置文件,并进行稳定性测试以确保兼容性。 BIOS设置是优化游戏性能和系统稳定性的一个关键但常被忽视的环节。通过细致调整内存频率、CPU电源管理模式,甚至是集成显卡分配,…

    2026年9月24日 • 用户投稿
    200
  • AI模型评测有哪些_好用的AI模型评测大全

    AI模型评测有哪些_好用的AI模型评测大全AI模型评测有哪些_好用的AI模型评测大全AI模型评测有哪些_好用的AI模型评测大全AI模型评测有哪些_好用的AI模型评测大全

    ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ MMLU:大规模多任务语言理解基准 Open LLM Leaderboard:Hugging Face推出的开源大模型排行榜单 C-Eval:一个全面的中文基础模型评估套件 FlagEval:智…

    2026年9月24日 • 用户投稿
    100
  • Debian环境下MongoDB如何进行性能调优

    在debian环境下进行mongodb性能调优,可以参考以下步骤和建议: 硬件和配置优化 选择合适的硬件:根据应用需求选择合适的CPU、内存和存储设备。配置内存:确保MongoDB有足够的内存来缓存数据和索引,减少磁盘I/O。使用SSD:SSD硬盘比传统硬盘提供更快的读写速度,显著提升数据库性能。 …

    2026年9月24日
    000
  • safari浏览器标签页图标(favicon)不显示怎么办_safari浏览器标签页图标不显示解决方法

    首先清除Safari缓存和网站数据,检查图像加载设置是否开启,刷新页面或重访网站,必要时重置浏览器设置,并确认系统显示设置未禁用相关视觉效果。 如果您在使用 Safari 浏览器时发现网页标签页的图标(favicon)未能正常显示,可能是由于缓存异常、网站资源加载问题或浏览器设置限制所致。以下是解决…

    2026年9月24日
    000
  • 安装系统时,如何手动加载第三方 SATA 或 NVMe 硬盘驱动?

    安装系统时,如何手动加载第三方 SATA 或 NVMe 硬盘驱动?安装系统时,如何手动加载第三方 SATA 或 NVMe 硬盘驱动?安装系统时,如何手动加载第三方 SATA 或 NVMe 硬盘驱动?安装系统时,如何手动加载第三方 SATA 或 NVMe 硬盘驱动?

    安装系统时若第三方SATA或NVMe硬盘不被识别,需在安装界面通过“加载驱动程序”选项手动导入厂商提供的.inf等驱动文件,确保USB驱动器格式为FAT32并存放解压后的正确版本驱动,进入BIOS确认SATA模式(如RAID/AHCI)与驱动匹配,且硬件连接正常。 安装系统时,如果遇到第三方 SAT…

    2026年9月24日 • 用户投稿
    100
  • sublime怎么配置eslint_sublime ESLint插件配置教程

    sublime怎么配置eslint_sublime ESLint插件配置教程sublime怎么配置eslint_sublime ESLint插件配置教程sublime怎么配置eslint_sublime ESLint插件配置教程sublime怎么配置eslint_sublime ESLint插件配置教程

    首先安装Node.js和ESLint,通过npm全局或项目内安装并初始化配置;接着在Sublime Text中使用Package Control安装SublimeLinter及SublimeLinter-eslint插件;然后根据需要在设置中配置ESLint可执行文件路径;再添加”&#8…

    2026年9月24日 • 用户投稿
    100
  • Java双向链表:实现高效的按索引删除节点操作

    Java双向链表:实现高效的按索引删除节点操作Java双向链表:实现高效的按索引删除节点操作Java双向链表:实现高效的按索引删除节点操作Java双向链表:实现高效的按索引删除节点操作

    本文详细讲解了如何在Java中为双向链表实现按索引删除节点的操作。教程涵盖了泛型设计、节点结构、参数校验、以及针对头节点、尾节点和中间节点的删除逻辑,并强调了维护链表head、tail和size等状态的准确性,确保了删除操作的健壮性和正确性。 1. 双向链表节点与泛型设计 在实现双向链表时,为了提高…

    2026年9月24日 • 用户投稿
    200
  • MAC怎么查看电脑配置信息_Mac硬件配置与系统信息查看方法

    MAC怎么查看电脑配置信息_Mac硬件配置与系统信息查看方法MAC怎么查看电脑配置信息_Mac硬件配置与系统信息查看方法MAC怎么查看电脑配置信息_Mac硬件配置与系统信息查看方法MAC怎么查看电脑配置信息_Mac硬件配置与系统信息查看方法

    首先通过“关于本机”查看Mac基础配置,包括系统版本、处理器和内存;再进入“系统信息”获取硬件、网络等详细数据;最后可用终端命令精准查询序列号、芯片架构及系统版本。 如果您想了解您的Mac电脑的具体硬件配置和系统信息,可以通过多种内置工具快速获取。这些信息包括处理器型号、内存大小、存储容量、显卡详情…

    2026年9月24日 • 用户投稿
    100
  • CPU的制程工艺从5nm迈向3nm,实际性能提升与价格涨幅是否成正比?

    CPU的制程工艺从5nm迈向3nm,实际性能提升与价格涨幅是否成正比?CPU的制程工艺从5nm迈向3nm,实际性能提升与价格涨幅是否成正比?CPU的制程工艺从5nm迈向3nm,实际性能提升与价格涨幅是否成正比?CPU的制程工艺从5nm迈向3nm,实际性能提升与价格涨幅是否成正比?

    3nm相比5nm性能提升有限但成本激增,晶体管密度增70%、CPU性能提15%-25%、能效与AI算力改善明显,而台积电3nm代工涨价20%、设备研发成本飙升,高通获16%优惠涨幅、联发科承24%溢价,AI芯片商支撑高价,手机厂难转嫁成本,摩尔定律性价比红利消失。 芯片制程从5nm到3nm,性能提升…

    2026年9月24日 • 用户投稿
    000
  • win10玩游戏掉帧严重怎么办_提升Win10游戏性能减少掉帧的优化设置

    win10玩游戏掉帧严重怎么办_提升Win10游戏性能减少掉帧的优化设置win10玩游戏掉帧严重怎么办_提升Win10游戏性能减少掉帧的优化设置win10玩游戏掉帧严重怎么办_提升Win10游戏性能减少掉帧的优化设置win10玩游戏掉帧严重怎么办_提升Win10游戏性能减少掉帧的优化设置

    首先调整电源模式至高性能,再为游戏指定独立显卡并更新显卡驱动,同时关闭后台程序与Xbox Game Bar,最后降低游戏画质设置以提升帧数稳定性。 如果您在运行游戏时遇到画面卡顿、帧数急剧下降的情况,这通常意味着系统资源分配不足或软硬件设置未针对游戏进行优化。以下是多种可以尝试的解决方案。 本文运行…

    2026年9月24日 • 用户投稿
    100
  • 抖音不是好友会显示已读吗?抖音不是好友显示好友

    抖音不是好友会显示已读吗?抖音不是好友显示好友抖音不是好友会显示已读吗?抖音不是好友显示好友抖音不是好友会显示已读吗?抖音不是好友显示好友抖音不是好友会显示已读吗?抖音不是好友显示好友

    抖音,作为一款风靡全球的短视频社交平台,不仅让我们足不出户便能领略世界的精彩,也为日常生活增添了无数乐趣。在使用过程中,你是否也曾好奇过:如果和对方不是好友,抖音消息会显示“已读”吗?今天,我们就来深入探讨这个问题,揭开抖音私信功能背后的真相。 一、抖音非好友聊天会显示已读吗? 答案是:不会显示已读…

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

发表回复

登录后才能评论
关注微信