IT系フリーランスの技術備忘録

日々の業務で学んだ事の覚書やフィードバックなど。たまに関係ない記事も。

LINEの匿名チャットBOTを「Messaging API」で作成したよ!

以前、LINEで匿名チャットBOTを作成しようと思い、Qiitaのこの記事のソースをコピペしたらうまく動作しなかったという記事を書きました。

microsoftcream87.hateblo.jp


結局のところ動作しなかった原因は、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で遊んでみたいという方で、かつ、上記のソースだけでは動作に至るまでいかないかたは、ご購入下さい。