LINE通知 セットアップガイド

安心タッチメールの「LINE通知機能」を利用するための初期設定手順です。
※この設定は必ずパソコン(PC)で行ってください。
【重要】LINE公式アカウントのプランによって、月の無料メッセージ通数が決まっています。ICカードの登録件数によって、LINE公式アカウントのプランをご検討ください。
LINEのMessaging APIの料金

❶ LINE公式アカウントを作成する

LINE Official Account からアカウントを作成します。

LINE公式アカウント作成

LINE Official Account Managerにログインするときに使っているアカウントで、LINE Developers コンソールにログインしたことがない場合は、操作の途中で、開発者情報を登録する画面が表示されます。名前とメールアドレスを入力して開発者アカウントを作成します。

❷ LINE公式アカウントでMessaging APIを有効にし、チャネルを作成する

アカウントリストから作成した「LINE公式アカウント」を選択
https://manager.line.biz/

アカウントリスト

「設定」に進む

設定

「Messaging API」に進む

Messaging API

「Messaging APIを利用する」に進む

Messaging APIを利用する

LINE Developersのプロバイダーを作成する
(既にプロバイダーが作成済みであれば、作成済みのプロバイダーを選択することも可能です。)

プロバイダーを作成

LINE Developersコンソールにログインする
LINE Developers

LINE Developersログイン

選択(作成)したプロバイダーを選択し、チャネルが作成されたことを確認します。

チャネル確認

❸ チャネルアクセストークン(長期)の発行

作成したチャネルの「Messaging API設定」タブ内にある「チャネルアクセストークン(長期)」を発行する。後ほど、GASで使用するので、コピーしておいてください。

チャネルアクセストークン(長期)

❹ Google Apps Script の設定

Googleスプレッドシートを新規作成し、1行目のA列に「IDm」、B列に「LINE ID」、C列に「連携日時」と入力する。

上部メニューの「拡張機能」から「Apps Script」を開き、以下のコードを貼り付けます。

Apps Scriptを開く
// =========================================================
// 【初期設定】
// 施設様が取得した「チャネルアクセストークン」を以下に貼り付けます
// =========================================================
const LINE_ACCESS_TOKEN = 'ここに先ほど発行したチャネルアクセストークン(長期)を貼り付ける';

/**
 * アプリおよびLINEからのリクエストを処理するメイン関数
 */
function doPost(e) {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

  try {
    const json = JSON.parse(e.postData.contents);

    // =========================================================
    // 処理1:保護者からの紐付け設定(LINEからのWebhook受信)
    // =========================================================
    if (json.events && json.events.length > 0) {
      const event = json.events[0];
      if (event.type === 'message' && event.message.type === 'text') {
        const text = event.message.text;
        const userId = event.source.userId;

        if (text.startsWith("idm=")) {
          const idm = text.replace("idm=", "").trim();
          // スプレッドシートにIDmとユーザーIDを記録
          sheet.appendRow([idm, userId, new Date()]);
          replyLineMessage(event.replyToken, "連携が完了しました!\n安心タッチメールの通知が届くようになります。");
        }
      }
      return ContentService.createTextOutput(JSON.stringify({status: "success"})).setMimeType(ContentService.MimeType.JSON);
    }

    // =========================================================
    // 処理2:アプリからのタッチ通知
    // =========================================================
    if (json.idm && json.action === 'touch') {
      const targetIdm = json.idm;
      const data = sheet.getDataRange().getValues();
      let targetUserId = null;

      // 最新の紐付けデータをシートの末尾から探す
      for (let i = data.length - 1; i >= 1; i--) {
        if (String(data[i][0]) === String(targetIdm)) {
          targetUserId = data[i][1];
          break;
        }
      }

      if (targetUserId) {
        let messageText = "";

        // アプリ側でカスタマイズされた文章があればそれを優先
        if (json.custom_message) {
          messageText = json.custom_message;
        } else {
          // なければ標準の文章を作成(住所加工なし)
          messageText = 
            `【${json.terminal_name}】より ${json.mode} のお知らせ\n\n` +
            `${json.child_name} さんが、${json.mode} しました。\n\n` +
            `場 所:${json.location}\n` +
            `送信元:${json.terminal_name}\n` +
            `日 時:${json.timestamp}`;
        }

        // LINE送信実行
        pushLineMessage(targetUserId, messageText);
        
        return ContentService.createTextOutput(JSON.stringify({status: "success"})).setMimeType(ContentService.MimeType.JSON);
      } else {
        return ContentService.createTextOutput(JSON.stringify({status: "error", message: "User not linked"})).setMimeType(ContentService.MimeType.JSON);
      }
    }
  } catch (err) {
    return ContentService.createTextOutput(JSON.stringify({status: "error", message: err.toString()})).setMimeType(ContentService.MimeType.JSON);
  }
}

// ---------------------------------------------------------
// ヘルパー関数:リプライ送信用
// ---------------------------------------------------------
function replyLineMessage(replyToken, text) {
  const url = "https://api.line.me/v2/bot/message/reply";
  const payload = {
    "replyToken": replyToken,
    "messages": [{"type": "text", "text": text}]
  };
  const options = {
    "method": "post",
    "headers": {
      "Content-Type": "application/json",
      "Authorization": "Bearer " + LINE_ACCESS_TOKEN
    },
    "payload": JSON.stringify(payload)
  };
  UrlFetchApp.fetch(url, options);
}

// ---------------------------------------------------------
// ヘルパー関数:プッシュ送信用
// ---------------------------------------------------------
function pushLineMessage(userId, text) {
  const url = "https://api.line.me/v2/bot/message/push";
  const payload = {
    "to": userId,
    "messages": [{"type": "text", "text": text}]
  };
  const options = {
    "method": "post",
    "headers": {
      "Content-Type": "application/json",
      "Authorization": "Bearer " + LINE_ACCESS_TOKEN
    },
    "payload": JSON.stringify(payload)
  };
  UrlFetchApp.fetch(url, options);
}

コード内の 'ここに先ほど発行したチャネルアクセストークン(長期)を貼り付ける' の部分を、Step 3で取得したご自身のチャネルアクセストークンに書き換えます。

画面右上の「デプロイ」>「新しいデプロイ」から、種類を「ウェブアプリ」、アクセス権限を「全員」にして実行します。

デプロイ実行

発行された「ウェブアプリのURL」をコピーします。

URLをコピー

※「ウェブアプリのURL」は「安心タッチメール」の設定でも使用します。パソコンからスマートフォンに共有できる手段(メールなど)を使って、スマートフォンに共有しておくことをおすすめします。

コピーした「ウェブアプリのURL」をLINE Developers コンソールの作成したチャネルの「Messaging API設定」タブ内にある「Webhook URL」の「編集」をクリックして貼り付ける。

このページのボットのベーシックID(@から始まるID)という項目が、紐付いている「LINE公式アカウントのID」になります。この「LINE公式アカウントのID」は「安心タッチメール」の設定で使用します。パソコンからスマートフォンに共有できる手段(メールなど)を使って、スマートフォンに共有しておくことをおすすめします。

Webhook URLの貼り付け

❺ アプリへの設定

安心タッチメールのアプリを開き、初期設定画面の「LINE通知連携設定」を開きます。

「LINE通知用サーバーURL」に、先ほど共有した「ウェブアプリのURL」を入力します。

「施設のLINE公式ID」に、先ほど共有した「LINE公式アカウントのID(@から始まるID)」を入力し、保存します。

❻ LINE通知連携用QRコードの表示

❺ までの設定が完了したら、「ICカード・スマホの登録・更新」の際に、LINE連携用QRコードが表示されるようになります。
通知をお受け取りになる保護者様にスキャンしていただき、そのまま送信してもらえれば、LINEに通知が届くようになります。

LINE通知連携用QRコード

全ての流れの参考サイト