uzullaがブログ

uzullaがブログです。

続、LINEのMessaging APIを使うメモ:PHP-SDKでbotをつくるぞ

はっきりいって説明不要というか、よくできたSDKがあるのでそれをつかえば完成します。

github.com

Tokenを取得

LINE Developers

からchannel secret, channel tokenを取得します。

(なんかちがうアカウントがでてきてしまう…などの場合は前日のエントリを参照)

SDKをDLしてComposerする

$ mkdir my_bot
$ cd my_bot
$ php composer.phar require linecorp/line-bot-sdk
$ mkdir wwwroot
$ cd wwwroot

とかします。

最低限このような雑なコードを書きます

(たとえば)wwwroot以下に、自分がLINEに登録したcallback URLになるようにファイルを設置します。

(くわしくは前日のエントリをみてください)

<?php // callback.php
define("LINE_MESSAGING_API_CHANNEL_SECRET", 'your channel secret');
define("LINE_MESSAGING_API_CHANNEL_TOKEN", 'your channel token');

require __DIR__."/../vendor/autoload.php";

$bot = new \LINE\LINEBot(
    new \LINE\LINEBot\HTTPClient\CurlHTTPClient(LINE_MESSAGING_API_CHANNEL_TOKEN),
    ['channelSecret' => LINE_MESSAGING_API_CHANNEL_SECRET]
);

$signature = $_SERVER["HTTP_".\LINE\LINEBot\Constant\HTTPHeader::LINE_SIGNATURE];
$body = file_get_contents("php://input");

$events = $bot->parseEventRequest($body, $signature);

foreach ($events as $event) {
    if ($event instanceof \LINE\LINEBot\Event\MessageEvent\TextMessage) {
        $reply_token = $event->getReplyToken();
        $text = $event->getText();
        $bot->replyText($reply_token, $text);
    }
}

echo "OK";

このコードは色々とエラー処理を端折っていますが、何を返しても向こう側はなにかしてくれるわけでもないのでここでは省略します。

SDKのexample以下のKitchenSinkをみればあらゆるものがあります。

line-bot-sdk-php/Route.php at master · line/line-bot-sdk-php · GitHub

SDKのサンプルは非常にちゃんとしてますので、受け取り方、メッセージの組み立て、大体全部の例があります、すごい。このエントリでなくそちらをまねましょう。実際の所、僕も上のコードは結構端折っており、実際にはそっちをマネてます。

これで完成です

botにはなしかけると、おうむがえしします。

            $text = $event->getText();
            $bot->replyText($reply_token, $text);

ここらへんかきかえると、自由に返事のテキストを組み立てできます。

オウム返しされない場合、エラーログなどをみてみましょう。多分なんかおかしいのでしょう。

まとめ

よくできたSDKなので説明することがありません。 サンプルがよくできすぎてるので、雑に書きなおしただけな気がします。

なお、PHP5.6以上が必要なので、気を付けましょう。

余談

当方はAzure App ServiceというPaaSがイケてるし安いので、PHP7がつかえるのでそれでやりました。

(その場合、curlの罠があるので、SSLのエラーがでたら一つ前のエントリをみてみてください)

uzulla.hateblo.jp

こちらからは以上です。