PHPを使ってサクッとLINEのMessaging APIを動かす方法

コラム 技術・エンジニア向け

26

「PHPを使ってサクッとLINEのMessaging APIを動かす方法」のイメージ画像

こんにちは。
エンジニアの藤巻です。

今回はPHPを使ってサクッとLINEのMessaging APIを動かす方法を紹介します。

LINE Messaging API

2016年4月からLINEのBotを自由に開発できる「LINE BOT API Trial Account」が提供されていましたが、2016年9月に「Messaging API」として正式にリリースされました。

トライアルアカウントの頃は1:1のテキストのやり取りしかできませんでしたが、正式リリースされてからはよりリッチなメッセージ送信にも対応しました。 また、グループチャットへの対応やSDKの公開などより本格的に開発できるようになっています。

今回はサクッとMessaging APIで追加されたテキストタイプを確認するためのBotを作って見ようと思います。

開発手順

LINE@MANAGERの設定

LINE Business Centerへログイン

LINE Botを作成するにはLINE Business Centerへログインし、事業者アカウントを作成し、さらにBot用アカウントを作成する必要があります。
まずはLINE Business Centerへログインします。

01.png

「Messaging APIを始める」と「Developer Trialを始める」の2つのボタンが表示されますが、この2つの違いは以下になります。

Messaging API Developer Trial
友達数 無制限 50人
Push API ×
メッセージ配信 1000通まで 無制限

今回はお試し実装なので機能制限のない「Developer Trial」を選択します。

次のページでLINEアカウントでログインし、本人確認が完了すればLINE Business Centerへログインできます。

事業者アカウントを作成

続いて、事業者アカウントの登録をします。
事業者アカウントと言っていますが、個人としても登録できます。
ログイン後画面の「会社/事業者を追加する」ボタンから登録画面へ移動できます。

02.png

Bot用アカウント作成

事業者アカウントの作成が完了したら、作成した事業者アカウントをクリックし、Bot用アカウント作成画面へ移動します。 そこで今回作成するBotの画像と名前、業種を登録します。

03.png

今回はテストっぽい画像と、Trial TestというBot名で作成します。
業種は雰囲気で大丈夫です。

作成が完了したら、完了画面の下部にある「LINE@MANAGERへ」を押してBot設定画面へ移動しましょう。

Bot設定

Bot設定画面へ移動したら、種々の設定をしていきます。

04.png

最初はAPIを利用しない設定になっているので、「APIを利用する」ボタンを押してAPIを利用する設定にします。 機能が使えなくなりますという旨のメッセージが表示されますが、特に利用する予定もないので「確認する」を押します。

API利用が可能になると、さらに設定画面がでてきます。

05.png

ここで「Webhook送信」は後に用意するサーバへメッセージを送信してほしいので利用するを選択してください。 その他の項目は今回は触れないので使用しないにしておきます。

以上でLINE@MANAGERでの設定は完了です!

LINE Developersの設定

続いてAPIの設定を行うためにLINE Developersの設定を進めます。
LINE DevelopersへはBot設定のステータスから移動できます。

06.png

まずはQRコードを使ってこのBotを自分のLINEの友達に追加しておきましょう。

LINE DevelopersではプログラムからAPIを利用するためのアクセストークンとメッセージを受け取るプログラムを指定するWebhook URLを設定します。

07.png

まずはChannel Access Tokenの項目の「ISSUE」ボタンをクリックし、Access Tokenを表示します。
これは後ほど使いますので控えておいてください。

次に一番下にある「Edit」ボタンをクリックし、編集画面へ移動します。
Webhook URLが編集できるのでここに今回用意するcallback用のプログラムを指定します。
ここで注意が必要なのですが、Webhook URLにはhttpsしか指定できません。SSLを使用できるサーバを用意できる場合はそのURLを指定してください。
今回はherokuを利用しますので、herokuで作成するアプリのURLを指定します。

https://line-messaging-api-trial.herokuapp.com/callback.php

これでLINE Developersの設定は完了です。
続いてAPIを利用するためのプログラムを作成し、herokuへデプロイします。

サーバ側実装

herokuアカウントの準備

今回はherokuを利用しますので、アカウントを持っていない人は新たに作成してください。

アカウントを作成したらプログラム設置用のアプリをheroku上に作成します。
「Create new app」からアプリ作成画面へ移動し作成します。

08.png

私はここで「App Name」にさきほどのWebhook URLのドメインとなる`line-messaging-api-trial`を設定しましたが、ここはユニークなものにならなければいけないので適宜名前を変えて登録してください。

プログラムの作成

長い設定を終え、やっとプログラム作成の段階まできました。
Messaging APIはドキュメントが充実していますので、ドキュメントを参考にしながら以下のようなプログラムを作成してみました。
webhookに送られてくるメッセージに応じてレスポンスを決めて返すだけの簡単なプログラムです。

<?php

$accessToken = 'Line Developersで発行したアクセストークン';

$jsonString = file_get_contents('php://input');
error_log($jsonString);
$jsonObj = json_decode($jsonString);

$message = $jsonObj->{"events"}[0]->{"message"};
$replyToken = $jsonObj->{"events"}[0]->{"replyToken"};

// 送られてきたメッセージの中身からレスポンスのタイプを選択
if ($message->{"text"} == '確認') {
    // 確認ダイアログタイプ
    $messageData = [
        'type' => 'template',
        'altText' => '確認ダイアログ',
        'template' => [
            'type' => 'confirm',
            'text' => '元気ですかー?',
            'actions' => [
                [
                    'type' => 'message',
                    'label' => '元気です',
                    'text' => '元気です'
                ],
                [
                    'type' => 'message',
                    'label' => 'まあまあです',
                    'text' => 'まあまあです'
                ],
            ]
        ]
    ];
} elseif ($message->{"text"} == 'ボタン') {
    // ボタンタイプ
    $messageData = [
        'type' => 'template',
        'altText' => 'ボタン',
        'template' => [
            'type' => 'buttons',
            'title' => 'タイトルです',
            'text' => '選択してね',
            'actions' => [
                [
                    'type' => 'postback',
                    'label' => 'webhookにpost送信',
                    'data' => 'value'
                ],
                [
                    'type' => 'uri',
                    'label' => 'googleへ移動',
                    'uri' => 'https://google.com'
                ]
            ]
        ]
    ];
} elseif ($message->{"text"} == 'カルーセル') {
    // カルーセルタイプ
    $messageData = [
        'type' => 'template',
        'altText' => 'カルーセル',
        'template' => [
            'type' => 'carousel',
            'columns' => [
                [
                    'title' => 'カルーセル1',
                    'text' => 'カルーセル1です',
                    'actions' => [
                        [
                            'type' => 'postback',
                            'label' => 'webhookにpost送信',
                            'data' => 'value'
                        ],
                        [
                            'type' => 'uri',
                            'label' => '美容の口コミ広場を見る',
                            'uri' => 'http://clinic.e-kuchikomi.info/'
                        ]
                    ]
                ],
                [
                    'title' => 'カルーセル2',
                    'text' => 'カルーセル2です',
                    'actions' => [
                        [
                            'type' => 'postback',
                            'label' => 'webhookにpost送信',
                            'data' => 'value'
                        ],
                        [
                            'type' => 'uri',
                            'label' => '女美会を見る',
                            'uri' => 'https://jobikai.com/'
                        ]
                    ]
                ],
            ]
        ]
    ];
} else {
    // それ以外は送られてきたテキストをオウム返し
    $messageData = [
        'type' => 'text',
        'text' => $message->{"text"}
    ];
}

$response = [
    'replyToken' => $replyToken,
    'messages' => [$messageData]
];
error_log(json_encode($response));

$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);

適宜 error_log() でデータを出力しておくと、herokuを使っている場合以下のコマンドでデバックがはかどります。

heroku logs -t

herokuへデプロイ

さて、プログラムを作成したので先程作成したherokuのアプリへデプロイします。
まずはデプロイするためのディレクトリを用意し、以下のような構成にします。

line-messaging-api-trial
├ index.php
└ callback.php

index.phpがないと怒られたので、空で用意しました。
callback.phpは先程のプログラムが記述されています。

上記構成のディレクトリを作成したらあとはheroku上に記載されている手順に沿ってデプロイします。

09.png

ここまできたら、LINEから作成したBotに対してメッセージを送信してみましょう!

10.png11.png

「確認」「ボタン」「ダイアログ」という言葉に応じて、想定したレスポンスが返ってきました!
それ以外はオウム返しで返ってきていますね。

まとめ

設定画面を行き来したりと少しややこしかったですが、比較的簡単にBotを作成することができました!
サーバでメッセージを受け取った後に、別のAPIを組み合わせて近所のランチを探したり天気予報なども簡単にできそうですね。

Bot開発は開発環境の準備もほぼ必要ないのでお手軽に試せます。
それでは楽しいBotライフを!

藤巻 亮介 アプリケーションエンジニア

記事を書いたメンバー
藤巻 亮介 アプリケーションエンジニア

26

この記事が良いと思ったらLIKE(☆)のクリックをお願いします!

クインテットは共に働く仲間を募集しています!

私達は正しい志と確かな技術を持った企業が正当に評価される社会を作っていきます。
この考えに共感して頂ける方からのご応募お待ちしております。

エントリーフォーム