Нет pending_update_count от Telegram Bot - PullRequest
       22

Нет pending_update_count от Telegram Bot

1 голос
/ 26 февраля 2020

Я некоторое время борюсь с Telegram API, похоже, я не нахожу свою проблему со стековым потоком, именно поэтому я отправляю это сообщение прямо сейчас.

Я пытаюсь построить Telegram Bot легко и просто. Я использую PHP и библиотеку ureal4u для получения объектов Update и sendMessages https://github.com/unreal4u/telegram-api Я установил webhook с цепочечным сертификатом. Это то, что я получаю, когда проверяю https://api.telegram.org/botBOTTOKEN/getWebhookInfo

{

    "ok": true,
    "result": {
        "url": https://mydomainname/my/path/webhook.php,
        "has_custom_certificate": true,
        "pending_update_count": 0,
        "max_connections": 40
    }

}

В файле Webhook. php У меня есть этот код

webhook.php
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
require 'vendor/autoload.php';

use \unreal4u\TelegramAPI\Telegram\Types\Update;

// Getting POST request body and decoding it from JSON to associative array
$updateData = json_decode(file_get_contents('php://input'), true);

$update = new Update($updateData);
print_r($update);
?>

Я проверил свой веб-крючок через два разных шага.

  • Первый - использовать Удивительное руководство Марвина ко всем вещам Webhook * curl POST для отправки сообщения на URL-адрес webhook
curl --tlsv1.2 -v -k -X POST -H "Content-Type: application/json" -H "Cache-Control: no-cache"  -d '{
"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"
}
}' "https://mydomainname/my/path.webhook.php"

RESPONSE :
Note: Unnecessary use of -X or --request, POST is already inferred.
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying 54.36.91.62:443...
* TCP_NODELAY set
* Connected to mydomainname (IP ADDRESS) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: path/to/cert/ca-bundle.crt
  CApath: none
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [512 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello (2):
{ [102 bytes data]
* TLSv1.2 (IN), TLS handshake, Certificate (11):
{ [2563 bytes data]
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
{ [333 bytes data]
* TLSv1.2 (IN), TLS handshake, Server finished (14):
{ [4 bytes data]
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
} [70 bytes data]
* TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
* TLSv1.2 (OUT), TLS handshake, Finished (20):
} [16 bytes data]
* TLSv1.2 (IN), TLS handshake, Finished (20):
{ [16 bytes data]
* SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256
* ALPN, server accepted to use h2
* Server certificate:
*  subject: CN=mydomainname
*  start date: Feb 14 20:49:32 2020 GMT
*  expire date: May 14 20:49:32 2020 GMT
*  issuer: C=US; O=Let's Encrypt; CN=Let's Encrypt Authority X3
*  SSL certificate verify ok.
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
} [5 bytes data]
* Using Stream ID: 1 (easy handle 0xf11300)
} [5 bytes data]
> POST /my/path/webhook.php HTTP/2
> Host: mydomainname
> user-agent: curl/7.67.0
> accept: */*
> content-type: application/json
> cache-control: no-cache
> content-length: 332
>
{ [5 bytes data]
* Connection state changed (MAX_CONCURRENT_STREAMS == 128)!
} [5 bytes data]
* We are completely uploaded and fine
{ [5 bytes data]
< HTTP/2 200
< date: Wed, 26 Feb 2020 06:16:52 GMT
< content-type: text/html; charset=UTF-8
< server: Apache
< x-powered-by: PHP/7.2
< vary: Accept-Encoding
< x-iplb-instance: 32871
< set-cookie: SERVERID87219=2720142|XlYNV|XlYNV; path=/
<
{ [332 bytes data]
100   664    0   332  100   332   2184   2184 --:--:-- --:--:-- --:--:--  4397{
"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"
}
}
* Connection #0 to host mydomainname left intact

  • Вторым шагом было фактическое сообщение моего бота через Telegram

На getWebhookInfo я все еще вижу «pending_update_count»: 0 и на webhook. php вот что Я получаю:

webhook.php
unreal4u\TelegramAPI\Telegram\Types\Update Object
(
    [update_id] => 0
    [message] => 
    [edited_message] => 
    [channel_post] => 
    [edited_channel_post] => 
    [inline_query] => 
    [chosen_inline_result] => 
    [callback_query] => 
    [shipping_query] => 
    [pre_checkout_query] => 
    [poll] => 
    [logger:protected] => unreal4u\Dummy\Logger Object
        (
        )

)

То, что я хотел бы: один из этих двух методов - curl POST для URL webhook или отправка сообщения боту telegram - отправляет объект обновления на мой URL, который я могу получить в webhook. php в моем объекте обновления.

1 Ответ

0 голосов
/ 20 марта 2020

Я являюсь автором этой библиотеки, но я не слишком активен в StackOverflow.

Причина, по которой вы ничего не видите, заключается в том, что Telegram отправляет вам обновление, и вы обрабатываете его в том же запросе, поэтому у вас есть print_r (), который вы отправляете обратно в Telegram.

Я бы порекомендовал в этой ситуации сохранить ответ в файл или передать в PSR-3-совместимый регистратор (уровень отладки iir c также сохранит исходные данные, полученные из Telegram), чтобы вы могли можно увидеть, что происходит.

Удачного кодирования!

...