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

Telegram Bot无响应排查:Laravel WebHook配置后不回复问题

问题排查与解决

1. 路由请求方法错误

Telegram向WebHook推送更新时使用POST请求,但你定义的路由是Route::get,导致Telegram的请求无法匹配到处理逻辑,直接无响应。

修改路由为POST:

Route::post('url/tg', [BotController::class, 'tg'])->name('tg_index');

2. 未排除CSRF验证

Laravel默认对所有POST请求做CSRF验证,而Telegram的WebHook请求不会携带CSRF令牌,会被框架拦截。

在app/Http/Middleware/VerifyCsrfToken.php的$except数组中添加该路由:

protected $except = [
    'url/tg',
];

3. 代码逻辑漏洞

  • 当请求进入错误分支(比如$data为空、缺少update_id/message字段)时,$params变量未定义,执行http_build_query($params)会触发致命错误,但你未捕获记录,导致问题被隐藏。
  • file_get_contents调用发送消息时,未处理请求失败的情况(如网络问题、Telegram API报错),无法排查发送环节的问题。

修复后的代码(增加错误日志与逻辑校验):

public function tg() {
    $data = json_decode(file_get_contents('php://input'), TRUE);
    $token = '616340****:******NVqNNK93On-cT8TLtNMiZWE*****';

    if (!$data) {
        \Log::error('Telegram WebHook: 无法解析请求数据');
        return response()->json(['status' => 'error'], 400);
    } 
    elseif( !isset($data['update_id']) || !isset($data['message']) )
    {
        \Log::error('Telegram WebHook: 请求缺少必要字段', ['data' => $data]);
        return response()->json(['status' => 'error'], 400);
    }
    else
    {   
        $params = [
            'chat_id' => $data['message']['chat']['id'],
            'text'    => $data['message']['text'],
        ];
        
        $url = 'https://api.telegram.org/bot'.$token.'/sendMessage?'.http_build_query($params);
        $response = file_get_contents($url);
        
        if ($response === false) {
            \Log::error('Telegram WebHook: 发送消息失败', ['url' => $url]);
            return response()->json(['status' => 'error'], 500);
        }
        
        $responseData = json_decode($response, true);
        if (!$responseData['ok']) {
            \Log::error('Telegram API返回错误', ['response' => $responseData]);
            return response()->json(['status' => 'error'], 500);
        }
    }

    return response()->json(['status' => 'success']);
}

4. 确认WebHook配置有效性

重新设置WebHook时,确保使用HTTPS协议的完整链接(Telegram要求WebHook必须是HTTPS,本地开发可通过ngrok等工具做反向代理),且链接与路由完全匹配。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 17:37:10