Telegram PHP:如何用Chat ID实现Inline Keyboard跳转至指定对话
解决Telegram PHP开发中通过Chat ID跳转对话的Inline Keyboard问题
首先,你遇到的这个问题很典型:Telegram的t.me/CHAT_ID格式链接无法生效,是因为这类纯数字Chat ID的公开链接仅适用于超级群组/频道,普通用户的Chat ID没法通过这种公开URL直接跳转。要实现跳转到普通用户的对话,得用Telegram客户端原生支持的内部协议链接。
正确的跳转链接格式
使用Telegram专属的tg://协议链接,格式如下:
tg://user?id=CHAT_ID
这个链接会直接唤起Telegram客户端并跳转到对应Chat ID的用户对话(前提是当前用户已经和该用户有过互动,或者该用户的账号是公开可访问的)。
PHP代码实现示例
在PHP中,你可以通过Telegram Bot API构造包含该链接的Inline Keyboard,下面是完整的示例代码:
<?php // 初始化Telegram Bot相关参数 $botToken = 'YOUR_BOT_TOKEN'; $currentUserChatId = 'CURRENT_USER_CHAT_ID'; // 接收消息的当前用户Chat ID // 构造Inline Keyboard结构 $inlineKeyboard = [ 'inline_keyboard' => [ [ [ 'text' => '打开目标用户对话', 'url' => 'tg://user?id=123456' // 替换为实际目标用户的Chat ID ] ] ] ]; // 组装发送请求的参数 $apiUrl = "https://api.telegram.org/bot{$botToken}/sendMessage"; $requestData = [ 'chat_id' => $currentUserChatId, 'text' => '点击下方按钮跳转至目标用户:', 'reply_markup' => json_encode($inlineKeyboard) ]; // 发送POST请求到Telegram API $httpOptions = [ 'http' => [ 'header' => "Content-type: application/x-www-form-urlencoded\r\n", 'method' => 'POST', 'content' => http_build_query($requestData) ] ]; $context = stream_context_create($httpOptions); $response = file_get_contents($apiUrl, false, $context); ?>
关键注意事项
- 互动前置要求:如果目标是普通私人账号,当前用户必须已经和该用户有过对话(比如发过消息、添加过好友),否则Telegram客户端无法定位到该用户,跳转会失败。
- 频道/群组特殊处理:如果目标是超级群组或频道,除了用
t.me/CHANNEL_USERNAME,也可以用tg://resolve?domain=-1001234567890(替换为对应的频道Chat ID,注意开头的负数标识)。 - 客户端兼容性:
tg://协议在所有官方Telegram客户端(iOS、Android、桌面版)都能正常工作,主流第三方客户端也普遍支持。
内容的提问来源于stack exchange,提问作者hsasan rajaee
相关产品推荐
相关产品推荐

