workflow JSON 範例逐步操作教學¶
這份筆記是配合
workflow JSON 範例包使用的。你可以一邊匯入 JSON,一邊對照這份操作。
匯入方式¶
- 打開 n8n。
- 建立新 workflow 或進入工作區。
- 選
Import from File。 - 選擇這個資料夾裡的
.json。 - 匯入後先不要急著啟用,先讀節點與資料流。
01-manual-student-routing.json¶
你會看到什麼¶
Manual TriggerSet Student DataBuild SummaryIs VIPVIP ResultRegular Result
建議操作¶
- 先直接按
Execute workflow。 - 看
Set Student Data的 output。 - 看
Build Summary是否產生message、category、isPassed。 - 看
Is VIP是走 true 還是 false。 - 把
score改成55再跑一次,觀察分支變化。
這份在教什麼¶
- 最小 workflow
- 如何用
Set建資料 - 如何用
IF分支
02-webhook-order-intake.json¶
你會看到什麼¶
WebhookNormalize OrderRespond to Webhook
測試資料¶
{
"name": "Tung",
"email": "tung@example.com",
"course": "n8n Beginner",
"amount": 1200,
"paid": true
}
建議操作¶
- 匯入後打開
Webhook,確認 path。 - 用 n8n 提供的 test URL 測試。
- 用 Postman 或 curl 送資料。
- 看
Normalize Order是否成功把資料整理成order_name、order_email等欄位。 - 看回應 JSON 是否正確。
這份在教什麼¶
- 如何接 webhook
- 如何把原始 body 整理成乾淨欄位
- 如何回應呼叫方
03-schedule-api-fetch.json¶
你會看到什麼¶
Schedule TriggerManual TriggerHTTP RequestNormalize API Result
建議操作¶
- 先用
Manual Trigger測,不要直接等排程。 - 看
HTTP Request回來的 JSON。 - 看
Normalize API Result是否成功整理欄位。 - 確認
title、completed、fetched_at是否都有值。
這份在教什麼¶
- 如何主動打外部 API
- 如何把回傳資料轉成後續可用欄位
- 如何同時保留手動測試與定時執行入口
04-webhook-openai-summary-skeleton.json¶
你會看到什麼¶
WebhookBuild PromptMock Summary ResultRespond to Webhook
這份和 06 的差別¶
04是骨架,先讓你理解流程06才是真的打 OpenAI API
建議操作¶
- 先送一份 meeting notes 進去。
- 看
Build Prompt產生的 prompt 長什麼樣子。 - 看
Mock Summary Result怎麼模擬 AI 輸出。 - 理解整體資料流後,再去做
06。
05-webhook-google-sheets-skeleton.json¶
你會看到什麼¶
WebhookNormalize OrderAppend row in sheetBuild ResponseRespond to Webhook
匯入後你要先改的地方¶
- 在
Append row in sheet補上 Google Sheets credentials。 - 把
documentId換成你的 spreadsheet URL 或 ID。 - 把
sheetName改成你的工作表名稱。 - 確認你的試算表欄位名稱有:
created_atorder_nameorder_emailcourse_nameorder_amountpayment_status
建議測試資料¶
{
"name": "Tung",
"email": "tung@example.com",
"course": "n8n Beginner",
"amount": 1200,
"paid": true
}
這份在教什麼¶
- Webhook 接收資料
- Set 整理欄位
- Google Sheets append row
- 成功後回應結果
06-webhook-openai-summary-http-request.json¶
你會看到什麼¶
WebhookBuild PromptOpenAI Responses APINormalize SummaryRespond to Webhook
匯入後你要先改的地方¶
- 打開
OpenAI Responses API。 - 把
Authorizationheader 的YOUR_OPENAI_API_KEY換成你的 key。 - 如有需要,把 model 改成你自己的目標模型。
測試資料¶
{
"title": "Meeting Notes",
"content": "今天討論了網站改版、資料同步錯誤與客服自動化。網站改版要下週三前完成,資料同步目前會漏單,客服想加自動回覆。"
}
建議操作¶
- 先送短內容測試。
- 看
Build Prompt的結果。 - 看
OpenAI Responses API是否成功回傳output_text。 - 看
Normalize Summary是否成功把摘要抽出。
如果失敗,先查這幾項¶
- API key 是否正確
- header 是否有
Bearer - body JSON 是否正確
- 模型名稱是否有效
- OpenAI 回傳的錯誤訊息是什麼
建議實作順序¶
- 先做
01 - 再做
02 - 再做
03 - 然後看
04 - 接著做
05 - 最後做
06
這樣順序比較合理,因為你會先理解 workflow 本身,再碰需要 credentials 與外部 API 的版本。
07-webhook-google-sheets-production-template.json¶
你會看到什麼¶
WebhookNormalize InputHas Required FieldsAppend row in sheetSuccess ResponseError ResponseRespond to Webhook
這份和 05 的差別¶
05是最小 Google Sheets skeleton07比較接近真實用途,多了必要欄位檢查與成功/失敗分流
匯入後你要先改的地方¶
- 在
Append row in sheet補上 Google Sheets credentials。 - 把
documentId換成你的 spreadsheet URL 或 ID。 - 把
sheetName改成你的工作表名稱。 - 確認你的試算表欄位有:
created_atsourceorder_nameorder_emailcourse_nameorder_amountpayment_statusnotes
建議測試資料¶
{
"name": "Tung",
"email": "tung@example.com",
"course": "n8n Beginner",
"amount": 1200,
"paid": true,
"notes": "Wants invoice"
}
缺欄位測試資料¶
{
"name": "Tung",
"amount": 1200
}
建議操作¶
- 先用完整資料測一次,確認會走成功分支。
- 再用缺欄位資料測一次,確認會走失敗分支。
- 看
Normalize Input是否正確整理欄位。 - 看
Has Required Fields的條件是否符合預期。 - 最後確認 Google Sheets 是否真的新增一列。
這份在教什麼¶
- 把輸入資料正規化
- 先做最基本的資料驗證
- 成功才寫入 Google Sheets
- 對呼叫方回傳清楚結果
08-bedside-quick-record-google-sheets.json¶
你會看到什麼¶
WebhookNormalize InputHas Required FieldsEvaluate Alert and Build SummaryAppend row in sheetSuccess ResponseError ResponseRespond to Webhook
這份在做什麼¶
它是床邊快速記錄 MVP。重點不是正式病歷,而是: - 收到一筆結構化床邊記錄 - 檢查必要欄位 - 依簡單規則標記是否需要提醒 - 自動組出本次記錄摘要 - 寫入 Google Sheets 做暫存或工作清單
匯入後你要先改的地方¶
- 在
Append row in sheet補上 Google Sheets credentials。 - 把
documentId換成你的 spreadsheet URL 或 ID。 - 把
sheetName改成你的工作表名稱,例如BedsideRecords。 - 在試算表建立這些欄位:
created_atpatient_idbed_noshiftnurse_idrecorded_attemperaturepulserespirationbp_sysbp_diaspo2pain_scoreconsciousnessline_statuswound_statusintake_mlurine_mlstool_countinterventionsabnormal_notesfollow_up_neededalert_neededalert_reasonrecord_summary
建議測試資料¶
{
"patient_id": "P001",
"bed_no": "A-12",
"shift": "day",
"nurse_id": "NURSE-01",
"recorded_at": "2026-04-10T08:40:00+08:00",
"temperature": 37.8,
"pulse": 96,
"respiration": 20,
"bp_sys": 138,
"bp_dia": 84,
"spo2": 93,
"pain_score": 6,
"consciousness": "clear",
"line_status": "normal",
"wound_status": "stable",
"intake_ml": 500,
"urine_ml": 300,
"stool_count": 1,
"interventions": "vital signs check, medication given",
"abnormal_notes": "mild shortness of breath on exertion",
"follow_up_needed": "recheck SpO2 in 30 minutes"
}
異常提醒測試資料¶
把下面任一值改掉就能測試 alert:
- spo2 = 90
- temperature = 38.5
- pain_score = 8
- line_status = abnormal
- wound_status = worsening
缺欄位測試資料¶
{
"patient_id": "P001",
"temperature": 37.5
}
建議操作¶
- 先用完整資料測一次。
- 看
Normalize Input是否把欄位整理好。 - 看
Evaluate Alert and Build Summary是否產生: alert_neededalert_reasonrecord_summary- 確認 Google Sheets 是否新增一列。
- 再用異常值測一次,確認
alert_needed = true。 - 最後用缺欄位資料測一次,確認會回錯誤訊息。
這份在教什麼¶
- 如何做護理床邊快速記錄的最小流程
- 如何先用結構化資料取代大量自由文字
- 如何用規則判斷做基本提醒
- 如何自動整理一段交班/記錄摘要草稿
09-bedside-transcript-to-draft.json¶
你會看到什麼¶
WebhookNormalize Transcript InputHas Required FieldsParse Transcript and Build DraftAppend row in sheetSuccess ResponseError ResponseRespond to Webhook
這份在做什麼¶
這份 workflow 假設前端已經把語音轉成 transcript,再把 transcript 送到 n8n。
它會: - 接 transcript - 用規則從 transcript 抽欄位 - 產生床邊摘要 - 產生護理紀錄草稿 - 標記是否需要提醒 - 寫入 Google Sheets 草稿表
匯入後你要先改的地方¶
- 在
Append row in sheet補上 Google Sheets credentials。 - 把
documentId換成你的 spreadsheet URL 或 ID。 - 把
sheetName改成你的工作表名稱,例如TranscriptDrafts。
建議測試資料¶
{
"patient_id": "P001",
"bed_no": "A-12",
"shift": "day",
"nurse_id": "NURSE-01",
"recorded_at": "2026-04-10T08:40:00+08:00",
"transcript": "A12床,病人 P001,早班。體溫 37.8,脈搏 96,呼吸 20,血壓 138/84,血氧 93,清醒,疼痛 6 分。已給藥,主訴活動時輕微喘,追蹤 30 分鐘後重測血氧。"
}
高風險測試資料¶
{
"patient_id": "P002",
"bed_no": "B-08",
"shift": "night",
"nurse_id": "NURSE-02",
"recorded_at": "2026-04-10T21:10:00+08:00",
"transcript": "B08床,病人 P002。體溫 38.5,脈搏 110,呼吸 24,血壓 150/92,血氧 90,清醒,疼痛 8 分。管路異常,主訴傷口滲液增加,追蹤立即通知值班。"
}
你要知道的限制¶
- 這份不是 LLM 抽取,而是規則式 parser
- transcript 說法若差太多,可能抽不到欄位
- 它的目的是先做 MVP,證明流程可行
下一步怎麼升級¶
如果你要更穩定,就把 Parse Transcript and Build Draft 換成:
- OpenAI 結構化抽取
- 或更強的院內 NLP 規則
這份在教什麼¶
- transcript 如何進入 n8n
- 如何把自由文字整理成較可用欄位
- 如何先產生草稿,再由人員確認
10-bedside-transcript-openai-structured-extraction.json¶
你會看到什麼¶
WebhookNormalize Transcript InputHas Required FieldsOpenAI Structured ExtractionParse OpenAI JSONAppend row in sheetSuccess ResponseError ResponseRespond to Webhook
這份和 09 的差別¶
09是規則式 parser,適合固定說法10是 OpenAI 結構化抽取,較適合自然語言 transcript
匯入後你要先改的地方¶
- 打開
OpenAI Structured Extraction。 - 把
Authorizationheader 的YOUR_OPENAI_API_KEY換成你的 key。 - 如有需要,把 model 改成你要使用的模型。
- 在
Append row in sheet補上 Google Sheets credentials。 - 把
documentId換成你的 spreadsheet URL 或 ID。 - 把
sheetName改成你的工作表名稱,例如TranscriptDrafts。
建議測試資料¶
{
"patient_id": "P001",
"bed_no": "A-12",
"shift": "day",
"nurse_id": "NURSE-01",
"recorded_at": "2026-04-11T08:40:00+08:00",
"transcript": "A12床,病人 P001,早班。八點四十分床邊評估,體溫三十七點八,脈搏九十六,呼吸二十,血壓一百三十八八十四,血氧九十三。病人清醒,主訴疼痛六分。已給藥,活動時輕微喘,三十分鐘後重測血氧。"
}
高風險測試資料¶
{
"patient_id": "P002",
"bed_no": "B-08",
"shift": "night",
"nurse_id": "NURSE-02",
"recorded_at": "2026-04-11T21:10:00+08:00",
"transcript": "B08床夜班,病人 P002。體溫三十八點五,脈搏一百一十,呼吸二十四,血壓一百五十比九十二,血氧九十,疼痛八分。管路看起來異常,傷口滲液增加,建議立即通知值班並追蹤。"
}
你要看哪些 output¶
先看 Parse OpenAI JSON,確認是否產生:
- temperature
- pulse
- respiration
- bp_sys
- bp_dia
- spo2
- pain_score
- bedside_summary
- nursing_note_draft
- alert_needed
- alert_reason_text
重要限制¶
- 這份會呼叫 OpenAI API,請先確認資料合規與院內核准。
- 這份產生的是草稿,不是正式護理紀錄。
- 正式輸入院內系統前必須由護理人員確認。