已成功複製到剪貼簿!
附 6 格官方圖文選單 ✕ 100 題完整 FAQ ✕ 5 大角色心理學 ✕ Gemini 2.5 Flash RAG

打造得報 NEWSY365 專屬 LINE Bot AI 智慧客服小幫手

專為中小學閱讀理解教育設計!整合 100 題官方標準知識庫、6 格高清圖文選單 與 5 大角色心理學模型,24 小時精準解答、同理溝通。

6 格高清圖文選單

附 2500x1686、1200x810、800x540 原圖

5 大角色語氣適配

學生溫暖、家長同理、導師精準、專家專業

100 題得報 FAQ 庫

涵蓋 13 大業務分類,零快取隨改隨生效

Gemini 2.5 Flash

極速 RAG 推理,零幻覺精準生成

官方視覺素材

得報 LINE 官方帳號・6 格圖文選單設計與下載

依據 100 題知識庫最高頻 6 大問題設計,已輸出標準 2500×1686、1200×810、800×540 三種規格!

得報 LINE Bot 6 格圖文選單預覽
💡 點擊上方按鈕即可下載全尺寸 PNG 原圖直接上傳 LINE 後台 2×3 標準版型
LINE 後台 6 格動作設定對照表
01. 忘記密碼 文字訊息

觸發關鍵字:忘記密碼

02. AI 評分標準 文字訊息

觸發關鍵字:AI 評分標準

03. 五座島嶼 文字訊息

觸發關鍵字:五座島嶼與閱讀任務說明

04. 家長專區 文字訊息

觸發關鍵字:家長如何綁定與隱私說明

05. 投稿與獎勵 文字訊息

觸發關鍵字:如何投稿與兌換點數

06. 專人客服 文字訊息

觸發關鍵字:#工單

互動實測體驗

📱 得報 LINE Bot 客服智慧對話模擬器

切換不同「提問者角色」,點擊推薦問題或自行輸入,體驗得報小幫手如何運用 100 題知識庫與語氣心理學精準回覆!

模擬器就緒
💡 該角色常見提問(點擊立即發問):
得報 NEWSY365 客服小幫手 官方
Gemini 2.5 Flash ✕ 100題知識庫 RAG 連線中
🤖

您好!我是得報 NEWSY365 客服 AI 智慧小幫手 🎒

無論是學生忘記密碼、家長關心閱讀成效、老師指派任務,或是學校採購與閱讀理論,我都隨時為您解答喔!請點選上方推薦問題或直接在下方打字提問~

後台決策與心理學解析
當前角色:學生
🎯 知識庫命中條目: #6 登入與密碼
「我忘記密碼了,進不去。」
內部處理 SOP (絕對勿貼出去):

學生無法自行以信箱找回。若學生很急(例如當天要交),可協助聯繫該班老師。

閱讀教育觀點與理論支撐:

保護學生的安全感與自尊心,避免因技術問題阻斷學習連續性。

⚠️ 該角色地雷: 不要用「請至設定頁面進行操作」這種書面語;不要一次給三個步驟;不要說「這很簡單」。
知識庫核心架構

得報知識庫分類心法與 5 大角色心理學

客服不只是回答問題,更是「接住使用者焦慮並賦能」的過程。得報知識庫將 100 題問答嚴密拆解為 5 大目標角色 與 13 大核心業務模組。

5 大提問者角色溝通心法速查

依據《得報客服知識庫》角色速查表
🎒 學生 (國小中高年級) 最在意:被扣分、點數

典型情境:在平板或電腦教室遇問題,往往已經很著急,只會講現象不會講術語。

✅ 回覆準則:
• 用聽得懂的字,一次只給一個動作
• 先講「這個不是你的錯」
• 每一步用「你先…然後…」
❌ 地雷:不要用「請至設定頁面操作」;不要說「這很簡單」。
👨‍👩‍👧 家長 (關心成效與3C) 最在意:成效、螢幕時間

典型情境:孩子睡後打來,對 3C 傷眼、個資、是否真的有效感到焦慮或防備。

✅ 回覆準則:
• 先同理接住情緒,再處理問題
• 用具體做法回答,不講空泛願景
• 不確定的事直說會查,不打包票
❌ 地雷:不要承諾「成績一定進步」;不要跟別的孩子比較;不要推責任給老師。
👩‍🏫 導師 (課表緊湊) 最在意:省時間、課綱進度

典型情境:下課 10 分鐘內詢問,要的是「現在馬上能解決」,關心班級經營與期末成績。

✅ 回覆準則:
• 先給一句可執行的操作,再補說明
• 主動說「這大概花您幾分鐘」
• 能代操作就代操作,不叫老師自己摸索
❌ 地雷:不要說「這很直覺您試試」;不要增加備課負擔;不上課時間承諾回電。
🏫 學校主管 / 教育人員 最在意:採購合規、資安個資

典型情境:教務主任、資訊組長、圖書教師;關心全校導入、採購核銷、資安與報表。

✅ 回覆準則:
• 以正式流程、文件與規範回答
• 主動提供可轉交的正式公文/報告範本
• 採購與個資一律轉正式窗口並留案號
❌ 地雷:不要口頭承諾價格或合約;不要提供非正式個資宣告。
📚 閱讀專家 / 輔導團教師 最在意:教學理論、AI 評分效度、鷹架

典型情境:閱推教師、輔導團、師培教授;質疑平台教學設計、理解層次與 AI 批改效度。

✅ 回覆準則:
• 誠實區分「平台目前做到的」與「還在發展中的」,絕不誇大
• 說明形成性評量、多元表徵作答與選文倫理架構
• 無法直接回答者轉交產品教學研發端並建檔
❌ 地雷:不要用行銷話術回答學術問題;不要宣稱有研究實證卻拿不出資料來源。
完整資料庫檢索

得報 100 題標準客服問答 (FAQ) 檢索中心

支援即時關鍵字檢索、提問者角色篩選、13 大業務分類切換與一鍵複製標準回覆。

提問者:
顯示結果:共 100 筆項目 提示:點擊卡片右上角「複製」可立即複製標準回覆
知識庫持續演進

如何新增、修改得報後台知識庫?

建立好 LINE Bot 後,日後得報平台有新功能、新活動或新的常見問答時,可透過以下 3 種方式 隨時更新,完全不需要修改程式碼,也不用重新部署!

最直覺・最推薦

方法一:直接在 Google 試算表編輯

打開試算表的「得報客服知識庫」工作表,在最後一列追加填寫即可。

⚡ 特點:試算表存檔即生效,小幫手 1 秒內自動學會!
手機隨手記

方法二:手機 LINE 對話一鍵記憶

在 LINE 輸入:#記住 學生作品上傳檔案大小上限調整為 25MB

📱 特點:免開電腦,手機打字即可更新官方知識庫!
知識庫自進化

方法三:自動收集未命中問題

當使用者詢問未收錄的新問題時,系統自動記錄至「待補充問題庫」工作表。

🧠 特點:越用越聰明,自動補齊常見盲點!

小學生都能跟著做!安裝 6 大步驟

跟著以下順序做,每完成一步就打勾,10 分鐘內即可上線!

進度:0%
1

建立 LINE 機器人,取得 Access Token

約 2 分鐘完成

  1. 進入 LINE Developers 後台 ,建立 Messaging API channel。
  2. 在 Messaging API 頁籤取得 Channel access token。
  3. 將「自動回應訊息」改為 關閉、「Webhook」改為 啟用。
2

取得免費 Google Gemini API Key

約 1 分鐘完成

  1. 前往 Google AI Studio 建立免費 API Key。
3

建立 Google 試算表

約 1 分鐘完成

  1. 打開 sheets.new 建立名為 得報 NEWSY365 客服知識庫 的試算表。
4

貼上 Apps Script 程式碼(Code.gs & index.html)

約 2 分鐘完成

  1. 在試算表點選 擴充功能 ➔ Apps Script。
  2. 貼入 Code.gs 並填入 API 金鑰;新增 HTML 檔案命名為 index 並貼入 index.html。
5

發布部署 & 回填 LINE Webhook 網址

約 2 分鐘完成

  1. Apps Script 部署為 網頁應用程式 (Web App),存取權限務必選擇 所有人 (Anyone)。
  2. 將部署網址填回 LINE Developers 的 Webhook URL 並點擊 Verify 驗證成功!
6

一鍵初始化 100 題知識庫 & 上線!

最後一步!即刻上線

  1. 在 Apps Script 執行函式 initNewsyKnowledgeBaseSheet,自動填入 100 題完整資料。
  2. 至 LINE 官方帳號管理後台建立圖文選單,上傳本專案提供的 6 格圖文選單圖片,大功告成!
Source Code Packages

專案核心檔案・一鍵複製打包中心

點擊下方右上角的「複製」按鈕,直接帶走完整、可立即運行的通用原始程式碼。

Code.gs (含 100 題得報知識庫初始化 / Gemini 2.5 Flash RAG)
/**
 * 得報 NEWSY365 客服 AI 智慧小幫手 (LINE Bot + Google Apps Script + Gemini RAG 後端)
 * 
 * 核心功能:
 * 1. 得報 100 題完整知識庫 RAG 即時檢索(Google 試算表零快取即時讀取,隨改隨生效)
 * 2. 5 大目標角色溝通心理學適配(學生、家長、導師、教育人員、閱讀專家)
 * 3. 13 大核心業務分類精準導引(帳號、登入、班級管理、五座島嶼閱讀、AI 批改、投稿點數、歷程檔案、採購核銷等)
 * 4. 智能工單登記與客服轉介系統(支援「#工單 地點/問題」或「#報修」自動寫入試算表)
 * 5. 待補充問題自動收集機制(AI 未命中問題自動記錄至待補充問題庫,實現知識庫自進化)
 * 6. 一鍵初始化函式 initNewsyKnowledgeBaseSheet():自動建立工作表並填入 100 題標準知識庫
 */

const CONFIG = {
  // 1. 填入您的 API 金鑰(請至 Google AI Studio 與 LINE Developers 取得)
  GEMINI_API_KEY: '填入您的_GEMINI_API_KEY',
  LINE_ACCESS_TOKEN: '填入您的_LINE_CHANNEL_ACCESS_TOKEN',

  // 2. 得報官方重要連結
  NEWSY_WEB_URL: 'https://newsy365.com',
  NEWSY_SUPPORT_EMAIL: 'support@newsy365.com',

  // 3. 智慧客服專屬人設 (System Instruction)
  SYSTEM_INSTRUCTION: `你是一位專業、親切、具備深厚閱讀教育素養的「得報 NEWSY365 官方 AI 客服小幫手」。
你的任務是協助全台灣中小學的「學生、家長、導師、學校教育人員(主任/組長)以及閱讀推動專家」,即時解答得報平台的各項使用疑問、教學設計理念、系統操作與問題排查。

【得報平台核心定位】:
- 得報 (Newsy365) 是專為中小學生設計的素養導向新聞閱讀與表達平台。
- 核心模組包含:每週時事週報、五座島嶼閱讀理解闖關、AI 智能批改與即時形成性回饋、多元任務作答(支援語音/影像/文字)、自主投稿與點數獎勵、學生個人化閱讀歷程檔案與班級報表。

【5 大角色溝通心理學與回覆準則(極重要)】:
1. 🎒【學生】(國小中高年級~國中):
   - 特徵:句子短、講現象不講原因、擔心被扣分或做錯。
   - 語氣:用簡單直白的字,一次只給一個動作;先說「這個不是你的錯」;用「你先…然後…」;結尾確認「你現在看到什麼?」。
   - 地雷:嚴禁使用「請至設定頁面進行操作」等複雜書面語;不要一次給三個步驟;不要說「這很簡單」。
2. 👨‍👩‍👧【家長】(關心孩子學習、螢幕時間與個資):
   - 特徵:語氣常帶焦慮或防備,擔心 3C 傷眼、個資外洩、平台到底有沒有效。
   - 語氣:先同理接住情緒;用具體做法與數字說明(如單次任務時間控制在15-20分鐘、作品預設不公開);不確定的政策直說會查證,不打包票。
   - 地雷:絕對不要承諾「用了成績就會進步」;不要拿別人家孩子比較;不要把責任推給學校老師。
3. 👩‍🏫【導師 / 級任科任老師】(課表緊湊、下課時間急迫):
   - 特徵:講得快、直接要解法、注重備課負擔與期末成績登記。
   - 語氣:結論先行,先給一句立即可執行的操作,再補充說明;主動告知「這大概花您 1 分鐘」;能簡化就簡化。
   - 地雷:不要說「這很直覺您試試看」;不要建議會增加備課負擔的繁瑣做法;不要在上課時間承諾回電。
4. 🏫【學校教育人員】(主任、資訊組長、圖書教師、設備組):
   - 特徵:使用行政語言(核銷、標案、公文、個資規範、成效報告),關心全校導入與資安合規。
   - 語氣:以正式流程、文件清單與合規依據回答;涉及採購報價、合約與資安白名單,主動提供標準窗口與留存紀錄。
   - 地雷:不要口頭隨意承諾價格或合約條件;不要提供非正式版本的個資宣告。
5. 📚【閱讀教育專家 / 輔導團教師】:
   - 特徵:使用專業教育術語(閱讀理解層次、鷹架設計、形成性評量、素養導向、評分效度)。
   - 語氣:誠實客觀區分「平台目前已實現的設計」與「未來發展中的功能」;說明設計背後的教學理論依據;不誇大、不說行銷空話。
   - 地雷:不要用行銷話術回答學術問題;不要宣稱有研究實證卻拿不出來源。

【回答排版與 LINE 視覺規範】:
1. 一律使用繁體中文(台灣習慣用語,如:影片、軟體、預設、網路、帳號、研習、平板、登入、專案、班級)。
2. 【嚴格 LINE 排版規範】:
   - 嚴禁使用 Markdown 粗體星號(絕對不要輸出 **文字** 或 *斜體* 或 ### 或 - 破折號)!
   - 強調標題請使用【...】或「...」。
   - 清單一律使用 Emoji 圖示或數字(如 📱、💡、👉、📚、🏫、✨、•、1. 2. 3.)並適度空行,確保手機閱覽清晰流暢。
3. 條理分明、結論先行,涉及操作步驟時依 1. 2. 3. 清楚列出。
4. 若資料庫查無特定答案,請委婉告知並引導至官方客服信箱:support@newsy365.com。`,

  // 4. 管理後台與手機寫入密碼(留空即為免密碼模式)
  ADMIN_PASSWORD: '',

  // 5. Google 試算表工作表名稱
  SHEET_NAME: '得報客服知識庫',
  LOG_SHEET_NAME: '對話紀錄',
  TICKET_SHEET_NAME: '客服工單登記表',
  UNANSWERED_SHEET_NAME: '待補充問題庫'
};

// ==========================================
// Web 介面與 Webhook 入口
// ==========================================

function doGet(e) {
  return HtmlService.createHtmlOutputFromFile('index')
    .setTitle('得報 NEWSY365 AI 智慧客服小幫手 - 控制台')
    .setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL)
    .addMetaTag('viewport', 'width=device-width, initial-scale=1');
}

function doPost(e) {
  try {
    if (!e || !e.postData || !e.postData.contents) {
      return ContentService.createTextOutput('OK').setMimeType(ContentService.MimeType.TEXT);
    }
    const data = JSON.parse(e.postData.contents);
    if (!data.events || data.events.length === 0) {
      return ContentService.createTextOutput('OK').setMimeType(ContentService.MimeType.TEXT);
    }

    const event = data.events[0];
    if (event.type === 'message' && event.message.type === 'text') {
      const userMessage = event.message.text.trim();
      const replyToken = event.replyToken;
      const isGroup = event.source.type === 'group' || event.source.type === 'room';
      const userId = event.source.userId || 'unknown';

      // 1. 立即啟動 LINE「正在輸入中...」載入動畫
      if (event.source.userId) {
        showLineLoading(event.source.userId);
      }

      // 群組模式過濾:若在群組中,只有 Tag @小幫手 或提及關鍵字才回應
      if (isGroup) {
        const botTrigger = /(@小幫手|得報小幫手|得報客服|客服小幫手|newsy|得報)/i;
        if (!botTrigger.test(userMessage) && !userMessage.startsWith('#')) {
          return ContentService.createTextOutput('OK');
        }
      }

      // 2. 檢查是否為客服工單 / 問題報修登記指令 (#工單 或 #報修)
      if (userMessage.startsWith('#工單') || userMessage.startsWith('工單 ') || userMessage.startsWith('#報修')) {
        const ticketReply = handleTicketCommand(userMessage, userId);
        sendLineReply(replyToken, ticketReply);
        logConversation(userMessage, ticketReply, userId);
        return ContentService.createTextOutput('OK');
      }

      // 3. 檢查是否為管理員指令 (#記住, #查詢, #查詢工單)
      if (userMessage.startsWith('#')) {
        const adminReply = handleAdminCommand(userMessage);
        sendLineReply(replyToken, adminReply);
        return ContentService.createTextOutput('OK');
      }

      // 4. 一般使用者提問:執行 RAG 知識庫比對與 Gemini 智慧回覆
      const cleanQuery = userMessage.replace(/(@小幫手|得報小幫手|得報客服|客服小幫手|newsy|得報)/gi, '').trim();
      const aiReply = generateAiResponse(cleanQuery, userId);
      
      sendLineReply(replyToken, aiReply);
      logConversation(cleanQuery, aiReply, userId);
    }

    return ContentService.createTextOutput(JSON.stringify({ status: 'success' })).setMimeType(ContentService.MimeType.JSON);
  } catch (err) {
    console.error('doPost Error:', err);
    return ContentService.createTextOutput(JSON.stringify({ status: 'error', message: err.toString() })).setMimeType(ContentService.MimeType.JSON);
  }
}

// ==========================================
// 📝 客服工單登記系統 (#工單)
// ==========================================

function handleTicketCommand(text, userId) {
  const content = text.replace(/^(#工單|工單|#報修|報修)\s*/, '').trim();
  if (!content) {
    return '📋 【得報 NEWSY365・客服工單登記格式】\n\n' +
      '請輸入:#工單 [學校/身分] [遭遇問題與需求]\n\n' +
      '👉 範例:\n' +
      '• #工單 仁愛國小 501 班學生帳號無法重設密碼\n' +
      '• #工單 家長詢問親子綁定手機驗證碼未收到\n' +
      '• #工單 教務處申請 115 學年全校閱讀試用授權\n\n' +
      '💡 登記後客服團隊將立即建檔並安排專人跟進!';
  }

  const now = new Date();
  const twTimeStr = Utilities.formatDate(now, 'GMT+8', 'yyyy/MM/dd HH:mm');
  const ticketId = 'T' + Utilities.formatDate(now, 'GMT+8', 'MMddHHmm');

  try {
    const ss = SpreadsheetApp.getActiveSpreadsheet();
    let sheet = ss.getSheetByName(CONFIG.TICKET_SHEET_NAME);
    if (!sheet) {
      sheet = ss.insertSheet(CONFIG.TICKET_SHEET_NAME);
      sheet.appendRow(['工單編號', '登記時間', '提報者ID', '問題與需求描述', '處理狀態', '客服備註', '結案時間']);
      sheet.getRange('A1:G1').setBackground('#1e3a8a').setFontColor('#ffffff').setFontWeight('bold');
    }

    sheet.appendRow([ticketId, twTimeStr, userId, content, '⏳ 待處理', '', '']);
    
    return `📋 【得報 NEWSY365・客服工單已受理】\n\n` +
      `• 工單編號:${ticketId}\n` +
      `• 登記時間:${twTimeStr}\n` +
      `• 需求描述:${content}\n` +
      `• 目前狀態:⏳ 待客服處理\n\n` +
      `感謝您的提報!得報客服專員已收到您的需求,將盡速為您處理。\n` +
      `💡 如有緊急狀況,亦可直接寄信至官方客服信箱:support@newsy365.com`;
  } catch (e) {
    console.error('handleTicketCommand error:', e);
    return `❌ 工單登記失敗,請直接寄信至 support@newsy365.com 聯絡得報客服團隊!`;
  }
}

// ==========================================
// 🧠 未解問題自動收集機制 (知識庫自進化)
// ==========================================

function logUnansweredQuestion(query, reply, userId) {
  try {
    const ss = SpreadsheetApp.getActiveSpreadsheet();
    let sheet = ss.getSheetByName(CONFIG.UNANSWERED_SHEET_NAME);
    if (!sheet) {
      sheet = ss.insertSheet(CONFIG.UNANSWERED_SHEET_NAME);
      sheet.appendRow(['記錄時間', '提問者ID', '未命中之提問問題', 'AI當次回覆', '處理狀態', '客服補充標準解答']);
      sheet.getRange('A1:F1').setBackground('#c2410c').setFontColor('#ffffff').setFontWeight('bold');
    }

    const now = new Date();
    const twTimeStr = Utilities.formatDate(now, 'GMT+8', 'yyyy/MM/dd HH:mm:ss');
    sheet.appendRow([twTimeStr, userId, query, reply.slice(0, 120), '🔍 待補充', '']);
  } catch (e) {
    console.error('logUnansweredQuestion error:', e);
  }
}

// ==========================================
// 知識庫管理核心函式 (零快取即時讀取)
// ==========================================

function getKnowledgeBaseData() {
  try {
    const ss = SpreadsheetApp.getActiveSpreadsheet();
    let sheet = ss.getSheetByName(CONFIG.SHEET_NAME);
    if (!sheet) {
      initNewsyKnowledgeBaseSheet();
      sheet = ss.getSheetByName(CONFIG.SHEET_NAME);
    }
    const values = sheet.getDataRange().getValues();
    if (values.length <= 1) return [];

    const list = [];
    for (let i = 1; i < values.length; i++) {
      const row = values[i];
      const role = (row[1] || '').toString().trim();
      const catCode = (row[2] || '').toString().trim();
      const catName = (row[3] || '').toString().trim();
      const question = (row[4] || '').toString().trim();
      const keywords = (row[5] || '').toString().trim();
      const standardReply = (row[6] || '').toString().trim();
      const internalNote = (row[7] || '').toString().trim();
      const eduView = (row[8] || '').toString().trim();

      if (question && standardReply) {
        list.push({
          id: row[0],
          role: role,
          catCode: catCode,
          category: catName,
          question: question,
          keywords: keywords,
          standardReply: standardReply,
          internalNote: internalNote,
          eduView: eduView
        });
      }
    }

    if (list.length > 0) return list;
  } catch (e) {
    console.warn('getKnowledgeBaseData error:', e);
  }

  return [];
}

function handleAdminCommand(text) {
  const parts = text.split(' ');
  const cmd = parts[0];
  
  if (cmd === '#查詢工單') {
    const ss = SpreadsheetApp.getActiveSpreadsheet();
    const sheet = ss.getSheetByName(CONFIG.TICKET_SHEET_NAME);
    if (!sheet) return '📋 目前尚無任何客服工單紀錄!';
    const values = sheet.getDataRange().getValues();
    if (values.length <= 1) return '📋 目前尚無任何客服工單紀錄!';
    
    let pending = [];
    for (let i = 1; i < values.length; i++) {
      if (values[i][4] === '⏳ 待處理' || values[i][4] === '待處理') {
        pending.push(`• [${values[i][0]}] ${values[i][1]}:${values[i][3]}`);
      }
    }
    if (pending.length === 0) return '🎉 太棒了!目前所有工單皆已處理完成,無待辦工單!';
    return `📋 【待處理客服工單 (${pending.length} 筆)】:\n` + pending.slice(0, 8).join('\n');
  }

  if (cmd === '#查詢') {
    const kw = parts.slice(1).join(' ').trim();
    if (!kw) return '🔍 請輸入要查詢的關鍵字,例如:#查詢 忘記密碼';
    const list = getKnowledgeBaseData().filter(k => 
      k.question.includes(kw) || 
      k.keywords.includes(kw) || 
      k.standardReply.includes(kw) || 
      k.category.includes(kw)
    );
    if (list.length === 0) return `🔍 查無包含「${kw}」的得報知識庫項目。`;
    return `🔍 找到 ${list.length} 筆資料:\n` + list.slice(0, 5).map(x => `• [${x.role}|${x.category}] ${x.question}\n  💬 ${x.standardReply.slice(0, 60)}...`).join('\n\n');
  }
  
  if (cmd === '#記住') {
    let content = parts.slice(1).join(' ');
    if (CONFIG.ADMIN_PASSWORD && parts[1] === CONFIG.ADMIN_PASSWORD) {
      content = parts.slice(2).join(' ');
    } else if (CONFIG.ADMIN_PASSWORD) {
      return '❌ 密碼錯誤,無法寫入知識庫。';
    }
    
    if (!content) return '❌ 請提供要記住的內容,例如:#記住 學生作品上傳大小上限目前調整為 20MB';
    
    const ss = SpreadsheetApp.getActiveSpreadsheet();
    let sheet = ss.getSheetByName(CONFIG.SHEET_NAME);
    if (!sheet) {
      initNewsyKnowledgeBaseSheet();
      sheet = ss.getSheetByName(CONFIG.SHEET_NAME);
    }
    const newId = sheet.getLastRow();
    sheet.appendRow([newId, '教育人員', 'TEC', '技術與校園網路', content.slice(0, 30), '新增項目 手動新增', content, '管理員快速筆記', '', '—', '中', '已確認']);
    return `✅ 已成功寫入得報客服知識庫!\n【問題/主題】${content.slice(0, 30)}\n【標準回覆】${content}`;
  }

  return '💡 支援指令:\n• #工單 [學校與問題]\n• #查詢工單\n• #查詢 [關鍵字]\n• #記住 [內容]';
}

// ==========================================
// 🔍 RAG 知識庫比對與 Gemini 智慧生成
// ==========================================

function generateAiResponse(userQuery, userId) {
  const kbList = getKnowledgeBaseData();
  
  // 1. 關鍵字加權打分檢索 Top K 知識條目
  const scored = kbList.map(item => {
    let score = 0;
    const qLower = userQuery.toLowerCase();
    const itemQLower = item.question.toLowerCase();
    const itemKwLower = item.keywords.toLowerCase();
    const itemAnsLower = item.standardReply.toLowerCase();
    const itemCatLower = item.category.toLowerCase();

    // 完全匹配或高相關
    if (itemQLower.includes(qLower) || qLower.includes(itemQLower)) score += 50;
    
    // 關鍵字比對
    const kwTokens = item.keywords.split(/[\s,、]+/);
    for (const kw of kwTokens) {
      if (kw && qLower.includes(kw.toLowerCase())) score += 20;
    }

    // 分類匹配
    if (qLower.includes(itemCatLower)) score += 10;

    // 回覆內容包含
    if (itemAnsLower.includes(qLower)) score += 5;

    return { item, score };
  });

  scored.sort((a, b) => b.score - a.score);
  const topMatches = scored.filter(s => s.score > 0).slice(0, 4);

  // 2. 構建 RAG 上下文
  let contextBlock = '';
  if (topMatches.length > 0) {
    contextBlock = '【得報官方標準知識庫參考資料】:\n' + topMatches.map((m, idx) => 
      `[參考資料 ${idx+1}] (目標對象: ${m.item.role} | 分類: ${m.item.category})\n` +
      `常見問法: ${m.item.question}\n` +
      `官方標準回覆: ${m.item.standardReply}\n` +
      (m.item.internalNote ? `內部處理提醒: ${m.item.internalNote}\n` : '') +
      (m.item.eduView ? `閱讀教育觀點: ${m.item.eduView}\n` : '')
    ).join('\n---\n');
  } else {
    contextBlock = '【得報官方標準知識庫參考資料】:目前無完全精準匹配的項目,請根據得報平台核心定位與角色溝通準則提供專業、溫暖的回覆。';
  }

  // 3. 呼叫 Gemini 2.5 Flash / 1.5 Flash API
  const prompt = `${contextBlock}

【使用者最新提問】:
"${userQuery}"

【請根據以上得報知識庫與角色溝通原則,生成親切、專業、結構清晰的繁體中文回覆(切記符合 LINE 排版規範,不要出現 markdown 星號粗體)】:`;

  try {
    if (!CONFIG.GEMINI_API_KEY || CONFIG.GEMINI_API_KEY.includes('填入您的')) {
      if (topMatches.length > 0) {
        return `🤖 【得報客服小幫手】:\n\n${topMatches[0].item.standardReply}\n\n💡 官方客服信箱:${CONFIG.NEWSY_SUPPORT_EMAIL}`;
      }
      return `您好!感謝您聯繫得報客服小幫手。\n目前小幫手已記錄您的問題:「${userQuery}」,我們將盡速為您查詢!\n💡 如需緊急協助,歡迎寄信至:${CONFIG.NEWSY_SUPPORT_EMAIL}`;
    }

    const url = `https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent?key=${CONFIG.GEMINI_API_KEY}`;
    const payload = {
      contents: [
        {
          role: 'user',
          parts: [{ text: prompt }]
        }
      ],
      systemInstruction: {
        parts: [{ text: CONFIG.SYSTEM_INSTRUCTION }]
      },
      generationConfig: {
        temperature: 0.3,
        maxOutputTokens: 800
      }
    };

    const options = {
      method: 'post',
      contentType: 'application/json',
      payload: JSON.stringify(payload),
      muteHttpExceptions: true
    };

    const response = UrlFetchApp.fetch(url, options);
    const resData = JSON.parse(response.getContentText());

    if (resData.candidates && resData.candidates.length > 0 && resData.candidates[0].content) {
      let aiText = resData.candidates[0].content.parts[0].text.trim();
      // 清理可能出現的 markdown 星號
      aiText = aiText.replace(/\*\*(.*?)\*\*/g, '【$1】').replace(/\*(.*?)\*/g, '$1');
      
      // 若得分過低,記錄到待補充問題庫
      if (topMatches.length === 0 || topMatches[0].score < 15) {
        logUnansweredQuestion(userQuery, aiText, userId);
      }

      return aiText;
    } else {
      console.error('Gemini API Error:', response.getContentText());
      if (topMatches.length > 0) return topMatches[0].item.standardReply;
      return '您好!目前系統忙碌中,請稍候再試,或寄信至 support@newsy365.com 由得報專人為您服務!';
    }
  } catch (e) {
    console.error('generateAiResponse Error:', e);
    if (topMatches.length > 0) return topMatches[0].item.standardReply;
    return '您好!得報客服已收到您的訊息,若有急件請聯繫 support@newsy365.com!';
  }
}

// ==========================================
// 🚀 一鍵初始化得報 100 題知識庫試算表
// ==========================================

function initNewsyKnowledgeBaseSheet() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  let sheet = ss.getSheetByName(CONFIG.SHEET_NAME);
  if (!sheet) {
    sheet = ss.insertSheet(CONFIG.SHEET_NAME);
  } else {
    sheet.clear();
  }

  // 設定標頭
  const headers = ['編號', '提問者', '分類代碼', '分類', '客戶會怎麼問', '關鍵字', '標準回覆(可直接複製)', '內部處理(勿外流)', '閱讀教育觀點', '轉介窗口', '優先級', '查證狀態'];
  sheet.appendRow(headers);

  // 美化標頭
  const headerRange = sheet.getRange(1, 1, 1, headers.length);
  headerRange.setBackground('#1e3a8a').setFontColor('#ffffff').setFontWeight('bold').setHorizontalAlignment('center');

  // 100 題預設資料
  const seedData = [
  {
    "編號": 1,
    "提問者": "學生",
    "分類代碼": "AI",
    "分類": "AI 批改與評分",
    "客戶會怎麼問": "AI 給我的分數好低,我覺得我寫得很好。",
    "關鍵字": "分數低 不服氣 AI 評分 不公平",
    "標準回覆(可直接複製)": "你願意說出來很好,這代表你有認真寫。AI 給的分數不是最後的成績,你的老師看得到你寫的東西,也可以自己改分數。你可以做兩件事:一是看看 AI 的回饋裡有沒有說「可以再加什麼」,二是直接去問老師「我這裡是不是還可以更好」。很多同學問完老師以後,第二次就寫得更好了。",
    "內部處理(勿外流)": "不要否定學生的感受;引導回老師。必要時記錄題目轉產品端檢視。",
    "閱讀教育觀點": "AI 分數應定位為形成性回饋而非總結性評分,對學生的說法要一致,否則會傷害寫作動機。",
    "轉介窗口": "—",
    "優先級": "高",
    "查證狀態": "已確認"
  },
  {
    "編號": 2,
    "提問者": "學生",
    "分類代碼": "AI",
    "分類": "AI 批改與評分",
    "客戶會怎麼問": "AI 寫的東西我看不懂。",
    "關鍵字": "看不懂 回饋 太難 AI",
    "標準回覆(可直接複製)": "沒關係,看不懂不是你的問題。你可以先只看回饋的第一句,那通常是講你「做得好的地方」。後面如果有看不懂的詞,把它圈起來去問老師,這也是一種閱讀練習。你也可以跟我說是哪一句,我用比較簡單的話講給你聽。",
    "內部處理(勿外流)": "可請學生念出該句,客服現場口語轉譯。同時記錄用詞過難的案例回報產品端。",
    "閱讀教育觀點": "AI 回饋若超出學生的可讀水準,等於沒有回饋。用詞過難的個案務必蒐集回報。",
    "轉介窗口": "產品/AI 團隊",
    "優先級": "中",
    "查證狀態": "已確認"
  },
  {
    "編號": 3,
    "提問者": "學生",
    "分類代碼": "CNT",
    "分類": "閱讀內容與選文",
    "客戶會怎麼問": "這篇文章好難,我看不懂。",
    "關鍵字": "太難 看不懂 讀不下去 文章",
    "標準回覆(可直接複製)": "先跟你說,覺得難是正常的,得報本來就有比較簡單和比較難的文章。你可以試試看:先看標題和圖片,猜猜看在講什麼,再從頭讀一次,很多時候第二次就懂一半了。如果還是很吃力,跟老師說想換一篇比較適合的,老師可以幫你換,這不是偷懶。",
    "內部處理(勿外流)": "不要說「多讀就好」。引導學生向老師反映難度,教師端可改派。",
    "閱讀教育觀點": "難度錯配是閱讀動機流失的主因之一。允許換文是平台設計的一部分,客服要說得理直氣壯。",
    "轉介窗口": "—",
    "優先級": "中",
    "查證狀態": "已確認"
  },
  {
    "編號": 4,
    "提問者": "學生",
    "分類代碼": "CNT",
    "分類": "閱讀內容與選文",
    "客戶會怎麼問": "五座島嶼是什麼?我要先去哪一座?",
    "關鍵字": "島嶼 五座 選哪個 開始",
    "標準回覆(可直接複製)": "五座島嶼是五種不同的讀法,就像五條不一樣的路,最後都會走到「讀懂」這件事。沒有規定要先去哪一座,你可以先挑看起來最有興趣的那一座開始。真的不知道選哪個,就選標題你最好奇的那一篇,好奇心通常是最準的。",
    "內部處理(勿外流)": "—",
    "閱讀教育觀點": "「沒有唯一入口與固定順序」是得報的核心設計理念,面對學生要用具體比喻說明,不要背官方文案。",
    "轉介窗口": "—",
    "優先級": "中",
    "查證狀態": "已確認"
  },
  {
    "編號": 5,
    "提問者": "學生",
    "分類代碼": "CNT",
    "分類": "閱讀內容與選文",
    "客戶會怎麼問": "我可以不要做這一篇,換別篇嗎?",
    "關鍵字": "換文章 不想做 選別的",
    "標準回覆(可直接複製)": "如果是老師指派的任務,要問老師才能換。如果是你自己在平台上自由選讀的,那你隨時可以換,得報就是設計成讓你自己挑喜歡的來讀。",
    "內部處理(勿外流)": "區分「指派任務」與「自主選讀」,兩者規則不同。",
    "閱讀教育觀點": "—",
    "轉介窗口": "—",
    "優先級": "中",
    "查證狀態": "已確認"
  },
  {
    "編號": 6,
    "提問者": "學生",
    "分類代碼": "LOG",
    "分類": "登入與密碼",
    "客戶會怎麼問": "我忘記密碼了,進不去。",
    "關鍵字": "忘記密碼 進不去 登入 學生",
    "標準回覆(可直接複製)": "沒關係,這個很常發生,不會被扣分。學生的密碼要請老師幫忙重設:你去跟班上教得報的老師說「我密碼忘記了」,老師在他的班級名單裡按一下就好,馬上就能給你新的密碼。如果老師今天不在,你可以先跟我說你的學校和班級,我幫你留紀錄。",
    "內部處理(勿外流)": "學生無法自行以信箱找回。若學生很急(例如當天要交),可協助聯繫該班老師。",
    "閱讀教育觀點": "—",
    "轉介窗口": "—",
    "優先級": "高",
    "查證狀態": "已確認"
  },
  {
    "編號": 7,
    "提問者": "學生",
    "分類代碼": "PRV",
    "分類": "隱私、安全與規範",
    "客戶會怎麼問": "我可以看到同學寫什麼嗎?",
    "關鍵字": "看同學 別人的 作品 偷看",
    "標準回覆(可直接複製)": "不行喔,同學寫的東西只有他自己、老師和他的爸媽看得到,就像你的也只有你和老師看得到一樣。除非是被選上刊出的作品,那才會公開。這樣大家寫的時候才敢寫真心話。",
    "內部處理(勿外流)": "—",
    "閱讀教育觀點": "作品的私密性是學生願意誠實表達的前提,向學生說明時要講清楚保護的是誰。",
    "轉介窗口": "—",
    "優先級": "中",
    "查證狀態": "部分待官網查證"
  },
  {
    "編號": 8,
    "提問者": "學生",
    "分類代碼": "PRV",
    "分類": "隱私、安全與規範",
    "客戶會怎麼問": "我不想讓別人看到我寫的東西。",
    "關鍵字": "不想公開 隱私 私密 害羞",
    "標準回覆(可直接複製)": "你的作品本來就不會被同學看到,只有老師和你的爸媽看得到,因為老師要給你回饋。只有你自己按「投稿」而且被選上的時候才會刊出來,你不投稿就不會有人看到。如果你不想投稿,完全沒問題。",
    "內部處理(勿外流)": "若學生擔憂被強制投稿,提醒老師端推薦仍需學生知情。",
    "閱讀教育觀點": "—",
    "轉介窗口": "—",
    "優先級": "中",
    "查證狀態": "部分待官網查證"
  },
  {
    "編號": 9,
    "提問者": "學生",
    "分類代碼": "RWD",
    "分類": "投稿、獎勵與點數",
    "客戶會怎麼問": "我要怎麼投稿?",
    "關鍵字": "投稿 怎麼投 作品 刊出",
    "標準回覆(可直接複製)": "先把任務寫完,然後在完成的那一頁找找看有沒有「投稿」的按鈕,按下去選你想投的那一篇就可以了。老師也可以推薦你的作品去投稿,所以如果你有很喜歡的一篇,可以跟老師說一聲。",
    "內部處理(勿外流)": "投稿入口位置依版本可能不同,必要時請學生截圖。",
    "閱讀教育觀點": "—",
    "轉介窗口": "—",
    "優先級": "中",
    "查證狀態": "部分待官網查證"
  },
  {
    "編號": 10,
    "提問者": "學生",
    "分類代碼": "RWD",
    "分類": "投稿、獎勵與點數",
    "客戶會怎麼問": "我投稿了,為什麼沒有被選上?",
    "關鍵字": "沒選上 落選 投稿 為什麼",
    "標準回覆(可直接複製)": "沒被選上真的不代表你寫得不好。每一期能刊出的篇數有限,有時候是因為那一期的主題不一樣,不是因為你寫得差。你在任務裡拿到的回饋和老師的評語都還在,也可以放進你的學習歷程。很多同學都是投了好幾次才上的,下一期再投一次好嗎?",
    "內部處理(勿外流)": "語氣以鼓勵為主,不要用「競爭很激烈」帶過。",
    "閱讀教育觀點": "投稿被拒是真實的寫作經驗,客服的回應會影響學生要不要再投第二次。",
    "轉介窗口": "—",
    "優先級": "中",
    "查證狀態": "已確認"
  },
  {
    "編號": 11,
    "提問者": "學生",
    "分類代碼": "RWD",
    "分類": "投稿、獎勵與點數",
    "客戶會怎麼問": "點數要怎麼拿?",
    "關鍵字": "點數 集點 怎麼拿",
    "標準回覆(可直接複製)": "點數主要是靠完成任務和持續閱讀累積的,投稿和參加活動的時候也會有額外的機會。你可以在點數的頁面看到自己現在有多少點,還有這一次做了什麼拿到幾點。",
    "內部處理(勿外流)": "實際計點規則須以官方公告為準,勿自行推算。",
    "閱讀教育觀點": "—",
    "轉介窗口": "—",
    "優先級": "中",
    "查證狀態": "待官網查證(計點規則)"
  },
  {
    "編號": 12,
    "提問者": "學生",
    "分類代碼": "RWD",
    "分類": "投稿、獎勵與點數",
    "客戶會怎麼問": "我的點數怎麼變少了?",
    "關鍵字": "點數 不見 少了 消失",
    "標準回覆(可直接複製)": "先別擔心,我幫你查。點數變少通常是兩個原因:一個是你之前兌換過東西,另一個是活動點數在活動結束的時候結算了。你告訴我你的名字和班級,我看一下你的點數紀錄,再跟你說清楚。",
    "內部處理(勿外流)": "查點數異動紀錄;若非上述原因,列為異常轉技術客服。",
    "閱讀教育觀點": "—",
    "轉介窗口": "技術客服",
    "優先級": "中",
    "查證狀態": "待官網查證(點數規則)"
  },
  {
    "編號": 13,
    "提問者": "學生",
    "分類代碼": "TEC",
    "分類": "技術與校園網路",
    "客戶會怎麼問": "我在家可以做嗎?",
    "關鍵字": "在家 家裡 回家 做作業",
    "標準回覆(可直接複製)": "可以,用家裡的電腦或平板打開得報的網站登入就好,跟在學校用的是同一個帳號,不用另外安裝東西。記得家裡的網路要通喔。",
    "內部處理(勿外流)": "—",
    "閱讀教育觀點": "—",
    "轉介窗口": "—",
    "優先級": "中",
    "查證狀態": "已確認"
  },
  {
    "編號": 14,
    "提問者": "學生",
    "分類代碼": "TSK",
    "分類": "任務與作答",
    "客戶會怎麼問": "我按了送出,可是不知道有沒有交出去。",
    "關鍵字": "送出 交了嗎 繳交 沒反應",
    "標準回覆(可直接複製)": "我們一起確認一下。你先回到任務列表,看看那一篇的旁邊有沒有出現「已完成」。有的話就是交出去了,你可以放心。如果還是寫「未完成」,就是剛剛網路斷掉沒送成功,你再按一次送出就好,你寫的內容通常還會留著。",
    "內部處理(勿外流)": "先確認是草稿還是已繳交;必要時查後台繳交時間戳。",
    "閱讀教育觀點": "—",
    "轉介窗口": "—",
    "優先級": "高",
    "查證狀態": "已確認"
  },
  {
    "編號": 15,
    "提問者": "學生",
    "分類代碼": "TSK",
    "分類": "任務與作答",
    "客戶會怎麼問": "老師說有作業,可是我找不到。",
    "關鍵字": "找不到 沒有作業 任務不見 看不到",
    "標準回覆(可直接複製)": "別緊張,我們一個一個看。第一,你確定登入的是你自己的帳號嗎?第二,老師有時候會設「時間到了才打開」,還沒到就看不到。第三,老師可能這次只指派給一部分同學。你告訴我你的名字和班級,我幫你查老師到底有沒有派給你。",
    "內部處理(勿外流)": "多為開放時間未到,或老師只指派給部分學生。查後台指派名單最快。",
    "閱讀教育觀點": "—",
    "轉介窗口": "技術客服",
    "優先級": "高",
    "查證狀態": "已確認"
  },
  {
    "編號": 16,
    "提問者": "學生",
    "分類代碼": "TSK",
    "分類": "任務與作答",
    "客戶會怎麼問": "我寫錯了,可以重寫嗎?",
    "關鍵字": "重寫 改 訂正 送出後",
    "標準回覆(可直接複製)": "可以喔,但要請老師幫你打開。你跟老師說「我想訂正這一篇」,老師可以把它退回來給你重寫。想訂正是好事,代表你自己發現哪裡可以更好,老師通常都會答應。",
    "內部處理(勿外流)": "退回重做由教師端操作;提醒學生不要重複送件。",
    "閱讀教育觀點": "願意主動訂正是後設認知的展現,客服的回應應強化這個行為,而不是只處理操作。",
    "轉介窗口": "—",
    "優先級": "中",
    "查證狀態": "部分待官網查證"
  },
  {
    "編號": 17,
    "提問者": "學生",
    "分類代碼": "TSK",
    "分類": "任務與作答",
    "客戶會怎麼問": "我的錄音一直傳不上去。",
    "關鍵字": "錄音 上傳 失敗 傳不上去 語音",
    "標準回覆(可直接複製)": "我們試三件事。第一,看看螢幕上有沒有跳出問你「可不可以用麥克風」,有的話按允許。第二,錄音如果很長,先錄短一點試試看。第三,換一個地方連網路,教室網路有時候會塞住。三個都試了還不行,你拍下畫面給老師,請老師轉給我們。",
    "內部處理(勿外流)": "先確認麥克風權限、檔案長度、網路。收集裝置與瀏覽器版本。",
    "閱讀教育觀點": "—",
    "轉介窗口": "技術客服",
    "優先級": "高",
    "查證狀態": "已確認"
  },
  {
    "編號": 18,
    "提問者": "學生",
    "分類代碼": "TSK",
    "分類": "任務與作答",
    "客戶會怎麼問": "平板打字好慢,可以用說的嗎?",
    "關鍵字": "打字慢 說的 語音 錄音 代替",
    "標準回覆(可直接複製)": "得報有讓你上傳語音和影像的作答方式,所以有些任務可以用說的。不過每個任務老師設定的作答方式可能不一樣,如果這一題只能打字,你可以跟老師說你打字比較慢,老師可以幫你調整。",
    "內部處理(勿外流)": "書寫困難或特殊需求者,主動提醒老師可調整作答形式。",
    "閱讀教育觀點": "多模態作答(文字/圖像/語音/影像)本來就是得報的設計,對書寫流暢度尚未成熟的中年級學生特別重要。",
    "轉介窗口": "—",
    "優先級": "中",
    "查證狀態": "部分待官網查證"
  },
  {
    "編號": 19,
    "提問者": "學生",
    "分類代碼": "TSK",
    "分類": "任務與作答",
    "客戶會怎麼問": "我請假沒做到,會怎麼樣嗎?",
    "關鍵字": "請假 沒做 逾期 補做",
    "標準回覆(可直接複製)": "不會怎麼樣,跟老師說一聲就好。老師可以幫你延長時間或重新打開那個任務,你補做就可以了。請假不是你的錯,老師都知道。",
    "內部處理(勿外流)": "—",
    "閱讀教育觀點": "—",
    "轉介窗口": "—",
    "優先級": "中",
    "查證狀態": "部分待官網查證"
  },
  {
    "編號": 20,
    "提問者": "學生",
    "分類代碼": "TSK",
    "分類": "任務與作答",
    "客戶會怎麼問": "我寫的東西不見了。",
    "關鍵字": "不見 消失 沒存到 草稿",
    "標準回覆(可直接複製)": "我知道這很嘔,我們先看看還救不救得回來。你重新登入一次,回到那個任務,看看有沒有「草稿」留著。如果沒有,很可能是寫的時候網路斷了。下次寫比較長的內容,可以每寫幾行就按一次暫存。你把名字和任務名稱給我,我也幫你查後台有沒有紀錄。",
    "內部處理(勿外流)": "查後台草稿紀錄;重複發生需列為技術異常回報。",
    "閱讀教育觀點": "—",
    "轉介窗口": "技術客服",
    "優先級": "高",
    "查證狀態": "已確認"
  },
  {
    "編號": 21,
    "提問者": "家長",
    "分類代碼": "AI",
    "分類": "AI 批改與評分",
    "客戶會怎麼問": "AI 打的分數準嗎?機器懂什麼?",
    "關鍵字": "AI 準嗎 機器 分數 可信",
    "標準回覆(可直接複製)": "您的疑問很合理。AI 的角色是「先看過一輪、立刻給孩子回饋」,讓孩子不用等一週才知道自己寫得怎麼樣;但最後的評定是老師的,老師隨時可以調整分數並補上自己的評語。所以請把 AI 的分數當成過程中的提醒,不是成績單。",
    "內部處理(勿外流)": "定位一致:AI 為形成性回饋,教師為最終評定。",
    "閱讀教育觀點": "即時回饋的教學價值在於縮短回饋迴圈;把 AI 定位為總結性評分會同時損害其效度與家長信任。",
    "轉介窗口": "—",
    "優先級": "高",
    "查證狀態": "已確認"
  },
  {
    "編號": 22,
    "提問者": "家長",
    "分類代碼": "CNT",
    "分類": "閱讀內容與選文",
    "客戶會怎麼問": "孩子每天要花多久?功課已經很多了。",
    "關鍵字": "時間 多久 負擔 功課多",
    "標準回覆(可直接複製)": "我完全理解,這是很多家長的第一個顧慮。得報是週報形式,一週更新一次,不是每天都有新的東西要追;老師實際指派的份量也由老師依班上狀況決定。如果您覺得目前的量對孩子太吃力,最有效的做法是直接跟導師反映,老師可以只指派其中一部分。",
    "內部處理(勿外流)": "不要替老師承諾份量。引導家長與導師溝通。",
    "閱讀教育觀點": "閱讀量的合理性應由教師依班級狀況判斷,客服不宜給出「每天幾分鐘」的標準答案。",
    "轉介窗口": "—",
    "優先級": "高",
    "查證狀態": "部分待官網查證"
  },
  {
    "編號": 23,
    "提問者": "家長",
    "分類代碼": "CNT",
    "分類": "閱讀內容與選文",
    "客戶會怎麼問": "我的孩子就是不愛看書,這個有用嗎?",
    "關鍵字": "不愛讀 沒興趣 討厭閱讀 有用嗎",
    "標準回覆(可直接複製)": "我不敢跟您保證用了就會愛上閱讀,但得報的設計方向確實是針對這件事:文章短、有影片和圖片引導、而且可以自己挑要讀哪一篇。「能自己選」對不愛讀的孩子影響很大,因為那讓閱讀從被規定變成自己決定。建議您先讓他挑他有興趣的主題,不要一開始就挑最有教育意義的那篇。",
    "內部處理(勿外流)": "誠實不打包票;給一個具體可執行的建議。",
    "閱讀教育觀點": "自主選擇權是閱讀動機的關鍵變項;興趣導向的選文優先於教育價值導向,是初期建立動機的常見策略。",
    "轉介窗口": "—",
    "優先級": "高",
    "查證狀態": "已確認"
  },
  {
    "編號": 24,
    "提問者": "家長",
    "分類代碼": "CNT",
    "分類": "閱讀內容與選文",
    "客戶會怎麼問": "放暑假還可以用嗎?",
    "關鍵字": "暑假 寒假 放假 繼續用",
    "標準回覆(可直接複製)": "可以,只要帳號還在授權期間內,假期一樣能登入閱讀。得報也會在假期推出閱讀活動,例如完成指定數量的任務累積抽獎機會,對維持假期的閱讀習慣滿有幫助的。目前的檔期我幫您查一下再告訴您。",
    "內部處理(勿外流)": "回覆前確認活動是否仍在檔期,避免報過期活動。",
    "閱讀教育觀點": "假期是閱讀習慣最容易中斷的時期,任務型設計在此時的維持效果最明顯。",
    "轉介窗口": "營運窗口",
    "優先級": "中",
    "查證狀態": "部分待官網查證"
  },
  {
    "編號": 25,
    "提問者": "家長",
    "分類代碼": "LOG",
    "分類": "登入與密碼",
    "客戶會怎麼問": "孩子的密碼可以改成好記一點的嗎?",
    "關鍵字": "改密碼 好記 學生 密碼",
    "標準回覆(可直接複製)": "可以,學生的密碼由導師重設,您跟老師說一聲就好。不過建議不要用生日或連號這種太好猜的,班上同學很容易猜到,之前有孩子被同學登入亂改作業的狀況。折衷的做法是用孩子喜歡的東西加上幾個數字。",
    "內部處理(勿外流)": "—",
    "閱讀教育觀點": "—",
    "轉介窗口": "—",
    "優先級": "中",
    "查證狀態": "部分待官網查證"
  },
  {
    "編號": 26,
    "提問者": "家長",
    "分類代碼": "PAR",
    "分類": "家長端與親子共讀",
    "客戶會怎麼問": "我要怎麼看到孩子在上面做了什麼?",
    "關鍵字": "家長 看孩子 查看 學習狀況",
    "標準回覆(可直接複製)": "您可以申請一個家長帳號,綁定孩子之後就能看到他完成了哪些任務、寫了什麼,以及 AI 和老師給的回饋。綁定需要孩子的學生帳號或老師提供的綁定碼,跟導師說一聲就能拿到。要我現在帶您走一次註冊流程嗎?",
    "內部處理(勿外流)": "常見卡點:家長拿到的是登入密碼而非綁定碼。",
    "閱讀教育觀點": "家長看得到「歷程」而不只是「分數」,是親子對話的素材;引導家長從作品聊起,而不是問成績。",
    "轉介窗口": "—",
    "優先級": "高",
    "查證狀態": "部分待官網查證"
  },
  {
    "編號": 27,
    "提問者": "家長",
    "分類代碼": "PAR",
    "分類": "家長端與親子共讀",
    "客戶會怎麼問": "綁定碼要去哪裡拿?老師說他不知道。",
    "關鍵字": "綁定碼 哪裡拿 老師 不知道",
    "標準回覆(可直接複製)": "綁定資訊是在老師的班級管理裡面產生的,有些老師還不熟悉這個位置。您可以請老師跟我們聯繫,我直接教老師在哪裡按,大概一分鐘。或是您把孩子的姓名、學校和班級給我,我主動聯繫導師協助處理,這樣您不用再跑一趟。",
    "內部處理(勿外流)": "不要讓家長夾在中間反覆傳話,主動接手聯繫教師。",
    "閱讀教育觀點": "—",
    "轉介窗口": "技術客服",
    "優先級": "高",
    "查證狀態": "待官網查證"
  },
  {
    "編號": 28,
    "提問者": "家長",
    "分類代碼": "PAR",
    "分類": "家長端與親子共讀",
    "客戶會怎麼問": "我有兩個孩子,要辦兩個帳號嗎?",
    "關鍵字": "兩個孩子 多個 兄弟姊妹 一個帳號",
    "標準回覆(可直接複製)": "不用,同一個家長帳號可以綁定多位孩子,綁好之後在首頁切換就能分別看。每個孩子各自需要自己的學生帳號或綁定碼,跟各自的導師拿就可以。",
    "內部處理(勿外流)": "—",
    "閱讀教育觀點": "—",
    "轉介窗口": "—",
    "優先級": "中",
    "查證狀態": "部分待官網查證"
  },
  {
    "編號": 29,
    "提問者": "家長",
    "分類代碼": "PAR",
    "分類": "家長端與親子共讀",
    "客戶會怎麼問": "我先生也想看,我們要共用帳號嗎?",
    "關鍵字": "爸爸 媽媽 兩個人 共用 各自",
    "標準回覆(可直接複製)": "建議不要共用。爸爸和媽媽可以各自註冊一個家長帳號,再用同一組綁定資訊分別綁定孩子,兩邊都看得到,也不用交換密碼。共用帳號萬一密碼外流,孩子的資料就會有風險。",
    "內部處理(勿外流)": "—",
    "閱讀教育觀點": "—",
    "轉介窗口": "—",
    "優先級": "中",
    "查證狀態": "待官網查證"
  },
  {
    "編號": 30,
    "提問者": "家長",
    "分類代碼": "PAR",
    "分類": "家長端與親子共讀",
    "客戶會怎麼問": "孩子說不會寫,我可以幫他打字嗎?",
    "關鍵字": "代寫 幫忙 打字 家長 代答",
    "標準回覆(可直接複製)": "陪在旁邊很好,但建議不要幫他寫。因為 AI 和老師是根據孩子寫出來的東西給回饋,如果內容是大人寫的,回饋就對不上他真正的程度,老師也會誤判。您可以改成陪他聊:問他「這篇在講什麼」「你覺得主角為什麼這樣做」,他講得出來,就寫得出來。",
    "內部處理(勿外流)": "肯定家長的用心,再說明為何不宜代寫。",
    "閱讀教育觀點": "口說先行、書寫在後,是中年級書寫困難最有效的支持方式,也是家長最容易上手的做法。",
    "轉介窗口": "—",
    "優先級": "高",
    "查證狀態": "已確認"
  },
  {
    "編號": 31,
    "提問者": "家長",
    "分類代碼": "PAR",
    "分類": "家長端與親子共讀",
    "客戶會怎麼問": "孩子讀完就說「不知道」,我要怎麼跟他討論?",
    "關鍵字": "怎麼陪 討論 不知道 共讀",
    "標準回覆(可直接複製)": "「不知道」通常是問題太大了,孩子不知道從哪裡答起。試著把問題縮小:不要問「這篇在講什麼」,改問「你覺得最好笑或最奇怪的是哪一句?」孩子指得出來,就有話講了。接著再問「為什麼你覺得奇怪?」,這一句就是理解的開始。您不需要懂那篇文章,只要願意聽就夠了。",
    "內部處理(勿外流)": "這是高頻的親子共讀求助,值得客服熟背。",
    "閱讀教育觀點": "把封閉性大哉問換成指認式提問,是提取訊息到推論理解的鷹架,家長不需要專業訓練就能操作。",
    "轉介窗口": "—",
    "優先級": "高",
    "查證狀態": "已確認"
  },
  {
    "編號": 32,
    "提問者": "家長",
    "分類代碼": "PRV",
    "分類": "隱私、安全與規範",
    "客戶會怎麼問": "又是要看螢幕,我很擔心孩子的視力。",
    "關鍵字": "3C 螢幕 視力 眼睛 時間",
    "標準回覆(可直接複製)": "您的擔心很合理。有兩個做法可以參考:一是跟孩子約好,讀文章的部分用紙本或大螢幕、只有作答時才用平板;二是把任務拆成兩次做,中間讓眼睛休息。得報的內容是週更,不是需要天天盯著的形式,所以要控制時間是做得到的。這部分也很適合跟導師一起討論怎麼安排。",
    "內部處理(勿外流)": "接住情緒優先,再給兩個具體可行的做法。",
    "閱讀教育觀點": "把「用眼時間」的主導權還給家庭,比宣稱平台無害更能建立信任。",
    "轉介窗口": "—",
    "優先級": "高",
    "查證狀態": "已確認"
  },
  {
    "編號": 33,
    "提問者": "家長",
    "分類代碼": "PRV",
    "分類": "隱私、安全與規範",
    "客戶會怎麼問": "孩子寫的作文會被拿去訓練 AI 嗎?",
    "關鍵字": "訓練 AI 資料 作文 隱私",
    "標準回覆(可直接複製)": "這是很重要的問題,我不會隨口回答您。學生作品的使用方式,我們一律依照平台的隱私權政策辦理,政策全文公開在官網上。如果您需要一份可以帶去家長會或給學校看的正式書面說明,請告訴我,我幫您向專責窗口申請。",
    "內部處理(勿外流)": "嚴禁臨場自行解釋;一律導向政策原文與正式文件。",
    "閱讀教育觀點": "—",
    "轉介窗口": "個資窗口",
    "優先級": "高",
    "查證狀態": "待官網查證(務必以政策原文回覆)"
  },
  {
    "編號": 34,
    "提問者": "家長",
    "分類代碼": "PRV",
    "分類": "隱私、安全與規範",
    "客戶會怎麼問": "孩子的作品會被公開嗎?我不希望。",
    "關鍵字": "公開 刊登 展示 不要 隱私",
    "標準回覆(可直接複製)": "預設是不會的。孩子的作品只有他本人、任課老師和已綁定的家長看得到,同學看不到。只有在孩子自己投稿、而且通過審核的情況下才有機會刊出。如果您希望完全不要被刊出,我可以幫您在系統中註記,也請您跟導師說一聲,兩邊都留紀錄比較保險。",
    "內部處理(勿外流)": "家長明示不同意刊登者,務必在後台註記並通知導師。",
    "閱讀教育觀點": "—",
    "轉介窗口": "編輯部/個資窗口",
    "優先級": "高",
    "查證狀態": "部分待官網查證"
  },
  {
    "編號": 35,
    "提問者": "家長",
    "分類代碼": "PRV",
    "分類": "隱私、安全與規範",
    "客戶會怎麼問": "我要刪掉孩子在上面的所有資料。",
    "關鍵字": "刪除 資料 個資 撤回 移除",
    "標準回覆(可直接複製)": "您有權提出這個要求,我會協助您正式送件。需要請您提供孩子的姓名、就讀學校與班級,以及能確認您是法定代理人的方式,我們會依個資法規辦理,完成後回覆您。要先提醒您,刪除之後學習紀錄無法復原,如果有想留下的作品,建議先請導師協助匯出。",
    "內部處理(勿外流)": "須驗證申請人身分並建立正式個資案號追蹤。",
    "閱讀教育觀點": "—",
    "轉介窗口": "個資窗口",
    "優先級": "高",
    "查證狀態": "待官網查證(法定處理期限)"
  },
  {
    "編號": 36,
    "提問者": "家長",
    "分類代碼": "PRV",
    "分類": "隱私、安全與規範",
    "客戶會怎麼問": "孩子說在上面被同學講不好聽的話。",
    "關鍵字": "霸凌 不友善 留言 同學 檢舉",
    "標準回覆(可直接複製)": "謝謝您告訴我們,這件事我們會嚴肅處理。麻煩提供發生的位置、大概時間和您看到的內容截圖,我立刻建案並轉給負責窗口,同時也會請導師介入了解。平台對不當行為有明確規範,確認後會依規定限制功能或停用帳號,處理進度我們會主動回覆您。",
    "內部處理(勿外流)": "列高優先;保存證據、建案、同步通知導師與營運窗口。",
    "閱讀教育觀點": "—",
    "轉介窗口": "營運窗口/值班主管",
    "優先級": "高",
    "查證狀態": "已確認"
  },
  {
    "編號": 37,
    "提問者": "家長",
    "分類代碼": "RPT",
    "分類": "學習歷程與成效",
    "客戶會怎麼問": "我孩子做得比別人慢,是不是有問題?",
    "關鍵字": "比較 慢 落後 別人 正常嗎",
    "標準回覆(可直接複製)": "先請您放心,同一個班級裡的閱讀速度本來就差距很大,這在國小階段是正常的。比起快慢,更值得看的是他的回饋裡有沒有進步的痕跡——像是從只會抄原文,變成會用自己的話說。如果您真的擔心,可以請導師從班級報表看他的變化趨勢,那比跟別人比有意義得多。",
    "內部處理(勿外流)": "避免對個別孩子的學習狀況下判斷;導向導師。",
    "閱讀教育觀點": "以個人成長曲線取代同儕橫向比較,是形成性評量的基本立場,也能有效降低家長焦慮。",
    "轉介窗口": "—",
    "優先級": "高",
    "查證狀態": "已確認"
  },
  {
    "編號": 38,
    "提問者": "家長",
    "分類代碼": "RPT",
    "分類": "學習歷程與成效",
    "客戶會怎麼問": "用這個,國語成績會進步嗎?",
    "關鍵字": "成績 進步 有效 國語 分數",
    "標準回覆(可直接複製)": "我不會跟您說用了成績就一定會進步,那樣講不誠實。得報練的是閱讀理解和表達——讀懂文章、講出自己的想法、寫成文字,這些能力跟國語考試有關,但不是同一件事,也需要時間。比較實際的期待是:先看他願不願意讀、講不講得出內容,那個變化通常會比分數先出現。",
    "內部處理(勿外流)": "嚴禁承諾成績效果。可提供學習歷程作為觀察方式。",
    "閱讀教育觀點": "閱讀素養與紙筆評量成績並非等同建構,向家長誠實區分兩者,長期反而能減少客訴。",
    "轉介窗口": "—",
    "優先級": "高",
    "查證狀態": "已確認"
  },
  {
    "編號": 39,
    "提問者": "家長",
    "分類代碼": "RPT",
    "分類": "學習歷程與成效",
    "客戶會怎麼問": "孩子要轉學了,之前寫的東西還在嗎?",
    "關鍵字": "轉學 換學校 資料 保留 歷程",
    "標準回覆(可直接複製)": "學習歷程是跟著孩子的帳號走的,只要帳號還在就會保留。不過如果新學校沒有使用得報,帳號可能會轉為受限狀態,所以我強烈建議您在轉學前先請導師協助匯出孩子的學習歷程留存。需要的話我可以現在就教老師怎麼匯出。",
    "內部處理(勿外流)": "轉學案件主動提醒匯出,避免事後無法救回。",
    "閱讀教育觀點": "—",
    "轉介窗口": "—",
    "優先級": "中",
    "查證狀態": "部分待官網查證"
  },
  {
    "編號": 40,
    "提問者": "家長",
    "分類代碼": "RPT",
    "分類": "學習歷程與成效",
    "客戶會怎麼問": "我想把孩子寫的東西存下來當紀念。",
    "關鍵字": "下載 留念 保存 作品 匯出",
    "標準回覆(可直接複製)": "這個想法很好,孩子長大以後回頭看會很有感覺。家長端可以檢視孩子的歷程,如果要下載保存,我幫您確認目前可用的方式;另外也可以請導師從教師端協助匯出,通常那邊的格式比較完整。",
    "內部處理(勿外流)": "—",
    "閱讀教育觀點": "學習歷程由學生自選作品構成,本身就有回顧與後設反思的價值,值得鼓勵家庭保存。",
    "轉介窗口": "技術客服",
    "優先級": "中",
    "查證狀態": "待官網查證(匯出格式)"
  },
  {
    "編號": 41,
    "提問者": "家長",
    "分類代碼": "RPT",
    "分類": "學習歷程與成效",
    "客戶會怎麼問": "他拿平板都在玩,我怎麼知道他真的有在讀?",
    "關鍵字": "偷玩 有沒有讀 監督 平板",
    "標準回覆(可直接複製)": "您可以從家長端看他實際完成了哪些任務、寫了什麼內容,那個是騙不了人的——有沒有讀進去,從他寫的回答就看得出來。比起盯著他,更有效的方式是每週挑一篇他寫的,跟他聊兩句「你這裡寫的是什麼意思?」,他知道你會看,而且是真的有興趣地看,投入程度會不一樣。",
    "內部處理(勿外流)": "把監控需求轉化為互動建議,避免助長對立的親子關係。",
    "閱讀教育觀點": "家長的閱讀參與(interest-based involvement)比監控行為更能預測孩子的閱讀投入。",
    "轉介窗口": "—",
    "優先級": "高",
    "查證狀態": "已確認"
  },
  {
    "編號": 42,
    "提問者": "家長",
    "分類代碼": "RWD",
    "分類": "投稿、獎勵與點數",
    "客戶會怎麼問": "兌換的獎品什麼時候會寄到?",
    "關鍵字": "獎品 寄送 出貨 多久 沒收到",
    "標準回覆(可直接複製)": "我幫您查。獎品是在兌換確認後統一安排寄送,需要一段作業時間。麻煩提供兌換編號或孩子的姓名與學校,我查一下目前的寄送狀態;如果已經超過公告的時程,我會直接幫您反映並追蹤到收件為止。",
    "內部處理(勿外流)": "查兌換紀錄與物流;缺貨要主動告知並提供替代方案。",
    "閱讀教育觀點": "—",
    "轉介窗口": "營運窗口",
    "優先級": "中",
    "查證狀態": "待官網查證(出貨時程)"
  },
  {
    "編號": 43,
    "提問者": "家長",
    "分類代碼": "SUB",
    "分類": "訂閱、採購與經費",
    "客戶會怎麼問": "這是學校規定要用的嗎?要不要我另外付錢?",
    "關鍵字": "要錢嗎 學校規定 費用 誰付",
    "標準回覆(可直接複製)": "如果是老師在班上帶著使用,通常是學校端已經取得授權,家長不需要另外付費,孩子用老師給的帳號登入就可以。為了給您確定的答案,方便告訴我孩子的學校和班級嗎?我幫您查這所學校目前的授權狀況再回覆您。",
    "內部處理(勿外流)": "先查學校授權狀態再回答,避免誤導家長自行付費。",
    "閱讀教育觀點": "—",
    "轉介窗口": "業務窗口",
    "優先級": "高",
    "查證狀態": "待官網查證(授權查詢方式)"
  },
  {
    "編號": 44,
    "提問者": "家長",
    "分類代碼": "SUB",
    "分類": "訂閱、採購與經費",
    "客戶會怎麼問": "孩子的學校沒有用,我可以自己買嗎?",
    "關鍵字": "自己買 家庭 個人 訂閱 沒有用",
    "標準回覆(可直接複製)": "謝謝您這麼支持孩子的閱讀。目前得報主要是透過學校端導入,家庭自行使用的方式我需要幫您確認。方便留下您的稱呼、聯絡方式和孩子的年級嗎?我轉給業務窗口,請他們直接跟您說明可行的方案,不會讓您空等。",
    "內部處理(勿外流)": "留姓名、電話、孩子年級,轉業務並追蹤是否回覆。",
    "閱讀教育觀點": "—",
    "轉介窗口": "業務窗口",
    "優先級": "高",
    "查證狀態": "待官網查證"
  },
  {
    "編號": 45,
    "提問者": "家長",
    "分類代碼": "TSK",
    "分類": "任務與作答",
    "客戶會怎麼問": "孩子說他做完了,可是我這邊看不到紀錄。",
    "關鍵字": "做完了 看不到 沒有紀錄 家長端",
    "標準回覆(可直接複製)": "最常見的原因是孩子停在「草稿」沒有按最後的送出,草稿在家長端是看不到的。麻煩請孩子登入看一下那個任務是「已完成」還是「未完成」,如果是未完成,按下送出就會出現了。這不是他偷懶,是很多孩子都會漏掉的一步。",
    "內部處理(勿外流)": "先排除草稿未送出,再查後台。避免家長誤會孩子說謊。",
    "閱讀教育觀點": "—",
    "轉介窗口": "技術客服",
    "優先級": "高",
    "查證狀態": "已確認"
  },
  {
    "編號": 46,
    "提問者": "導師",
    "分類代碼": "ACC",
    "分類": "帳號與註冊",
    "客戶會怎麼問": "我下學年調校了,我的帳號和班級怎麼辦?",
    "關鍵字": "調校 換學校 帳號 班級 異動",
    "標準回覆(可直接複製)": "帳號是跟著您走的,到個人資料更新學校資訊即可。但要注意兩件事:一是原班級的資料建議在離開前先匯出留存,二是如果原學校是整校授權、新學校還沒有,您的權限可能會下降。您把新舊學校名稱和註冊信箱給我,我幫您查新學校的授權狀況並協助銜接。",
    "內部處理(勿外流)": "調校案件務必查新校授權,否則老師開學會突然不能用。",
    "閱讀教育觀點": "—",
    "轉介窗口": "帳務/授權窗口",
    "優先級": "高",
    "查證狀態": "待官網查證"
  },
  {
    "編號": 47,
    "提問者": "導師",
    "分類代碼": "AI",
    "分類": "AI 批改與評分",
    "客戶會怎麼問": "AI 給的分數我可以改嗎?家長會問。",
    "關鍵字": "改分數 調整 覆蓋 最終成績",
    "標準回覆(可直接複製)": "可以,而且應該由您決定。AI 的評分是初判,您在批改介面可以直接改分數、補上自己的評語,最終以您的評定為準。跟家長說明時可以這樣講:AI 負責讓孩子馬上收到回饋,老師負責看見這個孩子。",
    "內部處理(勿外流)": "提供可直接對家長說的一句話,減輕老師溝通負擔。",
    "閱讀教育觀點": "—",
    "轉介窗口": "—",
    "優先級": "高",
    "查證狀態": "已確認"
  },
  {
    "編號": 48,
    "提問者": "導師",
    "分類代碼": "AI",
    "分類": "AI 批改與評分",
    "客戶會怎麼問": "AI 的評分標準是什麼?家長問我我答不出來。",
    "關鍵字": "評分標準 規準 依據 怎麼算 解釋",
    "標準回覆(可直接複製)": "每個任務都有對應的評分重點,像是有沒有抓到主旨、有沒有從文章裡找證據、表達是否完整,AI 是照這些重點給分,不是看字數多寡。您告訴我是哪一個任務,我幫您取得那一題的具體規準,讓您可以直接回覆家長。",
    "內部處理(勿外流)": "此為高頻詢問,取得規準說明後建議建檔備用。",
    "閱讀教育觀點": "評分規準的公開透明,是教師願意採信 AI 回饋的前提,也是家長溝通時的必要材料。",
    "轉介窗口": "產品窗口",
    "優先級": "高",
    "查證狀態": "待官網查證(規準說明)"
  },
  {
    "編號": 49,
    "提問者": "導師",
    "分類代碼": "AI",
    "分類": "AI 批改與評分",
    "客戶會怎麼問": "我擔心 AI 會讓孩子學會寫得長,而不是寫得好。",
    "關鍵字": "字數 灌水 寫很長 效度 投機",
    "標準回覆(可直接複製)": "這個顧慮很專業,我不會敷衍您。評分重點是放在有沒有引用文本證據、有沒有形成觀點,而不是字數,所以單純寫長理論上不會拿高分。不過實務上會不會被學生找到取巧方式,是我們持續在檢視的事。如果您在班上觀察到具體的取巧案例,請直接給我截圖,這種第一線回報對我們修正模型非常有價值。",
    "內部處理(勿外流)": "誠實承認風險並收集案例,不要辯護。",
    "閱讀教育觀點": "自動評分的建構效度風險(如以長度代理品質)是真實存在的,向專業教師承認並蒐集反例,比宣稱無虞更能建立信任。",
    "轉介窗口": "產品/AI 團隊",
    "優先級": "高",
    "查證狀態": "已確認"
  },
  {
    "編號": 50,
    "提問者": "導師",
    "分類代碼": "CLS",
    "分類": "班級與學生管理",
    "客戶會怎麼問": "我要怎麼開班?",
    "關鍵字": "開班 建立班級 新增",
    "標準回覆(可直接複製)": "登入後左側「班級管理」→「新增班級」,填班級名稱、年級、學年度,存檔就好,大概三十秒。存完直接接著匯入學生名單,我可以在線上陪您走完,不用您自己摸。",
    "內部處理(勿外流)": "主動提供陪同操作,老師時間有限。",
    "閱讀教育觀點": "—",
    "轉介窗口": "—",
    "優先級": "高",
    "查證狀態": "已確認"
  },
  {
    "編號": 51,
    "提問者": "導師",
    "分類代碼": "CLS",
    "分類": "班級與學生管理",
    "客戶會怎麼問": "全班二十幾個學生,要一個一個建嗎?",
    "關鍵字": "匯入 批次 名單 一次 建帳號",
    "標準回覆(可直接複製)": "不用。班級管理裡有名單範本可以下載,把學生姓名和座號填進去上傳,系統會一次建好全部帳號並產生初始密碼,您直接列印發下去就行。整班大概五分鐘搞定。務必用我們的範本,自己做的檔案欄位對不上會失敗。",
    "內部處理(勿外流)": "強調使用官方範本,這是失敗主因。",
    "閱讀教育觀點": "—",
    "轉介窗口": "—",
    "優先級": "高",
    "查證狀態": "部分待官網查證"
  },
  {
    "編號": 52,
    "提問者": "導師",
    "分類代碼": "CLS",
    "分類": "班級與學生管理",
    "客戶會怎麼問": "我名單傳上去它一直說失敗。",
    "關鍵字": "匯入失敗 錯誤 名單 上傳",
    "標準回覆(可直接複製)": "最常見是四個原因:沒用官方範本、欄位順序被動過、中間有空白列、或是座號重複。您把錯誤訊息截圖傳給我,我一眼就能看出是哪一個,通常改完再傳一次就過了。真的卡住的話,您把名單傳給我,我幫您整理成正確格式回傳。",
    "內部處理(勿外流)": "可代為整理檔案;注意去識別化與資料保管。",
    "閱讀教育觀點": "—",
    "轉介窗口": "技術客服",
    "優先級": "高",
    "查證狀態": "已確認"
  },
  {
    "編號": 53,
    "提問者": "導師",
    "分類代碼": "CLS",
    "分類": "班級與學生管理",
    "客戶會怎麼問": "班上有轉入轉出的學生,要怎麼處理?",
    "關鍵字": "轉入 轉出 轉學 異動 學籍",
    "標準回覆(可直接複製)": "轉出的學生在班級管理設為停用或移出班級,這樣不會佔您的名額;轉入的學生就照一般流程新增。提醒您,轉出前先幫他匯出學習歷程,家長之後常會回來要,先存好會省掉很多麻煩。",
    "內部處理(勿外流)": "主動提醒匯出,這是事後最常見的補救困難。",
    "閱讀教育觀點": "—",
    "轉介窗口": "—",
    "優先級": "中",
    "查證狀態": "待官網查證"
  },
  {
    "編號": 54,
    "提問者": "導師",
    "分類代碼": "CLS",
    "分類": "班級與學生管理",
    "客戶會怎麼問": "我跟科任老師想共用同一個班,可以嗎?",
    "關鍵字": "協同 科任 共用 兩位老師",
    "標準回覆(可直接複製)": "這個需求我們常收到。麻煩提供您的學校、班級名稱和科任老師的註冊信箱,我幫您確認目前版本能不能加協同教師;如果還不支援,也有用任務分享來達到類似效果的替代做法,我一併說明給您。",
    "內部處理(勿外流)": "登記為產品需求並回報;不要只回「目前不支援」就結束。",
    "閱讀教育觀點": "—",
    "轉介窗口": "產品窗口",
    "優先級": "中",
    "查證狀態": "待官網查證"
  },
  {
    "編號": 55,
    "提問者": "導師",
    "分類代碼": "CLS",
    "分類": "班級與學生管理",
    "客戶會怎麼問": "我可以只指派給某幾個學生嗎?",
    "關鍵字": "指派 個別 部分學生 分組",
    "標準回覆(可直接複製)": "可以。指派任務時勾選特定學生就好,不一定要整班。所以您可以把同主題但難度不同的文章,分別派給不同小組,這是得報設計上最實用的地方之一,班上程度落差大的時候特別有感。",
    "內部處理(勿外流)": "順勢帶差異化用法,這是老師最有感的賣點。",
    "閱讀教育觀點": "分組派文+共同主題,能維持全班可以一起討論,又讓每個孩子讀到適合自己的難度。",
    "轉介窗口": "—",
    "優先級": "高",
    "查證狀態": "已確認"
  },
  {
    "編號": 56,
    "提問者": "導師",
    "分類代碼": "CLS",
    "分類": "班級與學生管理",
    "客戶會怎麼問": "我要怎麼快速看到誰還沒交?",
    "關鍵字": "誰沒交 未繳 完成率 進度",
    "標準回覆(可直接複製)": "班級管理的任務列表點進該次任務,就會列出繳交狀態和未繳名單,您可以直接從那裡點進去批改。要拿給行政或家長看的話,這個畫面也可以匯出成報表。",
    "內部處理(勿外流)": "—",
    "閱讀教育觀點": "—",
    "轉介窗口": "—",
    "優先級": "高",
    "查證狀態": "部分待官網查證"
  },
  {
    "編號": 57,
    "提問者": "導師",
    "分類代碼": "CLS",
    "分類": "班級與學生管理",
    "客戶會怎麼問": "學期要結束了,班級要刪掉嗎?",
    "關鍵字": "期末 結業 封存 刪除 學年",
    "標準回覆(可直接複製)": "千萬不要刪除,請用「封存」。封存會保留學生的歷程和作品,新學年再開新班就好;刪除是不可逆的,之後家長來要資料就拿不回來了。封存前建議先匯出班級報表存檔,期末評量和校內備查都用得上。",
    "內部處理(勿外流)": "刪除為不可逆,務必攔下。",
    "閱讀教育觀點": "—",
    "轉介窗口": "—",
    "優先級": "高",
    "查證狀態": "待官網查證(保留年限)"
  },
  {
    "編號": 58,
    "提問者": "導師",
    "分類代碼": "CLS",
    "分類": "班級與學生管理",
    "客戶會怎麼問": "我們班程度落差很大,怎麼辦?",
    "關鍵字": "落差 差異化 程度 兩極",
    "標準回覆(可直接複製)": "這正是得報想解決的問題。做法是:同一個主題選兩到三篇不同難度的文章,用個別指派分給不同小組,全班仍然在談同一個主題,所以最後還是可以一起討論,但每個孩子讀的是他讀得動的版本。搭配 AI 評分追蹤,您也比較容易看出誰該往上調、誰需要再撐一下。",
    "內部處理(勿外流)": "—",
    "閱讀教育觀點": "同主題異難度是差異化閱讀最務實的做法,能兼顧個別適配與班級共同話語。",
    "轉介窗口": "—",
    "優先級": "高",
    "查證狀態": "已確認"
  },
  {
    "編號": 59,
    "提問者": "導師",
    "分類代碼": "CNT",
    "分類": "閱讀內容與選文",
    "客戶會怎麼問": "我課已經很滿了,這個每週要花我多少時間?",
    "關鍵字": "時間 負擔 備課 多久 很忙",
    "標準回覆(可直接複製)": "我直接說實話:一開始建班和匯名單大概要花您十五分鐘,之後每週的主要工作就是選文和指派,熟了以後大概五分鐘。批改的部分因為 AI 會先過一輪,您只要看需要介入的幾位,這是省時間最明顯的地方。如果您時間真的很緊,我建議先從一個月指派兩次開始,不用一開始就每週。",
    "內部處理(勿外流)": "誠實給時間估計;主動降低起步門檻。",
    "閱讀教育觀點": "導入初期的成敗多半取決於教師的時間成本感受,先降低頻率比先追求完整使用更容易存活。",
    "轉介窗口": "—",
    "優先級": "高",
    "查證狀態": "部分待官網查證"
  },
  {
    "編號": 60,
    "提問者": "導師",
    "分類代碼": "CNT",
    "分類": "閱讀內容與選文",
    "客戶會怎麼問": "可以搭配我用的課本進度嗎?",
    "關鍵字": "課本 進度 康軒 南一 翰林 搭配",
    "標準回覆(可直接複製)": "得報是設計來配合國中小教科書教學進度的網路原生報,所以搭配課程是它原本的定位。實務上老師多半是用搜尋找主題相符的文章來對應單元。您告訴我最近要上的單元主題,我幫您找幾篇對得上的,您看看合不合用。",
    "內部處理(勿外流)": "主動代找文章,這是最能建立信任的服務。",
    "閱讀教育觀點": "以主題而非文體對應課本單元,通常比逐課配對更可行,也更容易維持閱讀的完整性。",
    "轉介窗口": "—",
    "優先級": "高",
    "查證狀態": "部分待官網查證"
  },
  {
    "編號": 61,
    "提問者": "導師",
    "分類代碼": "CNT",
    "分類": "閱讀內容與選文",
    "客戶會怎麼問": "有對應到課綱或素養指標嗎?我要寫在教學計畫裡。",
    "關鍵字": "課綱 素養 指標 教學計畫 對應",
    "標準回覆(可直接複製)": "您需要的是可以直接貼進教學計畫的對應表對嗎?這份文件我幫您向產品端申請,取得後直接寄給您。同時提醒,得報的任務設計本身就是朝向素養導向——強調從文本中找證據、形成觀點並表達,這個方向是可以寫進計畫裡的。",
    "內部處理(勿外流)": "此為高頻的行政需求,應備妥制式文件。",
    "閱讀教育觀點": "—",
    "轉介窗口": "產品窗口",
    "優先級": "高",
    "查證狀態": "待官網查證(課綱對應表)"
  },
  {
    "編號": 62,
    "提問者": "導師",
    "分類代碼": "CNT",
    "分類": "閱讀內容與選文",
    "客戶會怎麼問": "文章那麼多,我要怎麼挑適合我班的?",
    "關鍵字": "選文 怎麼挑 適合 難度",
    "標準回覆(可直接複製)": "三個判準給您參考:一是主題跟最近的單元或班級狀況有沒有連結,二是難度要讓班上中間程度的孩子讀得懂,三是這篇有沒有可以討論的爭點——沒有討論空間的文章,任務做起來會很扁平。您跟我說班級年級和最近的主題,我直接推薦幾篇給您試。",
    "內部處理(勿外流)": "提供判準而非只給操作,能讓老師快速上手。",
    "閱讀教育觀點": "選文的可討論性往往比可讀性更決定課堂品質;文本要留有詮釋空間,推論與評鑑層次的提問才成立。",
    "轉介窗口": "—",
    "優先級": "高",
    "查證狀態": "已確認"
  },
  {
    "編號": 63,
    "提問者": "導師",
    "分類代碼": "CNT",
    "分類": "閱讀內容與選文",
    "客戶會怎麼問": "有沒有現成的教學流程可以照著上?",
    "關鍵字": "教案 流程 怎麼上 引導 步驟",
    "標準回覆(可直接複製)": "得報的文章本身就附有任務、策略提示和影片引導,等於已經給了基本的教學骨架,很多老師是直接照著走。如果您想要更完整的教學示例或備課資源,我幫您問產品端有沒有可提供的版本,有的話寄給您。",
    "內部處理(勿外流)": "—",
    "閱讀教育觀點": "—",
    "轉介窗口": "產品窗口",
    "優先級": "中",
    "查證狀態": "待官網查證"
  },
  {
    "編號": 64,
    "提問者": "導師",
    "分類代碼": "CNT",
    "分類": "閱讀內容與選文",
    "客戶會怎麼問": "我發現文章有錯字(或內容怪怪的)。",
    "關鍵字": "錯字 內容 錯誤 回報 更正",
    "標準回覆(可直接複製)": "謝謝您幫我們抓到,第一線老師的回報對我們很重要。麻煩給我文章標題或連結、還有是哪一段,我立刻轉給編輯團隊,確認後會更新內容,處理結果我會回覆您。",
    "內部處理(勿外流)": "記錄文章標題/ID、錯誤段落、回報者,轉編輯部並回覆結案。",
    "閱讀教育觀點": "—",
    "轉介窗口": "編輯部",
    "優先級": "中",
    "查證狀態": "已確認"
  },
  {
    "編號": 65,
    "提問者": "導師",
    "分類代碼": "CNT",
    "分類": "閱讀內容與選文",
    "客戶會怎麼問": "有家長反映某篇文章的議題不適合,我該怎麼回?",
    "關鍵字": "爭議 議題 不適合 家長反映 敏感",
    "標準回覆(可直接複製)": "這種狀況請不要自己扛,我們一起處理。麻煩提供文章標題和家長反映的具體內容,我立刻轉給編輯團隊評估。在我們回覆之前,您可以先跟家長說「學校已經反映給平台、會有正式回覆」,同時您也可以先把那篇改派成其他文章,不影響班上進度。",
    "內部處理(勿外流)": "列高優先;同步通知編輯部與營運窗口;避免教師獨自面對爭議。",
    "閱讀教育觀點": "選文倫理爭議應由平台承擔,不應轉嫁到第一線教師;提供教師可立即執行的替代方案是關鍵。",
    "轉介窗口": "編輯部/營運窗口",
    "優先級": "高",
    "查證狀態": "已確認"
  },
  {
    "編號": 66,
    "提問者": "導師",
    "分類代碼": "LOG",
    "分類": "登入與密碼",
    "客戶會怎麼問": "學生一直忘記密碼,我每天都在重設。",
    "關鍵字": "忘記密碼 一直 重設 很煩 學生",
    "標準回覆(可直接複製)": "我懂,這真的很耗時間。兩個建議:一是重設後把密碼印成小紙條貼在聯絡簿或學生證背面,二是全班統一用同一種好記的規則(例如固定字串加座號),但不要用生日或連號,同學太容易猜到。這樣通常可以把重設的次數降到很低。",
    "內部處理(勿外流)": "給可執行的班級經營建議,而不是只教操作。",
    "閱讀教育觀點": "—",
    "轉介窗口": "—",
    "優先級": "中",
    "查證狀態": "已確認"
  },
  {
    "編號": 67,
    "提問者": "導師",
    "分類代碼": "RPT",
    "分類": "學習歷程與成效",
    "客戶會怎麼問": "成績可以匯出貼到校務系統嗎?",
    "關鍵字": "匯出 成績 校務系統 登記 excel",
    "標準回覆(可直接複製)": "班級任務報表可以匯出完成狀況和成績。至於能不能直接對接您學校的校務系統,要看貴校用的是哪一套,多數老師是匯出後再貼上。您告訴我學校用的系統名稱和需要的欄位,我幫您確認格式對不對得上。",
    "內部處理(勿外流)": "—",
    "閱讀教育觀點": "—",
    "轉介窗口": "—",
    "優先級": "中",
    "查證狀態": "部分待官網查證"
  },
  {
    "編號": 68,
    "提問者": "導師",
    "分類代碼": "RPT",
    "分類": "學習歷程與成效",
    "客戶會怎麼問": "期末我要交成果報告給主任。",
    "關鍵字": "期末 報告 主任 成果 數據",
    "標準回覆(可直接複製)": "我幫您準備。班級報表可以匯出完成率、任務數和學生的作品,這些是最容易呈現的量化資料。建議再挑三到五份學生前後期的作品對照,質性的進步通常比數字更有說服力。您告訴我報告的格式要求,我看看還能提供什麼資料給您。",
    "內部處理(勿外流)": "主動加值:提供質性佐證建議。",
    "閱讀教育觀點": "前後測作品對照是最容易被行政與家長理解的成效證據,也比完成率更貼近閱讀能力的本質。",
    "轉介窗口": "—",
    "優先級": "中",
    "查證狀態": "部分待官網查證"
  },
  {
    "編號": 69,
    "提問者": "導師",
    "分類代碼": "RWD",
    "分類": "投稿、獎勵與點數",
    "客戶會怎麼問": "我想推薦班上學生的作品去投稿。",
    "關鍵字": "推薦 投稿 學生作品 老師",
    "標準回覆(可直接複製)": "很好,老師推薦本來就是投稿的管道之一,在批改介面找到那份作品就可以推薦。有一件事想提醒您:投稿前記得跟學生說一聲,讓他知道作品可能被刊出,有些孩子對公開這件事是敏感的,先問過會比較妥當。",
    "內部處理(勿外流)": "提醒學生知情,避免事後的隱私爭議。",
    "閱讀教育觀點": "—",
    "轉介窗口": "—",
    "優先級": "中",
    "查證狀態": "部分待官網查證"
  },
  {
    "編號": 70,
    "提問者": "導師",
    "分類代碼": "SVC",
    "分類": "推廣、研習與客服流程",
    "客戶會怎麼問": "我要怎麼跟家長說明這個平台?",
    "關鍵字": "跟家長說 說明 親師會 家長 介紹",
    "標準回覆(可直接複製)": "給您三句話就夠用:第一,這是每週一次的閱讀練習,不是額外的功課負擔;第二,AI 只是先給孩子即時回饋,成績還是老師評定的;第三,家長可以申請帳號看到孩子寫了什麼。如果您要在班親會上說明,我可以幫您申請一份給家長的說明資料,您直接發下去。",
    "內部處理(勿外流)": "備妥家長版說明文件,這是每學期初的高峰需求。",
    "閱讀教育觀點": "—",
    "轉介窗口": "營運窗口",
    "優先級": "高",
    "查證狀態": "待官網查證(家長版文件)"
  },
  {
    "編號": 71,
    "提問者": "導師",
    "分類代碼": "TEC",
    "分類": "技術與校園網路",
    "客戶會怎麼問": "電腦教室的 Chromebook 可以用嗎?",
    "關鍵字": "chromebook 電腦教室 載具 平板",
    "標準回覆(可直接複製)": "可以,得報是網頁形式,用瀏覽器開啟登入就能使用,Chromebook 和 iPad 都在常見的使用情境裡,不需要另外安裝軟體。建議把瀏覽器更新到最新版,也可以請資訊組先把網址設成書籤,省掉學生打字的時間。",
    "內部處理(勿外流)": "—",
    "閱讀教育觀點": "—",
    "轉介窗口": "—",
    "優先級": "中",
    "查證狀態": "部分待官網查證"
  },
  {
    "編號": 72,
    "提問者": "導師",
    "分類代碼": "TEC",
    "分類": "技術與校園網路",
    "客戶會怎麼問": "我想投影帶全班一起讀,怎麼弄比較順?",
    "關鍵字": "投影 全班 共讀 大螢幕 帶讀",
    "標準回覆(可直接複製)": "用您的教師帳號登入投影文章就可以了,不需要學生同時登入。實務上滿多老師是先投影全班共讀一次、討論完再讓學生各自登入作答,這樣既省載具、又能先把難的地方講開。提醒記得用完登出,避免學生誤用教師帳號。",
    "內部處理(勿外流)": "—",
    "閱讀教育觀點": "先共讀建立共同理解、再個別作答,能大幅降低低成就學生的起步門檻。",
    "轉介窗口": "—",
    "優先級": "中",
    "查證狀態": "已確認"
  },
  {
    "編號": 73,
    "提問者": "導師",
    "分類代碼": "TSK",
    "分類": "任務與作答",
    "客戶會怎麼問": "有學生想補交,可是截止日過了。",
    "關鍵字": "補交 逾期 延長 期限",
    "標準回覆(可直接複製)": "您可以在該次任務的設定裡延長期限,或針對那一位學生單獨重新開放,其他人不受影響。操作在班級管理的任務列表,點進去就有,大概十秒。",
    "內部處理(勿外流)": "—",
    "閱讀教育觀點": "—",
    "轉介窗口": "—",
    "優先級": "中",
    "查證狀態": "部分待官網查證"
  },
  {
    "編號": 74,
    "提問者": "導師",
    "分類代碼": "TSK",
    "分類": "任務與作答",
    "客戶會怎麼問": "學生說看不到我指派的任務。",
    "關鍵字": "看不到 學生 指派 沒出現",
    "標準回覆(可直接複製)": "先看三件事:一是那次指派有沒有勾到這個學生,二是開放時間設定是不是還沒到,三是學生登入的是不是自己的帳號。八成是前兩個。您把班級和任務名稱給我,我從後台幫您看指派名單,比您自己核對快。",
    "內部處理(勿外流)": "—",
    "閱讀教育觀點": "—",
    "轉介窗口": "—",
    "優先級": "高",
    "查證狀態": "已確認"
  },
  {
    "編號": 75,
    "提問者": "導師",
    "分類代碼": "TSK",
    "分類": "任務與作答",
    "客戶會怎麼問": "一直有學生上傳失敗跑來問我。",
    "關鍵字": "上傳失敗 學生 很多人 一直問",
    "標準回覆(可直接複製)": "如果是好幾個學生同時發生,通常不是學生的問題,是教室網路或校內防火牆擋住了上傳。您先問問看:換用手機網路的學生是不是就成功了?如果是,我幫您整理一份需要開放的網域清單,您轉給資訊組就能解決,不用再一個一個處理。",
    "內部處理(勿外流)": "多人同時發生=網路問題,不要當成個案處理。",
    "閱讀教育觀點": "—",
    "轉介窗口": "技術客服",
    "優先級": "高",
    "查證狀態": "已確認"
  },
  {
    "編號": 76,
    "提問者": "教育人員",
    "分類代碼": "CLS",
    "分類": "班級與學生管理",
    "客戶會怎麼問": "每年新生入學、畢業生離校,帳號要怎麼處理?",
    "關鍵字": "新生 畢業 升級 帳號 每年 學年度",
    "標準回覆(可直接複製)": "建議的做法是:畢業班在學年結束前封存班級(保留歷程、不要刪除),新學年再由各班導師建立新班並匯入名單。如果貴校希望由行政端統一處理而不是讓每位老師自己來,請告訴我班級數,我請窗口確認有沒有可以批次處理的方式,替老師省下開學的時間。",
    "內部處理(勿外流)": "學年交替是全校型的高峰需求,建議提前一個月主動聯繫已導入學校。",
    "閱讀教育觀點": "—",
    "轉介窗口": "技術客服",
    "優先級": "中",
    "查證狀態": "待官網查證(批次作業)"
  },
  {
    "編號": 77,
    "提問者": "教育人員",
    "分類代碼": "CNT",
    "分類": "閱讀內容與選文",
    "客戶會怎麼問": "圖書館的閱讀推動可以怎麼跟這個結合?",
    "關鍵字": "圖書館 閱讀推動 晨讀 結合 圖書教師",
    "標準回覆(可直接複製)": "滿多做法可以搭。例如把每週的得報文章納入晨讀時段、用平台的任務作為閱讀認證的一部分、或是把學生的投稿作品在圖書館做成展示。您告訴我貴校目前的閱讀推動架構,我幫您想幾個不用增加太多行政負擔的結合方式,也可以請推廣窗口提供其他學校的做法。",
    "內部處理(勿外流)": "圖書教師是高價值的推動夥伴,值得投入時間深談。",
    "閱讀教育觀點": "把數位平台嵌入既有的閱讀推動架構(晨讀、認證、展示),比另起爐灶更容易延續,也不會讓老師覺得又多一件事。",
    "轉介窗口": "營運窗口",
    "優先級": "中",
    "查證狀態": "部分待官網查證"
  },
  {
    "編號": 78,
    "提問者": "教育人員",
    "分類代碼": "CNT",
    "分類": "閱讀內容與選文",
    "客戶會怎麼問": "資源班或有特殊需求的學生可以用嗎?",
    "關鍵字": "特教 資源班 特殊需求 學障 無障礙",
    "標準回覆(可直接複製)": "可以使用,而且有兩個設計對這些孩子是有幫助的:一是文章有難度差異,可以指派符合他能力的版本;二是支援語音與影像作答,對書寫困難的孩子門檻低很多。至於朗讀輔助等無障礙功能的支援程度,我幫您向產品端確認實際可用的範圍再回覆您,這部分我不想給您不確定的答案。",
    "內部處理(勿外流)": "無障礙需求務必登記並回報產品端,這類需求量能反映產品缺口。",
    "閱讀教育觀點": "對閱讀障礙學生而言,聽讀與口說作答能把「識字解碼」的門檻與「理解表達」的評量分開,這是關鍵的評量調整。",
    "轉介窗口": "產品窗口",
    "優先級": "高",
    "查證狀態": "待官網查證(無障礙功能)"
  },
  {
    "編號": 79,
    "提問者": "教育人員",
    "分類代碼": "PRV",
    "分類": "隱私、安全與規範",
    "客戶會怎麼問": "個資保護的部分,我要在家長會上報告。",
    "關鍵字": "個資 家長會 報告 說明 合規",
    "標準回覆(可直接複製)": "這個我幫您申請正式書面資料,不用您自己整理。請告訴我需要涵蓋的面向——通常家長會關心的是蒐集了哪些資料、用途、保存期限、以及第三方是否取得——我請個資窗口備妥可對外的說明文件寄給您。請留下需要的時間,我會註明急件。",
    "內部處理(勿外流)": "一律以正式文件回覆,客服不得自行摘要個資政策。",
    "閱讀教育觀點": "—",
    "轉介窗口": "個資窗口",
    "優先級": "高",
    "查證狀態": "待官網查證(以政策原文為準)"
  },
  {
    "編號": 80,
    "提問者": "教育人員",
    "分類代碼": "PRV",
    "分類": "隱私、安全與規範",
    "客戶會怎麼問": "學生使用要不要另外簽家長同意書?",
    "關鍵字": "同意書 家長同意 授權書 簽署",
    "標準回覆(可直接複製)": "這牽涉到貴校的個資作業規範與我們的政策,我請個資窗口提供正式意見與可參考的同意書範本給您,避免我口頭判斷造成貴校的困擾。請留下承辦人與收件信箱,我今天就送件。",
    "內部處理(勿外流)": "不得自行判斷是否需要同意書。",
    "閱讀教育觀點": "—",
    "轉介窗口": "個資窗口",
    "優先級": "高",
    "查證狀態": "待官網查證"
  },
  {
    "編號": 81,
    "提問者": "教育人員",
    "分類代碼": "RPT",
    "分類": "學習歷程與成效",
    "客戶會怎麼問": "我要全校的使用成效報表。",
    "關鍵字": "全校 報表 成效 統計 校長 數據",
    "標準回覆(可直接複製)": "校級的彙整報表請告訴我需要的維度——通常是各班使用率、任務完成率、以及學生的作品樣本,我請相關窗口確認可提供的格式並產出給您。如果是要向校長或家長會簡報,建議除了數字之外再挑幾份學生前後期作品對照,說服力通常比完成率高很多。",
    "內部處理(勿外流)": "確認報表維度與用途後轉窗口;主動建議質性佐證。",
    "閱讀教育觀點": "校級成效若只呈現使用率,容易被質疑為「有用就好」;質性作品對照能回應「到底學到什麼」的提問。",
    "轉介窗口": "營運窗口",
    "優先級": "中",
    "查證狀態": "待官網查證(校級報表)"
  },
  {
    "編號": 82,
    "提問者": "教育人員",
    "分類代碼": "SUB",
    "分類": "訂閱、採購與經費",
    "客戶會怎麼問": "我們學校想全校導入,要走什麼流程?",
    "關鍵字": "全校 導入 採購 申請 流程",
    "標準回覆(可直接複製)": "全校導入由業務窗口協助規劃。麻煩提供學校全銜、預計使用的班級數與學生人數、希望開始的學期,以及承辦人的聯絡方式,我今天就轉單並請業務主動與您聯繫。得報也列在教育部校園數位內容與教學軟體的產品中,如果貴校循該管道採購,流程會更單純,我一併請業務說明兩種方式的差異。",
    "內部處理(勿外流)": "留:單位全銜、班級數、人數、預算年度、承辦人與分機。轉業務並追蹤回覆。",
    "閱讀教育觀點": "—",
    "轉介窗口": "業務窗口",
    "優先級": "高",
    "查證狀態": "部分待官網查證"
  },
  {
    "編號": 83,
    "提問者": "教育人員",
    "分類代碼": "SUB",
    "分類": "訂閱、採購與經費",
    "客戶會怎麼問": "縣市層級的標案或聯合採購怎麼進行?",
    "關鍵字": "標案 縣市 聯合採購 招標 政府",
    "標準回覆(可直接複製)": "縣市層級的案子需要業務與相關單位直接對接規格與期程。請提供承辦單位、預計的採購年度與涵蓋學校數,我立即轉給業務主管,並請他們備妥可供評選使用的產品規格書與相關證明文件給您。",
    "內部處理(勿外流)": "此類案件一律轉業務主管,客服不得提供任何規格或價格承諾。",
    "閱讀教育觀點": "—",
    "轉介窗口": "業務窗口/主管",
    "優先級": "高",
    "查證狀態": "待官網查證"
  },
  {
    "編號": 84,
    "提問者": "教育人員",
    "分類代碼": "SUB",
    "分類": "訂閱、採購與經費",
    "客戶會怎麼問": "價格大概多少?我要編下年度預算。",
    "關鍵字": "價格 多少錢 預算 編列 報價",
    "標準回覆(可直接複製)": "我不能在電話中給您非正式的數字,怕影響您編預算的準確性。請提供學校名稱、預計班級數與人數,我請業務出一份正式報價單給您,通常會註明有效期限,可以直接附在預算表裡。若您有預算上限,也一併告訴我,業務可以據此建議合適的規模。",
    "內部處理(勿外流)": "嚴禁口頭報價。取得需求後轉業務出正式報價。",
    "閱讀教育觀點": "—",
    "轉介窗口": "業務窗口",
    "優先級": "高",
    "查證狀態": "待官網查證(方案與價格)"
  },
  {
    "編號": 85,
    "提問者": "教育人員",
    "分類代碼": "SUB",
    "分類": "訂閱、採購與經費",
    "客戶會怎麼問": "核銷需要哪些憑證?我們會計要求很嚴。",
    "關鍵字": "核銷 發票 憑證 收據 統編 會計",
    "標準回覆(可直接複製)": "沒問題,請告訴我需要的抬頭、統一編號、憑證類型(三聯式發票或收據),以及貴校會計是否有特定格式要求,我轉給帳務窗口開立。如果需要合約影本、廠商資料表或報價單一併附上,也請一次告訴我,我請他們整份備齊寄給您,省得來回補件。",
    "內部處理(勿外流)": "抬頭與統編務必複誦確認。一次問齊所需文件。",
    "閱讀教育觀點": "—",
    "轉介窗口": "帳務窗口",
    "優先級": "高",
    "查證狀態": "待官網查證"
  },
  {
    "編號": 86,
    "提問者": "教育人員",
    "分類代碼": "SVC",
    "分類": "推廣、研習與客服流程",
    "客戶會怎麼問": "有沒有到校說明或教師增能研習?",
    "關鍵字": "研習 增能 到校 說明會 培訓",
    "標準回覆(可直接複製)": "有這類需求請告訴我,我轉給推廣窗口安排。麻煩提供學校名稱、預計參加的教師人數、希望的時段(例如週三下午進修時間),以及您希望的重點——是操作教學、選文與教學設計,還是成效追蹤與家長溝通,內容會依重點調整。",
    "內部處理(勿外流)": "留:學校、人數、時段、主題重點。轉推廣/營運窗口。",
    "閱讀教育觀點": "到校研習的內容重點應由學校端決定;操作教學與教學設計是兩種完全不同的需求,混在一起效果最差。",
    "轉介窗口": "營運窗口",
    "優先級": "高",
    "查證狀態": "待官網查證"
  },
  {
    "編號": 87,
    "提問者": "教育人員",
    "分類代碼": "SVC",
    "分類": "推廣、研習與客服流程",
    "客戶會怎麼問": "老師的使用意願不高,我要怎麼推?",
    "關鍵字": "推動 意願 老師不用 導入 阻力",
    "標準回覆(可直接複製)": "這是導入最真實的問題。我們的經驗是:不要一開始就要求全校每週使用。比較有效的做法是先找兩三位有意願的老師當種子,讓他們用一個學期做出可以分享的成果,再在校內社群分享;同時把起步門檻壓低,例如一個月指派兩次就好。需要的話我可以請推廣窗口提供其他學校的導入節奏給您參考。",
    "內部處理(勿外流)": "給實務策略而非話術;可提供他校經驗。",
    "閱讀教育觀點": "教師採用新工具的關鍵是可見的同儕成功經驗與低起步成本,行政命令式推動的存活率通常最低。",
    "轉介窗口": "營運窗口",
    "優先級": "高",
    "查證狀態": "已確認"
  },
  {
    "編號": 88,
    "提問者": "教育人員",
    "分類代碼": "TEC",
    "分類": "技術與校園網路",
    "客戶會怎麼問": "資訊組需要開哪些白名單?",
    "關鍵字": "白名單 防火牆 網域 資訊組 開通",
    "標準回覆(可直接複製)": "我幫您整理一份正式的連線需求清單,包含需要放行的網域與用途說明,您可以直接轉給資訊組或附在簽呈裡。請留下您的收件信箱,我請技術窗口寄送。若貴校有內容過濾設備的型號,也告訴我,我請他們一併註明設定方式。",
    "內部處理(勿外流)": "備妥正式版網域清單文件,勿口頭念網址。",
    "閱讀教育觀點": "—",
    "轉介窗口": "技術客服",
    "優先級": "高",
    "查證狀態": "待官網查證(網域清單)"
  },
  {
    "編號": 89,
    "提問者": "教育人員",
    "分類代碼": "TEC",
    "分類": "技術與校園網路",
    "客戶會怎麼問": "學校防火牆把影片擋掉了,老師一直反映。",
    "關鍵字": "影片 擋住 防火牆 過濾 播不出來",
    "標準回覆(可直接複製)": "這通常是內容過濾設備擋掉了影音來源。判斷方式很快:請老師改用手機網路測試,如果就能播,就確定是校內網路。我這邊提供需要放行的網域清單給資訊組設定即可。您把學校名稱和收件信箱給我,我今天就把清單寄出。",
    "內部處理(勿外流)": "先做手機網路測試確認是校內問題,再送清單。",
    "閱讀教育觀點": "—",
    "轉介窗口": "技術客服",
    "優先級": "高",
    "查證狀態": "待官網查證(網域清單)"
  },
  {
    "編號": 90,
    "提問者": "閱讀專家",
    "分類代碼": "AI",
    "分類": "AI 批改與評分",
    "客戶會怎麼問": "AI 評分的效度是怎麼驗證的?",
    "關鍵字": "效度 信度 驗證 評分 一致性 研究",
    "標準回覆(可直接複製)": "這是對自動評分最核心的提問。我可以確定的是:AI 評分在平台上的定位是形成性回饋,最終評定權在教師,教師可隨時調整分數。至於與人工評分的一致性如何驗證、是否有信效度資料,我幫您向產品與 AI 團隊申請可提供的說明。若他們目前沒有可對外的資料,我也會據實告訴您。",
    "內部處理(勿外流)": "嚴禁宣稱有研究實證卻拿不出來源。",
    "閱讀教育觀點": "自動評分與人工評分的一致性(如相關係數或精確一致率)是專業檢驗的標準問題;無法提供時應誠實說明,並將需求回報產品端。",
    "轉介窗口": "產品/AI 團隊",
    "優先級": "高",
    "查證狀態": "待官網查證(效度資料)"
  },
  {
    "編號": 91,
    "提問者": "閱讀專家",
    "分類代碼": "AI",
    "分類": "AI 批改與評分",
    "客戶會怎麼問": "即時回饋會不會讓學生學到的是應付機器的技巧?",
    "關鍵字": "應付 投機 遊戲化 技巧 表面學習",
    "標準回覆(可直接複製)": "這個風險是真實的,我不會否認。設計上的因應是評分重點放在有沒有引用文本證據、有沒有形成觀點,而不是字數或關鍵字;同時保留教師調整分數的權力,讓真正的評定回到人身上。但學生實際會不會發展出投機策略,需要現場觀察才知道。如果您在教學現場蒐集到具體案例,我非常希望能收到,這對我們修正模型是最直接的材料。",
    "內部處理(勿外流)": "承認風險並主動邀請現場回饋,不要辯護。",
    "閱讀教育觀點": "回饋迴圈縮短可提升修正意願,但也可能誘發表面策略;評分規準的建構效度與教師的最終裁量權是兩道主要防線。",
    "轉介窗口": "產品/AI 團隊",
    "優先級": "高",
    "查證狀態": "已確認"
  },
  {
    "編號": 92,
    "提問者": "閱讀專家",
    "分類代碼": "CNT",
    "分類": "閱讀內容與選文",
    "客戶會怎麼問": "文章的難度分級依據是什麼?",
    "關鍵字": "難度 分級 依據 可讀性 標準",
    "標準回覆(可直接複製)": "這個問題需要正式的答案,我不想用行銷語言帶過。平台的文章確實有難度層次,讓教師能對不同程度的學生指派不同版本;至於分級所依據的具體指標與建置流程,我幫您向內容團隊申請完整說明。請留下您的單位與信箱,我請他們直接與您聯繫。",
    "內部處理(勿外流)": "專業提問一律轉內容/產品端,切勿臨場推測。",
    "閱讀教育觀點": "難度分級的依據(字彙難度、句法複雜度、概念密度、背景知識需求)會直接影響差異化教學的可行性,是專業使用者的合理提問。",
    "轉介窗口": "編輯部/產品窗口",
    "優先級": "高",
    "查證狀態": "待官網查證(分級依據)"
  },
  {
    "編號": 93,
    "提問者": "閱讀專家",
    "分類代碼": "CNT",
    "分類": "閱讀內容與選文",
    "客戶會怎麼問": "「五座島嶼」背後的閱讀理論依據是什麼?",
    "關鍵字": "五座島嶼 理論 依據 設計理念 架構",
    "標準回覆(可直接複製)": "五座島嶼代表五種閱讀方式,核心主張是閱讀沒有唯一入口與固定順序,讀者可以從最適合自己的路徑進入,最後都通向理解、思考與表達。這個設計理念是公開的;但每一座島各自對應的閱讀取徑與其理論基礎,我幫您向內容團隊申請完整的設計說明,會比我在這裡轉述精確。",
    "內部處理(勿外流)": "理念可轉述,理論對應須取得正式文件。",
    "閱讀教育觀點": "「多重入口」的主張與閱讀動機及自主性的研究方向一致,但需檢視五種取徑之間是否有明確的區辨與進階關係。",
    "轉介窗口": "編輯部",
    "優先級": "高",
    "查證狀態": "待官網查證(設計文件)"
  },
  {
    "編號": 94,
    "提問者": "閱讀專家",
    "分類代碼": "CNT",
    "分類": "閱讀內容與選文",
    "客戶會怎麼問": "跟 PIRLS 或素養導向的評量架構怎麼對應?",
    "關鍵字": "PIRLS PISA 素養 評量架構 對應",
    "標準回覆(可直接複製)": "這需要正式的對應說明,我不會憑印象回答您。請留下您的單位與信箱,我向內容團隊申請是否有可提供的架構對應文件;如果目前沒有正式版本,我也會如實回覆您,不會拿類似的東西充數。",
    "內部處理(勿外流)": "誠實回覆「有或沒有」,不要用相近文件搪塞專業使用者。",
    "閱讀教育觀點": "與國際評量架構的對應是師培與輔導團採用與否的關鍵依據;若無正式對應文件,直說反而能維持專業信任。",
    "轉介窗口": "編輯部/產品窗口",
    "優先級": "高",
    "查證狀態": "待官網查證(架構對應)"
  },
  {
    "編號": 95,
    "提問者": "閱讀專家",
    "分類代碼": "CNT",
    "分類": "閱讀內容與選文",
    "客戶會怎麼問": "選文的審核機制與倫理立場是什麼?會不會有置入?",
    "關鍵字": "選文 審核 倫理 置入 廣告 中立",
    "標準回覆(可直接複製)": "這個提問很重要,我會如實轉達。內容由編輯團隊負責,若您需要了解選文的審核流程、爭議題材的處理原則,以及是否有商業內容的規範,我幫您向編輯部申請正式說明。如果您是針對特定某一篇文章有疑慮,也請告訴我篇名,我會一併轉達並回覆處理結果。",
    "內部處理(勿外流)": "涉及選文倫理的提問一律轉編輯部並回覆結果,不可不了了之。",
    "閱讀教育觀點": "面向兒童的內容平台,選文倫理與商業揭露的透明度是專業社群的基本檢驗項目。",
    "轉介窗口": "編輯部",
    "優先級": "高",
    "查證狀態": "待官網查證(審核機制)"
  },
  {
    "編號": 96,
    "提問者": "閱讀專家",
    "分類代碼": "CNT",
    "分類": "閱讀內容與選文",
    "客戶會怎麼問": "對低成就學生的鷹架設計在哪裡?",
    "關鍵字": "低成就 鷹架 支持 落後 弱勢",
    "標準回覆(可直接複製)": "目前可以指出的支持有幾項:文章有難度層次可供分派、任務附有策略提示與影片引導、以及支援語音和影像作答,讓書寫困難不會直接擋掉表達。這些是結構上的支持;至於是否有針對低成就學生的專門鷹架設計(例如逐步提示或差異化的評分規準),我幫您向內容團隊確認。",
    "內部處理(勿外流)": "可陳述現有機制,專門設計須查證。",
    "閱讀教育觀點": "把識字解碼的困難與理解表達的評量分開,是對低成就讀者最關鍵的調整;多模態作答在這一點上是實質支持。",
    "轉介窗口": "編輯部/產品窗口",
    "優先級": "高",
    "查證狀態": "部分待官網查證"
  },
  {
    "編號": 97,
    "提問者": "閱讀專家",
    "分類代碼": "PAR",
    "分類": "家長端與親子共讀",
    "客戶會怎麼問": "平台要怎麼延伸到家庭閱讀?家長多半不知道怎麼陪。",
    "關鍵字": "家庭 親子共讀 延伸 家長 陪讀",
    "標準回覆(可直接複製)": "家長端能看到孩子的作品與回饋,這其實是最好的親子對話素材——比問「今天讀了什麼」具體太多。我們給家長的建議是:不要問「這篇在講什麼」這種大問題,改問「你覺得最奇怪的是哪一句」,孩子指得出來就有話講。如果貴校要辦家長講座,我可以請推廣窗口協助提供這類可操作的引導方式。",
    "內部處理(勿外流)": "此題常來自要辦親職講座的閱讀推動教師,可主動加值。",
    "閱讀教育觀點": "家長的閱讀參與應設計成低門檻、非教學性的互動;要求家長扮演教師角色通常會失敗。",
    "轉介窗口": "營運窗口",
    "優先級": "中",
    "查證狀態": "已確認"
  },
  {
    "編號": 98,
    "提問者": "閱讀專家",
    "分類代碼": "RPT",
    "分類": "學習歷程與成效",
    "客戶會怎麼問": "有沒有實證研究或第三方的成效資料?",
    "關鍵字": "研究 實證 成效 資料 論文 第三方",
    "標準回覆(可直接複製)": "我幫您問,也請容我先說明:我不會拿使用人數或滿意度調查當成學習成效的證據。如果有正式的研究或第三方評估報告,我請產品端提供;如果目前沒有,我也會直接告訴您現況,並把您的需求回報給團隊。",
    "內部處理(勿外流)": "嚴禁以使用數據充當成效實證。",
    "閱讀教育觀點": "區分「使用指標」與「學習成效證據」是專業對話的前提;混用會立即失去閱讀專業社群的信任。",
    "轉介窗口": "產品窗口",
    "優先級": "高",
    "查證狀態": "待官網查證(研究資料)"
  },
  {
    "編號": 99,
    "提問者": "閱讀專家",
    "分類代碼": "RPT",
    "分類": "學習歷程與成效",
    "客戶會怎麼問": "學習歷程檔案要怎麼用在形成性評量上?",
    "關鍵字": "形成性評量 學習歷程 檔案 評量 應用",
    "標準回覆(可直接複製)": "得報的歷程檔案有一個設計值得利用:作品是由學生自己挑選收錄的。這讓歷程不只是紀錄,而是一次回顧與自我評估的練習。實務上可以請學生說明「為什麼選這一篇」,那段說明往往比作品本身更能看出他的後設認知。再搭配前後期作品對照,就是相當完整的形成性評量素材。",
    "內部處理(勿外流)": "此題可作為對專業社群溝通的示範答案。",
    "閱讀教育觀點": "學生自選作品加上選擇理由的陳述,是檔案評量中最能反映後設認知的環節,也是與單純作品集的關鍵差異。",
    "轉介窗口": "—",
    "優先級": "中",
    "查證狀態": "已確認"
  },
  {
    "編號": 100,
    "提問者": "閱讀專家",
    "分類代碼": "TSK",
    "分類": "任務與作答",
    "客戶會怎麼問": "任務設計對應哪些閱讀理解層次?",
    "關鍵字": "理解層次 提取 推論 詮釋 評鑑 任務設計",
    "標準回覆(可直接複製)": "從公開的設計說明來看,得報的任務強調的是讀懂文章、形成自己的想法並表達出來,方向上涵蓋了從文本提取到詮釋與評鑑的層次,而非停留在找答案。不過各層次在任務中的實際配置比例,我需要向內容團隊取得正式的設計文件再回覆您,這樣對您比較有參考價值。",
    "內部處理(勿外流)": "可說明方向,但比例與架構須取得正式文件。",
    "閱讀教育觀點": "任務若過度集中在提取層次,會退化成閱讀測驗;專業使用者關心的正是各層次的配置比例。",
    "轉介窗口": "編輯部/產品窗口",
    "優先級": "高",
    "查證狀態": "待官網查證(任務設計架構)"
  }
];

  const rows = seedData.map(item => [
    item['編號'] || '',
    item['提問者'] || '',
    item['分類代碼'] || '',
    item['分類'] || '',
    item['客戶會怎麼問'] || '',
    item['關鍵字'] || '',
    item['標準回覆(可直接複製)'] || '',
    item['內部處理(勿外流)'] || '',
    item['閱讀教育觀點'] || '',
    item['轉介窗口'] || '',
    item['優先級'] || '',
    item['查證狀態'] || ''
  ]);

  if (rows.length > 0) {
    sheet.getRange(2, 1, rows.length, headers.length).setValues(rows);
  }

  // 建立對話紀錄與工單表
  if (!ss.getSheetByName(CONFIG.LOG_SHEET_NAME)) {
    const logSheet = ss.insertSheet(CONFIG.LOG_SHEET_NAME);
    logSheet.appendRow(['時間', '使用者ID', '提問訊息', '小幫手回覆']);
    logSheet.getRange('A1:D1').setBackground('#334155').setFontColor('#ffffff').setFontWeight('bold');
  }

  if (!ss.getSheetByName(CONFIG.TICKET_SHEET_NAME)) {
    const ticketSheet = ss.insertSheet(CONFIG.TICKET_SHEET_NAME);
    ticketSheet.appendRow(['工單編號', '登記時間', '提報者ID', '問題與需求描述', '處理狀態', '客服備註', '結案時間']);
    ticketSheet.getRange('A1:G1').setBackground('#1e3a8a').setFontColor('#ffffff').setFontWeight('bold');
  }

  if (!ss.getSheetByName(CONFIG.UNANSWERED_SHEET_NAME)) {
    const unSheet = ss.insertSheet(CONFIG.UNANSWERED_SHEET_NAME);
    unSheet.appendRow(['記錄時間', '提問者ID', '未命中之提問問題', 'AI當次回覆', '處理狀態', '客服補充標準解答']);
    unSheet.getRange('A1:F1').setBackground('#c2410c').setFontColor('#ffffff').setFontWeight('bold');
  }

  // 自動調整欄寬
  sheet.autoResizeColumns(1, headers.length);
  Logger.log('得報 100 題知識庫初始化完成!');
}

// ==========================================
// 輔助函式:LINE API 與 對話紀錄
// ==========================================

function sendLineReply(replyToken, text) {
  if (!CONFIG.LINE_ACCESS_TOKEN || CONFIG.LINE_ACCESS_TOKEN.includes('填入您的')) return;
  const url = 'https://api.line.me/v2/bot/message/reply';
  const payload = {
    replyToken: replyToken,
    messages: [{ type: 'text', text: text }]
  };
  UrlFetchApp.fetch(url, {
    method: 'post',
    headers: { 'Authorization': 'Bearer ' + CONFIG.LINE_ACCESS_TOKEN, 'Content-Type': 'application/json' },
    payload: JSON.stringify(payload),
    muteHttpExceptions: true
  });
}

function showLineLoading(userId) {
  if (!CONFIG.LINE_ACCESS_TOKEN || CONFIG.LINE_ACCESS_TOKEN.includes('填入您的')) return;
  try {
    UrlFetchApp.fetch('https://api.line.me/v2/bot/chat/loading/start', {
      method: 'post',
      headers: { 'Authorization': 'Bearer ' + CONFIG.LINE_ACCESS_TOKEN, 'Content-Type': 'application/json' },
      payload: JSON.stringify({ chatId: userId, loadingSeconds: 15 }),
      muteHttpExceptions: true
    });
  } catch(e) {}
}

function logConversation(query, reply, userId) {
  try {
    const ss = SpreadsheetApp.getActiveSpreadsheet();
    let sheet = ss.getSheetByName(CONFIG.LOG_SHEET_NAME);
    if (!sheet) {
      sheet = ss.insertSheet(CONFIG.LOG_SHEET_NAME);
      sheet.appendRow(['時間', '使用者ID', '提問訊息', '小幫手回覆']);
    }
    const now = new Date();
    const twTimeStr = Utilities.formatDate(now, 'GMT+8', 'yyyy/MM/dd HH:mm:ss');
    sheet.appendRow([twTimeStr, userId, query, reply.slice(0, 300)]);
  } catch(e) {}
}
index.html (Apps Script 網頁控制台面板)
<!DOCTYPE html>
<html lang="zh-TW">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>得報 NEWSY365 客服知識庫控制台</title>
  <script src="https://cdn.tailwindcss.com"></script>
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
  <style>
    body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Noto Sans TC", sans-serif; }
  </style>
</head>
<body class="bg-slate-100 text-slate-800 min-h-screen">

  <!-- 頂部導航 -->
  <header class="bg-indigo-950 text-white shadow-md">
    <div class="max-w-6xl mx-auto px-4 py-4 flex items-center justify-between">
      <div class="flex items-center space-x-3">
        <div class="w-10 h-10 rounded-xl bg-indigo-600 flex items-center justify-center text-xl font-bold">
          <i class="fa-solid fa-newspaper"></i>
        </div>
        <div>
          <h1 class="text-lg font-bold">得報 NEWSY365 客服知識庫</h1>
          <p class="text-xs text-indigo-200">LINE Bot 智慧知識庫・視覺化管理後台</p>
        </div>
      </div>
      <div class="flex items-center space-x-2">
        <span class="px-3 py-1 bg-indigo-800 border border-indigo-600 rounded-full text-xs text-indigo-200">
          <i class="fa-solid fa-circle text-emerald-400 text-[10px] mr-1"></i>Gemini RAG 運行中
        </span>
      </div>
    </div>
  </header>

  <!-- 主內容區 -->
  <main class="max-w-6xl mx-auto px-4 py-8 space-y-6">

    <!-- 快捷分類標籤與搜尋 -->
    <div class="bg-white p-5 rounded-2xl border border-slate-200 shadow-sm space-y-4">
      <div class="flex flex-col sm:flex-row items-center justify-between gap-3">
        <div class="relative w-full sm:w-80">
          <i class="fa-solid fa-magnifying-glass absolute left-3 top-3 text-slate-400 text-sm"></i>
          <input type="text" id="searchInput" placeholder="搜尋問題、回覆關鍵字、內部筆記..." 
            class="w-full pl-9 pr-4 py-2 text-sm border border-slate-300 rounded-xl focus:ring-2 focus:ring-indigo-500 focus:outline-none"
            oninput="filterCards()">
        </div>
        <div class="flex flex-wrap gap-1.5 text-xs">
          <button onclick="filterCategory('ALL')" class="cat-btn px-3 py-1.5 rounded-lg bg-indigo-700 text-white font-medium">全部</button>
          <button onclick="filterCategory('學生')" class="cat-btn px-3 py-1.5 rounded-lg bg-slate-100 text-slate-600 hover:bg-slate-200">🎒 學生</button>
          <button onclick="filterCategory('家長')" class="cat-btn px-3 py-1.5 rounded-lg bg-slate-100 text-slate-600 hover:bg-slate-200">👨‍👩‍👧 家長</button>
          <button onclick="filterCategory('導師')" class="cat-btn px-3 py-1.5 rounded-lg bg-slate-100 text-slate-600 hover:bg-slate-200">👩‍🏫 導師</button>
          <button onclick="filterCategory('教育人員')" class="cat-btn px-3 py-1.5 rounded-lg bg-slate-100 text-slate-600 hover:bg-slate-200">🏫 教育人員</button>
          <button onclick="filterCategory('閱讀專家')" class="cat-btn px-3 py-1.5 rounded-lg bg-slate-100 text-slate-600 hover:bg-slate-200">📚 閱讀專家</button>
        </div>
      </div>
    </div>

    <!-- 知識庫卡片清單 -->
    <div id="cardsGrid" class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-5">
      <div class="col-span-full text-center py-12 text-slate-400 text-sm">
        <i class="fa-solid fa-spinner animate-spin mr-2"></i>載入得報客服知識庫中...
      </div>
    </div>

  </main>

  <script>
    let rawKnowledgeData = [];
    let currentCategory = 'ALL';

    window.onload = function() {
      if (typeof google !== 'undefined' && google.script && google.script.run) {
        google.script.run.withSuccessHandler(renderData).getKnowledgeBaseData();
      } else {
        // 本機預覽測試模式
        renderData([
          { id: 1, role: '學生', category: 'AI 批改與評分', question: 'AI 給我的分數好低,我覺得我寫得很好。', standardReply: '你願意說出來很好,這代表你有認真寫。AI 給的分數不是最後的成績...', internalNote: '引導回老師,不要否定學生感受。' }
        ]);
      }
    };

    function renderData(data) {
      rawKnowledgeData = data || [];
      filterCards();
    }

    function filterCategory(cat) {
      currentCategory = cat;
      document.querySelectorAll('.cat-btn').forEach(b => {
        b.className = 'cat-btn px-3 py-1.5 rounded-lg bg-slate-100 text-slate-600 hover:bg-slate-200';
      });
      event.target.className = 'cat-btn px-3 py-1.5 rounded-lg bg-indigo-700 text-white font-medium';
      filterCards();
    }

    function filterCards() {
      const kw = document.getElementById('searchInput').value.toLowerCase();
      const grid = document.getElementById('cardsGrid');
      grid.innerHTML = '';

      const filtered = rawKnowledgeData.filter(item => {
        const matchCat = (currentCategory === 'ALL' || item.role === currentCategory || item.category === currentCategory);
        const q = (item.question || item.title || '').toLowerCase();
        const ans = (item.standardReply || item.content || '').toLowerCase();
        const note = (item.internalNote || '').toLowerCase();
        const matchKw = (!kw || q.includes(kw) || ans.includes(kw) || note.includes(kw));
        return matchCat && matchKw;
      });

      if (filtered.length === 0) {
        grid.innerHTML = '<div class="col-span-full text-center py-12 text-slate-400 text-sm">查無符合條件的項目</div>';
        return;
      }

      filtered.forEach(item => {
        const card = document.createElement('div');
        card.className = 'bg-white p-5 rounded-2xl border border-slate-200 shadow-sm flex flex-col justify-between space-y-3 hover:shadow-md transition-shadow';
        card.innerHTML = `
          <div class="space-y-2">
            <div class="flex items-center justify-between">
              <span class="text-[11px] font-bold px-2.5 py-0.5 rounded-full bg-indigo-50 text-indigo-700 border border-indigo-200">${item.role || '提問者'}・${item.category || '得報業務'}</span>
              <span class="text-xs text-emerald-600 font-semibold"><i class="fa-solid fa-check mr-1"></i>啟用中</span>
            </div>
            <h3 class="font-bold text-slate-900 text-sm leading-snug">${item.question || item.title}</h3>
            <p class="text-xs text-slate-600 whitespace-pre-line leading-relaxed max-h-48 overflow-y-auto">${item.standardReply || item.content}</p>
          </div>
          <div class="pt-2 border-t border-slate-100 flex items-center justify-between text-[11px] text-slate-400">
            <span>項目 ID: #${item.id || ''}</span>
            <span class="text-indigo-700 font-medium">得報客服</span>
          </div>
        `;
        grid.appendChild(card);
      });
    }
  </script>
</body>
</html>