Teams 會議排程 Bot 完整流程指南

Workflow ID: CAKpMrIZUDA56HJR · n8n · 最後更新 2026-07-08
48 個節點
12 個狀態
7 條路由
行事曆建立: Writer Service
狀態流轉圖
idle asking_form querying_calendar confirm_slots re_asking_date confirm_vote_picks voting_in_progress organizer_confirming asking_meeting_room asking_materials confirm_event create_event 觸發關鍵字 填完表單 有空檔 重選日期 2~5 個 1 個(實體) 1 個(線上) 確認 全員投完 確認 N(實體) (線上) 確認 修改資料 等待中 使用者輸入 選擇/確認 系統處理 投票中 建立會議
各狀態詳細說明
IDLE idle — 等待觸發

Bot 待命中,需要特定關鍵字才會啟動。

觸發關鍵字
安排會議排會議約會議 建立會議建會議發起會議 開會議開會開個會 約開會約個會召開會議 召集會議預約會議訂會議 喬會議喬時間約時間 找時間排時間安排時間 幫我約幫我安排幫我喬 幫我排重新開始重來 重新填寫重填
Bot 回覆(無關鍵字)
嗨 {使用者}!需要安排會議嗎?請輸入「安排會議」開始 😊
Bot 回覆(有關鍵字)
嗨 {使用者}!幫你安排會議,請填以下資訊後一次送出 👇 主題: 參與者:{群組成員列表}(可刪減) 時長:(例:30 分鐘 / 1 小時) 會議方式:線上 / 實體 日期區間:(例:本週、下週、6/23-6/26) 投票截止:(例:今天 18:00、明天中午前)
群組觸發時,表單會透過私訊傳送給發起人,避免在群組中填寫。
情境行為下一狀態
群組中觸發建立 1:1 對話 → 發表單到私訊asking_form
私訊中觸發直接顯示表單asking_form
INPUT asking_form — 填寫會議資訊

使用者一次填完 6 個欄位再送出。

欄位必填格式 / 範例預設值
主題自由文字
參與者逗號或頓號分隔,支援本名 / 英文名 / 暱稱群組成員
時長30 分鐘 1 小時 2 小時1 小時
會議方式線上實體線上
日期區間本週 下週 7/8-7/12 7/10今天 +7 天
投票截止今天 18:00 明天中午前明天 18:00
缺少必填時
請確認已填寫「主題」和「參與者」,其他欄位也請一併填完再送出 😊
SYSTEM querying_calendar — 查詢行事曆

系統自動處理,使用者不需輸入。

步驟說明
1. 拆分與會者把參與者名字轉成 email
2. 查行事曆透過 Graph API 查每人的 calendarView
3. 彙整結果合併所有人的忙碌時段
4. 找共同空檔排除忙碌 / 週末 / 午休,合併連續時段,用字母 A B C… 編號
有空檔時
以下是 Allen、Carol、Shayne 的共同空檔: —— 週三 7/9 ——  A 09:00–12:00(3hr)  B 13:00–18:00(5hr) —— 週四 7/10 ——  C 09:00–11:00(2hr) 請回覆代號選擇時段: • 發起投票 → 選 2~5 個時段發投票給與會者(如:A 14:00、C) • 直接預約 → 選 1 個時段(如:C) • 重新選日期 → 提供新的日期區間重新查詢
無空檔時
😔 找不到共同空閒時段,請換個日期區間試試。 請輸入新的日期區間:
若某位與會者的行事曆查詢失敗(email 有誤),會顯示 ⚠️ 警告,並說明空檔不含此人。
DECIDE confirm_slots — 選擇時段

核心決策點。系統會根據輸入的代號數量自動判斷模式。

使用者輸入效果下一狀態
2~5 個代號
A, C, F A 14:00, C
自動進入投票模式confirm_vote_picks
時段範圍
C1300-1600 C 13:00-16:00
按會議時長自動展開成多個選項,進投票模式confirm_vote_picks
1 個代號
C C 10:00
自動進入直接預約asking_meeting_room
或 asking_materials
投票 A, C強制投票模式confirm_vote_picks
直接約 C 直接 C強制直接預約模式asking_meeting_room
或 asking_materials
重新選日期 換日期 重選輸入新日期區間re_asking_date
直接打日期
7/8-7/9 本週 下週
直接重新查行事曆querying_calendar
時段範圍展開範例(會議時長 1 小時):
C1300-1600 → 展開為 C 13:00、C 14:00、C 15:00(3 個投票選項)
DECIDE confirm_vote_picks — 確認投票選項
Bot 回覆
你選擇以下 3 個時段發投票給 Allen、Carol: 1️⃣ 週三 7/9 14:00–15:00 2️⃣ 週三 7/9 15:00–16:00 3️⃣ 週四 7/10 09:00–10:00 截止時間:7/8 18:00 • 沒問題請回「確認」,寄送投票訊息 • 重選請回「重選」
使用者輸入效果下一狀態
確認 沒問題 OK 發送投票 DM 給所有與會者voting_in_progress
重選 重新選 取消回到時段選擇confirm_slots
VOTE voting_in_progress — 投票進行中
與會者收到的 DM
{發起人} 想邀你參加「{主題}」 時長約 1 小時,線上會議 以下時段,請你挑選偏好的時段(可複選) 👇 1️⃣ 週三 7/9 14:00–15:00 2️⃣ 週三 7/9 15:00–16:00 3️⃣ 週四 7/10 09:00–10:00 直接回數字即可(如:1 3),投票截止 7/8 18:00
投票者可用的輸入
輸入效果
數字(如 1 3記錄投票,可複選
中文數字(如 一 三同上
都可以 全部 都行全選
再次投票覆蓋先前的選擇
發起人可用的輸入
輸入效果下一狀態
查看結果 結果顯示目前票數 + 誰尚未回覆(維持本狀態)
確認 N(如 確認 1提前定案,跳過等待asking_meeting_room
或 asking_materials
自動觸發:全員投完 → 自動 DM 通知發起人結果,進入 organizer_confirming。
截止掃描:每小時自動檢查,時間到也會通知發起人。
DECIDE organizer_confirming — 發起人定案
Bot 回覆
🎉 所有人都回覆了! 📊 投票結果(3/3 人已回覆): 1️⃣ 週三 7/9 14:00–15:00 ── ✅ 3 人可以 ⭐ 所有人都可以 2️⃣ 週三 7/9 15:00–16:00 ── ✅ 2 人可以 3️⃣ 週四 7/10 09:00–10:00 ── ✅ 1 人可以 請回覆「確認 1」~「確認 3」來定案。
使用者輸入效果下一狀態
確認 1確認 N選定時段asking_meeting_room(實體)
asking_materials(線上)
只有發起人可以操作此狀態。其他人輸入會被提示「只有發起人可以定案時間 😊」。
INPUT asking_meeting_room — 選擇會議室(實體限定)
Bot 回覆
好的,定 週三 7/9 14:00–15:00! 請選擇會議室: 1️⃣ 陽光植物 2️⃣ 透明大盒子 3️⃣ 透明小盒子 4️⃣ 角落生物 回覆名稱或數字即可。
使用者輸入效果下一狀態
名稱(陽光植物)或數字(1)或中文數字(記錄會議室asking_materials
重選 上一步 換時段回到時段選擇confirm_slots
線上會議跳過此步驟,直接進 asking_materials。
INPUT asking_materials — 會前資料
Bot 回覆
請問有需要附上會議資料或事前說明嗎? 不需要的話直接回「沒有」就好。
使用者輸入效果下一狀態
沒有 不用 不需要 不附資料confirm_event
其他任何文字存為會前資料confirm_event
重選 上一步 換時段回到時段選擇confirm_slots
打錯不用擔心 — 下一步最終確認時可以回「修改資料」重填。
DECIDE confirm_event — 最終確認
Bot 回覆
📋 會議最終確認: 主題:Q3 業績檢討 時間:週三 7/9 14:00–15:00 方式:實體|陽光植物 與會者:Allen、Carol、Shayne 會前資料:請先看 Q2 報告 確認建立請回「確認」,修改會前資料請回「修改資料」,取消請回「取消」
使用者輸入效果下一狀態
確認 沒問題 OK 建立會議 + 發通知create_event
修改資料 重填資料 改資料退回重新輸入會前資料asking_materials
取消 重來清除所有資料,重新開始idle
END create_event — 建立會議(系統處理)

系統自動處理,兩條平行路徑。

步驟有群組的情況沒群組的情況
1. 最終通知發到群組逐一 DM 給每位與會者
2. HMAC 簽章簽章 Writer Service 請求(HMAC-SHA256)
3. 建立行事曆呼叫 Writer Service 建立 Outlook 行事曆邀請
4. 通知發起人回報成功 ✅ 或失敗 ⚠️
行事曆建立成功
📅 行事曆邀請已建立 ✅ 「Q3 業績檢討」7/9(週三)14:00–15:00,已寄送 Outlook 邀請給所有與會者,通知也已發出。
行事曆建立失敗
⚠️ 通知已發送,但行事曆無法自動建立,麻煩你手動建一下 🙏 📌 主題:Q3 業績檢討 🕒 時間:7/9(週三)14:00–15:00 📍 方式:實體|陽光植物 👥 與會者:Allen、Carol、Shayne 📧 邀請信箱:Allenchou@tsubi.world;carol.chen@goteamstate.org;shayne.shen@goteamstate.org
INPUT re_asking_date — 重新選擇日期
Bot 回覆
好的,請輸入新的日期區間(例:本週、下週、6/23-6/26):
使用者輸入效果下一狀態
本週 下週 7/14-7/18 7/15重新查行事曆querying_calendar
特殊功能

時段範圍展開

輸入 C1300-1600C 13:00-16:00,系統依會議時長自動切割成多個投票選項。支援 - ~ 作為分隔符。

日期直接輸入

在 confirm_slots 直接打 7/8-7/9下週,自動重新查行事曆,不需先打「重新選日期」。

模糊人名比對

三層搜尋:精確匹配 → 忽略大小寫 → 部分匹配。多個別名對應同一 email 時會自動去重,不會誤判為撞名。

全域重置

在任何狀態下輸入觸發關鍵字(如「安排會議」),會清除當前 session 並重新開始。

投票者 Redirect

發投票 DM 後,投票者回覆會自動轉到正確的 session,即使對話 ID 不同。

截止自動通知

每小時掃描一次,投票截止時間到了會自動通知發起人,並附上當前投票結果。

業務規則
項目規則
上班時間09:00–18:00
午休排除12:00–13:00 不排會
週末自動排除
tentative 事件視為忙碌
會議室陽光植物、透明大盒子、透明小盒子、角落生物
行事曆建立透過 Writer Service(HMAC-SHA256 簽章)+ Outlook 邀請
投票上限2~5 個時段
投票截止掃描每小時(cron)
與會者上限50 人(Writer Service 限制)
允許的 email 網域tsubi.world、h-and.world、goteamstate.org
兩條主要路徑一覽

投票路線

idle
→ asking_form
→ querying_calendar
→ confirm_slots (2+ picks)
→ confirm_vote_picks
→ voting_in_progress
→ organizer_confirming
→ asking_meeting_room*
→ asking_materials
→ confirm_event
→ create_event

* 實體會議才有

直接預約路線

idle
→ asking_form
→ querying_calendar
→ confirm_slots (1 pick)
→ asking_meeting_room*
→ asking_materials
→ confirm_event
→ create_event

* 實體會議才有