php-telegram-botパッケージを使ってtelegramでbotに送ったメッセージをプログラムで取得したいです。
最終的な目標はbotにメッセージを送るとそれを複数のチャンネルに転送するプログラムです。
(https://github.com/php-telegram-bot/core)のInstractionsに従いcomposer.jsonと set.php, hook.php を書きました。
(https://github.com/php-telegram-bot/core/issues/514)を参考に、
まずはbotに送ったメッセージをgetMessage()で取得し、結果をファイルに出力するようにしましたが、途中でfinallyに飛んでしまいます。
どのようにすればgetMessage()を取得できるのでしょうか?
該当のソースコード
hook.phpの内容です。
PHP
1<?php 2// Load composer 3require __DIR__ . '/vendor/autoload.php'; 4 5$bot_api_key = '****'; 6$bot_username = '****'; 7 8/* ログを出力 */ 9//ファイルを指定 10$log = './error.log'; 11// 時刻を指定 12$log_time = date('Y-m-d H:i:s'); 13 14try { 15 16 // Create Telegram API object 17 $telegram = new Longman\TelegramBot\Telegram($bot_api_key, $bot_username); 18 19 error_log('['.$log_time.']'."メッセージ取得前".PHP_EOL, 3, $log); 20 21 //エラーが起きる部分 22 $message = $this->getMessage(); 23 $chat_id = $message->getChat()->getId(); 24 $data = []; 25 $data['chat_id'] = $chat_id; 26 $data['text'] = 'This is just a Test...'; 27 // Longman\TelegramBot\Request::sendMessage($data); 28 29 error_log('['.$log_time.']'."メッセージ内容:".$message.PHP_EOL, 3, $log); 30 31 error_log('['.$log_time.']'."メッセージ取得".PHP_EOL, 3, $log); 32 33 // Handle telegram webhook request 34 $telegram->handle(); 35 36}catch (Exception $e){ 37 error_log('['.$log_time.']'."Exception".PHP_EOL, 3, $log); 38}finally{ 39 error_log('['.$log_time.']'."finally".PHP_EOL, 3, $log); 40}
出力結果
このように、tryの途中でExceptionにもいかずになぜかfinallyに飛んでいます。
[2020-06-29 16:41:09]メッセージ取得前 [2020-06-29 16:41:09]finally
試したこと
set.phpは何も変更せず、そのままコピーしています。
PHP
1<?php 2/** 3 * README 4 * This file is intended to set the webhook. 5 * Uncommented parameters must be filled 6 */ 7 8// Load composer 9require_once __DIR__ . '/vendor/autoload.php'; 10 11// Add you bot's API key and name 12$bot_api_key = '****'; 13$bot_username = '****'; 14 15// Define the URL to your hook.php file 16$hook_url = 'https://*********.ssl-lolipop.jp/telegrambot/hook.php'; 17 18try { 19 // Create Telegram API object 20 $telegram = new Longman\TelegramBot\Telegram($bot_api_key, $bot_username); 21 22 // Set webhook 23 $result = $telegram->setWebhook($hook_url); 24 25 // To use a self-signed certificate, use this line instead 26 //$result = $telegram->setWebhook($hook_url, ['certificate' => $certificate_path]); 27 28 if ($result->isOk()) { 29 echo $result->getDescription(); 30 } 31} catch (Longman\TelegramBot\Exception\TelegramException $e) { 32 echo $e->getMessage(); 33}
補足情報(FW/ツールのバージョンなど)
PHP5.5, ロリポップ(スタンダードプラン)を使用しています。
$this->getMessage()でエラーが起きているが、それをcatchできていないことは理解しています。
(catchできないのは別問題として)issuesの議論から、この$thisを何に置き換えれば良いかを理解することができませんでした。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。