lighthouse.log

lighthouse.log

PHPでLINEのMessaging APIを使ってメッセージを送る

2018-03-17

はじめに

PHP で Messaging API を動かすサンプルを紹介したいと思います。

※ LINE@MANAGER の設定については、あとで追記します!

Messaging API の説明

ユーザー、グループ、またはトークルームからのイベントに対して応答メッセージを送信する API です!

イベントが発生すると webhook を使って通知され、応答できるイベントには応答トークンが発行されるそうです。

注意点

  • 応答トークンは一定の期間が経過すると無効になるため、メッセージを受信したらすぐに応答を返す必要があります。
  • 応答トークンは 1 回のみ使用できます。

メッセージオブジェクト

以下は、送信するメッセージの内容を表す JSON オブジェクトです。

  • テキスト
  • 画像
  • 動画
  • 音声
  • 位置情報
  • スタンプ
  • イメージマップ
  • テンプレート

この中で「テンプレートメッセージ」を見てみましょう!

テンプレートメッセージ

テンプレートメッセージは、あらかじめレイアウトが定義されたテンプレートをカスタマイズして構築するメッセージです。

事前定義されたレイアウトが用意されており、よりリッチなユーザー体験の提供に役立ちます。

らしいです。また、以下のタイプのテンプレートを利用できます。

  • ボタン
  • 確認
  • カルーセル
  • 画像カルーセル

さっそく触ってみましょう!

画像カルーセルテンプレート

複数の画像を表示するテンプレートです。画像は横にスクロールして順番に表示できます。

以下のような感じです!

image 1

サンプルコード

sample.php
<?php
$replyToken = <Webhookで受信する応答トークン>
$accessToken = <アクセストークン>

$messageData = [
    "type" => "template",
    "altText" => "this is a image carousel template",
    "template" => [
        "type" => "image_carousel",
        "columns" => [
            [
                "imageUrl" => "https://example.com/bot/images/item1.jpg",
                "action" => [
                    "type" => "postback",
                    "label" => "Buy",
                    "data" => "action=buy&itemid=111"
                ]
            ],
            [
                "imageUrl" => "https://example.com/bot/images/item2.jpg",
                "action" => [
                    "type" => "message",
                    "label" => "Yes",
                    "text" => "yes"
                ]
            ],
            [
                "imageUrl" => "https://example.com/bot/images/item3.jpg",
                "action" => [
                  "type" => "uri",
                  "label" => "View detail",
                  "uri" => "http://example.com/page/222"
                ]
            ]
        ]
    ]
];

$response = [
    'replyToken' => $replyToken,
    'messages' => [$messageData]
];

error_log(print_r($response, true));

$ch = curl_init('https://api.line.me/v2/bot/message/reply');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($response));
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json; charser=UTF-8',
    'Authorization: Bearer ' . $accessToken
));

$result = curl_exec($ch);
error_log($result);
curl_close($ch);

上のサンプルコードを実行すると、以下のような感じでメッセージ届く!!

image 2

以上!