GASでLINEbot作ってみたよって話


![gomidashi_woman.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048570/04b2fa59-3f89-173a-fc94-a59a60cc2982.png)


## 作ろうと思った背景
- とりあえず何かしらのLINEbotを作りたかった。
- APIについての知識が浅いため、APIの技術に触れてみたかったため。
- ゴミの出しわすれが原因で家族がよく喧嘩するため、グループラインにゴミbotを入れることで少しでも喧嘩が減って欲しいと思ったため。

## やったこと
1.LINEbotを作成するために、LINEdevelopersを登録、設定
2.メッセージを送信するためのプログラムを作成
3.グループidの取得
4.テスト

### 1.LINEbotを作成するために、LINEdevelopersを登録、設定

初めてのLINEbot作成ということで、どこか難しいことを考えていたのですが、bot自体の作成は意外と簡単で、まずは

1.[LINEdevelopers](https://developers.line.biz/ja/)に登録
2.コンソールからプロバイダを新規作成
3.メッセージングAPIを作成。この際に設定するチャンネル名がbotのアカウント名になります。
4.メッセージングAPI設定において、グループチャットを有効、自動返信を無効、メッセージの自動返信設定から、webhookを有効に設定。
5.Webhook settingsの、Webhook URLに、スクリプトのURLを入力（スクリプト作成後に発行）
①デプロイから、新しいデプロイを選択
②ウェブアプリとしてデプロイ
③URLをコピー
④Webhook settingsの、Webhookにコピー、実行。
![スクリーンショット 2021-01-25 1.08.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048570/d02c06d7-ae0e-f824-3dd5-ae4084b0446e.png)
![スクリーンショット 2021-01-25 1.09.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048570/8ed47ee8-2e63-fa83-32a2-985f12c881e4.png)
![スクリーンショット 2021-01-25 1.09.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048570/89833145-f5e6-6096-2106-1e4c16b8c897.png)




これで基本的な設定は終了。QRからbotも追加できます★

### メッセージを送信するためのプログラムを作成

今回は[プログラマーとして初めて親の役に立つものを作った話(LINEbot)](https://qiita.com/enomotoakira/items/64bf4efeccc0248958f1)この方の記事を参考にさせていただきました。

```js
function notifyGarbageRemoval() {

  //urlはbotが一方的に送ってくるようにしたいので最後はpushになります。(返信用ならreply)
  var url = 'https://api.line.me/v2/bot/message/push';

  //botのチャネルトークンに関しては自分の作成したbotの管理画面のMessagingAPIの下の方にあります
  var channelToken = '?????......';
  const youbi = ["日","月","火","水","木","金","土"];
  var text = "";

  //後に下の方で説明させていただきます。
  var to = "C....";
  //Dateオブジェクト関連の処理の準備
  var date = new Date();
  date.setDate(date.getDate());
  var dayIndex = date.getDay();
  var day = ["日", "月", "火", "水", "木", "金", "土"];

  if (day[dayIndex] == "火" || day[dayIndex] == "金") {
    text += "今日は燃やすゴミの日";
  }
  
  if (day[dayIndex] == "水") {
    text += "今日は燃やさないゴミ/有害・危険ゴミの日";
  }
  
  if (day[dayIndex] == "木") {
    text += "今日は資源ごみの日";
  }
  
  var messages = [{
    'type': 'text',
    'text': text,
  }];

  //--ゴミ出しの日以外は送らない--//
  if ((day[dayIndex] == "火") || (day[dayIndex] == "金") || (day[dayIndex] == "水") || (day[dayIndex] == "木")){

    UrlFetchApp.fetch(url, {
      'headers': {
        'Content-Type': 'application/json; charset=UTF-8',
        'Authorization': 'Bearer ' + channelToken,
      },
      'method': 'post',
      'payload': JSON.stringify({
        "to" : to,
        'messages': messages,
      }),
    });
  }
}
```
### 3.グループidの取得

```js
/*
LINEで受信したレスポンスをスプレッドシートに書き込む
———————————–*/
function doPost(e) {
	/* スクリプトプロパティのオブジェクトを取得 */
	const prop = PropertiesService.getScriptProperties().getProperties();
	/* レスポンスを取得 */
	const response = e.postData.getDataAsString();;
	const spreadsheetId = "[シートIDを指定]"; // シートIDを指定
	const sheetName = "log"; // シート名を指定
	const spreadsheet = SpreadsheetApp.openById(spreadsheetId);
	const sheet = spreadsheet.getSheetByName(sheetName);
	/* スプレッドシートに書き込む */
	sheet.appendRow([new Date(), response]);
}
```

[【LINE BOT】GASで『userId』の取得方法](https://arukayies.com/gas/line_bot/get-userid)この記事を参考にさせていただきました。
上記記事で取得したグループidをto=""のなかにセット。

```js
var to = "C....";
```


### 4.テスト

グループid、トークン、スクリプトのURL入力を確認したら、GASの時計マークを選択し、スクリプトが発動するタイミングを決定します。それできちんとbotが動くことを確認したらOK！
![スクリーンショット 2021-01-25 1.32.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048570/0086d0f6-566a-1098-a99e-5e9f68cee802.png)

## 結果

ちゃんと設定した時間通りにbotがゴミの日を知らせてくれました！（テストの際は1分おきに設定）
もし動作がうまくいかなかった際は、

- トークン再発行。
- 新しくデプロイして、URLを更新する。
- グループidを確認する。
- メッセージングAPIの設定を再度確認してみる。

この辺を改めて確認してみてください。
![IMG_7634.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048570/ba500428-6886-5806-647c-8b09b7abc7f6.jpeg)
実家ではよくゴミ捨て問題で親と妹が揉めていたので、botを導入できてとても喜んでいただけました😊
実装していて難しいと感じたポイントはグループidの取得ぐらいです。
linebotを使用する上でのグループidや、その他もろもろについては[リファレンス](https://developers.line.biz/ja/reference/messaging-api/#common-properties)に記載されていますので、ぜひ読んでいただくと理解が深まると思います！
最後まで読んでいただきありがとうございます😊

## 参考記事

[Messaging APIの概要](https://developers.line.biz/ja/docs/messaging-api/overview/)

https://qiita.com/enomotoakira/items/64bf4efeccc0248958f1
https://arukayies.com/gas/line_bot/get-userid!