5
4

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 3 years have passed since last update.

gomidashi_woman.png

作ろうと思った背景

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

やったこと

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

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

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

1.LINEdevelopersに登録
2.コンソールからプロバイダを新規作成
3.メッセージングAPIを作成。この際に設定するチャンネル名がbotのアカウント名になります。
4.メッセージングAPI設定において、グループチャットを有効、自動返信を無効、メッセージの自動返信設定から、webhookを有効に設定。
5.Webhook settingsの、Webhook URLに、スクリプトのURLを入力(スクリプト作成後に発行)
①デプロイから、新しいデプロイを選択
②ウェブアプリとしてデプロイ
③URLをコピー
④Webhook settingsの、Webhookにコピー、実行。
スクリーンショット 2021-01-25 1.08.56.png
スクリーンショット 2021-01-25 1.09.16.png
スクリーンショット 2021-01-25 1.09.56.png

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

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

今回はプログラマーとして初めて親の役に立つものを作った話(LINEbot)この方の記事を参考にさせていただきました。

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の取得

/*
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』の取得方法この記事を参考にさせていただきました。
上記記事で取得したグループidをto=""のなかにセット。

var to = "C....";

4.テスト

グループid、トークン、スクリプトのURL入力を確認したら、GASの時計マークを選択し、スクリプトが発動するタイミングを決定します。それできちんとbotが動くことを確認したらOK!
スクリーンショット 2021-01-25 1.32.14.png

結果

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

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

この辺を改めて確認してみてください。
IMG_7634.jpg
実家ではよくゴミ捨て問題で親と妹が揉めていたので、botを導入できてとても喜んでいただけました😊
実装していて難しいと感じたポイントはグループidの取得ぐらいです。
linebotを使用する上でのグループidや、その他もろもろについてはリファレンスに記載されていますので、ぜひ読んでいただくと理解が深まると思います!
最後まで読んでいただきありがとうございます😊

参考記事

Messaging APIの概要

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

5
4
0

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
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?