LINE公式アカウントをWordPressで処理する方法

LINE公式アカウントでメッセージを送信する際、無料メッセージ枠が決められているそうですが、おそらくリプライAPIは無料で利用できるような記述が

課金対象となるメッセージについて

LINE公式アカウントではさまざまなメッセージ機能がありますが、すべてのメッセージ配信が課金対象としてカウントされるわけではありません。LINEチャットの送受信や自動応答メッセージなど、一部のメッセージ配信は無料で活用できます。

【カウントされるメッセージ】
・メッセージ配信(絞り込み配信,ステップ配信含む)
・Messaging APIの「Push API」「Multicast API」「Broadcast API」「Narrowcast API」

【カウントされないメッセージ】
・LINEチャットの送受信
・応答メッセージ
・あいさつメッセージ
・Messaging APIの「Reply API」

https://www.lycbiz.com/jp/service/line-official-account/plan/

大人しく「応答メッセージ」を使えば問題ないが、Webサイトを運営しているお店で、情報が変わった時にLINEにも反映させたい人もいるかもしれません。

  • 飲食店のメニュー替え(アレルギー情報)

  • アパレルのセール情報

  • その他イベントなど

下記のソースコードは受け取ったメッセージをそのままユーザーに送り返す機能だが、get_postsなどを利用すれば、サイトを更新するだけで公式ラインの返答も変更できます。

細かいカスタムは必要です。

function line() {
	if($_SERVER['HTTPS'] != "on") {
		http_response_code(403);
		return;
	}

	$line_webhook = 'LINEのWebhookに登録したURLを設定';
	$headers = array();
	foreach ($_SERVER as $key => $value) {
		if (substr($key, 0, 5) == 'HTTP_') {
			$header = str_replace(' ', '-', ucwords(str_replace('_', ' ', strtolower(substr($key, 5)))));
			$headers[$header] = $value;
		}
	}

	$request_body = file_get_contents('php://input');
	$line_secret = 'LINEのシークレットキーを設定';
	$hash = hash_hmac('sha256', $request_body, $line_secret, true);
	$calculated_signature = base64_encode($hash);
	$line_signature = isset($headers['X-Line-Signature']) ? $headers['X-Line-Signature'] : '';
	$data = json_decode($request_body, true);
	if ($calculated_signature === $line_signature) {
		foreach ($data['events'] as $event) {
			$user_text = $event['message']['text'];
			$user_token = $event['replyToken'];
		}
		$url = 'https://api.line.me/v2/bot/message/reply';
		$lineApiKey = 'LINEのアクセストークン';
		$headers = [
			'Content-Type: application/json',
			'Authorization: Bearer ' . $lineApiKey
		];
		
		$postData = json_encode([
			'replyToken' => $user_token,
			'messages' => [
				[
					'type' => 'text',
					'text' => 'あなたは「'.$user_text.'」と送信しましたね」'
				]
			]
		]);
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
		curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
		curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
		$result = curl_exec($ch);
		curl_close($ch);
	}
}

ここから先は

0字

メンバーシップ加入で、全ての記事が閲覧できます。