คู่มือการตั้งค่าการแจ้งเตือน LINE

คำแนะนำการตั้งค่าเบื้องต้นสำหรับการใช้ "ฟีเจอร์การแจ้งเตือน LINE" ใน Touch Mail ปลอดภัย
* กรุณาทำการตั้งค่าเหล่านี้บนคอมพิวเตอร์ (PC)
[สำคัญ] จำนวนข้อความฟรีต่อเดือนขึ้นอยู่กับแผนของบัญชี LINE Official ของคุณ โปรดพิจารณาเลือกแผนบัญชี LINE Official ตามจำนวนบัตร IC ที่ลงทะเบียน
ราคา LINE Messaging API

❶ สร้างบัญชี LINE Official

สร้างบัญชีจาก LINE Official Account

สร้างบัญชี LINE Official

* หากคุณไม่เคยเข้าสู่ระบบ LINE Developers Console ด้วยบัญชีที่คุณใช้สำหรับ LINE Official Account Manager หน้าจอสำหรับลงทะเบียนข้อมูลนักพัฒนาจะปรากฏขึ้นระหว่างขั้นตอน กรอกชื่อและอีเมลของคุณเพื่อสร้างบัญชีนักพัฒนา

❷ เปิดใช้งาน Messaging API และสร้าง Channel

เลือก "LINE Official Account" ที่สร้างขึ้นจากรายการบัญชี
https://manager.line.biz/

รายการบัญชี

ไปที่ "ตั้งค่า (Settings)"

ตั้งค่า

ไปที่ "Messaging API"

Messaging API

ไปที่ "เปิดใช้ Messaging API (Use Messaging API)"

เปิดใช้ Messaging API

สร้าง Provider ของ LINE Developers
(หากสร้าง Provider ไว้แล้ว คุณสามารถเลือก Provider ที่มีอยู่ได้)

สร้าง Provider

เข้าสู่ระบบ LINE Developers Console
LINE Developers

เข้าสู่ระบบ LINE Developers

เลือก Provider ที่สร้าง (หรือเลือกไว้) และตรวจสอบว่าได้สร้าง Channel แล้ว

ตรวจสอบ Channel

❸ ออก Channel Access Token (ระยะยาว)

ออก "Channel Access Token (long-lived)" ซึ่งอยู่ในแท็บ "Messaging API Settings" ของ Channel ที่สร้างขึ้น โปรดคัดลอกไว้เนื่องจากจะนำไปใช้ใน GAS ในภายหลัง

Channel access token (long-lived)

❹ การตั้งค่า Google Apps Script

สร้าง Google Spreadsheet ใหม่ และในแถวแรก ให้ป้อน "IDm" ในคอลัมน์ A, "LINE ID" ในคอลัมน์ B และ "วันที่และเวลาที่เชื่อมโยง" ในคอลัมน์ C

เปิด "Apps Script" จาก "ส่วนขยาย (Extensions)" ในเมนูด้านบนแล้ววางโค้ดต่อไปนี้

เปิด Apps Script
// =========================================================
// [การตั้งค่าเริ่มต้น]
// วาง "Channel Access Token" ที่หน่วยงานของคุณได้รับด้านล่าง
// =========================================================
const LINE_ACCESS_TOKEN = 'วาง Channel Access Token (long-lived) ที่ออกไว้ที่นี่';

/**
 * ฟังก์ชันหลักสำหรับจัดการคำขอจากแอปและ LINE
 */
function doPost(e) {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

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

    // =========================================================
    // กระบวนการ 1: การตั้งค่าการเชื่อมโยงจากผู้ปกครอง (รับ Webhook จาก LINE)
    // =========================================================
    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 และ User ID ในสเปรดชีต
          sheet.appendRow([idm, userId, new Date()]);
          replyLineMessage(event.replyToken, "เชื่อมโยงสำเร็จ!\nคุณจะได้รับการแจ้งเตือนจาก Touch Mail ปลอดภัย แล้ว");
        }
      }
      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.mode} จาก [${json.terminal_name}]\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);
}

แทนที่ส่วน 'วาง Channel Access Token (long-lived) ที่ออกไว้ที่นี่' ในโค้ดด้วย Channel Access Token ของคุณเอง ที่ได้รับในขั้นตอนที่ 3

จาก "การทำให้ใช้งานได้ (Deploy)" > "การทำให้ใช้งานได้รายการใหม่ (New deployment)" ที่มุมขวาบนของหน้าจอ เลือกประเภทเป็น "เว็บแอปพลิเคชัน (Web app)" และตั้งค่าการเข้าถึงเป็น "ทุกคน (Anyone)" จากนั้นดำเนินการ

ดำเนินการ Deployment

คัดลอก "URL ของเว็บแอปพลิเคชัน (Web app URL)" ที่ออกให้

คัดลอก URL

* "Web app URL" จะถูกนำไปใช้ในการตั้งค่า "Touch Mail ปลอดภัย" ด้วย ขอแนะนำให้แชร์ไปที่สมาร์ทโฟนของคุณโดยใช้วิธีที่คุณสามารถเข้าถึงได้จากพีซี (เช่น อีเมล)

วาง "Web app URL" ที่คัดลอกมา โดยคลิก "แก้ไข (Edit)" ในส่วน "Webhook URL" ภายในแท็บ "Messaging API Settings" ของ Channel ที่คุณสร้างบน LINE Developers Console

Bot Basic ID (ID ที่ขึ้นต้นด้วย @) ในหน้านี้คือ "LINE Official Account ID" ที่เชื่อมโยงของคุณ "LINE Official Account ID" นี้จะถูกใช้ในการตั้งค่า "Touch Mail ปลอดภัย" ขอแนะนำให้แชร์ไปยังสมาร์ทโฟนของคุณ

วาง Webhook URL

❺ การตั้งค่าแอป

เปิดแอป Touch Mail ปลอดภัย แล้วไปที่ "ตั้งค่าการแจ้งเตือน LINE" จากหน้าจอการตั้งค่าเริ่มต้น

ป้อน "Web app URL" ที่คุณแชร์ไว้ก่อนหน้านี้ลงใน "LINE Notification Server URL"

ป้อน "LINE Official Account ID (ID ที่ขึ้นต้นด้วย @)" ที่คุณแชร์ไว้ก่อนหน้านี้ลงใน "Facility's LINE Official ID" จากนั้นบันทึก

❻ การแสดงคิวอาร์โค้ดสำหรับการเชื่อมต่อ LINE

เมื่อตั้งค่าถึงขั้นตอนที่ ❺ เสร็จสิ้น คิวอาร์โค้ดสำหรับการเชื่อมต่อ LINE จะแสดงขึ้นเมื่อคุณเลือก "ลงทะเบียน/อัปเดตบัตร IC หรือสมาร์ทโฟน"
โปรดให้ผู้ปกครองที่จะรับการแจ้งเตือนสแกนคิวอาร์โค้ดนี้และส่งข้อความตามที่ปรากฏ เพื่อเริ่มรับการแจ้งเตือนทาง LINE

คิวอาร์โค้ดสำหรับการเชื่อมต่อ LINE

เว็บไซต์อ้างอิงสำหรับขั้นตอนทั้งหมด