3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

身の回りの困りごとを楽しく解決! by Works Human IntelligenceAdvent Calendar 2024

Day 16

⭐️LINE Notify終了のお知らせ😭 → Messaging API移行でイケてる通知システム作る✨

Last updated at Posted at 2024-12-15

🎀 Notifyが終了⁉️OMG〜😱

みんな大好きLINE Notifyが、サービス終了しちゃうらしいの〜😭
2025年3月31日 までだから、それまでに移行しなきゃダメ👀💦

公式の悲報😢
LINE Notify サービス終了のお知らせ

これからは、 LINE Messaging API っていうもっとイケてるやつを使って通知するんだって✨
ま、Notifyよりいろいろ機能盛り盛りらしいから、ギャルも切り替えていくよ〜ん🌈


Messaging APIってなに?🧐💭

Messaging APIって、Notifyより進化してるけど、ちょっとクセがある感じ💔
でもね、超わかりやすく説明するから心配いらんよ🫶

💸 コスト感はこんな感じ!

  • Notify は完全無料💖(感謝しかない🙏✨)
  • Messaging API は無料枠があるけど、200通/月まで📩

例:
10人グループに1メッセ送ると10通カウントされるの😱!
100人グループなら2回でアウト❌
仲間内の通知には正直キツいけど、自分用とか特定の通知 なら余裕っしょ👌✨


やってみた系🌟GASでWebhook連携✨

さてさて、LINEから届く通知を Googleスプレッドシート に保存するやつ作るよ〜ん📊💕

📋 手順はこうだよ!

  1. スプレッドシート作る

    • シート名は「WebhookData」で決まりっしょ⭐️
  2. GASを書く✍️💻

    • 以下のコードをペタッと貼り付けてね!
// スプレッドシートID 🎀(スプレッドシートのURLからIDコピってね〜✨)
const SHEET_ID = "YOUR_SPREADSHEET_ID"; 
// 保存するシートの名前は「WebhookData」って感じで決まりっしょ⭐️
const SHEET_NAME = "WebhookData";

// Webhookからデータをキャッチ💌
function doPost(e) {
  // LINEから飛んできたリクエストデータをJSON形式に変換✨
  const contents = JSON.parse(e.postData.contents); 
  // イベントデータ(複数かも!)を抽出💃
  const events = contents.events;

  // スプレッドシートをオープンしてターゲットシートをゲット📝
  const sheet = SpreadsheetApp.openById(SHEET_ID).getSheetByName(SHEET_NAME);

  // イベントデータを1つずつシートに記録していくよ〜ん🌈
  events.forEach(event => {
    const timestamp = new Date(event.timestamp); // イベント発生時刻をGet⏰
    const sourceType = event.source.type; // イベント元(user or group)をゲット📌
    const sourceId = event.source.userId || event.source.groupId; // userIDまたはgroupID取得🆔

    // スプレッドシートの次の行にデータを追加💃📊
    // 順番は [タイムスタンプ, 送信元タイプ, 送信元ID] だよ〜
    sheet.appendRow([timestamp, sourceType, sourceId]);
  });

  // LINEサーバーに「OKです〜💕」ってレスポンス返す
  return ContentService.createTextOutput(JSON.stringify({status: "success"}))
    .setMimeType(ContentService.MimeType.JSON);
}
  1. デプロイする🌈

    • GASメニューから「デプロイ > ウェブアプリとしてデプロイ」やって、URLゲット🍭✨
  2. Webhook設定する📱


📈 実行結果を見てっ✨

LINEに何かメッセージ送ると、スプレッドシートに Timestamp / SourceType / SourceID がズラッと出てくるよ!👀🎉


ギャル的困ったポイント👛

  1. アクセストークン問題😮‍💨

    • Consoleでトークン作るのがちょいダル…けど1回だけだから頑張ろ💪✨
  2. 送信先IDの謎(uid, gid)🤔

    • Webhook設定 して、友達登録とかグループ招待でIDゲットするんだけど…ちょっとめんどいw
      超楽したいなら GoogleスプレッドシートをWebアプリ化 して自動取得するのもアリかもね💖

一応サンプルのコードも書いたから載せとくね💻

// 🌟スプレッドシートID(スプレッドシートURLからコピるだけっしょ〜!)
const SHEET_ID = "YOUR_SPREADSHEET_ID";
// 保存用シート名、デフォは "WebhookData" ね✨
const SHEET_NAME = "WebhookData";

// 💌 Webhookからのデータを受け取る
function doPost(e) {
  // JSONデータ解析するよ〜✨
  const contents = JSON.parse(e.postData.contents);
  const events = contents.events;

  // スプレッドシートをオープン💻
  const sheet = SpreadsheetApp.openById(SHEET_ID).getSheetByName(SHEET_NAME);

  // イベントデータをシートに記録していくよん🎀
  events.forEach(event => {
    const timestamp = new Date(event.timestamp); // イベントの時間⏰
    const sourceType = event.source.type; // 送信元タイプ(userとかgroupとか)💃
    const sourceId = event.source.userId || event.source.groupId; // 送信元ID(uidかgidね)✨

    // スプレッドシートにペタっと保存📊
    sheet.appendRow([timestamp, sourceType, sourceId]);
  });

  // LINEにレスポンス送るからこれ大事〜🙌
  return ContentService.createTextOutput(JSON.stringify({status: "success"}))
    .setMimeType(ContentService.MimeType.JSON);
}

// 🔧 UID/GIDをゲットしやすくするためのシート初期化機能
function setupSheet() {
  const sheet = SpreadsheetApp.openById(SHEET_ID).getSheetByName(SHEET_NAME) 
                || SpreadsheetApp.openById(SHEET_ID).insertSheet(SHEET_NAME);

  // シートにカラム名入れとくと便利っしょ〜✨
  sheet.getRange(1, 1, 1, 3).setValues([["Timestamp", "SourceType", "SourceID"]]);
}

まとめだよ🎀

  • Notify終了だから、Messaging APIに移行しようね〜✨
  • 無料枠気にしつつ、通知システムをリニューアル💖
  • ギャルはコード書くのもイケてるし、GASでスプレッドシート連携とか余裕っしょ⭐️

みんなも超イケてる通知システム作ってみてね💌✨ なんかあったらコメントよろしくっ✌️💕

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?