1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LINE Notifyが終了するのでゴミ出しbotをLINE Messaging APIに乗り換えた話

Last updated at Posted at 2025-03-23

はじめに

私が運営するシェアハウスではLINE Notify + IFTTT + gasで作ったゴミ出しbotを使っていました。

スクリーンショット 2025-03-23 13.51.05.png

しかしながら、LINE Notifyが2025年3月末で終了するとのことで、、、

今まで使ってたゴミ出しbotが使えなくなる!

これはやばい!ということで公式でも推奨されていたLINE Messaging APIを使った方法に乗り換えたお話です。

ゴミ出し通知を出すためのgasのソースコードは、ほぼそのまま使えます!
設定を色々と触るだけでできました:raised_hands:

用語について

LINEのAPIや公式アカウントを使って開発しようとすると、難しい用語がたくさん出てきますw
LINE NotifyとIFTTTで実装していた頃は公式アカウントを使っていなかったので難しい用語は出てきませんでしたが、このあと色々と難しい用語が出てきます。

特に「プロバイダー」と「チャネル」が最初はよくわからないと思います。

イメージとしてはこちらです。

スクリーンショット 2025-03-23 14.15.33.png

「プロバイダー」がの下に紐付くのが「チャネル」であり、「チャネル」は各種LINE APIで使える機能たち、という感じでしょうか!

これらの関係性を意識して、この先を読み進めると理解がしやすいかなと思います!

LINE公式アカウントを作る

LINE公式アカウントの作り方は色々なところで解説されていると思うので、詳細な手順についてはここでは省きます。
重要なところをピックアップします。

まずはLINE Official Account Managerにログイン
https://manager.line.biz/

LINE Messaging APIを有効化

👆を参考にLINE Messaging APIを有効化します。

LINE公式アカウントのデフォルト設定を変える

設定 > アカウント設定 > 機能の利用

「グループ・複数人トークへの参加を許可する」を選択
スクリーンショット 2025-03-23 14.22.41.png
これを設定しないと、グループに公式LINEを招待しても参加できない。

設定 > 応答設定 > Webhook
LINEプラットフォームからWebhook URLにWebhookイベントを送信するようにする。
スクリーンショット 2025-03-23 14.27.31.png

LINEグループIDの特定

まずはゴミ出し通知を出したいLINEグループに、作ったLINE公式アカウントを入れましょう。

そしてBOTが自ら発信をするためには、LINEのグループを特定する必要があるそうです。
LINEグループIDを取得するため、GASで取得を行います。

参考にする手順はこちら

基本的に👆の通りにすればLINEグループIDの特定はできます。
注意点としては以下2つ

ACCESS_TOKEN

// LINE developers記載のアクセストークン
var ACCESS_TOKEN = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';

この部分のACCESS_TOKEN

LINE Developersのコンソール > プロバイダーを選択 > Messaging APIチャネルを選択 > Messaging API > Channel access token

から取得します。

スクリーンショット 2025-03-23 14.56.16.png

アクセスできるユーザーは「全員」

gasでウェブアプリとしてデプロイする際に、アクセスできるユーザーは「全員」にしましょう。
スクリーンショット 2025-03-18 18.51.02.png
もし「全員」が選択肢になかった場合、Google Driveの中からスプシを作るのではなく、スプレッドシートから作ってみましょう。
スクリーンショット 2025-03-23 14.49.24.png

これでグループ内に何か発言するとLINEグループIDが返ってきます!

スクリーンショット 2025-03-23 15.11.26.png

今のままでは無限に返信してくるので、IDがわかったらgasのコードを消してまたデプロイしましょう。
デプロイしたら、その度にデプロイURLをLINE DevelopersのWebhook URLに置き換えましょう。

スクリーンショット 2025-03-23 15.15.57.png

スクリーンショット 2025-03-23 15.23.41.png

gasを実装する

ではgasを実装していきましょう!
LINE Notifyの頃に使っていたコードをほぼそのまま使い回しています。

const ACCESS_TOKEN = 'xxxxxx'; // LINE developers記載のアクセストークン
const GROUP_ID = 'xxxxxx'; // 取得したLINEグループのID

function getDayAndCount(date) {
  return { day: date.getDay(), count: Math.floor((date.getDate() - 1) / 7) + 1 };
}

function mondayFunction() {
  var content = "月曜日は資源ゴミの日です!\n";
  content += "\n資源ごみは瓶缶ダンボールです。\n外に置いときましょう!";
  content = sameMessage(content);
  
  sendLineMessage(content);
}

function tuesdayFunction() {
  var content = "火曜日は燃やすゴミの日です!\n";
  content += "燃やせるやつを捨てましょう!燃えるゴミは朝8時までです。\n庭にあるデカいゴミ箱も確認して出してね( ^ω^ )";

  sendLineMessage(content);
}

function wednesdayFunction() {
  var content = "";
  let dt = new Date();

  dt.setDate(dt.getDate() + 1);

  let day = getDayAndCount(dt);
  if (day.count == 5) {
    content += "今日は第五週目の水曜日なのでゴミ出ししなくていいよ!ありがとう!\n";
  } else if (day.count == 1 || day.count == 3) {
    content += "第一第三水曜は不燃ごみの日です!不要なガラクタを出しましょう!\n";
    content = sameMessage(content);
  } else if (day.count == 2 || day.count == 4) {
    content += "第二第四水曜はペットボトルのゴミの日です!よく溜まってるから頑張って!!\n";
    content = sameMessage(content);
  } else {
    return;
  }

  sendLineMessage(content);
}

function fridayFunction() {
  var content = "金曜日は燃やすゴミの日です!\n";
  content += "\n土日が来るから頑張って捨てよう!全部燃やし尽くすよ!!!\n庭にあるデカいゴミ箱も確認して出してね( ^ω^ )";

  sendLineMessage(content);
}

function sameMessage(message) {
  message += '近くにいる人にも声を掛けて、みんなで協力して捨てに行きましょう!一人だと大変なのよ( ;∀;)';
  return message;
}

function sendLineMessage(message) {
  const url = 'https://api.line.me/v2/bot/message/push';
  const headers = {
    "Content-Type": "application/json",
    "Authorization": "Bearer " + LINE_CHANNEL_ACCESS_TOKEN
  };

  const payload = {
    to: GROUP_ID,
    messages: [{ type: "text", text: message }]
  };

  const options = {
    method: 'post',
    headers: headers,
    payload: JSON.stringify(payload)
  };

  UrlFetchApp.fetch(url, options);
}

スクリプトをデプロイしたらトリガーを設定します。
スクリーンショット 2025-03-23 17.33.23.png

実行したい関数を週ベースのタイマーで設定します。

スクリーンショット 2025-03-23 17.34.52.png

スクリーンショット 2025-03-23 17.39.59.png

設定した時間に公式LINEから通知が来ました!!!
これで完成!

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?