LINE Notify の終了に伴うLINE 公式アカウントへの切り替え
2024年11月、LINE Notify の提供が終了することが公式に発表されました。
これにより、通知機能を活用していた多くのシステムやアプリケーションで変更が必要になります。本記事では、LINE Notify の代替手段として「LINE 公式アカウント」を活用する方法を解説します。実際のコード例も交えながら、設定から実装までを紹介します。
LINE Notify の終了が意味すること
LINE Notify は、API を介して特定のLINEアカウントにメッセージを送信できるサービスです。この終了により、以下の影響があります。
1.通知の停止
LINE Notify を利用したシステムでは通知が行えなくなります。
2.代替手段の模索
公式アカウントのWebhookやMessaging API を利用した通知に移行する必要があります。
LINE 公式アカウントを活用した代替手段
LINE 公式アカウントを使えば、LINE Notify のように通知を送信する仕組みを構築できます。具体的には Messaging API を使用します。
実装:Google Apps Script を使った通知システム
必要な準備
1. LINE Developers コンソールでアカウント作成
・LINE Developers にログイン。
・チャネルを作成し、必要な設定を行う。
2. チャネルアクセストークンの取得
・チャネル設定画面で「チャネルアクセストークン」を発行します。
3. ユーザーIDの取得 (Webhook URL の設定)
・Webhookを受信するサーバーを準備し、そのURLを設定します。サンプルコードの下に詳細は記述しております。
4. Google ドライブで新規の Google Apps Script プロジェクトを作成します。
サンプルコード
// LINE公式アカウントのアクセストークン
const ACCESS_TOKEN = 'YOUR_CHANNEL_ACCESS_TOKEN';
/**
* LINEにメッセージを送信する関数
* @param {string} userId - 送信先のユーザーID
* @param {string} message - 送信するメッセージ
*/
function sendLineMessage(userId, message) {
const url = 'https://api.line.me/v2/bot/message/push';
const headers = {
'Content-Type': 'application/json',
Authorization: `Bearer ${ACCESS_TOKEN}`,
};
const payload = {
to: userId,
messages: [
{
type: 'text',
text: message,
},
],
};
const options = {
method: 'post',
headers: headers,
payload: JSON.stringify(payload),
};
try {
const response = UrlFetchApp.fetch(url, options);
Logger.log('Message sent successfully: ' + response.getContentText());
} catch (e) {
Logger.log('Error sending message: ' + e.message);
}
}
/**
* テスト実行用関数
* 任意のユーザーIDとメッセージを送信します。
*/
function testSendLineMessage() {
const userId = 'LINE_USER_ID'; // 送信先ユーザーIDを指定
const message = 'LINE公式アカウントからの通知です!';
sendLineMessage(userId, message);
}
動作確認
上記コードを実行するためには、それぞれの友達のLINE ID (グループごとに固有のID / Uから始まるもの)が必要です。このIDが結構厄介で、管理画面からは全く確認できないので、Webhook で スプレッドシートに記述するようにしました。
- ユーザーIDの取得
・ユーザーIDの取得は、webhookで行いました。
・LINE Developers コンソールで Webhook を設定し、ユーザーから公式アカウントにメッセージを送信してユーザーIDを取得します。
・LINE の Webhook の URLをGAS の URLに設定するといいです。 (https://script.google.com/macros/s/example/exec) #exampleは適宜書き換えてください。
・ユーザーがLINE公式アカウントへのともだち登録完了後に、本名またはニックネームなどを送ってもらうようにしました。
・その時に、Webhookを実行させそのグループのLINE IDをgoogle spread sheet に書き出すようにしました。
・ちなみに、友達登録完了のみだと、どれが誰だかわからないです。
function doPost(e) {
try {
const events = JSON.parse(e.postData.contents).events;
// スプレッドシートの「シート1」を取得
const targetSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート1");
for (let eventData of events) {
// 受信イベントデータから必要な項目を取得
const time = new Date(eventData.timestamp);
const eventType = eventData.type;
const messageType = eventData.message?.type || 'N/A'; // メッセージタイプがない場合のデフォルト
const messageText = eventData.message?.text || 'N/A'; // メッセージテキストがない場合のデフォルト
const userId = eventData.source?.userId || 'Unknown'; // userIdがない場合は 'Unknown' にする
// 最後の行のあとに追加
targetSheet.appendRow([time, eventType, userId, messageType, messageText, JSON.stringify(eventData)]);
}
// Webhookの成功応答
return ContentService.createTextOutput(JSON.stringify({status: 'success'}));
} catch (error) {
// エラーが発生した場合のログ出力
Logger.log('Error: ' + error);
// Webhookのエラーレスポンス
return ContentService.createTextOutput(JSON.stringify({status: 'error', message: error}));
}
}
LINE 公式アカウントには無料プランと有料プランがあります。このプログラムによって実行された通知はとりあえず、メッセージ件数としてみなされませんでしたので、無料でいける場合もありそうです。
この内容を基に、コードや手順を調整して具体化してみてください。必要に応じて詳しい技術的なポイントも追加可能です!
最後までお読みくださりありがとうございました。
よかったら「いいね」してもらえたら励みになります🙇♂️🙇♂️🙇♂️