Googleアカウントだけで始めるLINEbot(Google Apps Script編)

#この記事を書いた人
COBOLで昔ながらのシステムを開発保守するお仕事をしています。

そのため、
Webの知識はありません。
Web開発の経験もありません。
書いてあることは参考程度にしてください。

なにか間違っていたらご指摘ください。
がんばって直します。

#背景
LINEでメッセージを送信したり、受信内容に応じた返信をしたりできるAPI([LINE Messaging API](https://devdocs.line.me/ja/#messaging-api))が2016年9月末に公開されました。
[LINE Developer Trial](https://business.line.me/ja/services/bot)に登録することで、個人でも無料で開発を行うことができるようになりました。


#やりたいこと
LINEbotを作りたい。
初心者がつまづきがちな環境構築をせずに（実際にはするけど非常に簡単）、
とりあえず動くモノを作りたい。

Googleが提供している言語「GoogleAppsScript」を使うことによって、
Webアプリの公開・プログラミング環境の構築が容易に行えます。
（GoogleAppsScriptはJavaScriptをベースにした開発言語なんだそうです）

まず、一番簡素な例として、
「どんなメッセージに対しても固定のメッセージを返す」ような機能を実現します。

#必要なもの
- Googleのアカウント
    - Googleドライブ上にアプリケーション等を保存します。
- LINEのアカウント
    - 普段使っているアカウントがあればよいです。
- 時間（１時間くらい？）
    - ぼくの場合は諸々の登録～動作確認までで１時間ほどでした。

#準備

- Googleアカウント登録
    - 説明しません。適当に登録してください。
- LINEアカウント登録
    - 説明しません。適当に登録してください。
- LINE Developer Trialの登録
    - https://business.line.me/ja/services/bot
    - 「Messaging APIを始める」から適当に登録してください。
- LINE@ MANAGERの設定
    - アカウント選択 => アカウント設定 => Bot設定 で、次のように変更してください。
        - Webhook送信：利用する
        - Botのグループトーク参加：利用しない
        - 自動応答メッセージ：利用しない
        - 友だち追加時あいさつ：（どっちでもいいです）
- LINE developersの設定
    - QRコードを読み込んで友達になっておく
    - Channel Access Token => ISSUE で発行された文字列をメモ（あとでコードに貼り付けます）

#さぁ、開発を始めましょう

#実現したい機能
- 利用者から見た機能
    - LINEbotになにかしらを送ると、LINEbotから固定メッセージが返ってくる
- 開発者から見た機能
    - 利用者からなにかしらが送られてくると、利用者に固定メッセージを返す

具体的には固定メッセージを「へんじがない。ただの　しかばね　のようだ。」としましょう。
![image](https://qiita-image-store.s3.amazonaws.com/0/149257/91f3138f-4dd4-ee1c-9e5c-ef473d668ec3.png)

## アプリケーションを準備します。
Googleドライブ => 新規 => その他 => Google Apps Script
▼多分初回は選択肢にないので「アプリ追加」から「Google Apps Script」を追加します。
![image](https://qiita-image-store.s3.amazonaws.com/0/149257/4c807b10-93f4-577f-1772-29a31250c298.png)

コード.gsを以下のように書き換えます。

利用者のなにかしらのアクション（メッセージ送信とかスタンプ送信とか）をキッカケに、
「へんじがない。ただの　しかばね　のようだ。」とメッセージを送信する、という内容です。

```js:コード.gs
// xxx部分をChannel Access Token => ISSUE で発行された文字列に置き換える
var channel_access_token = "xxxxxxxxxxxxxxxxxxxxxxxxxxxx"; 

function doPost(e) {
  var posted_json = JSON.parse(e.postData.contents);
  var events = posted_json.events;
  events.forEach(function(event) {
    var postData = {
      "replyToken" : event.replyToken,
      "messages" : [
        {
          "type" : "text",
          "text" : "へんじがない。ただの　しかばね　のようだ。"
        }
      ]
    };
    var options = {
      "method" : "post",
      "headers" : {
        "Content-Type" : "application/json",
        "Authorization" : "Bearer " + channel_access_token
      },
      "payload" : JSON.stringify(postData)
    };
    var reply = UrlFetchApp.fetch("https://api.line.me/v2/bot/message/reply", options);
  });
};

```
- ファイルを保存する
    - ファイル => 保存
- アプリケーションを公開する
    - 公開 => ウェブ アプリケーションの導入
        - プロジェクト バージョン：新規作成
            - 更新したいときも「新規作成」を選択
        - 次のユーザーとしてアプリケーションを実行:自分
        - アプリケーションにアクセスできるユーザー：全員（匿名ユーザーを含む）
        - [導入]
        - 現在のウェブ アプリケーションの URL:メモする

## botとアプリケーションを連携します。

LINE developers => Basic information => Webhook URL
にさきほどメモしたURLを入力します。
[VERIFY]を押下して"Success"と表示されることを確認します。
※"Success"と表示されない場合、「アプリケーションにアクセスできるユーザー」や「現在のウェブ アプリケーションの URL」を確認してみてください。

## botにメッセージを送信してみます。

返ってきたら成功です。

お疲れさまでした。

# 拡充する機能

やる気があったら更新します。

- 返信内容の変更
    - オウム返しします。
    - 特定キーワードへの個別応答をします。
    - ランダムに返信します。
- ログの取得
    - Googleスプレッドシートに保存します。
- ユーザプロフィールの取得
    - Googleスプレッドシートに保存します。
- 送信されたコンテンツの取得（画像・動画・音声）
    - Googleドライブに保存します。
- 送信された位置情報から周辺地図画像の作成(GoogleMap)
    - 作成された周辺地図画像をGoogleドライブに保存します。
- URLの短縮(GoogleUrlShortener)
    - URLが送信されてきたら、URLを短縮して返信します。
- 簡単な数式の計算
    - 数式が送信されてきたら、Googleスプレッドシートに計算させて結果を返信します。


# 参考リンク
- [LINE Messaging API](https://devdocs.line.me/ja/#messaging-api)
    - 公式のリファレンスです。
- [Line BotをGoogle App Scriptで無料で手軽に試してみる。](http://qiita.com/osamu1203/items/0de2909821a1b3cbb350)
    - 旧APIでの開発です。
- [Google Apps Scriptを使ってLINE Messaging APIでオウム返しをする](http://qiita.com/nogizakaJinro/items/e2a178c1cb7a0699a80f)
    - この記事を参考にはじめました。ありがとうございます。