电报webhook不起作用(机器人)

时间:2017-09-22 17:17:28

标签: php bots telegram webhooks

我有网钩的问题!我有一个表格,用于为我的电报机器人提供令牌,并回答我的机器人根据表格中的令牌插入。当我使用get update方法时,一切都很好,但是当我使用web hook时,不起作用!我的URL有SS l证书,设置了Web挂钩。

$botToken = $_POST['token'];
//$botToken = json_decode($botToken, TRUE);
$webSite = "https://api.telegram.org/bot" . $botToken;

$update = file_get_contents("php://input");
$update = json_decode($update, TRUE);
$chatId = $update["message"]["chat"]["id"];
$message = $update["message"]["text"];

$message = strtolower($message);
switch ($message) {

 case "/start":
 sendMessage($chatId, "start!م");
 break;
 case "hi":
 sendMessage($chatId, "hiii");
 break;
 case "khubi":
  sendMessage($chatId, "bad nistam!");
  break;
 case "che khabar":
  sendMessage($chatId, "salamati");
  break;
 default:
 sendMessage($chatId, "chi migi ??");
 // sendMessage($chatId, "$chatId");

}
function sendMessage($chatId, $message)
{
 $url = $GLOBALS['webSite'] . "/sendMessage?chat_id=" . $chatId . "&text=" . urlencode($message);
 file_get_contents($url);
}

问题是当我使用web-hook而我发布令牌不起作用时,但是当我使用web-hook并将令牌存储在变量中时,它可以正常工作。 我真的不知道为什么它不起作用,我已经尝试了一切!!!! 请给我指导,我该如何解决?我怎样才能克服这个问题?

3 个答案:

答案 0 :(得分:1)

Telegram Bot Webhook 不会 POST令牌到您的服务器,但您可以将其作为webhook URL的一部分。例如,https://www.sean.taipei/telegram/hook.php?token=12345:AAJqs_w-4

如果上述解决方案不起作用,您可以通过以下方法找出问题:

检查getWebhookInfo方法,确保您的webhook网址正确无误,并且没有last_error_message字段。

将类似数据发布到您的服务器,here是您可以在curl -d JSON中使用的一些数据,只需将其复制并在您自己的服务器上运行。

最后,检查您的CDN配置(如果您已在该服务器上申请),临时禁用洪水或任何检查。

答案 1 :(得分:0)

我有一些调试的一般建议,这些可以帮助你:

  1. 安装Postman并向控制器发送电报webhook消息等手动消息。然后确保控制器中没有错误。
  2. 邮差样本:

    {
        "update_id":10000,
        "message":{
          "date":1441645532,
          "chat":{
             "last_name":"Test Lastname",
             "id":1111111,
             "first_name":"Test",
             "username":"Test"
          },
          "message_id":1365,
          "from":{
             "last_name":"Test Lastname",
             "id":1111111,
             "first_name":"Test",
             "username":"Test"
          },
          "text":"/start"
        }
    

    Postman

    1. 如果您的控制器为真,则必须确保Telegram发送Webhook消息。您可以下载ngrok并为您的localhost创建https代理。
    2. 在ngrok中使用此命令:

      ngrok http 20201
      

      20201是您的本地主机端口(localhost:20201)。 现在ngrok给你一个https链接,你必须将该链接设置为你的电报webhook(就像你说的那样)。 此时如果电报为您的机器人发送webhook消息,那么您可以在localhost中调试它。

      1. 最后,如果您没有发现问题,则必须阅读Marvin's Patent Pending Guide to All Things Webhook以再次检查所有要求。
      2.   
            
        1. 支持IPv4,Webhooks目前不支持IPv6。
        2.   
        3. 在端口443,80,88或8443上接受来自149.154.167.197-233的传入POST。
        4.   
        5. 能够处理TLS1.0 + HTTPS流量。
        6.   
        7. 提供受支持的非通配符,已验证或自签名证书。
        8.   
        9. 使用CN或SAN。它与您在设置时提供的域匹配。
        10.   
        11. 提供所有中间证书以完成验证链。
        12.   

答案 2 :(得分:0)

对于需要在本地主机上运行/调试电报机器人的人,也许您可​​以使用此npm软件包。

https://github.com/qutek/telehook

只需使用以下命令将其作为全局软件包安装在计算机上即可 npm install -g telehook

,然后运行命令 telehook run your-bot:token-key http://localhost/your-hook