Long polling — готовые решения?

Здравствуйте, я делаю telegram бота и использую Webhook. Но есть ряд проблем, и решил попробовать Long polling. Есть ли готовые решения с Long polling или хорошие примеры. С Long polling никогда не работал раньше.
  • Вопрос задан
  • 6029 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Number_11
1. Ставишь composer, далее переходишь в папку с проектом через командную строку (cd c://bot - пример), выполняешь код:
"composer require guzzlehttp/guzzle".
2. Создаешь init.php, в этой папке, с содержимым:
<?php
// Инклуды)
use GuzzleHttp\Client;
include('vendor/autoload.php');
include('telegramBot.php');

//Получаем данные
$telegramApi = new TelegramBot();

// Вычный цикл, обработчик
while (true) {
sleep(2);
$updates = $telegramApi->getUpdates(); // Получаем обновление, методом getUpdates
foreach ($updates as $update){
if (isset($update->message->text)) { // Проверяем Update, на наличие текста

$text = $update->message->text; // Переменная с текстом сообщения
$chat_id = $update->message->chat->id; // Чат ID пользователя
$first_name = $update->message->chat->first_name; //Имя пользователя
$username = $update->message->chat->username; //Юзернейм пользователя

print_r($chat_id);
print_r($username);

if ($text == '/start'){ // Если пользователь подключился в первый раз, ему поступит приветствие
$telegramApi->sendMessage($chat_id, 'Привет'. ' ' . $first_name . '!'); //Приветствует Пользователя
} else {
$telegramApi->sendMessage($chat_id, $first_name . '! Как дела?' ); // Спрашивает как дела

}
}
}
}

3. Создаешь telegramBot.php, в этой папке, вот содержимое:
<?php
// Подключение библиотеки
use GuzzleHttp\Client;
use Telegram\Api;

class TelegramBot
{
protected $token = "ТОКЕН_БОТА";
protected $updateId;
// Функция собирает URL
protected function query($method, $params = [])
{
$url = "https://api.telegram.org/bot";
$url .= $this->token;
$url .= "/" . $method;
if (!empty($params))
{
$url .= "?" . http_build_query($params);
}

$client = new Client([
'base_uri' => $url
]);

$result = $client->request('GET');

return json_decode($result->getBody());
}

// Получаем обновления
public function getUpdates()
{
$response = $this->query('getUpdates', [
'offset' => $this->updateId + 1
]);
if (!empty($response->result)) {
$this->updateId = $response->result[count($response->result) -1]->update_id;
}
return $response->result;
}

// Отправляем сообщения
public function sendMessage($chat_id, $text)
{
$response = $this->query('sendMessage',[
'chat_id' => $chat_id,
'text' => $text
]);
return $response;
}

}

4. Что бы запустить его, там же в командной строке запускаешь файл:
php init.php

Там же в консоли увидишь Id пользователя и его юзернейм)
Вот такой не много туповаты пример, но работает.
Ответ написан
t-alexashka
@t-alexashka
Сразу пишу legacy код
Не знаю что там за бота вы делаете которому нужен лонг-поллинг, но если действительно нужен, то заюзайте это https://github.com/walkor/phpsocket.io (основан на workerman)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы