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

如何在TelegramBotPHP库中使用callback_data获取用户Twitter用户名

你现有代码的核心问题是把inline按钮回传的checkIsMember当成普通消息文本判断了,回调数据不会出现在普通消息的$text字段里,需要单独读取callback_query对象的内容,完整实现方案如下:


步骤1:读取callback_data并应答回调

首先要从Telegram推送的更新数据中单独提取回调相关字段,且必须应答回调请求,否则用户点击按钮后会一直显示加载状态:

// 你原有逻辑里的普通消息字段读取
$text = $telegram->Text();
$chat_id = $telegram->ChatID();

// 新增回调相关字段读取
$callback_query = $telegram->Callback_Query();
$callback_data = $telegram->Callback_Data();
$callback_chat_id = $telegram->Callback_ChatID();

// 收到回调请求优先应答
if ($callback_query) {
    $telegram->answerCallbackQuery([
        'callback_query_id' => $callback_query['id'],
        'show_alert' => false
    ]);
}

步骤2:通过callback_data触发引导输入逻辑

将原有的$text == 'checkIsMember'判断改成判断回调字段,同时需要存储用户的当前输入状态(可以用SESSION、本地文件或者数据库存储,对应每个用户的chat_id),用来标识接下来用户发的消息是Twitter用户名:

if($text == '🚀 提交你的信息'){
    $option = array(
        // 不需要跳转url的话第二个参数传空字符串
        array($telegram->buildInlineKeyBoardButton('✅ 完成', $url = '', $callback_data = 'checkIsMember')) 
    );
    $keyb = $telegram->buildInlineKeyBoard($option);
    $content = array(
        'chat_id' => $chat_id, 
        'reply_markup' => $keyb, 
        'text' => '请先加入我们的Telegram频道 <b>点击"✅ 完成"按钮继续后续操作</b>',
        'parse_mode' => 'HTML'
    );
    $telegram->sendMessage($content);
}

// 响应callback回调
if($callback_data == 'checkIsMember'){
    // 存储当前用户状态为:等待输入Twitter用户名,这里用SESSION示例,开头需要先加session_start()
    $_SESSION['user_status'][$callback_chat_id] = 'wait_twitter';
    
    $content = array(
        'chat_id' => $callback_chat_id, 
        'text' => '👉 请在下方输入你的Twitter用户名,需要带@符号
示例:@username'
    );
    $telegram->sendMessage($content);
}

步骤3:接收并校验用户输入的Twitter用户名

后续用户发普通消息时,先判断用户状态,如果处于等待输入Twitter的状态,就对输入内容做格式校验:

// 处理用户普通输入
if ($text && isset($_SESSION['user_status'][$chat_id])) {
    if ($_SESSION['user_status'][$chat_id] == 'wait_twitter') {
        // 校验是否符合Twitter用户名规则:@开头,后接1-15位字母/数字/下划线
        if (preg_match('/^@[A-Za-z0-9_]{1,15}$/', $text)) {
            $twitter_username = $text;
            // 存储用户名后可以把状态改成下一步,比如等待输入密码
            $_SESSION['user_status'][$chat_id] = 'wait_password';
            
            $content = array(
                'chat_id' => $chat_id,
                'text' => 'Twitter用户名验证通过,请输入密码:'
            );
            $telegram->sendMessage($content);
        } else {
            $content = array(
                'chat_id' => $chat_id,
                'text' => '用户名格式错误,请重新输入,示例:@username'
            );
            $telegram->sendMessage($content);
        }
    }
    // 可继续扩展等待密码状态的处理逻辑,完成后续信息收集
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 16:15:05