網絡鈎子

警告

我們 強烈建議 你在決定使用網絡鈎子前,以及在整個實施過程中,諮詢開發人員、解決方案架構師或其他技術人員。若配置不當,網絡鈎子可以擾亂 Odoo 資料庫,並需要一段時間才可修正和恢復。

網絡鈎子(webhook)可在 Odoo Studio 建立,讓你可在外部系統發生特定事件時,自動在 Odoo 資料庫中觸發操作。

實際運作流程如下:當外部系統發生事件時,會透過 POST API 請求,將一個數據檔案(亦稱為「負載」)發送至 Odoo 網絡鈎子的網址,然後在你的 Odoo 資料庫中執行預先設定的操作。

與根據預設時間間隔排程運行的「預定操作」或需要明確提出呼叫的手動 API 請求不同,網絡鈎子可支援實時、由事件驅動的通訊及自動化運作。例如,你可設定一個網絡鈎子,在外部銷售點系統確認銷售單時,自動更新 Odoo 的庫存資料。

在 Odoo 系統中設置網絡鈎子時,若連接的是兩個 Odoo 資料庫,是無需編寫任何程式碼,而 測試網絡鈎子 是需要使用外部工具。若需要建立 自訂目標記錄或操作,則可能需要編寫程式技能。

備註

本文介紹如何建立用於 接收 外部來源數據的網絡鈎子。不過,你同樣可建立自動化操作,在 Odoo 資料庫發生變更時, 將數據發送至外部網絡鈎子

在 Odoo 系統中建立網絡鈎子

重要

為正式運行的資料庫部署網絡鈎子前,建議先使用 資料庫的複製副本 進行配置及測試,確保網絡鈎子按照預期運作。

小訣竅

建立網絡鈎子前,可先 啟動開發人員模式,讓你在選擇自動化規則的目標 模型 時,可更加靈活。同時,此模式也可查看模型及欄位的技術名稱,你在配置負載時可能需要用到這些資料。

要查找模型的技術名稱,請先啟動開發人員模式,然後將滑鼠停留在模型名稱上,再按一下 (內部連結)。技術名稱可在 模型 欄位中找到。例如,銷售單網絡鈎子使用的是 銷售單 模型,但在請求負載中使用的,則是其技術名稱 sale.order

若要在 Studio 中建立網絡鈎子,請按以下步驟操作:

  1. 開啟 Studio,按一下 網絡鈎子,然後選擇 新增

  2. 為網絡鈎子命名,設定一個清晰、有意義的名稱,以明確識別其用途。

  3. 如有需要,可在已啟動開發人員模式的情況下,從下拉式選單中選擇所需 模型。若未啟動開發人員模式,自動化規則會預設以目前模型為目標。

  4. 網絡鈎子的網址會由系統自動產生,但有需要時,可按一下 重設秘密密鑰 去修改。你在向 Odoo 資料庫發送更新的外部系統配置網絡鈎子時,應使用此網址。

    警告

    此網址應視為 機密 ,請務必妥善處理。若在網上或不謹慎地分享此網址,可能會讓外界未經授權便可存取 Odoo 資料庫。若在最初部署後,此網址有更新,請確保也在外部系統更新此網址。

  5. 如有需要,可啟用 記錄召用 功能,追蹤向網絡鈎子網址發出 API 請求的歷程記錄,例如用於故障排解及除錯用途。

  6. 若網絡鈎子並非由 Odoo 發送,請調整 目標記錄 的程式碼,以查找向網絡鈎子網址發出 API 請求時,負載中包含的 JSON 記錄。若網絡鈎子由 Odoo 資料庫發送,請確保負載中包含 id (識別碼)及 model (模型)資料。

    若網絡鈎子用於在 Odoo 資料庫中建立記錄,請使用 model.browse(i)model.search(i) 代替預設的 目標記錄 格式。

  7. 執行操作 分頁中,按一下 加入操作,以定義需要執行的 操作

  8. 在外部系統部署網絡鈎子前,請先 測試 該系統,確保它能按預期工作。

小訣竅

  • 網絡鈎子也可使用 Studio自動化 選單建立,只需選擇 網絡鈎子 作為觸發事件。

  • 若要查看已啟用 記錄召用 功能的 API 請求歷程,請在 自動化規則 表單頂部,按一下 系統日誌 智能按鈕。

  • 若網絡鈎子不是用作更新現有記錄(例如,用以建立新的記錄),必須選擇 執行程式碼 操作。

測試網絡鈎子

測試網絡鈎子需要有測試負載,並使用外部工具或系統,例如 Postman ,以透過 POST API 請求發送負載。本節介紹使用 Postman 測試網絡鈎子的步驟。

小訣竅

  • 你可參閱 網絡鈎子使用案例 章節,查看有關使用測試負載去測試網絡鈎子的詳細步驟。

  • 若在使用 Postman 測試網絡鈎子上需要具體幫助,請聯絡其支援團隊。

  1. 在 Postman 中,建立新的 HTTP 請求,並將其方法設為 POST

  2. 使用 (連結) 圖示,從你的 Odoo 資料庫複製網絡鈎子網址,然後貼上至 Postman 的網址欄位。

  3. 按一下 內文 分頁,選擇 raw (原始)。

  4. 將檔案類型設為 JSON,然後從測試負載中複製程式碼,再貼上至程式碼編輯器中。

  5. 按一下 傳送

Postman 畫面底部的 回應 檢視工具中的詳細資訊,包括 HTTP 回應代碼等,能夠反映網絡鈎子是否正常運行。

  • 若收到 200 OKstatus: ok 訊息,表示網絡鈎子在 Odoo 一方正常運行。在此情況下,你可開始另一系統的實施工作,讓對方自動向 Odoo 網絡鈎子網址發送 API 請求。

  • 若系統傳回任何其他回應,相關的狀態代碼能幫助你識別問題。例如,若收到 500 Internal Server Error (內部伺服器錯誤)訊息,表示 Odoo 未能正確解析收到的召用請求。在此情況下,請確保 JSON 檔案中的欄位,在網絡鈎子配置及發送測試召用的系統中,都已正確配對。

小訣竅

若在 Odoo 的網絡鈎子配置中,啟用召用日誌記錄功能,當網絡鈎子未能按預期運行時,系統可提供錯誤日誌。

在外部系統實施網絡鈎子

在 Odoo 系統中成功建立及測試網絡鈎子後,你便可在向 Odoo 資料庫發送數據的系統中,實施網絡鈎子。請確保該系統將 POST API 請求,發送至網絡鈎子的網址。

網絡鈎子使用案例

下文講解兩個在 Odoo 使用網絡鈎子的範例。每個範例都有提供測試負載,可在測試網絡鈎子的相關章節找到。本文範例使用 Postman 發送測試負載。

更新銷售單貨幣

外部系統向網絡鈎子網址發送 POST API 請求時,若請求包含銷售單編號(在負載中以 id 記錄標示),此網絡鈎子會在 銷售 應用程式中,將對應銷售單的貨幣,更新為 USD (美元)。

此功能對於位處美國境外但母公司在美國境內的子公司,或在合併過程中將所有數據整合至同一個 Odoo 資料庫時,都很有用。

建立網絡鈎子

要建立此網絡鈎子,請按照以下步驟操作:

  1. 開啟 銷售 應用程式,然後 開啟 Studio,再按一下 網絡鈎子。系統預設會選擇 銷售單 模型。

  2. 按一下 新增。預設情況下, 觸發 事件會設為 網絡鈎子

  3. 目標記錄 設定為 model.env[payload.get('_model')].browse(int(payload.get('_id'))),當中:

    • payload.get('_model') 用於獲取負載中 model 鍵對應的值,即 sale.order,亦即 銷售單 模型的技術名稱。

    • payload.get('_id') 用於獲取負載中 id 鍵對應的值,即在你的 Odoo 資料庫中,目標銷售單的編號,再移除起首的字母「S」及所有起首的數字 0(零)。

    • int 將取得的 id 轉換為整數,因為 browse() 方法只接受使用整數。

  4. 按一下 加入操作

  5. 類型 部份,按一下 更新記錄

  6. 操作詳情 部份,選擇 更新,選取 貨幣 欄位,然後選擇 USD (美元)。

  7. 按一下 儲存並關閉

測試網絡鈎子

要測試此網絡鈎子,請按照以下步驟操作:

  1. 開啟 Postman 後,建立一個新的 HTTP 請求,並將其方法設為 POST

  2. 使用 (連結) 圖示,複製 Odoo 網絡鈎子的網址,並貼上至 Postman 的網址欄位。

  3. 按一下 內文 分頁,選擇 raw (原始)。

  4. 將檔案類型設為 JSON,然後複製以下程式碼(即請求的負載),然後貼上至程式碼編輯器:

    {
        "_model": "sale.order",
        "_id": "SALES ORDER NUMBER"
    }
    
  5. 在你的 Odoo 資料庫中,選擇一張銷售單,用作測試網絡鈎子。在貼上的程式碼中,將 SALES ORDER NUMBER 改為銷售單的編號,並移除起首的字母「S」及所有起首的數字 0(零)。例如,編號為 S00007 的銷售單,在 Postman 中應輸入 7

  6. 按一下 傳送

  7. 查看 Postman 的 回應檢視工具,以確定網絡鈎子是否正常運行。若系統傳回的訊息不是 200 OKstatus: ok ,訊息的相關代碼能幫助你找出問題。

建立新聯絡人

外部系統向網絡鈎子網址,發送包含聯絡人資料的 POST API 請求時,此網絡鈎子會使用自訂程式碼,在 Odoo 資料庫中建立一個新的聯絡人。此功能可用作自動建立新的供應商或客戶記錄。

建立網絡鈎子

要建立此網絡鈎子,請按照以下步驟操作:

  1. 開啟 聯絡人 應用程式,然後 開啟 Studio,並按一下 網絡鈎子。系統預設會選擇 聯絡人 模型。

  2. 按一下 新增。預設情況下, 觸發 事件會設為 網絡鈎子

  3. 目標記錄 設為 model.browse([2]) 。這實際上是一個佔位符,因為自動化操作的程式碼,會告訴網絡鈎子需要從負載中讀取甚麼資料,以及需要在哪個模型中建立記錄。

  4. 按一下 加入操作

  5. 類型 部份,按一下 執行程式碼

  6. 複製此程式碼,並貼上至 操作詳情 部份 程式碼 分頁的程式碼編輯器:

    # variables to retrieve and hold data from the payload
    contact_name = payload.get('name')
    contact_email = payload.get('email')
    contact_phone = payload.get('phone')
    
    # a Python function to turn the variables into a contact in Odoo
    if contact_name and contact_email:
        new_partner = env['res.partner'].create({
            'name': contact_name,
            'email': contact_email,
            'phone': contact_phone,
            'company_type':'person',
            'customer_rank': 1,
        })
    # an error message for missing required data in the payload
    else:
        raise ValueError("Missing required fields: 'name' and 'email'")
    
  7. 按一下 儲存並關閉

測試網絡鈎子

要測試此網絡鈎子,請按照以下步驟操作:

  1. Postman 中,建立一個新的 HTTP 請求,並將其方法設為 POST

  2. 使用 (連結) 圖示,複製 Odoo 網絡鈎子的網址,並貼上至 Postman 的網址欄位。

  3. 按一下 內文 分頁,選擇 raw (原始)。

  4. 將檔案類型設為 JSON,然後複製以下程式碼(即請求的負載),然後貼上至程式碼編輯器:

    {
        "name": "CONTACT NAME",
        "email": "CONTACTEMAIL@EMAIL.COM",
        "phone": "CONTACT PHONE NUMBER"
    }
    
  5. 在貼上的程式碼中,填入新聯絡人的資料,取代 CONTACT NAME (聯絡人名稱)、 CONTACTEMAIL@EMAIL.COM (聯絡人電郵)及 CONTACT PHONE NUMBER (聯絡人電話號碼)。

  6. 按一下 傳送

  7. 查看 Postman 的 回應檢視工具,以確定網絡鈎子是否正常運行。若系統傳回的訊息不是 200 OKstatus: ok ,訊息的相關代碼能幫助你找出問題。