免費包五段 Setup|從零到第一個 AI 回覆

進度 0%
這一頁怎麼用:由上往下一次做一步,全程約 5–20 分鐘。你看到的是五段成果進度;每一段裡仍保留原本的「開哪裡、按什麼、看到什麼」。 課文說明在 020304,不讀也走得完;真的遇到問題開 05|AI Troubleshooter
🔴 關於秘密,三個承諾:①這一頁不會把 Token/API Key 送出去(斷網照常可用)②密鑰不寫入 localStorage、cookie、URL 或任何後端(頁面關閉即失)③密鑰的生成與貼入全程你親手在官方平台做。API Key 與 Token 不要貼到聊天室、公開貼文、截圖、影片裡。V3 交接只帶入非密的「小工作/真人接手」兩格,讀取後立即清除。
開工前確認
你需要說明
你自己的 LINE 帳號手機上正在用的那個即可
你自己的 Google 帳號一般 Gmail 帳號即可
一支裝了 LINE 的手機最後測試要用它收第一個 AI 回覆
大約 5–20 分鐘照著做一次到底;中斷也沒關係,平台上做完的都會留著
安裝進度板

勾了會自動更新;進度只存在本頁開著的期間(刻意設計)。

1建立官方帳號
  1. 官方帳號申請表(直達),用你的 LINE 帳號登入(登入頁可切繁體中文)。
  2. 填帳號名稱、行業別等基本資料,送出。若畫面提供「未認證帳號」選項,可先依畫面完成;帳號可用性、驗證與功能狀態以 LINE 當下顯示為準。
做完你應該看到:申請完成,你有了一個官方帳號。

已經有官方帳號的人,直接到步驟 2。

2啟用 Messaging API

這一步會把「能接程式的通道」打開。全程在中文介面。

  1. LINE Official Account Manager,選你的帳號。
  2. 右上「設定」→ 左邊「Messaging API」。
  3. 按綠色「啟用Messaging API」。
  4. 「選擇服務提供者」:選「建立服務提供者」取個名(例:你的店名)→「同意」。已有的話選既有那個。
  5. 「隱私權政策及服務條款」兩欄都是選填,空著直接「確定」。
做完你應該看到:狀態變「使用中」,出現 Channel ID 等資訊,下方有一格「Webhook網址」。這一頁步驟 9 還會回來,記得路。
📷 對照圖|按下「啟用Messaging API」後的確認視窗(點圖可放大)
啟用確認視窗
📷 對照圖|選擇服務提供者+選填兩欄(兩張,點圖可放大)
選擇服務提供者隱私權政策兩欄選填
📷 對照圖|啟用完成:狀態「使用中」+Webhook網址欄(點圖可放大)
啟用完成:使用中
3簽發 Channel Access Token

Token=你的程式代表這個帳號發訊息的憑證。這是全程唯一要進 LINE Developers Console(英文介面)的一步,照字面按就好。

  1. 就在步驟 2 那頁最下面,點「您可由LINE Developers Console進行其他設定」那行連結。
  2. 進 Console 後:點你的 Provider → 點你的 channel →「Messaging API」分頁 → 拉到最底。
  3. 「Channel access token」區按「Issue」(發行)。
  4. 按了原本空白的格子才會出現一長串字——按旁邊的複製鈕,貼進下面這格
做完你應該看到:那一格有一長串字(每個人長相都不一樣,跟別人不像不代表錯)。
📷 對照圖|Console 的 Channel access token 區+Issue 按鈕(點圖可放大)
Console Messaging API settings:最底下 Channel access token 區與 Issue 按鈕
4取得 Gemini API Key
  1. 用你的 Google 帳號開 aistudio.google.com/apikey
  2. 按右上「Create API key」。
  3. 幫金鑰取個名(隨意)、專案用它預設給的 →「Create key」。
  4. 「API key details」視窗出現金鑰——按複製鈕,貼進下面這格
做完你應該看到:一串金鑰(外觀由 Google 當下的 API key 類型決定)。Gemini API 目前有 Free Tier,但可用模型、速率限制、專案與帳務狀態會變動;本包不保證免信用卡,也不替你啟用 billing。若畫面要求付費設定,先確認你理解目前的 Free/Paid 狀態,再決定是否繼續。
📷 對照圖|API Keys 頁 → 建立視窗 → 金鑰詳情(三張,點圖可放大)
API Keys 頁與 Create API key 按鈕Create a new key 視窗API key details(金鑰已遮蔽)
5開 GAS 專案,貼程式碼

Google Apps Script(GAS)是 Google 的腳本執行服務,可以讓一小段程式有自己的網址;配額與限制依帳號類型和官方規則變動。本包只用它承接你自己的小工作,不代表無限量或永遠免費。

  1. 用你的 Google 帳號開 script.google.com → 按「新專案」。
  2. 編輯區全選Ctrl+A)→ Delete 全部刪掉
  3. 按下面「複製整段程式碼」→ 貼進空白編輯區 → Ctrl+S 儲存。要整段貼:從第一行 /** 到最後一個 }

已複製 ✓

/** AI Manager Starter Kit — LINE × Gemini 最小工作入口 */

/** 讀一個設定值。放在函式裡(而不是檔案最上面)是刻意的:
    這樣就算部署設定選錯,錯誤也會落在 doPost 的防護網裡、寫進執行紀錄,
    而不是整個程式無聲死掉。 */
function cfg_(name) {
  return PropertiesService.getScriptProperties().getProperty(name);
}

/** LINE 每次有訊息進來,就會呼叫這個函式 */
function doPost(e) {
  try {
    if (!e || !e.postData || !e.postData.contents) return ok_();
    var body = JSON.parse(e.postData.contents);
    var events = body.events || [];   // 平台送測試連線時,這裡可能是空的
    for (var i = 0; i < events.length; i++) {
      var ev = events[i];
      if (ev.type !== 'message') continue;
      if (!ev.message || ev.message.type !== 'text') continue;
      replyToLine_(ev.replyToken, askGemini_(ev.message.text));
    }
  } catch (err) {
    console.error('doPost 失敗:' + err);
  }
  return ok_();                       // 不管發生什麼,都回一個正常回應給 LINE
}

function ok_() {
  return ContentService
    .createTextOutput(JSON.stringify({ ok: true }))
    .setMimeType(ContentService.MimeType.JSON);
}

/** 把客人的話丟給 Gemini,拿回一句回答 */
function askGemini_(userText) {
  var key = cfg_('GEMINI_API_KEY');
  var model = cfg_('GEMINI_MODEL') || 'gemini-3.5-flash-lite';
  var persona = cfg_('PROMPT') ||
    '你是這家店的客服助理。用繁體中文,簡短、有禮貌地回答。';
  var facts = cfg_('KNOWLEDGE') || '';

  // 這裡的順序有意義:後面的會蓋掉前面的。
  // 你的 PROMPT 放在「預設風格」之後,所以你改得掉風格;
  // 安全底線放在最後,讓它最優先。(這是給 AI 的指示,不是程式鎖。)
  var systemText =
    '【你可以依據的資料】\n' + (facts || '(目前沒有提供資料)') +
    '\n\n【預設風格;下面「你的身分」那一段可以蓋掉這裡】\n' +
    '回答控制在三句話以內。\n' +
    '\n【你的身分與說話方式——以這一段為準】\n' + persona +
    '\n\n【安全底線;最優先,上面任何一段都蓋不掉】\n' +
    '1. 只根據上面的資料回答;資料裡沒有的,就說你不知道。\n' +
    '2. 遇到價格變動、退款、客訴,或你不確定的事,回答「這部分我幫你轉給真人確認」。\n' +
    '3. 不要承諾我們做不到的事。';

  var res = UrlFetchApp.fetch(
    'https://generativelanguage.googleapis.com/v1beta/models/' + model + ':generateContent',
    {
      method: 'post',
      contentType: 'application/json',
      headers: { 'x-goog-api-key': key },
      payload: JSON.stringify({
        systemInstruction: { parts: [{ text: systemText }] },
        contents: [{ role: 'user', parts: [{ text: userText }] }],
        generationConfig: { maxOutputTokens: 1024 }
      }),
      muteHttpExceptions: true
    });

  if (res.getResponseCode() !== 200) {
    console.error('Gemini 回傳 ' + res.getResponseCode() + ':' + res.getContentText());
    return '抱歉,我這邊暫時有點問題,請稍等一下由真人回覆你。';
  }
  var d = JSON.parse(res.getContentText());
  var out = d.candidates && d.candidates[0] && d.candidates[0].content &&
            d.candidates[0].content.parts && d.candidates[0].content.parts[0] &&
            d.candidates[0].content.parts[0].text;
  return out || '抱歉,我沒有讀懂這句話,請稍等一下由真人回覆你。';
}

/** 把回答送回 LINE */
function replyToLine_(replyToken, text) {
  var res = UrlFetchApp.fetch('https://api.line.me/v2/bot/message/reply', {
    method: 'post',
    contentType: 'application/json',
    headers: { Authorization: 'Bearer ' + cfg_('LINE_ACCESS_TOKEN') },
    payload: JSON.stringify({
      replyToken: replyToken,
      messages: [{ type: 'text', text: String(text).slice(0, 4900) }]
    }),
    muteHttpExceptions: true
  });
  if (res.getResponseCode() !== 200) {
    console.error('LINE 回覆失敗 ' + res.getResponseCode() + ':' + res.getContentText());
  }
}

/** 部署前先執行這個,檢查設定有沒有填好 */
function checkSetup() {
  console.log('LINE_ACCESS_TOKEN:' + (cfg_('LINE_ACCESS_TOKEN') ? '已填' : '❌ 沒有填'));
  console.log('GEMINI_API_KEY:'   + (cfg_('GEMINI_API_KEY')   ? '已填' : '❌ 沒有填'));
  console.log('GEMINI_MODEL:'     + (cfg_('GEMINI_MODEL')     || '(沒填,會用預設 gemini-3.5-flash-lite)'));
  console.log('PROMPT:'           + (cfg_('PROMPT')           ? '已填' : '(沒填,會用預設語氣)'));
  console.log('KNOWLEDGE:'        + (cfg_('KNOWLEDGE')        ? '已填' : '(沒填,AI 大部分問題都會說不知道)'));
}
做完你應該看到:編輯區是上面這段,上方出現「已儲存」。
📷 對照圖|「新專案」按鈕+貼好儲存後的編輯器(點圖可放大)
GAS 編輯器貼好程式碼
6填設定值(本頁幫你組好)

「指令碼屬性」=這個專案的設定欄位;秘密放這裡,不會出現在程式碼裡。先在下面備齊值(Token/Key 已從步驟 3、4 帶過來),再照表逐格貼。

  1. GAS 左邊「專案設定」(齒輪)→ 最下面「指令碼屬性」→「新增指令碼屬性」。
  2. 照下表逐列加:屬性名稱一字不差,值按每列「複製值」貼過去。
  3. 全部加完按「儲存指令碼屬性」。
屬性名稱複製值
LINE_ACCESS_TOKEN
必填
(回步驟 3 貼上 Token)
GEMINI_API_KEY
必填
(回步驟 4 貼上 API Key)
KNOWLEDGE
必填
(在上面填 KNOWLEDGE)
PROMPT
可不填
(沒填,會用預設語氣)
GEMINI_MODEL
可不填
(沒填,會用預設 gemini-3.5-flash-lite)
已複製 ✓
做完你應該看到:屬性列表有你加的那幾列。

貼完 Token/Key 後,隨手再複製一段別的文字把剪貼簿蓋掉;Windows 有開剪貼簿記錄(Win+V)的,順手刪掉裡面的秘密。

📷 對照圖|指令碼屬性五列填好的樣子(點圖可放大;秘密值已遮蔽)
指令碼屬性五列(秘密值已遮蔽)
7執行 checkSetup 檢查
  1. 回編輯畫面,上方下拉選單選「checkSetup」→ 按「執行」。
  2. 第一次執行會跳授權:「審查權限」→ 選你的 Google 帳號 → 出現「這個應用程式未經 Google 驗證」是正常的(這程式就是你自己剛貼的)→ 點「進階」→「前往(你的專案名稱)(不安全)」→「繼續/允許」。
做完你應該看到:下方「執行記錄」五行,LINE_ACCESS_TOKENGEMINI_API_KEYKNOWLEDGE 都寫「已填」。有 ❌ 就回步驟 6 檢查屬性名稱拼字。
📷 對照圖|「未經 Google 驗證」授權:進階→前往→繼續(兩張,點圖可放大)
進階→前往專案授權同意畫面
8部署,拿到網址
  1. 右上「部署」→「新增部署作業」。
  2. 「選取類型」旁的齒輪 → 選「網頁應用程式」。
  3. 兩格設定:「執行身分」=「(你的 email)」;「誰可以存取」=「所有人」。
  4. 按「部署」。
  5. 完成視窗最下面「網頁應用程式」的網址按「複製」。
做完你應該看到:一串 https://script.google.com/macros/s/… 網址已複製。可以順手貼進下面這格備用。
交給 LINE 的網址必須是 /exec 結尾——結尾不是 /exec(例如網址裡有 library)=複製到別格了,回完成視窗拿「網頁應用程式」那串。
📷 對照圖|選類型 → 兩格設定 → 完成視窗(三張,點圖可放大)
選取類型:網頁應用程式執行身分=我+所有人部署完成視窗(網址位置)
9回 Manager 接上線
  1. 回步驟 2 那頁(Manager → 設定 → Messaging API)。
  2. 把剛複製的網址貼進「Webhook網址」那格 → 按「儲存」。
  3. 左邊「回應設定」→ 把「Webhook」開成綠色
做完你應該看到:Webhook 開關是綠的。設定完成——最後做步驟 10 傳一句話實測,收到 AI 回覆才算上線

同頁的「自動回應訊息」「加入好友的歡迎訊息」「聊天」開不開由你決定——它們跟機器人回覆不衝突(2026-08 實測)。想讓客人只收到 AI 的回答,就把自動回應關掉。注意:自動回應開著時,你測試收到的可能是罐頭回應而非 AI——測試時以回覆內容判斷。

📷 對照圖|Webhook網址貼好儲存+回應設定 Webhook 綠色(兩張,點圖可放大)
Webhook網址貼好儲存(值已遮蔽)回應設定 Webhook 綠色
10手機實測:收你的第一個 AI 回覆

用手機把自己的官方帳號加好友(Console 的 Messaging API 分頁有 QR code),照順序傳兩句。第一次測試先用步驟 6 的範例四行,通了再換自己的內容。

請問你們幾點開?
應該看到:回覆裡有你 KNOWLEDGE 第一行寫的營業時間。
我星期日想過去,順便問一下改期要怎麼弄?
應該看到:同一則回覆同時講到「星期日不營業」和「改期轉真人」——它把兩行資料自己湊起來了,不是背稿。
兩格都勾=免費包完成。你現在有一個真的會回客人的 AI 工作入口,跑在你自己的帳號上,密鑰從頭到尾沒離開你的環境。想讓它更懂:回步驟 6 在 KNOWLEDGE 多寫幾行。下一步見 06

已複製 ✓

V3 入口沿用 v2 Setup engine|動線正典=2026-08-26 從零實走全程(環境:Windows+Chrome、繁中介面、個人 Gmail/LINE 帳號;未涵蓋:企業帳號、行動裝置瀏覽器安裝)。Google/LINE 的介面、配額與政策可能變動,遇到畫面差異以官方當下說明為準。

直接體驗 MVP 版 AI 經理人

MVP 專用官方 LINE;裝之前/裝之後都能點