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

PHP开发Telegram bot调用answerCallbackQuery不弹出提示框求解

Telegram Bot answerCallbackQuery 不弹出Alert 解决方案

故障排查

  • 回调ID超时:callback_query_id有效期仅为15分钟,收到回调事件后必须第一时间调用接口,超时请求会被服务端拒绝
  • 参数类型错误:show_alert必须为布尔类型true或整数1,不能传字符串类型的"true",否则服务端会识别为false
  • 提示文本超限:alert内容最长支持200字符,超出后服务端会直接忽略该字段
  • 响应顺序错误:如果在调用answerCallbackQuery之前已经执行了编辑消息、发送消息等其他回调响应操作,alert请求会被覆盖失效
  • 客户端兼容性问题:部分低于v5.0的Telegram客户端对show_alert支持存在异常,更新到最新版即可验证

answerCallbackQuery 完整PHP实现

<?php
/**
 * 调用answerCallbackQuery接口弹出提示框
 * @param string $bot_token 你的Telegram Bot Token
 * @param string $callback_query_id 从回调事件中获取的callback_query.id值
 * @param string $alert_text 提示框显示内容,最大200字符
 * @param bool $show_alert 是否弹出模态框,true为弹窗,false为顶部toast
 * @param int $cache_time 响应缓存时长,单位秒,最长3600
 * @return array 接口返回结果
 */
function sendTgAlert(string $bot_token, string $callback_query_id, string $alert_text, bool $show_alert = true, int $cache_time = 0): array
{
    $apiEndpoint = "https://api.telegram.org/bot{$bot_token}/answerCallbackQuery";
    
    // 构造请求参数,布尔值转整数避免form提交时类型丢失
    $postData = [
        'callback_query_id' => $callback_query_id,
        'text' => $alert_text,
        'show_alert' => $show_alert ? 1 : 0,
        'cache_time' => $cache_time
    ];

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $apiEndpoint);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); // 生产环境建议开启SSL验证
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
    $response = curl_exec($ch);
    $err = curl_error($ch);
    curl_close($ch);

    if ($err) {
        return ['ok' => false, 'error_msg' => $err];
    }
    return json_decode($response, true) ?: ['ok' => false, 'error_msg' => '响应解析失败'];
}

// 调用示例
$res = sendTgAlert(
    '123456789:ABCdefGhiJklmNoPqrsTuvWxyz1234567890',
    '9876543210123456789',
    '操作成功!',
    true
);
?>

直接请求URL示例(调试用)

GET请求构造格式,替换对应参数即可直接在浏览器/Postman中调试:
https://api.telegram.org/bot<你的BotToken>/answerCallbackQuery?callback_query_id=<回调ID>&text=测试弹窗内容&show_alert=1

正确触发Alert的操作流程

  1. 配置Bot的Webhook地址,接收用户点击Inline按钮后推送的callback_query事件
  2. 从回调事件中提取callback_query.id字段,不要修改该字段值
  3. 优先调用answerCallbackQuery接口,确保该请求在其他所有回调响应操作(比如编辑消息、发送新消息)之前执行
  4. 接口返回ok: true即代表请求成功,Telegram客户端会自动弹出对应提示框

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 23:39:05