LoginSignup
3
2

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-03-28

目的

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

作成したBOTとリポジトリ

こちらから友達追加ができます.
https://lin.ee/eNVEud5
M.png  友だち追加
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の設定

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

home.PNG

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

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

channel_secret.PNG

アクセストークンの発行

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

channel_acces_token.PNG

アカウント機能の編集

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

kinou.PNG

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

kinou2.PNG

Webhookの設定

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

webhook.PNG

そのページにある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記事も初めての投稿なので,また一つ経験ができたので,今後も書いていきたいと思います.重ねて記事に不備等があれば,編集リクエストお願いします.

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2