Laravel telegram bot sdk
Есть вопрос: делаю телеграм бота на заказ, на laravel, использую laravel sdk ^2.0 (irazasyed автор)пакет, поднял серв с самописным сертификатом, делал всё по туториалам, говорят нада настроить веб хук по сылке в адресной строке https://api.telegram.org/bot<мой токен с botfather>/setWebhook?url=<Домен + сылка, которая прописаная в роутах>, на что мне приходит json ответ: Webhook was set, в контроллере код следующий:
use Illuminate\Http\Request;
use Telegram\Bot\Api;
use Telegram\Bot\Laravel\Facades\Telegram;
class TelegramController extends Controller
{
public function webhook(Request $request){
$key = env('TELEGRAM_TOKEN', 'мой токен');
$telegram = new Api($key);
$result = $telegram->getWebhookUpdate();
$text = isset($result["message"]["text"]) ? $result["message"]["text"] : "";
$chat_id = isset($result["message"]["chat"]["id"]) ? $result["message"]["chat"]["id"] : 0;
$username = isset($result["message"]["from"]["username"]) ? $result["message"]["from"]["username"] : "";
$telegram->sendMessage([
'chat_id' => <мой чат id>,
'text' => $text
]);
}
}
роуты:
Route::match(['get', 'post'], 'webhook/telegram', [
'uses' => 'TelegramController@webhook'
]);
Проверял в постмане, если в ручную кинуть запрос на отправку меседжа, то всё ок, но если отправить меседж боту, то реакции 0, потому я думаю что проблема где-то меджу серваком и ботом(ерорных записей в логах laravel и сервака не было), всмысле запрос от бота идёт ок, но не идёт ко мне на серв, а если и идёт, то не в метод, пробовал так же продебажить, приходит ли туда вообше что то, результат отрицательный. Прошу помощи с этим вопросом, перепробовал всё. Заранее благодарю.
Ответы (1 шт):
- В библиотеке irazasyed есть команда
php artisan telegram:webhook, используя ее можно легче управлять вебхуком напрямую из вашего приложения - Для вебхука необходим только тип запроса POST, в роутах нет необходимости создавать get-запрос для этого.
- Вероятнее всего проблема в том, что у вас используется самоподписный сертификат. Что бы он работал с Telegram API, необходимо отправлять файл с публичным ключем вместе с
setWebhookметодом. В случае если вы будете использоватьtelegram:webhookкоманду, то нужно указать параметрcertificate_pathв конфигурации вашего бота (config/telegram.php), в котором указать путь к файлу с публичным ключем.
К сожалению библиотека irazasyed ужасно документирована и имеет много проблем в коде, поэтому довольно не комфортна для пользователей, которые не копаются в ней напрямую. Именно по этой причине я написал собственную библиотеку и делал упор на документацию и примеры westacks/telebot, если вы еще не сильно интегрировались с библиотекой irazasyed, то вам будет комфортнее ознакомиться с моей библиотекой.