WORKS | 作品

手機回報表單:Google Apps Script 做的填報、審核與 LINE 一鍵開啟

用 Google Apps Script 做的手機回報表單:一頁一題、草稿自動暫存、選項從試算表載入、多層連動、姓名遮罩,主管改狀態就自動寄通知信,還能從 LINE 一鍵開啟。附兩個可試填的 Demo。

STACK / 技術
Google Apps Script · Google 試算表 · LINE Messaging API · LIFF · HTML/JavaScript · clasp
LINK / 連結
試填 Demo:外勤維修回報 →
手機填表、Apps Script 驗證、試算表一筆一列、改審核狀態自動寄信的流程圖

已在實際組織使用,對象是用手機回報的成員與負責審核的管理者。為了保密,這頁的情境、名稱與資料都換成虛構的,不對應原本的單位與欄位。

很多團隊回報資料的方式是 Google 表單,或在群組裡傳訊息再由一個人整理。人一多就開始出問題:選項要一直改、有人填錯欄位、手機上表單太長沒填完就關掉,審核結果還要一個一個私訊通知。

這套表單的做法是:填的人只用手機,管的人只用試算表,中間的驗證、整理和通知交給程式。

試試看

兩個 Demo 都是純網頁示範,資料只存在你自己的瀏覽器,不會送到任何地方:

  • 外勤維修回報:一頁一題、進度條、區域 → 服務站 → 技師逐層連動、客戶姓名遮罩、最後確認清單、沒填完關掉下次會接回來。下方可以直接改「管理者設定」,看選項怎麼跟著變。
  • 工時申報與主管審核:員工用格狀按鈕選工時送出;切到主管分頁改審核狀態,就會看到通知信內容、審核者與時間自動回填,員工端的累計只算核定工時。

做了什麼

  • 一頁一題的手機版面:頂部進度條、可回上一題修改,最後一頁列出全部答案,點哪列就跳回哪題。
  • 草稿自動暫存:每答一題就存在手機瀏覽器,中途關掉下次打開回到同一題,送出後自動清除,7 天沒送出的草稿作廢。
  • 選項全部放在試算表:下拉、單選、名單都從試算表的分頁讀進來,管理者改表格就好,不用改程式。
  • 多層連動:選了上一層,下一層只顯示對應的選項;上一層改選,下一層已選的答案自動清掉,不會留下對不起來的組合。
  • 條件式欄位:選「有」才展開金額或說明,而且變成必填;前端標紅框提醒,後端再驗一次。
  • 姓名顯示遮罩:畫面上顯示「王*明」,試算表存的是完整姓名;除錯紀錄也只寫遮罩後的名字。
  • 審核與通知信:管理者在試算表把狀態改成「通過/補件/不通過」,程式自動寄信、回填審核者與時間、上底色。核定數值沒填就照申報的算。
  • LINE 一鍵開啟:從 LINE 官方帳號的圖文選單點進來,系統用 LINE 的 ID Token 確認身分,自動帶入填表人姓名。

架構

部分 用什麼
表單頁 Apps Script 網頁應用(HTML/JavaScript),手機優先
後端 Apps Script:讀設定、驗證、寫入、寄信
資料與設定 Google 試算表:一個分頁存回報紀錄,其他分頁是選項與名單
審核 試算表「編輯時」觸發器,改狀態就處理
LINE Messaging API 綁定身分;LIFF 頁放在靜態空間,取得身分後轉到表單
版本控制 clasp + git,金鑰放在 Apps Script 的指令碼屬性,不進程式碼

幾個做的時候學到的事

  • 欄位用標題找,不用位置找。程式依欄位標題查欄,管理者在試算表插一欄、換順序都不會壞。
  • LINE 只用「回覆」不用「推播」。回覆使用者的訊息不算月額度,小組織用免費方案就夠。
  • LIFF 不能直接跑在 Apps Script 頁面裡。Apps Script 的頁面包在 Google 的 iframe 裡,LIFF 初始化會失敗,所以另放一頁靜態頁當入口,再帶著身分轉過去。
  • 網頁裡別用瀏覽器的 confirm()。在 Apps Script 的沙箱裡會直接失效,確認動作改成兩段式按鈕。
  • 部署要選「新版本」。改了程式只存檔,正式網址不會更新,這是最常見的「明明改了怎麼沒變」。

適合哪些情況

志工或社團的服務回報、外勤巡檢與維修回報、業務拜訪紀錄、工時或出勤申報、活動報名與簽到。共通點是:很多人用手機填、少數人在後台看與審核、預算不想付每月的 SaaS 費用,而且資料希望留在自己的 Google 帳號裡。

想把你們現在的 Google 表單或 Excel 回報流程換成這種做法,可以參考 LINE 官方帳號串接 Google 試算表,或直接聊聊。

← 回到作品

你的情況也類似?

加 LINE 最快。說說你現在怎麼做、想變成什麼樣子,
我回你可行的做法和需要釐清的問題。

加 LINE 聊一聊 →

或寫信:ted@tedshen.link