如何正确获取 Telegram 转发消息中的原始发送者 ID
技术百科
聖光之護
发布时间:2026-01-27
浏览: 次 在 telegram bot api 中,`forward_from` 字段嵌套在 `message` 对象内,直接访问 `$update['forward_from']['id']` 会导致空值;必须通过 `$update['message']['forward_from']['id']` 才能安全读取转发来源用户的 id。
Telegram 的 Webhook 更新(Update)结构是分层嵌套的 JSON 对象,并非所有字段都位于根层级。当你收到一条包含转发消息的更新时,forward_from 并非 $update 的直接子键,而是位于 $update['message'](或 $update['channel_post']、$update['edited_message'] 等具体消息类型对象)之下。
✅ 正确写法(适用于普通私聊/群聊中的转发消息):
$update = json_decode(file_get_contents('php://input'), TR
UE);
// 安全检查:确保是消息类型且存在 forward_from
if (isset($update['message']['forward_from']['id'])) {
$originalUserId = $update['message']['forward_from']['id'];
echo "原始发送者 ID: " . $originalUserId;
} else {
echo "该消息未被转发,或转发者已启用隐私设置(隐藏转发来源)";
}⚠️ 注意事项:
- 若用户在 Telegram 中启用了「隐藏我的转发消息来源」(即关闭“显示我是谁转发的”),则 forward_from 字段将完全不存在,即使消息被转发也不会出现 —— 这是 Telegram 的强制隐私策略,无法绕过。
- 某些消息类型(如频道帖子、编辑后的消息)需检查对应键名:
- 频道转发:$update['channel_post']['forward_from']['id']
- 编辑的消息:$update['edited_message']['forward_from']['id']
建议统一使用 get_message_object() 辅助函数提取实际消息体。
- 始终进行 isset() 或 array_key_exists() 判断,避免 PHP Notice 错误。
? 总结:Telegram Update 结构严谨,切勿假设字段扁平化。务必依据 官方 Update 对象文档 定位字段路径,并始终做空值防护。正确路径是 $update['message']['forward_from']['id'],而非 $update['forward_from']['id']。
# 这是
# 当你
# 扁平化
# 适用于
# 文档
# 不存在
# 未被
# 而非
# js
# json
# 对象
# php
# 做空
# 安全检查
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- 如何使用Golang捕获并记录协程panic_保证
- c++中的std::conjunction和std
- Win11怎么卸载Photos应用_Win11卸载
- 微信里的php文件怎么变mp4_微信接收php转m
- phpstudy本地环境mysql忘记密码_重置m
- Mac自带的词典App怎么用_Mac添加和使用多语
- Win11怎么关闭搜索历史_Win11清除设备上的
- Python实现图数据库操作_Neo4j核心CRU
- Win11怎么开启移动热点_Windows11共享
- Win11怎么清理C盘系统日志_Win11清理系统
- c++中如何计算坐标系中两点间距离_c++勾股定理
- Windows10怎么卸载预装软件_Windows
- Win11搜索栏无法输入_解决Win11开始菜单搜
- XSLT怎么生成动态的HTML属性名和标签名
- 如何在Golang中优化文件读写性能_使用缓冲和并
- c++20的std::format怎么用 比pri
- c++ nullptr与NULL区别_c++11空
- Python与GPU加速技术_CUDA与Numba
- Win11文件扩展名怎么显示_Win11查看文件后
- Win11时间怎么同步到原子钟 Win11高精度时
- Win11怎么关闭贴靠布局_Win11禁用窗口最大
- 如何优化Golang Web性能_Golang H
- Win11怎么开启专注模式_Windows11时钟
- Win11怎么关闭透明效果_Windows11个性
- Windows如何使用BitLocker To G
- 如何在Golang中编写端到端测试_Golang
- C++如何使用std::optional?(处理可
- mac本地php环境如何开启curl_curl扩展
- Windows系统时间服务错误_W32Time服务
- Win11怎么设置DNS服务器_Windows11
- MySQL 中使用 IF 和 CASE 实现查询字
- 如何从 Go 的 map[string]inter
- Win11怎么解压RAR文件 Win11自带解压功
- Win11系统占用空间大怎么办 Win11深度瘦身
- c++怎么实现大文件的分块读写_c++ 文件指针s
- 如何使用正则表达式批量替换重复的“-”模式为固定字
- Windows电脑如何进入安全模式?(多种按键方法
- Win11文件夹预览图不显示怎么办_Win11缩略
- C#如何在一个XML文件中查找并替换文本内容
- c++ unordered_map怎么用 c++哈
- Python多进程教程_multiprocessi
- Python多线程使用规范_线程安全解析【教程】
- 如何使用Golang实现函数指针_函数变量与回调示
- 使用类变量定义字符串常量时如何实现类型安全的 Li
- Win10怎样卸载自带Edge_Win10卸载Ed
- Win11怎么设置虚拟键盘_打开Win11屏幕键盘
- c++怎么用jemalloc c++替换默认内存分
- 如何使用Golang实现基本类型比较_Golang
- Windows10系统怎么查看防火墙状态_Win1
- 如何在Golang中处理二进制数据_Golang


QQ客服