Telegram Bot API 中如何正确获取转发消息的原始发送者 ID

发布时间 - 2026-01-27 00:00:00    点击率:

在 telegram bot 开发中,`forward_from` 字段嵌套在 `message` 对象内,直接访问 `$update['forward_from']['id']` 会因路径错误返回 null;正确路径是 `$update['message']['forward_from']['id']`。

Telegram 的 Webhook 接收的更新(Update)对象是一个层级结构的 JSON 数据,其根节点并不直接包含 forward_from,而是通过 message(或 channel_post、edited_

message 等子对象)间接承载消息内容。当你收到一条用户转发的消息时,forward_from 信息仅存在于 $update['message'] 下——前提是该消息确为普通聊天中的转发(非频道转发,且原始用户未启用“隐藏转发来源”隐私设置)。

✅ 正确用法示例:

$update = json_decode(file_get_contents('php://input'), TRUE);

// 安全检查:确保是消息更新,且存在 forward_from
if (isset($update['message']) && isset($update['message']['forward_from'])) {
    $originalUserId = $update['message']['forward_from']['id'];
    $originalFirstName = $update['message']['forward_from']['first_name'] ?? 'Unknown';
    $originalUsername = $update['message']['forward_from']['username'] ?? null;

    echo "原始发送者 ID: {$originalUserId}\n";
    echo "姓名: {$originalFirstName}" . ($originalUsername ? " (@{$originalUsername})" : "");
} else {
    echo "未检测到转发来源(可能为非转发消息、隐私限制或频道转发)";
}

⚠️ 注意事项:

  • forward_from 仅适用于私聊/群组中由用户手动转发的消息;频道转发(forward_from_chat)使用不同字段,且不暴露用户 ID;
  • 即使用户关闭了“隐藏转发来源”,若其账号为新注册的 Telegram 账号(2018 年后创建),默认仍不向 bot 暴露 forward_from ——这是 Telegram 的强制隐私策略,无法绕过;
  • 始终进行嵌套键存在性校验(如 isset()),避免 PHP Notice 错误;
  • 若需识别转发行为但 forward_from 为空,可结合 forward_date 和 forward_from_chat 判断是否来自频道。

? 总结:路径错误是最常见的 forward_from 为 null 原因。牢记 Telegram Update 结构:$update → ['message'] → ['forward_from'] → ['id']。调试时建议先 var_dump($update) 查看完整结构,再精准取值。


# php  # js  # json  # NULL  # 对象  # 是一个  # 这是  # 当你  # 适用于  # 能为  # 群组  # 最常见  # 不向  # 安全检查  # 为空 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何在IIS7上新建站点并设置安全权限?  深圳网站制作平台,深圳市做网站好的公司有哪些?  php485函数参数是什么意思_php485各参数详细说明【介绍】  Laravel如何使用Vite进行前端资源打包?(配置示例)  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  详解jQuery中的事件  Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程  微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】  海南网站制作公司有哪些,海口网是哪家的?  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  Laravel如何生成URL和重定向?(路由助手函数)  JavaScript如何实现路由_前端路由原理是什么  Laravel如何使用Eloquent进行子查询  悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音  Laravel如何处理CORS跨域请求?(配置示例)  标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南  网站制作价目表怎么做,珍爱网婚介费用多少?  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】  如何有效防御Web建站篡改攻击?  node.js报错:Cannot find module 'ejs'的解决办法  BootStrap整体框架之基础布局组件  Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南  html5的keygen标签为什么废弃_替代方案说明【解答】  如何在搬瓦工VPS快速搭建网站?  Laravel API资源类怎么用_Laravel API Resource数据转换  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  Laravel Fortify是什么,和Jetstream有什么关系  如何快速搭建高效简练网站?  javascript基于原型链的继承及call和apply函数用法分析  Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法  Firefox Developer Edition开发者版本入口  Internet Explorer官网直接进入 IE浏览器在线体验版网址  DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解  浅析上传头像示例及其注意事项  如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框  Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程  Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】  Laravel模型关联查询教程_Laravel Eloquent一对多关联写法  Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  文字头像制作网站推荐软件,醒图能自动配文字吗?  Laravel事件监听器怎么写_Laravel Event和Listener使用教程  如何用免费手机建站系统零基础打造专业网站?  Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用  重庆市网站制作公司,重庆招聘网站哪个好?  焦点电影公司作品,电影焦点结局是什么?  Bootstrap整体框架之JavaScript插件架构  Laravel如何处理文件下载请求?(Response示例)  Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】