共用方式為


在 Power Platform 實作可擴展的通知系統

Microsoft Power Platform 提供一種擴展商業應用的方式,同時能整合企業級雲端服務,以應付高流量營運。 可擴展的通知系統利用此功能發送簡訊與電子郵件提醒,提醒存放於 Microsoft Dataverse 中的約會。 主要功能包括:

  • 通知會在預約前一週、一天、一小時自動觸發。
  • 當預約被修改或取消時,能夠更新或取消通知。
  • Power Apps 作為使用者有效管理預約的介面。
  • 每天支援數千則通知,同時保持可靠與效能。

系統使用 Azure Service Bus 進行大量排程,Azure Functions 進行處理與交付,並使用 Dataverse 持續追蹤約會與通知。 通知透過 SendGrid 發送電子郵件,Twilio 或 Azure Communication Services 發送簡訊。

此架構確保可擴展性、可靠性與可維護性,克服僅依賴 Power Automate 來協調大量通知的限制。

小提示

本文提供一個範例情境及通用範例架構,說明如何在 Dataverse 中儲存的約會時發送簡訊與電子郵件提醒。 此結構範例可針對許多不同的案例和產業進行修改。

架構圖

架構圖顯示使用 Azure 服務的 Power Apps 預約排程。

Workflow

系統工作流程能可靠地在正確時間發送通知,並支援更新與取消:

  1. 預約建立:使用者透過 Power Apps Canvas 應用程式建立預約。 應用程式會直接將預約資料寫入 Dataverse,確保只有授權使用者能根據安全角色存取資料。

  2. 事件觸發:當約會被建立、更新或取消時,Dataverse 會觸發伺服器端程序,例如外掛、webhook 或輕量級 Power Automate 流程。 此事件啟動排程邏輯。

  3. 通知排程:排程器的 Azure 函式會計算預約前一週、一天及一小時的通知時間。 接著,它在 Dataverse 中建立相應的通知記錄,並在 Azure Service Bus 中排程訊息,儲存序列號以供未來更新或取消之用。

  4. 預約更新:如果預約被修改,排程功能使用服務匯流排序號取消先前排定的通知。 它會更新 Dataverse 中的通知紀錄,並根據新的預約細節重新排程通知。

  5. 預約取消:當預約被取消時,排程功能會移除 Azure 服務匯流排中所有待處理的訊息,並將相應的通知記錄更新為已取消。

  6. 通知傳遞:Delivery Azure 函式處理來自 Azure 服務總線的排程訊息。 它透過 SendGrid 發送電子郵件通知,並透過 Twilio 或 Azure 通訊服務發送簡訊。 發送後,函式會更新通知記錄,包含狀態、重試及任何錯誤資訊。

  7. 監控與可觀察性:Application Insights 與 Azure Monitor 追蹤函式執行、隊列健康、交付成功與失敗。 Service Bus 中的死信佇列會捕捉無法傳送的訊息,以便後續分析。

Components

  • Power Apps(Canvas 應用程式):Power Apps Canvas 應用程式是管理約會的主要使用者介面。 它允許用戶在直覺且低程式碼的介面中建立、更新或取消預約。 Canvas 應用程式直接與 Dataverse 互動,以讀取並寫入預約與通知紀錄。 它也會即時回饋使用者,協助用戶了解預約的成功建立、更新或取消情況。 使用者介面設計用以驗證資料輸入、處理如預約重疊等衝突,並提供通知的在地時區。

  • Dataverse

    • 預約表:Dataverse 作為所有預約資訊的記錄系統。 每個預約條目都包含病人或使用者、預約時間、服務類型及狀態等細節。 約任表設計用來觸發建立、更新或刪除操作的事件。 排程器 Azure 函式會監聽這些事件,以計算並排程通知。 Dataverse 透過基於角色的存取控制、現場權限及稽核,提供內建安全機制,確保敏感的預約資訊僅對正確使用者開放。 此外,與 Power Platform 的整合確保低延遲存取及與其他元件的無縫互動。

    • 通知表:通知表儲存每個排程通知的元資料,追蹤通道(SMS 或 Email)、排程送達時間、狀態(排程、已發送、失敗或取消)、嘗試次數及相關服務匯流排序號。 系統透過在 Dataverse 中儲存這些資料,以提供所有通知的即時追蹤、報告和錯誤處理。 此表格讓管理員能稽核交付歷史、監控失敗嘗試,並在必要時採取糾正措施。 它也支援因預約變更而觸發的自動更新,確保通知保持準確。

  • Azure Functions

    • 排程器:排程功能會根據預約細節計算通知時間。 它會在預約前一週、一天和一小時設定提醒,並在 Dataverse 中創建相應的紀錄。 它也會在 Azure 服務匯流排中排程訊息,儲存序號以便未來取消或重新排程。 此功能能處理大量預約而不會降低效能,並確保冪等性,避免重複排程通知。 其無伺服器設計使其能根據事件負載自動擴展,並確保營運效率。

    • Delivery:當 Azure Service Bus 預定的送達時間到來時,Delivery Function 會處理訊息。 它會為每則通知選擇合適的管道,例如透過 SendGrid 發送電子郵件或透過 Twilio/Azure Communication Services 發送簡訊,並依此發送訊息。 交付後,它會在 Dataverse 更新通知記錄,包含狀態資料,若發生失敗則會重試資料。 此功能同時實作錯誤處理、日誌記錄與重試機制,確保在發生短暫故障或提供者速率限制時,能可靠地傳送訊息。 它會根據服務匯流排中的訊息數量自動調整,以應對通知量激增。

  • Azure Service Bus:Azure Service Bus 是通知排程系統的骨幹。 它提供耐用、高吞吐量且具時間特定性的訊息佇列,確保在需要時準確傳送訊息。 序號讓它能在預約變更時取消或重新安排訊息,保持一致性。 Service Bus 也支援死信佇列,用於捕捉在多次重試後仍無法傳送的訊息,讓管理員能夠調查並修正錯誤。 其將排程與交付分離的能力,確保系統保持反應迅速且可擴展性。

  • 電子郵件與簡訊服務提供者:外部通訊服務負責實際通知的傳遞。 SendGrid 用於發送電子郵件通知,提供強大的追蹤、分析及重試機制。 Twilio 與 Azure 通訊服務 提供簡訊通知,並以可靠的方式支援大量訊息傳遞。 Delivery Function 透過儲存在 Azure Key Vault 的安全 API 金鑰與這些提供者互動,並實作重試策略以處理暫時性錯誤或速率限制問題。 透過將配送外包給專業供應商,系統確保高度可靠性並降低營運開銷。

  • Azure Key Vault:您可以安全地將所有敏感憑證和 API 金鑰儲存在 Azure Key Vault。 Azure Functions 透過受管理身份存取秘密,免除了將敏感資料儲存在程式碼或設定檔中的需求。 Key Vault 確保靜態憑證加密、存取審核,並自動套用輪替政策以維持安全合規。

  • 監控與可觀察性工具:系統使用 Application Insights 與 Azure Monitor,提供解決方案健康狀況與效能的完整可視化。 Application Insights 追蹤函式執行、佇列長度、交付狀態及失敗,而 Azure Monitor 則提供異常行為、訊息積壓或服務失敗的警示。 您可以利用日誌與遙測資料進行故障排除、營運分析及容量規劃,確保管理員擁有維持高營運可靠性與效能所需的資訊。

案例詳細資料

此解決方案專為需要及時發送預約提醒的組織設計,例如醫療診所、疫苗接種中心或服務型企業。 使用者透過 Power Apps 互動輸入預約細節,這些資料會儲存在 Dataverse 中,並立即處理以排程通知。 系統會自動計算提醒時間,例如預約前一週、一天和一小時,並確保透過適當的管道傳遞這些提醒。

系統能在不影響效能的情況下處理數千則每日通知,這得益於預約管理、排程與訊息傳遞的分離。 它確保即使預約被更改或取消,透過動態重新排程或移除服務公車訊息,提醒仍能保持準確。 每個步驟都會被記錄並追蹤。 此方法確保管理員與支援人員都能掌握系統行為及每筆通知的狀態。

考慮事項

這些考慮會實施 Power Platform Well-Architected 的核心支柱,也就是一組能夠改善工作負載品質的指導原則。 在 Microsoft Power Platform Well-Architected 中深入瞭解。

安全性

系統透過使用 Microsoft Entra 身分識別 (ID) 來管理身份,並使用 Dataverse 角色限制對約定和通知的存取,從而全面整合安全性。 Power Apps 使用者透過 Microsoft Entra ID 進行認證,確保所有與 Dataverse 的互動皆獲授權並記錄。 Azure Functions 使用受管理身份來安全地與 Dataverse、Service Bus 和 Key Vault 互動,且不會將憑證儲存在程式碼或設定檔中。

敏感憑證,如 SendGrid 和 Twilio 金鑰,僅存放在 Azure Key Vault 中,並透過受管理身份存取。 你可以透過使用私有端點和虛擬網路,進一步保護 Azure 服務間的通訊,減少暴露於公共網路的風險。 系統元件間的所有訊息交換均遵循加密通訊標準,以保護靜態及傳輸中的資料。

卓越營運

您透過持續監控、可觀察性及自動警示,達成營運卓越。 Application Insights 從 Azure Functions 收集詳細的遙測數據,包括執行時間、失敗、重試及效能指標。 Azure Monitor 追蹤 Azure 服務匯流排佇列的健康狀況,識別潛在瓶頸或積壓事項。 死信佇列提供了一個用來捕獲和處理多次嘗試後仍無法處理的訊息的機制。

管理員可以設定警示,通知他們與訊息處理相關的失敗、服務提供者中斷或異常隊列成長。 Dataverse 在通知表中維護稽核軌跡,讓管理員能追蹤每則通知的生命週期。 由於 Azure Functions 是無狀態且可自動擴展的,系統能在訊息量突然增加時不需人工介入,確保穩定的效能與正常運作時間。

效能效率

此架構優化為高效能與可擴展性。 Azure Service Bus 能有效處理排程通知,且避免 Power Automate 所帶來的延遲負擔。 將排程與交付分離為獨立的功能,使每個元件能根據需求獨立擴展。 傳遞功能享有自動調整規模的特性,能處理外發訊息的尖峰,而不影響面向使用者的系統。

此外,使用管理身份與快取策略進行提供者認證,可降低訊息傳遞時的延遲。 系統透過只保留重要的元資料於 Dataverse,並支援舊通知的歸檔策略,以減少不必要的儲存負擔。 透過結合 Power Platform 功能與 Azure 可擴展的訊息基礎設施,系統確保企業規模下快速、高效且具成本效益的通知傳遞。

Contributor

本文由 Microsoft 維護。 下列參與者撰寫本文。

主要作者: