Php 从电报'迁移;在bot中使用webhook的getUpdate

Php 从电报'迁移;在bot中使用webhook的getUpdate,php,bots,telegram,webhooks,Php,Bots,Telegram,Webhooks,我有一个电报机器人中的网络钩子问题!我有一个为我的电报机器人提供令牌的表单,并根据表单中插入的令牌回答我的机器人。当我使用getupdate方法时,一切都很好,但当我使用webhook时,就不起作用了!我的URL有SSL证书,设置了web挂钩 $botToken = $_POST['token']; //$botToken = json_decode($botToken, TRUE); $webSite = "https://api.telegram.org/bot" . $botToken;

我有一个电报机器人中的网络钩子问题!我有一个为我的电报机器人提供令牌的表单,并根据表单中插入的令牌回答我的机器人。当我使用getupdate方法时,一切都很好,但当我使用webhook时,就不起作用了!我的URL有SSL证书,设置了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钩子并发布令牌时,它不起作用,但当我使用web钩子并将令牌存储在变量中时,它能正常工作。 我真的不知道为什么它不起作用,我什么都试过了!!!!
请给我指导,我怎么解决这个问题?如何克服此问题?

电报机器人Webhook不会将令牌发布到服务器,但您可以将其作为Webhook URL的一部分。e、 g.,
https://www.sean.taipei/telegram/hook.php?token=12345:AAJqs_w-4

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

检查方法,确保您的webhook URL是正确的,并且没有
last\u error\u message
字段

将类似的数据发布到您的服务器,这是一些您可以在
curl-djson
中使用的数据,只需复制它并在您自己的服务器上运行即可


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

我对调试有一些一般性建议,这些建议可能会对您有所帮助:

  • 用于发布手动消息,如电报webhook消息结构,以确保控制器中没有错误
  • 样本:

    {
        "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"
        }
    

  • 为了确保Telegram正在发送任何消息,您可以使用并创建一个https代理到本地主机
  • 在ngrok中使用此命令:

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

  • 最后,如果您没有发现问题,则必须阅读以再次检查所有需求
  • 支持IPv4,Webhook当前不支持IPv6
  • 接受来自端口443、80、88或8443上149.154.167.197-233的传入邮局
  • 能够处理TLS1.0+HTTPS流量
  • 提供受支持的、非通配符的、经过验证的或自签名的证书
  • 使用与安装程序中提供的域匹配的CN或SAN
  • 提供所有中间证书以完成验证链

  • 对于需要在本地主机上运行/调试telegram bot的用户,也许您可以使用此npm包

    只需在您的计算机上使用
    npm安装-g telehook

    然后运行命令
    telehook运行你的机器人:令牌密钥http://localhost/your-hook

    您可以共享发布到此文件的示例json吗?字符串(73)”“您可以对您的令牌进行json编码并发布到此文件,您可以在
    文件获取内容(“php://input");
    json_decode
    相同。字符串(45)“434441867:AAFIcipstLlbLZ0NXFU4j8RA6wB02mkftUM”我使用json编码,但它不工作!!!!我做了所有这些,但没有得到结果,我真的在寻找这个,但我不知道什么是错误???