Задать вопрос
wbsr
@wbsr
Программист - любитель

Почему не могу установить вебхук при создании телеграм бота?

Хочу создать простого бота. Установил на виртуальный сервер https://github.com/TelegramBot/Api

Создал бота в BotFather

зарегистрировал домен установил Lets Encrypte чтобы был https

Пишу вот такой код:

<?php
header('Content-Type: text/html; charset=utf-8'); 
echo('Отправили заголовки');
require_once("vendor/autoload.php"); 
echo('Подключили Telegram API');
$token = "мой_токен";
$bot = new \TelegramBot\Api\Client($token);

if(!file_exists("registered.trigger")){ 
	/**
	 * файл registered.trigger будет создаваться после регистрации бота. 
	 * если этого файла нет значит бот не зарегистрирован 
	 */
	// URl текущей страницы
	$page_url = "https://".$_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
	echo($page_url);
	$result = $bot->setWebhook($page_url);
	if($result){
    	file_put_contents("registered.trigger",time()); // создаем файл дабы прекратить повторные регистрации
	}
}

// обязательное. Запуск бота
$bot->command('start', function ($message) use ($bot) {
    $answer = 'Добро пожаловать!';
    $bot->sendMessage($message->getChat()->getId(), $answer);
});

// помощ
$bot->command('help', function ($message) use ($bot) {
    $answer = 'Команды:
/help - помощ';
    $bot->sendMessage($message->getChat()->getId(), $answer);
});

// запускаем обработку
$bot->run();

?>


На вот этой строке $result = $bot->setWebhook($page_url); зависает намертво и вылетает по таймауту

Что я делаю не так?
  • Вопрос задан
  • 1798 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
402d
@402d
начинал с бейсика на УКНЦ в 1988
сервер в России ? проверить прохождение пакетов до api.telegram.org
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
wbsr
@wbsr Автор вопроса
Программист - любитель
А как его проверить то?

Вот так?

<?
$wait = 1; // wait Timeout In Seconds
$host = 'api.telegram.org';
$ports = [
    'http'  => 80,
    'https' => 443,
    'ftp'   => 21,
];

foreach ($ports as $key => $port) {
    $fp = @fsockopen($host, $port, $errCode, $errStr, $wait);
    echo "Ping $host:$port ($key) ==> ";
    if ($fp) {
        echo 'SUCCESS';
        fclose($fp);
    } else {
        echo "ERROR: $errCode - $errStr";
    }
    echo PHP_EOL;
};
?>
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы