LINE Notifyの代替方法として、LINE Messaging APIを利用して、LINEグループに送る。

# はじめに

LINE Notifyは、2025年3月31日にサービスが終了する。
通知を送る代替方法として、LINE公式アカウントからメッセージを送信できるLINE Messaging APIを利用する。
LINE Messaging API: https://developers.line.biz/ja/services/messaging-api/
Messaging APIの料金: https://developers.line.biz/ja/docs/messaging-api/overview/#line-official-account-plan

毎月200メッセージまで無料なので、4人グループに送ると仮定すると、月50回のメッセージ送信まで無料の計算。無料枠で、使える場面も多い。

自分だけに送るのであれば、以下の記事の通り、ブロードキャストでよい。
https://qiita.com/jksoft/items/4d57a9282a56c38d0a9c

今回は、グループに送るための方法で、グループIDを取得するプロセスがある。グループIDを含めてプッシュメッセージで送る。

# 全体の流れのイメージ
1. LINE Official Account Managerで公式アカウントを作成し、LINE Messaging APIをLINE Developerで設定する。
2. LINEグループを作って、先ほどの公式アカウントを招待してグループに入れる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/cbd621fc-115b-beb4-2498-fcfff95db90c.png)




3.LINEグループ内で、自分（本人）から任意のメッセージを送信することで
グループIDを取得する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/4246d70f-658b-71f1-2c66-2baf1d4ee77d.png)

4.M5ATOM LiteまたはGoogle Apps Scriptから、CHANNEL ACCESS TOKENとグループIDを含めたデータをプッシュメッセージすることで、LINEグループにメッセージを送る。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/654d0eff-03cb-45cd-91a7-d40d1d1e7be7.png)


# LINE Official Account Managerで公式アカウントを作成し、LINE Messaging APIをLINE Developerで設定する。
## LINE MessagingAPIから公式アカウントを作成する。

LINE Official Account Manager　https://manager.line.biz/
に、「LINEアカウントでログイン」でログインする。

作成ボタンを押す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/af83000d-087b-ddc2-4805-b807d83c3625.png)

記入欄に記入し、確認ボタンを押す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/3e69d593-2647-b494-874d-3d9b5aab1e85.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/8ad9b39e-1d46-9d47-6763-149646c4c77c.png)

確認ボタンを押す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/d9b3fc32-5165-7eeb-cd36-62effdf3d90e.png)

LINE Official Account Managerボタンを押す。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/b74492b8-290b-3f6c-d2d4-214b21752e04.png)



同意ボタンを押す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/f01e8d8b-2e0d-fb69-6605-117980f94c98.png)

同意ボタンを押す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/4c36cbdf-d1fe-a169-6b9e-37fdc66cdc6b.png)

次へボタンを押す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/2101e453-217a-787d-d0cf-382a232b031d.png)

ホーム画面に移動
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/2dde1dc2-f3ff-f44e-7ee4-4c794d6524c8.png)

右上の設定ボタンを押す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/c2b5d4af-78d3-4904-1b1d-bc4947b95314.png)

アカウント設定画面から
「グループ・複数トークへの参加を許可する」に変更

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/1e2f3db7-0a02-e9f6-5f66-6dd59c50fc64.png)

応答設定画面から
応答メッセージをOFFにする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/e9ece72c-affa-dfa6-72d5-f947bd50854b.png)

Messaging APIを利用するボタンを押す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/e7064c9e-7dc3-00ee-ad64-50046594d9eb.png)

プロバイダーを選択する。
プロバイダーを作成するか、既存のプロバイダーを選ぶかのどちらか。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/c3658509-f40f-68de-16a9-1185152fb288.png)

プライバシーポリシーと利用規約は空白でも大丈夫。
OKボタンを押す。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/ae7d8ea2-fe0b-53c7-b2bd-8b8fb53978ff.png)

OKボタンを押す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/a62fc79f-a15a-6e5f-4528-822420f075f0.png)

## LINE Messaging APIをLINE Developerで設定する。
LINE Developersのリンクをクリックして、LINE Developersに移動する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/466963f3-a263-faa7-fc6a-6a01966fc65e.png)

LINE Developersのトップページの右上のコンソールをクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/1b4359d0-99f0-d6b1-c851-1a0fd2952e78.png)

該当するプロバイダーのadminボタンを押す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/3b694464-22a3-786f-42cc-66f2f5f1f9dd.png)

該当する公式アカウントをクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/62e2025b-ea4c-e468-3b4b-745c092a15e4.png)

Messaging API設定タブをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/2342fc8f-cff8-a858-994d-8e30150356ed.png)


Messaging API設定の下にあるチャネルアクセストークン（長期）の発行ボタンを押す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/ab748686-3ca6-ba3f-4d45-1bfb913f0581.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/1373dc22-7d8d-b6b4-368d-5bbd53913337.png)

チャネルアクセストークンが発行された後に、
チャネルアクセストークンをコピーする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/108a1205-f510-63c4-4738-1db4cec88cf1.png)


ここでLINE Developersの中の操作はここまで。でも、ブラウザーは閉じずにおいておく。GASのデプロイ後のウェブURLを、LINE Developersのwebhookに設定する操作を、後に、行います。

# LINEグループを作って、先ほどの公式アカウントを招待してグループに入れる。

LINEグループを作り、先ほど作成・設定した公式アカウントを招待する。
グループの作成法は以下の公式LINEのページを参照して作ってください。「友だちを選択する」の画面では、先ほど作成・設定した公式アカウントを招待してください。

https://guide.line.me/ja/friends-and-groups/create-groups.html

# LINEグループ内で、自分（本人）から任意のメッセージを送信することでグループIDを取得する。

## Google SpreadSheet & GASを準備する。

Google spreadsheetを新しく作成する。
Google Driveに移動する。
左上の「＋新規」ボタンを押して、spreadsheetを新規作成する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/c88cbf5f-2dfd-a4cd-627d-ddd834792c23.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/9e2d5395-9ed1-d32d-a988-26ef8eacbc51.png)

名前を変更（例：GetGroupID等）拡張機能-->Apps Scriptで
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/46ade591-786c-6e68-b9ed-5f6a46481317.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/dbc6255f-44b3-0d8c-0a53-cc03da147788.png)

名前を変更する（例：GetGroupID等）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/489c6aa5-13ac-7c10-72aa-d2fb0ff9bc97.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/f957205f-f541-9894-1085-fda2995bd3b6.png)

初期画面にデフォルトで入っているコードをdelete（消去）する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/13cf77f1-7a40-3d1f-58a9-3d78896e6e53.png)

以下のコードをコピーペーストする。
スプレッドシートの URL から取得できます。スプレッドシート名が変わっても、スプレッドシート ID は変わりません。
スプレッドシートIDは、以下のSPREADSHEET_IDの部分です。
`https://docs.google.com/spreadsheets/d/SPREADSHEET_ID/edit?gid=SHEET_ID#gid=SHEET_ID`
スプレッドシートID（SPREADSHEET_ID）の以下のコードのスプレッドシートIDの部分に入れてください。両端の ' は残します。

```javascript
function doPost(e) {
  var events = JSON.parse(e.postData.contents).events;
  events.forEach(function(event) {
    if (event.type === 'message' && event.source.type === 'group') {
      var groupId = event.source.groupId;

      // スプレッドシートに記録
      var sheet = SpreadsheetApp.openById('スプレッドシートID').getActiveSheet();
      sheet.appendRow([new Date(), groupId]);
    }
  });
  return ContentService.createTextOutput(JSON.stringify({ 'content': 'post received' }))
    .setMimeType(ContentService.MimeType.JSON);
}
//参考記事　　https://zenn.dev/mojakun/articles/5443f647e49998
```
を書いて、デプロイする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/e41c0e46-8665-6bb3-b268-debafb2759a0.png)


新しいデプロイ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/19676c71-5724-5bdb-6de1-54984c3d1547.png)

種類の選択ボタンを押して、ウェブアプリを選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/a02a3caa-be67-c60d-5ad1-3d4cf60f04cd.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/7069a5d6-ecd8-668f-9bd2-131b906fff86.png)

アクセスできるユーザーを「自分のみ」から「全員」に変更する。
その後、デプロイボタンを押す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/a3baba07-7fb9-4b64-de8f-848de4ab99cc.png)

アクセスを承認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/187bc6e2-77c0-8315-4be8-af93cc61bd01.png)

自分のGoogleアカウントをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/a39cd9b5-d17f-1038-5d67-e613c01ddd54.png)

advancedをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/576416df-9271-9dfc-dc33-ed66a31ef413.png)

Go to GetGroupID(unsafe)をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/4e697ef1-24cf-a7de-b75d-5faa04bfdd30.png)

Allowをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/ddfc5791-165b-8c01-0a66-b2cbcf55d0b4.png)



以下の画面が出たら、ウェブアプリURLをコピーして、メモ帳にペーストして保存する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/7eb948e9-fe4c-510f-5615-3e123037e561.png)


## LINE DevelopersでWebhookを設定する

LINE Developersのサイトに行き、MessagingAPI設定のタブ画面のWebhookについて設定する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/5a3ae525-ea11-d676-061b-40bc01faad68.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/4249588e-e140-7211-d11c-90019295f5df.png)

Google Apps Script（GAS）でデプロイして発行したウェブアプリURLを入力して、
更新ボタンを押す。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/97442007-7bfc-2263-0691-d4fd55782da2.png)

Wenhookの利用のボタンをONにする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/18aadd42-a2d1-cffe-fe0f-2703dcb03733.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/f0db02b0-c5dd-3df3-62b9-8956b7a39235.png)


LINE Official Account Managerに移る。
リロードボタンを押す。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/fd855c0a-0298-006b-b0f8-90947c314989.png)

リロードしたら、LINE Developersで入力設定したWebhookになるはず。確認し、保存ボタンを押す。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/0eee2b7c-965a-ffe7-ea18-1173ddc649a8.png)


## LINEグループからテストメッセージを送る

LINEグループからテストメッセージを送る
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/cc1ba523-3d46-9a5c-7f40-ec53468ce550.png)

## LINEグループIDの取得
LINEグループからテストメッセージを送ると　この公式アカウントが参加しているLINEグループのグループIDが、Google Spreadsheetに記入される。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/8364b38b-335d-b006-b3a6-dcd51a807c39.png)


グループIDが取得できたら、LINE developersのMessaging API設定の画面で、「Webhookの利用」
のスイッチをOFFにする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/ea7c5237-f9f5-0656-f4c9-bdb04391dda9.png)


# M5ATOM LiteまたはGoogle Apps Scriptから、CHANNEL ACCESS TOKENとグループIDを含めたデータをプッシュメッセージすることで、LINEグループにメッセージを送る。

## M5ATOM Liteから送る。

以下のスケッチをM5ATOM LiteにArduino IDEから書き込む。

https://qiita.com/jksoft/items/4d57a9282a56c38d0a9c
の記事をベースにグループID指定とPUSH送信に変更したスケッチです。

```cpp
#define CHANNEL_ACCESS_TOKEN "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

#include <M5Unified.h>
#include <WiFi.h>
#include <HTTPClient.h>

// Wi-FiのSSIDとパスワード
const char* ssid = "xxxxxxxxxxxxx";
const char* password = "xxxxxxxxxxxxxxxxx";

const char* authorization ="Bearer " CHANNEL_ACCESS_TOKEN;

// LINEグループID
const char* lineGroupID = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";

// LINE Messaging API PUSH通知で通知
void notify(char* message) {
  HTTPClient http;
  http.begin("https://api.line.me/v2/bot/message/push");
  http.addHeader("Content-Type", "application/json");
  http.addHeader("authorization", authorization);
  char body[256];
  sprintf(body,"{\"to\":\"%s\",\"messages\":[{\"type\": \"text\",\"text\":\"%s\"}]}", lineGroupID, message);
  http.POST(body);
  Serial.println(http.getString());
  http.end();
}


void setup() {
  auto cfg = M5.config();
  M5.begin(cfg);
  Serial.begin(115200);
  // Wi-Fi接続
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi...");
  }
  Serial.println("Connected to WiFi");
}


void loop() {
  M5.update();
  if (M5.BtnA.wasPressed()) {
  notify("ボタンが押された");
  }
}
```

LINEグループにメッセージ「ボタンが押された」が送られてきます。成功。

#### Microsoft Edge Copilotに教えてもらったスケッチ
Microsoft EdgeのCopilotに「ESP32を搭載したM5Stackから、LINE　Messaging APIを使って、LINEグループにPUSH通知するスケッチを教えてください」と聞いたところ、以下のスケッチを教えてくれました。若干改良したけれど、骨格は変更していません。Copilotは神。

```cpp
#include <M5Unified.h>
#include <WiFi.h>
#include <HTTPClient.h>

// Wi-FiのSSIDとパスワード
const char* ssid = "xxxxxxxxxxxxxxxxx";
const char* password = "xxxxxxxxxxxxxxxxx";

// LINE Messaging APIのチャネルアクセストークン
const char* lineAccessToken = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=";

// LINEグループID
const char* lineGroupID = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";

void sendLinePushNotification(const char* message) {
  if (WiFi.status() == WL_CONNECTED) {
    HTTPClient http;
    http.begin("https://api.line.me/v2/bot/message/push");
    // HTTPヘッダーの設定
    http.addHeader("Content-Type", "application/json");
    http.addHeader("Authorization", String("Bearer ") + lineAccessToken);
    // JSONペイロードの構築
    String payload = "{\"to\":\"" + String(lineGroupID) + "\",\"messages\":[{\"type\":\"text\",\"text\":\"" + String(message) + "\"}]}";
    // HTTP POSTリクエスト
    int httpResponseCode = http.POST(payload);
    // 応答の確認
    if (httpResponseCode > 0) {
      String response = http.getString();
      Serial.println(response);
    } else {
      Serial.println("Error sending notification: " + String(httpResponseCode));
    }
    // HTTP接続を終了
    http.end();
  } else {
    Serial.println("WiFi not connected");
  }
}

void setup() {
  auto cfg = M5.config();
  M5.begin(cfg);
  Serial.begin(115200);
  // Wi-Fi接続
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi...");
  }
  Serial.println("Connected to WiFi");
}

void loop() {
  M5.update();
  if (M5.BtnA.wasPressed()) {
  sendLinePushNotification("ボタンが押された");
  }
}
```

LINEグループにメッセージ「ボタンが押された」が送られてきます。成功。

## Google Apps Script（GAS）から送る。

プロジェクトの設定==>スクリプトプロパティの欄で、CHANNEL_ACCESS_TOKEN　とGROUP_ID　を設定してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/b913d1f8-8839-e84b-e863-a92a60e4a959.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/bf61a71b-2823-1d6e-0a7d-2055f2ef868c.png)

GASのエディタ部分に以下のスクリプトをコピーペーストして、

```javascript
const GROUP_ID = PropertiesService.getScriptProperties().getProperty('GROUP_ID');
const CHANNEL_ACCESS_TOKEN = PropertiesService.getScriptProperties().getProperty('CHANNEL_ACCESS_TOKEN');


function send_text_Message() {
  let message1 = "GASからLINEグループにPUSH通知するテスト。";
  sendMessage(message1);
}


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

  let postData = {
    "to": GROUP_ID,
    "messages": [{
      "type": "text",
      "text": message
    }]
  };

  let options = {
    "method" : "post",
    "headers": headers,
    "payload" : JSON.stringify(postData)
  };

  UrlFetchApp.fetch(url, options);
}
```

保存して、function send_text_Message() を実行する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/379dbd9e-90ee-16f9-859a-d95dc3c3ae01.png)

LINEグループにメッセージ「GASからLINEグループにPUSH通知するテスト。」が送られてきます。成功。


### LINE Messaging APIを利用して、LINEグループに送られてきた。
一つ目のスケッチを入れたATOMLite、２つ目のスケッチを入れたATOMLite、Google Apps Script（GAS）からのメッセージがLINEに送られてきた画面はこちら。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269534/4ff809cf-ac1e-54e8-802a-15cfc838e051.png)

# おわりに
LINE Notifyサービスが終了になるのはとても残念だけれど、月200メッセージ以内の用途だとLINE Messaging APIが無料で使えるので、今後もLINEに大切なメッセージは送りたい。頻繁に見ていて、一番気づきやすいアプリだと思うので。

### 参考にした記事

https://zenn.dev/mojakun/articles/5443f647e49998
https://qiita.com/jksoft/items/4d57a9282a56c38d0a9c