Q&A

Webhookに設定したURLに対してリクエストが送られない

前提・実現したいこと

  • 元々設定していたWebhookURLから新しいURLに変更した
  • 新しいURLでVerifyはsuccessしている
  • MessagingAPIで提供されているWebhookURL疎通確認用APIでの通信も成功している 

発生している問題・エラーメッセージ

  • LINE上で設定したイベント(メニューの画像押下時にWebhookURLに対してイベント名が送信される)が発火しない
  • サーバのアクセスログを見てみるとそもそもLINE側からのPostが来ていない

試したこと

  • WebhookURLを変更したので、反映に時間がかかっているのかと思い時間を置いたが状況変わらず
  • 0
  • 6
  • 1117
  • twitter facebook

Kokiさん

LINEのプラットフォームに不具合があることは考えられないので、そう考えるとあなたの実装にも原因があるかもしれないので載せてほしいです。全部を載せる必要はなく、できる範囲で構いません。

イベント受信時の処理は以下のような感じです。

try {
	// リクエスト取得
	$request = file_get_contents('php://input');

	// コンテンツ取得
	$events = $this->line_service->parseEvent($request);

	// イベントごとに処理を切り分け
	foreach ($events as $event) {
			switch ($event['type']) {
					case 'follow':
							// フォロー時に行う処理
							break;
					case 'unfollow':
							// フォロー外す時に行う処理
							break;
					case 'message':
							// メッセージ受信時に行う処理
							break;
					default:
							break;
			}
	};
} catch (\Exception $e) {
	// エラーハンドリング
}

リクエストからイベントオブジェクトをパースする処理はサービス化しており、以下のような感じです。

if (empty($_SERVER['HTTP_X_LINE_SIGNATURE'])) {
		throw new \Exception();
}

if (strlen($entityBody) === 0) {
		throw new \Exception();
}

if (!hash_equals($this->sign($entityBody), $_SERVER['HTTP_X_LINE_SIGNATURE'])) {
		throw new \Exception();
}

$data = json_decode($entityBody, true);
if (!isset($data['events'])) {
		throw new \Exception();
}

return $data['events'];

追加で、このLINE上で設定したイベントって何のことですか?単純にメッセージを送信することじゃないんですか?

すみません、リッチメニューのことです。 メニュー押下時にそれぞれのメニューに対応したテキストがサーバに送られ、処理を分岐しています。

  • 0

ksytさん 情報提供ありがとうございます。 参考にさせていただきます。

  • 0

そもそもアクセスログが来ていないことからソースコードの問題ではないと思っているのですが何か関係ありそうでしょうか...?

LINEのプラットフォームに不具合があることは考えられないので、そう考えるとあなたの実装にも原因があるかもしれないので載せてほしいです。全部を載せる必要はなく、できる範囲で構いません。

LINE上で設定したイベント(メニューの画像押下時にWebhookURLに対してイベント名が送信される)が発火しない サーバのアクセスログを見てみるとそもそもLINE側からのPostが来ていない

追加で、このLINE上で設定したイベントって何のことですか?単純にメッセージを送信することじゃないんですか?

  • 0

情報が少なく再現ができませんが、 https://github.com/line/line-bot-sdk-php を動かしてみて比較してみると良いかもしれません!

  • 0

Kokiさん

ありがとうございます。 Verifyを行った時のアクセスログは確認出来ております。 以下のような感じですね。

10.0.11.144 - - [23/Nov/2021:14:07:20 +0000] "POST Webhookに設定したURLパス HTTP/1.1" 200 33 "-" "LineBotWebhook/2.0"

以下質問への対応です。

Webhookサーバーのソースコードを追記してほしいです。 そもそもアクセスログが来ていないことからソースコードの問題ではないと思っているのですが何か関係ありそうでしょうか...?

Webhookサーバーは何を使っているのかも合わせて追記してもらえると助かります ・AmazonLinux2 ・Laravel 6.2 ・Apache 2.4 ・PHP 7.3 で構成しています。

  • 0

Verifyを行ったときにもサーバーのアクセスログにLINE側からのPOSTが来ているはずですが、それは確認しましたか? あと、送っていただいた質問だけだと原因がわからないので、以下の対応をお願いします。 ・Webhookサーバーのソースコードを追記してほしいです。 ・Webhookサーバーは何を使っているのかも合わせて追記してもらえると助かります

  • 0

Similar posts

    No similar posts

Are you sure? question.vm