herokuとPHPでオウム返しlinebotを作る(Windows10)


目的

目的は,LINEでオウム返しをするBOTを作ること.
※当方はPHPを含め初心者であるため,内容についてのミス等あればぜひご指摘頂きたいです.

作成したBOTとリポジトリ

こちらから友達追加ができます.
https://lin.ee/eNVEud5
  
Githubのリポジトリ:https://github.com/rintaro9147/linebot20200328

準備

  1. herokuの登録!
  2. LINE BOTの登録!プロバイダーを作成し,Messaging APIのチャネルを作る.詳しくは後述.
  3. phpとcomposerをインストール!(このへんは省略)
  4. 正常にインストールできたか,バージョンの確認をする.
heroku -v
php -v
composer -v

composerは,ヘルプとともにでかでかとCOMPOSERと表示されます.

また,gitのアカウントは登録しているものとして進めます.

オウム返しのphpの準備

アカウントを登録後,ubuntsuでログインします.コマンドを打つとブラウザに遷移するので,ログインボタンをポチる.

$ heroku login

次にherokuのアプリケーションを作ります.適当なアプリ名をつけてください.使えない場合,エラーとなるので,ほかのものを試してください.

heroku create <アプリ名>
Creating  <アプリ名>... done
https://<アプリ名>.herokuapp.com/ | https://git.heroku.com/<アプリ名>.git

以下のコマンドを順に打ってください.フォルダ,phpファイルを作成して,とりあえずデプロイしておきます.

$ mkdir linebot
$ cd linebot
$ touch index.php
$ git init
$ git commit -m "make it better"
$ git push heroku master

続いて,composerでLINE-BOT-SDKを導入していきます.

$ composer require linecorp/line-bot-sdk

これでlsコマンドを打つと,中にvenderファイルなどができると思います.

次はLINE BOTの設定です!こっちはそこまで難しくありません!

LINE BOTの設定

ここからコンソール画面にアクセスし,作ったプロバイダとチャネルをクリックしていくと,この画面にたどり着きます.

チャネルシークレットの発行

その画面の下のほうに,チャネルシークレットとあるので,横の発行ボタンを押して,テキストファイルか何かにコピペして控えておきましょう.

アクセストークンの発行

次に,「Messaging API設定」タブに移動し,一番下のチャネルアクセストークンを発行します.同様に控えましょう.

アカウント機能の編集

次に,すぐ上のアカウント機能の編集を行います.下2つのどちらかの編集をクリックします.

そうしたら,以下のようにしてください.

Webhookの設定

最後にすぐうえにあるwebhook設定です.https://<アプリ名>.herokuapp.com/index.phpと入力します.index.phpの部分はなくても良し.webhookの利用をONにして,検証ボタンを押してください.成功と表示されたらOKです.

そのページにあるQRで自分のスマホで友達追加をしておきましょう.
LINE側の設定は以上です.

phpファイルの記述

index.php
<?php
require_once __DIR__ . '/vendor/autoload.php';

$httpClient = new \LINE\LINEBot\HTTPClient\CurlHTTPClient(getenv('CHANNEL_ACCESS_TOKEN'));
$bot = new \LINE\LINEBot($httpClient, ['channelSecret' => getenv('CHANNEL_SECRET')]);
$sign = $_SERVER["HTTP_" . \LINE\LINEBot\Constant\HTTPHeader::LINE_SIGNATURE];
$events = $bot->parseEventRequest(file_get_contents('php://input'), $sign);

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

記述したら,前と同じ方法でデプロイしましょう.

環境変数の設定

最後に控えておいたアクセストークンとアクセスシークレットの設定です.これをやらないとherokuとLINEがやり取りできません.cmdを開いて,以下のコマンドを入力してください.

$heroku config:set CHANNEL_ACCESS_TOKEN="控えたアクセストークンをコピペ" -a <アプリ名>
$heroku config:set CHANNEL_SECRET="控えたチャネルシークレット" -a <アプリ名>
$heroku config

最後のコマンドで正しく入力されたか確認してください.

参考にした記事

 参考にしたQiita記事をここに記します.感謝いたします.

  1. Herokuにデプロイするまでに使うコマンド
  2. git push heroku master がエラーを吐く
  3. PHPで作成したLINEBOTをHerokuで動かしてみた

結果

目的通り,オウム返しするbotを作ることができました!

考察

  • 最初だけオウム返しが遅い → 解明中
  • git add .をしたとき,warning: LF will be replaced by CRLF inがたくさん出た.→ここで解決した.ありがとうございます.
  • 先にindex.phpの中身を書いてデプロイすると,webhookの検証でエラーがでる.→空もしくはhello worldくらいのphpファイルを先にデプロイして検証すると,上手くいった.そのあとにindex.phpの中身を書く.先に中身を書いてしまうことが問題なのではなく,今回たまたまであって,ほかに要因がありそう.

最後に

初めてLINE BOTを作成したが,なんだかんだ作ることができてよかったです.また,Qiita記事も初めての投稿なので,また一つ経験ができたので,今後も書いていきたいと思います.重ねて記事に不備等があれば,編集リクエストお願いします.