You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:31:54