LINE Bot ที่ตอบคำถามอัตโนมัติโดยดึงข้อมูลจาก Google Sheets

กิจกรรมที่ 1 ถามตอบโดยดึงข้อมูลจาก Google Sheets แบบข้อความ

const LINE_TOKEN = 'xxxxx';

function doPost(e) {
  const data = JSON.parse(e.postData.contents);
  const event = data.events[0];
  
  if (event.type === 'message' && event.message.type === 'text') {
    const userText = event.message.text.trim().toLowerCase();
    const replyToken = event.replyToken;
    
    if (userText === 'สวัสดี') {
      sendMessage(replyToken, { type: 'text', text: 'สวัสดีครับ! 😊' });
    } else {
      sendMessage(replyToken, { type: 'text', text: findAnswer(userText) });
    }
  }
}

function sendMessage(replyToken, message) {
  const url = 'https://api.line.me/v2/bot/message/reply';
  
  UrlFetchApp.fetch(url, {
    method: 'post',
    contentType: 'application/json',
    headers: { Authorization: `Bearer ${LINE_TOKEN}` },
    payload: JSON.stringify({ replyToken, messages: [message] })
  });
}

function findAnswer(userQuestion) {
  const sheet = SpreadsheetApp.openByUrl("xxxxxx").getSheetByName("xxxxx");
  
  if (!sheet) return "ขออภัย ไม่พบข้อมูล";

  const data = sheet.getDataRange().getValues();
  if (data.length <= 1) return "ขออภัย ไม่พบข้อมูล";
  
  data.shift(); // Skip headers
  for (let row of data) {
    const question = String(row[0]).trim().toLowerCase();
    const answer = String(row[1]).trim();
    const keywords = row[2] ? String(row[2]).split(',').map(k => k.trim().toLowerCase()) : [];
    if (question === userQuestion || keywords.some(k => userQuestion.includes(k))) {
      return answer;
    }
  }
  
  return "ขออภัย ไม่เข้าใจคำถาม";
}

กิจกรรมที่ 2 ถามตอบโดยดึงข้อมูลจาก Google Sheets แบบ JSON

function doPost(e) {
  const data = JSON.parse(e.postData.contents);
  const event = data.events[0];
  
  if (event.type === 'message' && event.message.type === 'text') {
    const userText = event.message.text.trim().toLowerCase();
    const replyToken = event.replyToken;
  
    if (userText === 'สวัสดี') {
      sendMessage(replyToken, { type: 'text', text: 'สวัสดีครับ! 😊' });
    } else {
      sendMessage(replyToken, findAnswer(userText));
    }
  }
}


function findAnswer(userQuestion) {
  const sheet = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/1zxl-4z7gqOO92IqM_IYdpKs0FYhN68r3sHMfjoX_fd8/edit?usp=sharing")
    .getSheetByName("คำถาม-คำตอบ");
  
  if (!sheet) return { type: 'text', text: "ขออภัย ไม่พบข้อมูล" };
  
  const data = sheet.getDataRange().getValues();
  if (data.length <= 1) return { type: 'text', text: "ขออภัย ไม่พบข้อมูล" };
  
  data.shift(); // Skip headers
  for (let row of data) {
    const question = String(row[0]).trim().toLowerCase();
    let answer;
    try {
      answer = JSON.parse(String(row[1]).trim());
    } catch (e) {
      answer = { type: 'text', text: String(row[1]).trim() }; // Fallback to plain text
    }
    const keywords = row[2] ? String(row[2]).split(',').map(k => k.trim().toLowerCase()) : [];
    
    if (question === userQuestion || keywords.some(k => userQuestion.includes(k))) {
      return answer;
    }
  }
  
  return { type: 'text', text: "ขออภัย ไม่เข้าใจคำถาม" };
}

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *