続、LINEのMessaging APIを使うメモ:PHP-SDKでbotをつくるぞ
はっきりいって説明不要というか、よくできたSDKがあるのでそれをつかえば完成します。
Tokenを取得
から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のエラーがでたら一つ前のエントリをみてみてください)
こちらからは以上です。