Telegram возвращает пустым getWebhookUpdates

marigolu

Добрый день!
Впервые пишу бота, прошу не пинать сильно :)
Методом setWebhook создаю вебхук на самоподписном сертификате (сначала пробовала на бесплатном сертификате ssl от timeweb, установленном на моем сайте, на котором и будет лежать обработчик бота, но ответ от getWebhookInfo приходил с ошибкой). Поэтому сертификат самоподписной. Теперь WebhookInfo выдает красивый ответ:

Код (Text):
  1. TelegramBotObjectsWebhookInfo Object
  2. (
  3. [items:protected] => Array
  4. (
  5. [url] => https://хххххххххххххххххххххххххххххххх/webhook
  6. [has_custom_certificate] => 1
  7. [pending_update_count] => 23
  8. [max_connections] => 40
  9. )
  10. )

Причем строка
[pending_update_count] => 23
Отражает реальное количество моих сообщений в боте. И значение меняется с изменением их количества.
То есть как бы мой скрипт видит бота.

Но вопрос вот в чем. Код:

Код (Text):
  1. $telegram = new Api($token);
  2. $result = $telegram -> getWebhookUpdates();
  3. print_r($result);

Выдает объект пустой:

TelegramBotObjectsUpdate Object
(
[items: protected] => Array
(
)
)

Хочу получить доступ к обновлениям бота, к новым сообщениям.
Что я делаю не так?
Как получить id чатов и их сообщения?

 

igordata

так они должны приходить на указанный урл. Ты получаешь запросы на тот урл?

 

marigolu

Содержимое файла: https://site.net/tlgm_bot/bot.php

Код (Text):
  1.     include(‘vendor/autoload.php’); //Подключаем библиотеку
  2.     $token=’xxxxxxx’;
  3.  
  4.        use TelegramBotApi;
  5.     use TelegramBotKeyboardKeyboard;
  6.     use TelegramBotActions;
  7.     use TelegramBotCommandsCommand;
  8.     use TelegramBotObjectsCallbackQuery;
  9.  
  10.        $telegram = new Api($token);
  11.    
  12.      $wh = $telegram->setWebhook(
  13.          [
  14.              ‘url’ => ‘https://site.net/tlgm_bot/’.$token.’/webhook’,
  15.              ‘certificate’ => ‘YOURPUBLIC.pem’,
  16.      ]);
  17. ;
  18.      print_r($telegram->getWebhookInfo());
  19.  
  20.     $result = $telegram -> getWebhookUpdates(); //Передаем в переменную $result полную информацию о сообщении пользователя
  21.      print_r($result);

Выдача:

Код (Text):
  1. TelegramBotObjectsWebhookInfo Object                                                                                                                                                              
  2. (                                                                                                                                                                                                    
  3.     [items:protected] => Array                                                                                                                                                                        
  4.         (                                                                                                                                                                                            
  5.             [url] => https://site.net/tlgm_bot/xxxxxxx/webhook                                                                                              
  6.             [has_custom_certificate] => 1                                                                                                                                                            
  7.             [pending_update_count] => 2                                                                                                                                                              
  8.             [max_connections] => 40                                                                                                                                                                  
  9.         )                                                                                                                                                                                            
  10.                                                                                                                                                                                                      
  11. )                                                                                                                                                                                                    
  12. TelegramBotObjectsUpdate Object                                                                                                                                                                    
  13. (                                                                                                                                                                                                    
  14.     [items:protected] => Array                                                                                                                                                                        
  15.         (                                                                                                                                                                                            
  16.         )                                                                                                                                                                                            
  17.                                                                                                                                                                                                      
  18. )

— Добавлено —

ВИдимо где-то ошибка у меня, раз обновления не получаю. Как проверить на тот урл или нет?

 

igordata

в логике
вебхук это когда ты говоришь, что будешь слушать урл, а на этот урл тебе будут присылать события

ты слушаешь урл?
— Добавлено —

никак не надо. ты сама выбрала урл, написала его ручками, отправила в телеграм. Вот на него и будет слаться всякое.
Но ты должна получать. Ты должна запросы на этот урл обрабатывать как-то. Ты обрабатываешь?

 

marigolu

да вроде по инструкции делала. У вас нет пошаговой инструкции как делать правильно, чтобы получать обновления?

Нет, т.к. не могу получить обновления.
Как это сделать?

 

igordata

ты должн(а) осмыслить концепцию вебхука
это когда ты просишь другой сервак дёргать твой урл при наступлении события
это понятно?

 

marigolu

Это конечно понятно. Команда setWebhook успешно выполнена в адресной строке. Что дальше?

 

igordata

походу ты до сих пор не понимаешь то, что я говорю

давай ещё раз

когда ты говоришь серверу телеграма, что вот такой у тебя вебхук, то ты должна стартануть вебсервер и обращения к данному урлу парсить и обрабатывать.

И только тогда ты получишь обновления. Никаким телепатическим образом они сами по себе не прилетают.

 

marigolu

«Говоришь телеграму» — это запускаешь в браузере команду: startWebhook с адресом своего скрипта?

Да!!!! Стартанула, парсю, получаю, что у меня необработанных обращений n штук. А сами обращения как получить?

Прям ни о чем переписываемся, если честно. Вы можете помочь по вопросу в первом посте? Вроде как могла расписала все, код привела.

Что делала, еще раз:
1. бот создан, токен получен.
2. на сервере создана папка tlgm_bot/ В ней composerom установлены бублиотеки. Также получен ssl самоподписнорй, хотя на сервере есть и бесплатный, но на всякий случай самоподписной. Прочитала, что таймвебовские ssl сертификаты не очень работают с телеграмом.
3. Вебхук создан успешно

Как получить обновления с телеграма? Код, если можно. У меня метод $result = $telegram -> getWebhookUpdates();
возвращает пустоту.

 

mkramer

Ты это используешь для работы с телеграмом? https://telegram-bot-sdk.readme.io/docs
— Добавлено —

Вопрос в том, в какой момент ты вызываешь этот метод

 

igordata

делаешь запрос. возможно своим браузером. возможно другим способом.
— Добавлено —

в вебхуке и получай! при чем тут getWebhookUpdates? :D

 

marigolu

Если хотите помочь, приведите код. Как получить сообщение с бота. Иначе, не нужно мне отвечать, не тратьте время.

 

mkramer

@marigolu, кода не будет в этом разделе. getWebhookUpdates() — это правильный вызов, весь вопрос в том, в какой момент это делать. Эта функция что-то приличное вернёт только в тот момент, когда выполняется веб-хук. О чём тебе тут уже сказали много раз
— Добавлено —
У тебя нету понимания как php работает, судя по твоему коду. setWebhook — один вызов, теперь надо ждать, когда Telegram этот веб-хук вызовет. В момент этого вызова getWebhookUpdates вернёт тебе, что надо. Вызывается этот скрипт телеграмом, когда произошло какое-нибудь событие, т.е. или пользователь подписался на бота, или отправил боту сообщение и т.п.

Это всё описано как в доке к пакету, так и в доке к самому телеграму. Но как с английским?
— Добавлено —
Т.е. пойми, ты в неправильное время вызываешь getWebhookUpdates() — сразу после установки хука, тебе ещё никто никаких updates не прислал.

 

igordata

так у тебя не в коде проблема, а в понимании когда какой код исполнять. у меня-то вебхуки в тележке работают норм. но суть в том, что они и без кода вообще будут работать не хуже.

 

BUTCHER

Добрый день, такая же проблема. Подскажите пожалуйста, Вы решили задачу?

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *