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

如何用PHP为Telegram消息添加inline_keyboard?代码无法显示键盘

Telegram Inline Keyboard 加载失败问题排查与修复

错误原因分析

  1. API 请求URL构造错误:你把reply_markup参数拼接到URL中,同时用POST方式发送其他参数,Telegram API的POST请求要求所有参数统一放在POST体里,而非混合URL拼接和POST字段。另外URL中的Bot Token格式错误,正确格式是bot{token}后直接跟接口路径,不能用&拼接参数。
  2. 参数传递方式错误:reply_markup没有被包含到POST请求的参数数组中,导致Telegram服务器无法接收键盘配置。

修复后的代码

$txt = $data;
if ($telegram == "on"){
    // 构造inline键盘
    $keyboard = [
        "inline_keyboard" => [
            [
                [
                    "text" => "Button 1",
                    "callback_data" => "1"
                ],
                [
                    "text" => "Button 2",
                    "callback_data" => "2"
                ]
            ]
        ]
    ];
    
    // 整合所有请求参数,包括reply_markup
    $send = [
        'chat_id' => $chat_id,
        'text' => $txt,
        'reply_markup' => json_encode($keyboard)
    ];
    
    // 正确构造API URL:bot{token}后直接跟接口路径
    $website_telegram = "https://api.telegram.org/bot{$bot_token}/sendMessage";
    $ch = curl_init($website_telegram);
    
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $send);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    
    $result = curl_exec($ch);
    curl_close($ch);
    
    // 可选:打印结果排查错误
    // var_dump($result);
}

关键修改说明

  • 将reply_markup加入到$send参数数组中,确保Telegram能接收到键盘配置
  • 修正API URL的构造方式,去掉错误的URL参数拼接,使用标准的bot{token}/sendMessage格式
  • 保持json_encode对键盘数组的处理,因为Telegram要求reply_markup是JSON字符串格式

内容的提问来源于stack exchange,提问作者ucefdark

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 03:10:16