Google Apps ScriptでLINE BOTつくったら30分で動かせた件

GWだし前々から作ろうと思ってたLINE botをつくってみた。

## サーバーどうしよ
ちょっと前まではherokuが定番だったが、無料枠のできることが変わって、常時稼働ができないみたい。
AWSのlambdaとかもありだけど、確実に無料なやつないかな、ないよな…

## あんじゃん
先人の知恵を漁っていたらGoogle Apps Script(以下GAS)なら無料でサーバーレスできるだとっ！
GASも前々から気になっていたので、使ってみよう。

[Line BotをGoogle App Scriptで無料で手軽に試してみる。](https://qiita.com/osamu1203/items/0de2909821a1b3cbb350)

## 必要なもの
- Googleアカウント
- LINE developersアカウント
- JavaScriptへの愛

## LINE developers設定
LINEのbotなので、LINE developersで必要な登録と設定を済ませましょう。
この辺りはだいぶ前に登録だけしていたので割愛します。
こちらのリンクが参考になります。
[LINEのBot開発 超入門（前編） ゼロから応答ができるまで](https://qiita.com/nkjm/items/38808bbc97d6927837cd)

## GASでコーディング
LINEの設定が終わったら、GASでコーディングしていきましょう。
Google Driveにログイン後、Googleスプレッドシートを選択。
<img width="343" alt="スクリーンショット 2018-04-28 16.16.51.png" src="https://qiita-image-store.s3.amazonaws.com/0/194498/8a908188-8c78-b556-f2d1-918c952ee22d.png">

スプレッドシートを開いたら、拡張機能タブからApps Scriptを選択。
(直接開く方法もありますが、今回はこっちでつくりました。)
![スクリーンショット 2023-04-04 10.32.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/194498/1eaf340c-e17b-9ca7-0723-b76c76fb66c5.png)

そしたらエディタが開くのでここにbotの中身をガリガリ書いていきましょう。
![スクリーンショット 2023-04-04 10.33.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/194498/0c07ff4c-3b61-551b-e64a-df192ddbc8e8.png)

```javascript:bot.js
function doPost(e) {
  // LINE developersのMessaging API設定に記載のチャネルアクセストークン
  const ACCESS_TOKEN = '<Your Access Token>';
  // リクエストに含まれる最新のメッセージデータ
  const latestEvent = JSON.parse(e.postData.contents).events[0];
  // WebHookで受信した応答用Token
  const replyToken = latestEvent.replyToken;
  // ユーザーのメッセージを取得
  const userMessage = latestEvent.message.text;
  // 応答メッセージ用のAPI URL
  const url = 'https://api.line.me/v2/bot/message/reply';
  
  // 応答メッセージ
  UrlFetchApp.fetch(url, {
    'headers': {
      'Content-Type': 'application/json; charset=UTF-8',
      'Authorization': 'Bearer ' + ACCESS_TOKEN,
    },
    'method': 'post',
    'payload': JSON.stringify({
      'replyToken': replyToken,
      'messages': [{
        'type': 'text',
        'text': userMessage + 'ンゴ',
      }],
    }),
    });
  return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON);
}
```
#### コーディング参考リンク
[LINE公式 APIリファレンス](https://developers.line.biz/ja/reference/messaging-api/#send-reply-message)
[Google Apps Scriptリファレンス](https://developers.google.com/apps-script/guides/web?hl=ja)


## Webサービスとして公開
コーディングも終わったら、右上のデプロイボタンからこのスクリプトをデプロイし、ウェブアプリケーションとして公開しましょう。
Webアプリ化する作業も簡単なのがいいですね。

![スクリーンショット 2023-04-04 10.21.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/194498/2707c199-9c29-6484-5925-fc6c2a436035.png)

アクセスできるユーザーは「**全員**」としないとLINEからアクセスできないので注意しましょう。

![デプロイ設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/194498/296d7865-ee1b-faf5-f52e-ab399d45c56c.png)

![デプロイURL.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/194498/ad0c55c5-dfc5-85a1-82db-6ddd8ead3efa.png)

上記でウェブアプリの発行されたURLをLINE DevelopersのMessaging API設定内のWebhook URLに登録して完成です！

![Webhook設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/194498/e0c9864c-7cfe-8e03-bc3c-14871ef111bc.png)


## 動作確認
さっそくbotを友達登録して、LINEで話しかけてみましょう。

今回はユーザーが話しかけた言葉の語尾に「ンゴ」をつけるように設定しています。
<img width="397" alt="スクリーンショット 2018-04-28 16.54.36.png" src="https://qiita-image-store.s3.amazonaws.com/0/194498/83dc7cc3-bc51-ad30-552f-1866272132d7.png">

無事動作していますね！

## 簡単なLINE botはGASで
30分程度で実装できたので正直感動しました。
今回のbotのつくりだと実はメッセージにしか反応できないので、スタンプに対してはうまく返せないなどコードの改良点はまだまだありますが、遊ぶには十分かと。

いいね。GAS。