LINEの匿名チャットBOTを「Messaging API」で作成したよ!
以前、LINEで匿名チャットBOTを作成しようと思い、Qiitaのこの記事のソースをコピペしたらうまく動作しなかったという記事を書きました。
結局のところ動作しなかった原因は、Qiitaのmasuhajimeさんの記事にかかれていたソースは、「BOT API Trial Account」という既に終了したサービス用のソースで、現在(この記事を書いているのは2017年6月24日)LINEBOTを作るためのサービス「Messaging API」では動作しないという事だった訳ですが、このたび、その動作しなかった匿名チャットBOTのソースを、Amazonで購入した、
という本で勉強して、改造しましたので、ご紹介致します。
Message APIで操作する匿名チャットBOTのソースはこちらです!
<?php // Composerでインストールしたライブラリを一括読み込み require_once __DIR__ . '/vendor/autoload.php'; // アクセストークンを使いCurlHTTPClientをインスタンス化 $httpClient = new \LINE\LINEBot\HTTPClient\CurlHTTPClient(getenv('CHANNEL_ACCESS_TOKEN')); // CurlHTTPClientとシークレットを使いLINEBotをインスタンス化 $bot = new \LINE\LINEBot($httpClient, ['channelSecret' => getenv('CHANNEL_SECRET')]); // LINE Messaging APIがリクエストに付与した署名を取得 $signature = $_SERVER['HTTP_' . \LINE\LINEBot\Constant\HTTPHeader::LINE_SIGNATURE]; // 署名が正当かチェック。正当であればリクエストをパースし配列へ // 不正であれば例外の内容を出力 try { $events = $bot->parseEventRequest(file_get_contents('php://input'), $signature); } catch(\LINE\LINEBot\Exception\InvalidSignatureException $e) { error_log('parseEventRequest failed. InvalidSignatureException => '.var_export($e, true)); } catch(\LINE\LINEBot\Exception\UnknownEventTypeException $e) { error_log('parseEventRequest failed. UnknownEventTypeException => '.var_export($e, true)); } catch(\LINE\LINEBot\Exception\UnknownMessageTypeException $e) { error_log('parseEventRequest failed. UnknownMessageTypeException => '.var_export($e, true)); } catch(\LINE\LINEBot\Exception\InvalidEventRequestException $e) { error_log('parseEventRequest failed. InvalidEventRequestException => '.var_export($e, true)); } $midFile = __DIR__ . "/files/mids"; // midsの中身を読み込み $mids = explode(PHP_EOL, trim(file_get_contents($midFile))); // 配列に格納された各イベントをループで処理 foreach ($events as $event) { // テキストメッセージでなければ処理をスキップ if (!($event instanceof \LINE\LINEBot\Event\MessageEvent)) { error_log('Non message event has come'); continue; } // メッセージを送ってきたユーザーを取得 $newMids = array(); $newMids[] = $event->getUserId(); // 新規のユーザーの場合は追加 $mids = array_merge($newMids, $mids); $mids = array_unique($mids); file_put_contents($midFile, implode(",", $mids)); // メッセージを全登録ユーザーID宛にプッシュ foreach ($mids as $mid) { $response = $bot->pushMessage($mid, new \LINE\LINEBot\MessageBuilder\TextMessageBuilder($event->getText())); if (!$response->isSucceeded()) { error_log('Failed!'. $response->getHTTPStatus . ' ' . $response->getRawBody()); } } }
このソースを利用できるようになるまでの道のりも、全て、
に書かれていますので、匿名チャットBOTを作って自分も友人などと匿名チャットBOTで遊んでみたいという方で、かつ、上記のソースだけでは動作に至るまでいかないかたは、ご購入下さい。