44
42

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【PHP】LINE Messaging APIをつかってオウム返し BOT つくってみた

Last updated at Posted at 2018-03-25

つくりたいもの

オウム返し.PNG

Messaging APIをつかって、こんなふうに自分がメッセージを送ったら
その内容をオウム返ししてくるBOTをつくってみようとおもいます!

Messaging APIの仕組み

Messaging APIを使うと、ボットアプリのサーバーとLINEプラットフォームの間でデータを交換できます。ユーザーがボットにメッセージを送るとwebhookがトリガーされ、LINEプラットフォームからボットアプリのサーバーのwebhook URLにリクエストが送信されます。すると、ボットアプリのサーバーからLINEプラットフォームに、ユーザーへの応答リクエストが送信されます。リクエストは、JSON形式でHTTPSを使って送信されます。
引用:Messaging API - LINE Developers

MessagingAPI仕組み.png

webhookがわからなかったのでこちらでお勉強させていただきました:bow_tone1:
https://qiita.com/soarflat/items/ed970f6dc59b2ab76169

準備するもの

  1. LINEアカウント(今回はもっているものとして進めていきます)
  2. Messaging API
  3. ボットアプリのサーバ(Heroku)

Messaging API

1. LINE Developersへアクセスし、「Messaging API(ボット)を始める」でアカウントをつくる

LINE Developers.png

2. 個人のLINEアカウントのメールアドレス・パスワードでログイン

3. 開発者登録

開発者登録.png

名前とメールアドレスを入力し、登録完了です!

4. プロバイダを作成

プロバイダ.png

5. チャネルを作成

チャネル.png

プラン

調べてみたところ、Developer Trialとフリーの大きな違いとしては以下の通りでした。

プラン.png

どちらも無料のプランですが、
・Developer Trialは友達登録が50人まで
・フリーはPush API(ボットからの自発的なメッセージ送信)ができない
とそれぞれ制限があります。

今回は友達は50人登録できれば十分なので、Developer Trialを選択しました。

その他プランなど詳しい情報はこちらをご覧ください:information_desk_person_tone1:
LINE@プラン・料金

大業種・小業種

 ファッションについての情報を発信するならばファッション、
 食べ物についての情報を発信するのであればグルメ・食料品 など
 かなりざっくり決めてしまっていいようです!
 わたしは芸人が好きなのでとりあえず有名人・コメディアンにしました。


入力をすべて終え、確認をおすと作成したチャネルを確認することができます。

確認.png

つくられています!
ですが、「設定が完了していません」とあります...クリックしましょう。

メッセージ送受信設定.png

・アクセストークン:再発行
・Webhook送信:利用する
・自動応答メッセージ:利用しない
と設定してください。

Webhook URLにはボットアプリのサーバのURLがはいるのでまだ空欄で大丈夫です。
いったんこちらはこのままで、次にボットアプリのサーバを用意していきます。

ボットアプリのサーバ(Heroku)

Herokuを利用してボットアプリのサーバを用意します。

Herokuとは?

heroku(ヘロク)とは、PaaS(Platform as a Service)と呼ばれるサービスで、アプリケーションを実行するためのプラットフォームです。もう少しわかりやすく説明すると、サーバやOS、データベースなどの「プラットフォーム」と呼ばれる部分を、インターネット越しに使えるようにしてくれるサービスの一つです。
引用:【5分でわかる】herokuとは?概要や特徴をわかりやすく解説

1. Herokuのアカウント作成

アカウントをまだ持っていない方はこちらから作成してください!

2.サーバ(アプリ)を作成

サーバ.png

「Create New App」をクリックし、アプリ作成画面へ移動します。

CreateNewApp.png

「App Name」はさきほどのWebhook URLのドメインとなります。
わたしはlinebot0325と設定しましたが、ここはユニークなものにならなければいけないので、違うものを登録してください。

アプリができたところで、次にプログラムを書いていきます。

3. Messaging API SDK for PHPをインストール

terminal
$ mkdir line-bot-sdk-php
$ cd line-bot-sdk-php
$ composer require linecorp/line-bot-sdk

4. 別のディレクトリを作成し、インストールしたSDKから必要なファイルのみ移動

今回必要となるファイルは以下の2つです。
line-bot-sdk-tiny/echo_bot.php
line-bot-sdk-tiny/LINEBotTiny.php

terminal
$ cd ..
$ mkdir linebot0325
$ mv line-bot-sdk-php/vendor/linecorp/line-bot-sdk/line-bot-sdk-tiny/echo_bot.php linebot0325
$ mv line-bot-sdk-php/vendor/linecorp/line-bot-sdk/line-bot-sdk-tiny/LINEBotTiny.php linebot0325

5. 空のindex.phpファイルを作成

index.phpがないと怒られてしまうようなので、空のファイルを作成しておきます。

terminal
$ cd linebot0325
$ vi index.php

lsコマンドできちんと移動・作成できているか確認してみましょう!

terminal
$ cd linebot0325
$ ls

6. echo_bot.phpのファイル名をwebhook.phpへ変更し、内容も一部書きかえる

terminal
$ mv echo_bot.php webhook.php
$ vi webhook.php

viコマンドではなく、テキストエディタでひらいて変更でも問題ありません。

webhook.php
<?php
/**
 * Copyright 2016 LINE Corporation
 *
 * LINE Corporation licenses this file to you under the Apache License,
 * version 2.0 (the "License"); you may not use this file except in compliance
 * with the License. You may obtain a copy of the License at:
 *
 *   https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations
 * under the License.
 */
require_once('./LINEBotTiny.php');
$channelAccessToken = '<your channel access token>';
$channelSecret = '<your channel secret>';
$client = new LINEBotTiny($channelAccessToken, $channelSecret);
foreach ($client->parseEvents() as $event) {
    switch ($event['type']) {
        case 'message':
            $message = $event['message'];
            switch ($message['type']) {
                case 'text':
                    $client->replyMessage(array(
                        'replyToken' => $event['replyToken'],
                        'messages' => array(
                            array(
                                'type' => 'text',
                                'text' => $message['text']
                            )
                        )
                    ));
                    break;
                default:
                    error_log("Unsupporeted message type: " . $message['type']);
                    break;
            }
            break;
        default:
            error_log("Unsupporeted event type: " . $event['type']);
            break;
    }
};

?>

変更するべきところは18, 19行目です!

webhook.php変更点
$channelAccessToken = '<your channel access token>';
$channelSecret = '<your channel secret>';

<your channel access token>はチャネルをつくったときに再発行したアクセストークンに、
<your channel secret>は同じくチャネルの基本設定にあるChannel Secretに
それぞれかきかえます。

これで送ったメッセージに対しオウム返ししてくるプログラムは完成です:confetti_ball:
あとはHerokuにデプロイしていきます。

$ heroku login

gitのリポジトリを新たに作成する

$ cd linebot0325
$ git init

Herokuの接続先を変更する

$ heroku git:remote -a linebot0325

ディレクトリ配下のすべてのファイルをコミットの対象とする。

$ git add .

コミット・プッシュする

$ git commit -am "make it better"
$ git push heroku master

これにてデプロイも完了です!

最後に空欄にしてあったチャネル基本設定の「Webhook URL」を
https://<アプリ名>.herokuapp.com/webhook.php
と設定すればアカウントが動いてくれるはずです!

さっそく友達登録をして試してみましょう!

謎.png

接続確認でこのようなエラーがでているのにもかかわらず、BOTはしっかりと動いてくれているという・・・
今日は体力と頭の限界なので後日調査し追記したいと思います:sob:

最後に

ある記事に「わずか5分で」とかかれていたため、気軽な気持ちでやってみましたが、
わたしでは実装2時間+この記事作成22時間、計24時間かかってしまいました:baby:

ですがやっぱり手軽にBOTをつくれるというのは楽しく、
もっといろんな仕様のBOTをつくってみたくなりました!

アドバイス、指摘事項などいただけるとうれしいです:bow:

44
42
1

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
44
42

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?