【PHP】LINE Messaging APIのオウム返しBOTを簡単に解説する

#本題の趣旨

今回はLINEBOTを作るにあたり、個人的に最初に知っておきたかったなあと思った内容を簡単に解説していきます。LINEBOT初心者を対象にしています。読んでいただける分にはどなたでも大歓迎です。

尚、本記事では以下の記事を参照にして、オウム返しBOTを作ったということを前提に進めていきます。

参考記事：[【PHP】LINE Messaging APIをつかってオウム返し BOT つくってみた](https://qiita.com/at_1016/items/9f97dc1c561182c18182)

それではいきましょう！

#目次

１．webhook.phpの中身は？
２．チャンネルアクセストークンとチャンネルシークレット
３．イベントオブジェクトのタイプ
４．メッセージタイプ
５．応答する
６．まとめ

#１．webhook.phpの中身は？

webhook.phpのデフォルトがこれ↓

```php: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([
                        'replyToken' => $event['replyToken'],
                        'messages' => [
                            [
                                'type' => 'text',
                                'text' => $message['text']
                            ]
                        ]
                    ]);
                    break;
                default:
                    error_log('Unsupported message type: ' . $message['type']);
                    break;
            }
            break;
        default:
            error_log('Unsupported event type: ' . $event['type']);
            break;
    }
};
```

#２．チャンネルアクセストークンとチャンネルシークレット

```php:webhook.php
$channelAccessToken = '<your channel access token>';
$channelSecret = '<your channel secret>';
```
これがないとLINEBOTは動きません。ちなみに僕は、小なり大なり(<>)の中にトークンとシークレットを書いていたため、返信が返ってこないという失態を犯しました。皆さんはくれぐれも<>抜きで書いてくださいね！知り合いも同じミスをしていたので、最初はあるあるミスなのかもしれません。
もし、git等に完成したコードを挙げたい場合は、トークンとシークレットは別ファイルに書き、そのファイルを読み込む形にしましょう！

#３．イベントオブジェクトのタイプ

```php:webhook.php
switch ($event['type']) {
    case 'message':
        $message = $event['message'];
```
$event['type']は、いくつか種類がありますが、messageタイプを使います。
>メッセージイベント：ユーザーがメッセージを送信したことを示すイベントです。このイベントには応答できます。(公式より)

メッセージイベントは**ユーザーが送信したメッセージに関すること**なんだなあという感じに思っておいてください。

#４．メッセージタイプ

```php:webhook.php
 $message = $event['message'];
     switch ($message['type']) {
         case 'text':
```
$messageはイベントオブジェクトのメッセージタイプになります。メッセージタイプにはいくつか種類があって、**text, location, image, video**等があります。今回はテキストのオウム返しをBOTを作るのでタイプは**text**です。他のタイプもつける場合はcaseを追加すれば可能です。

case 'text'; 
は「**メッセージタイプがtextの場合（ユーザーがtextデータを送ってきた場合）**」という意味のコードですね。

#５．応答する

```php:webhook.php
 $client->replyMessage(array(
     'replyToken' => $event['replyToken'],
     'messages' => array(
          array(
              'type' => 'text',
              'text' => $message['text']
          )
     )
 ));
```
上記が応答に関するコードとなります。
慣れてきたら色々と機能を追加すると思いますが、これが基本形になるので、少し心の隅に留めておいてください。
テキストで応答したい場合は、**messages中のtextのみを編集するだけ**でいいです。らくちんですね。

$message['text']は何かというと**ユーザーが送信したテキスト**です。つまり、「**ユーザーが送信したテキストをそのまま返すよ**」というコードになっています。オウム返しの場合は編集不要ですね。もし違う言葉を返してみたい！と思ったら、$message['text']を任意のテキストに変えてみてください。

その他応答のタイプを変更すると、テキスト以外でも応答できたりします。とりあえずはtextをマスターしましょう！

#６．まとめ

**①チャンネルアクセストークンとチャンネルシークレットはマスト。記述間違えのないようにしよう。**
**②イベントオブジェクトのタイプはメッセージを使う。メッセージイベントはユーザーが送信したメッセージを表す。**
**③メッセージタイプはtextを使う。タイプは他にもいくつか種類がある。**
**④replyMessagesメソッドを使い、オウム返しの場合はユーザーが送信したテキストをそのまま書き、応答する。**


LINEBOT超入門ですが、これからBOTを作る時の手助けになれば幸いです！

以上初投稿でした！