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

※LINE Official Account Managerにログインするときに使っているアカウントで、LINE Developers コンソールにログインしたことがない場合は、操作の途中で、開発者情報を登録する画面が表示されます。名前とメールアドレスを入力して開発者アカウントを作成します。
❷ LINE公式アカウントでMessaging APIを有効にし、チャネルを作成する
アカウントリストから作成した「LINE公式アカウント」を選択
https://manager.line.biz/

「設定」に進む

「Messaging API」に進む

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

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

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

選択(作成)したプロバイダーを選択し、チャネルが作成されたことを確認します。
❸ チャネルアクセストークン(長期)の発行
作成したチャネルの「Messaging API設定」タブ内にある「チャネルアクセストークン(長期)」を発行する。後ほど、GASで使用するので、コピーしておいてください。
❹ Google Apps Script の設定
Googleスプレッドシートを新規作成し、1行目のA列に「IDm」、B列に「LINE ID」、C列に「連携日時」と入力する。
上部メニューの「拡張機能」から「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」をLINE Developers コンソールの作成したチャネルの「Messaging API設定」タブ内にある「Webhook URL」の「編集」をクリックして貼り付ける。
このページのボットのベーシックID(@から始まるID)という項目が、紐付いている「LINE公式アカウントのID」になります。この「LINE公式アカウントのID」は「安心タッチメール」の設定で使用します。パソコンからスマートフォンに共有できる手段(メールなど)を使って、スマートフォンに共有しておくことをおすすめします。
❺ アプリへの設定
安心タッチメールのアプリを開き、初期設定画面の「LINE通知連携設定」を開きます。
「LINE通知用サーバーURL」に、先ほど共有した「ウェブアプリのURL」を入力します。
「施設のLINE公式ID」に、先ほど共有した「LINE公式アカウントのID(@から始まるID)」を入力し、保存します。
❻ LINE通知連携用QRコードの表示
❺ までの設定が完了したら、「ICカード・スマホの登録・更新」の際に、LINE連携用QRコードが表示されるようになります。
通知をお受け取りになる保護者様にスキャンしていただき、そのまま送信してもらえれば、LINEに通知が届くようになります。