Webhook 是簡單的 HTTP 回調,當網路服務發生事件時會提供事件通知。 在 Azure Logic Apps 和 Power Automate 中,你可以使用 webhooks 作為觸發器。 邏輯應用程式或流程會接聽此觸發程序,並在觸發程序引發時執行動作。 本教學示範如何透過 OpenAPI 規範定義的自訂連接器,將 webhook 作為觸發器。
注意
本文以 GitHub 為例,示範一個可以透過 webhooks 發送通知的服務,但你也可以將這裡示範的技術擴展到任何允許 webhook 的服務。
先決條件
- 下列任一訂閱:
- Azure,如果您使用 Logic Apps
- Power Automate(自動化服務)
- 具備建立 邏輯應用程式 或 雲端流程 的基本經驗,以及 根據 OpenAPI 定義建立自訂連接器 的經驗。
- 如果您使用 Logic Apps,請先建立 Azure Logic Apps 自訂連接器。
- 對 Webhook 的基本了解。
- OpenAPI 規格的基本理解 (先前稱為 Swagger)。
- GitHub 帳戶。
- 本教學課程的 OpenAPI 定義範例。 如果你還沒有,請先下載它,以便在接下來的步驟中使用。 否則,你需要為你的 webhook 建立自訂的 OpenAPI 定義。
在 GitHub 中啟用驗證
發送 webhook 請求給 Logic Apps 或 Power Automate 的 Web Service API 通常會使用某種形式的認證,GitHub 也不例外。 GitHub 支援多種認證方式。 這個教學使用了 GitHub 的細粒度個人存取權杖。
如果你還沒登入,請前往 GitHub 並登入。
在右上角選擇你的個人頭像,然後在選單中選擇 設定。
在左側選單中,選擇 開發者設定。
在 [個人存取權杖] 下,選取 [微調權杖]。
選擇「 產生新令牌 」按鈕,然後如果需要確認密碼即可。
輸入 代幣名稱 和 描述 。
在 「到期」中,選擇代幣的有效期限。
在 「儲存庫存取」中,選擇 「僅選擇儲存庫」,並選擇你想授權存取的儲存庫。
在 權限 下,選取 新增權限>Webhook>讀取和寫入。
選擇 產生代幣 按鈕。
請記下您的新權杖。 你之後在新增 webhook 連接器作為觸發器時,需要使用這個標記。
重要
你無法再存取這個令牌。 複製貼上到某處,方便後續教學使用。
在 OpenAPI 定義中定義 webhook
你可以在 Logic Apps 和 Power Automate 中實作 webhook,作為自訂連接器的一部分。 要建立連接器,你需要提供一個定義 webhook 形狀的 OpenAPI 定義。 本教學使用下載的 GitHub webhook 範例 OpenAPI 定義。
如果你想建立觸發器但沒有 OpenAPI 定義可用,可以在自訂連接器精靈的 觸發器介面 中定義 webhook 觸發器。
範例 OpenAPI 定義包含三個關鍵部分,對使 webhook 運作至關重要:
- 建立網路掛鉤
- 定義來自網路服務 API 的 Hook 請求(本教學範例為 GitHub)
- 刪除 Webhook
連接器利用此 OpenAPI 定義來理解如何為 GitHub 倉庫建立、接收及刪除 webhook。
建立 Webhook
連接器利用網路服務 API(在我們的例子中是 GitHub REST API)來建立網路服務端的 webhook,方法是向該服務的相關 webhook 建立端點發送/repos/{owner}/{repo}/hooks HTTP POST 請求(以 GitHub 為例)。
當你使用 connector 建立新的邏輯應用程式或流程時,連接器會依照連接器 OpenAPI 定義,向 Web 服務的 create webhook 端點發送 POST 請求。 如果你修改 Logic 應用程式或流程觸發器,它也會向這個網址發送 POST 請求。 在以下範例 OpenAPI 路徑設定中,屬性post包含了建立 webhook 請求的結構,該請求要傳送到 GitHub REST API。
"/repos/{owner}/{repo}/hooks": {
"x-ms-notification-content": {
"description": "Details for Webhook",
"schema": {
"$ref": "#/definitions/WebhookPushResponse"
}
},
"post": {
"description": "Creates a GitHub webhook",
"summary": "Triggers when a PUSH event occurs",
"operationId": "webhook-trigger",
"x-ms-trigger": "single",
"parameters": [
{
"name": "owner",
"in": "path",
"description": "Name of the owner of targeted repository",
"required": true,
"type": "string"
},
{
"name": "repo",
"in": "path",
"description": "Name of the repository",
"required": true,
"type": "string"
},
{
"name": "Request body of webhook",
"in": "body",
"description": "This is the request body of the Webhook",
"schema": {
"$ref": "#/definitions/WebhookRequestBody"
}
}
],
"responses": {
"201": {
"description": "Created",
"schema": {
"$ref": "#/definitions/WebhookCreationResponse"
}
}
}
}
},
重要
這個"x-ms-trigger": "single"屬性是一個結構擴充,告訴 Logic Apps 和 Power Automate 在設計器中顯示這個 webhook 的可用觸發器清單。 務必將它納入。
定義來自 API 的傳入掛鉤請求
在自訂x-ms-notification-content屬性中定義來函式的 hook 請求形狀(從 GitHub 發送到 Logic Apps 或 Power Automate 的通知),如前述範例所示。 請求不需要包含整個請求的內容,只要包含你想在邏輯應用程式或流程中使用的部分即可。
刪除 Webhook
在 OpenAPI 定義中包含如何刪除 webhook 的定義。 Logic Apps 和 Power Automate 會在你更新觸發器或刪除 Logic App 或流程時嘗試刪除現有的 webhook。
"/repos/{owner}/{repo}/hooks/{hook_Id}": {
"delete": {
"description": "Deletes a Github webhook",
"operationId": "DeleteTrigger",
"parameters": [
{
"name": "owner",
"in": "path",
"description": "Name of the owner of targeted repository",
"required": true,
"type": "string"
},
{
"name": "repo",
"in": "path",
"description": "Name of the repository",
"required": true,
"type": "string"
},
{
"name": "hook_Id",
"in": "path",
"description": "ID of the webhook being deleted",
"required": true,
"type": "string"
}
]
}
},
刪除 webhook 呼叫時,沒有包含標頭。 刪除 Webhook 的呼叫使用與連接器相同的連線。
重要
若要讓 Logic Apps 或 Power Automate 能夠刪除 webhook,Web 服務的 API 必須在建立 webhook 時所傳回的 201 回應中包含 Location HTTP 標頭。
Location標頭應該包含使用 HTTP DELETE 方法所用的 webhook 路徑。 例如,LocationGitHub 回應中包含的標頭格式如下:https://api.github.com/repos/<user name>/<repo name>/hooks/<hook ID>。
匯入 OpenAPI 定義
首先匯入 Logic Apps 或 Power Automate 的 OpenAPI 定義。
匯入 Logic Apps 的 OpenAPI 定義
前往 Azure 入口網站,並開啟您稍早在建立 Azure Logic Apps 自訂連接器中建立的 Logic Apps 連接器。
在連接器的功能表中,選取 Logic Apps 連接器,然後選取編輯。
在 一般選項中,選擇 上傳 OpenAPI 檔案,然後切換到你下載的範例 OpenAPI 檔案。
匯入 Power Automate 的 OpenAPI 定義
在右上角,選擇齒輪圖示,然後選擇 自訂連接器。
選擇 建立自訂連接器,然後選擇 匯入 Postman 收藏。
輸入自訂連接器名稱,前往你下載的範例 OpenAPI 檔案,選擇 Connect。
參數 值 自訂連接器標題 "GitHubDemo"
完成建立自訂連接器
在 一般 頁面,選擇 繼續。
在安全性頁面的驗證類型底下,選取基本驗證。
在基本驗證區段的標籤欄位中,輸入文字使用者名稱和密碼。 這些標籤會在你在 Logic 應用程式或流程中使用觸發器時出現。
在向導頂端,確保名稱設為「GitHubDemo」,然後選擇 「建立連接器」。
您現在已準備好在邏輯應用程式或流程中使用觸發程序,或者您也可以閱讀如何從 UI 建立觸發程序。
從使用者介面建立 Webhook 觸發器
在本節中,你會學習如何在 UI 中建立觸發器,而不必在 OpenAPI 定義中設定任何觸發器定義。 從基準 OpenAPI 定義開始,或在自訂連接器精靈中從頭開始。
在 一般 頁面,務必指定描述和網址。
參數 值 描述 「GitHub 是社交原始程式碼存放庫。」 URL "api.github.com" 在安全性頁面上,設定基本驗證(如您在上一節中所進行的工作)。
在 定義 頁面,選擇 新觸發點,並填寫觸發條件的描述。 在此範例中,您建立會在對存放庫進行提取要求時引發的觸發程序。
參數 值 摘要 「對選定存放庫發出拉取要求時觸發」 描述 「對選定存放庫發出拉取要求時觸發」 作業識別碼 Webhook-PR-觸發器 可視性 "無" (如需詳細資訊,請參閱下方) 觸發程序類型 "Webhook" 適用於邏輯應用程式或流程中作業和參數的顯示性屬性有下列選項:
- 無:正常地顯示於邏輯應用程式或流程中
- 進階:隱藏在額外的功能表底下
- 內部:對使用者隱藏
- 重要:一律優先對使用者顯示
要求區域會根據動作的 HTTP 要求來顯示資訊。 選擇從範例匯入。
定義 webhook 觸發器的請求,然後選擇 匯入。 我們提供範例供您匯入(見下一節)。 如需詳細資訊,請參閱 GitHub API 參考。 Logic Apps 和 Power Automate 會自動新增標準
content-type標頭和安全性標頭,因此您不需要在從範例匯入時定義這些標頭。
參數 值 動詞 「POST」 URL "https://api.github.com/repos/{owner}/{repo}/hooks"; 內文 請參閱下文 { "name": "web", "active": true, "events": [ "pull_request" ], "config": { "url": "http://example.com/webhook" } }回覆區域會根據動作的 HTTP 回覆來顯示資訊。 選取新增預設回應。
定義 webhook 觸發器的回應,然後選擇 匯入。 同樣的,我們提供範例,讓您匯入。 如需詳細資訊,請參閱 GitHub API 參考。
{ "action": "opened", "number": 1, "pull_request": { "html_url": "https://github.com/baxterthehacker/public-repo/pull/1", "state": "open", "locked": false, "title": "Update the README with new information", "user": { "login": "baxterthehacker", "type": "User" } } }在觸發程序設定區域中,選取應接收來自 GitHub 之回撥 URL 值的參數。 此參數即為
url物件中的config屬性。
在嚮導頂端輸入一個名稱,然後選擇 建立連接器。
使用 Webhook 作為觸發條件
完成所有設定後,在邏輯應用程式或流程中透過自訂連接器使用 Webhook。 接著,建立一個流程,當你的 GitHub 倉庫收到 git 推送時,就會發送電子郵件。
在 https://make.powerautomate.com/ 的頁面頂端,選取 我的流程。
選擇 從空白建立。
在 Power Automate 的設計工具中,搜尋您稍早註冊的自訂連接器。
選擇清單中的項目作為觸發條件。
既然這是你第一次使用這個客製化連接器,請接上它。 輸入連線資訊,然後選擇 建立。
參數 值 連線名稱 描述性名稱 使用者名稱 您的 GitHub 使用者名稱 密碼 您稍早建立的個人存取權杖 輸入您想要監視的存放庫詳細資料。 您可以從 OpenAPI 檔案中的 WebhookRequestBody 物件辨識欄位。
參數 值 負責人 要監控的儲存庫擁有者 repo 要監控的儲存庫 重要
使用你的帳戶有權限存取的存放庫。 最簡單的方法是使用你自己的儲存庫。
選取新增步驟>新增動作。
搜尋並選擇 「發送電子郵件(V2) 」操作。
在正文欄位和其他欄位輸入文字,使用動態內容對話框中的數值。 值來自 OpenAPI 檔案中的 WebhookPushResponse 物件。
在頁面頂端,提供流程名稱,然後選擇建立流程。
驗證與疑難排解
要確認所有設定是否正確,請選擇 「我的流程」,然後在新流程旁點 選資訊圖示 查看執行紀錄:
- 你應該已經看到至少一筆在建立 webhook 後的 成功 執行記錄。 這次執行顯示 webhook 是在 GitHub 端成功建立的。
- 如果失敗,請回顧執行細節以找出失敗原因。 如果失敗是由於
404 Not Found回應所致,你的 GitHub 帳號很可能沒有在你所使用的儲存庫上建立 webhook 的正確權限。
摘要
如果你已正確完成所有設定,每當你所選的 GitHub 存放庫發生 git push 時,你就會在 Power Automate 行動應用程式中收到推播通知。 透過上述流程,你可以將任何支援 webhook 的服務作為流程中的觸發器。
後續步驟
提供意見反應
非常感謝您提供有關連接器平台問題,或新功能構想的意見反應。 若要提供意見反應,請移至提交問題或取得連接器說明,然後選取您的意見反應類型。