Webhook

Cảnh báo

Rất khuyến nghị tham khảo ý kiến nhà phát triển, kiến trúc sư giải pháp hoặc vai trò kỹ thuật khác khi quyết định sử dụng webhook và trong suốt quá trình triển khai. Nếu không được cấu hình đúng cách, webhook có thể làm gián đoạn cơ sở dữ liệu Odoo và có thể mất thời gian để hoàn tác.

Webhook, có thể được tạo trong Odoo Studio, cho phép bạn tự động hóa một hành động trong cơ sở dữ liệu Odoo của mình khi một sự kiện cụ thể xảy ra trong hệ thống bên ngoài khác.

Trong thực tế, điều này hoạt động như sau: khi sự kiện xảy ra trong hệ thống bên ngoài, một tệp dữ liệu ("payload") được gửi đến URL webhook của Odoo thông qua yêu cầu API POST, và một hành động được xác định trước sẽ được thực hiện trong cơ sở dữ liệu Odoo của bạn.

Không giống như các hành động theo lịch trình chạy theo khoảng thời gian xác định trước, hoặc các yêu cầu API thủ công cần được gọi một cách rõ ràng, webhook cho phép giao tiếp và tự động hóa theo thời gian thực, dựa trên sự kiện. Ví dụ: bạn có thể thiết lập webhook để dữ liệu tồn kho Odoo của mình được cập nhật tự động khi đơn bán hàng được xác nhận trong hệ thống điểm bán hàng bên ngoài.

Thiết lập webhook trong Odoo không yêu cầu lập trình khi kết nối hai cơ sở dữ liệu Odoo, nhưng kiểm tra webhook yêu cầu công cụ bên ngoài. Bản ghi hoặc hành động mục tiêu tùy chỉnh có thể yêu cầu kỹ năng lập trình.

Ghi chú

Bài viết này đề cập đến việc tạo webhook nhận dữ liệu từ nguồn bên ngoài. Tuy nhiên, cũng có thể tạo hành động tự động gửi dữ liệu đến webhook bên ngoài khi có thay đổi xảy ra trong cơ sở dữ liệu Odoo của bạn.

Tạo webhook trong Odoo

Quan trọng

Trước khi triển khai webhook trong cơ sở dữ liệu thực tế, hãy cấu hình và kiểm tra nó bằng cơ sở dữ liệu sao chép để đảm bảo webhook hoạt động như mong muốn.

Mẹo

Kích hoạt chế độ nhà phát triển trước khi tạo webhook cho phép linh hoạt hơn trong việc chọn mô hình mà quy tắc tự động nhắm đến. Nó cũng cho phép bạn tìm tên kỹ thuật của mô hình và trường, có thể cần thiết để cấu hình payload.

Để tìm tên kỹ thuật của mô hình, với chế độ nhà phát triển được kích hoạt, di chuột qua tên mô hình và sau đó nhấp vào (Liên kết nội bộ). Tên kỹ thuật có thể được tìm thấy trong trường Mô hình. Ví dụ, webhook đơn bán hàng sử dụng mô hình Đơn bán hàng, nhưng tên kỹ thuật sale.order được sử dụng trong payload.

Để tạo webhook trong Studio, thực hiện như sau:

  1. Mở Studio và nhấp vào Webhooks, sau đó Mới.

  2. Đặt cho webhook một tên rõ ràng, có ý nghĩa xác định mục đích của nó.

  3. Nếu cần và nếu chế độ nhà phát triển được kích hoạt, chọn Mô hình phù hợp từ danh sách thả xuống. Nếu chế độ nhà phát triển không được kích hoạt, quy tắc tự động sẽ nhắm đến mô hình hiện tại theo mặc định.

  4. URL của webhook được tạo tự động, nhưng có thể được thay đổi nếu cần bằng cách nhấp vào Xoay mật mã. Đây là URL nên được sử dụng khi triển khai webhook trong hệ thống bên ngoài sẽ gửi cập nhật đến cơ sở dữ liệu.

    Cảnh báo

    URL là bí mật và cần được xử lý cẩn thận. Chia sẻ nó trực tuyến hoặc không thận trọng có thể cung cấp quyền truy cập không mong muốn vào cơ sở dữ liệu Odoo. Nếu URL được cập nhật sau khi triển khai ban đầu, hãy đảm bảo cập nhật nó trong hệ thống bên ngoài.

  5. Nếu muốn, bật Ghi nhật ký cuộc gọi để theo dõi lịch sử các yêu cầu API được thực hiện đến URL của webhook, ví dụ: cho mục đích khắc phục sự cố.

  6. Nếu hệ thống gửi webhook không phải là Odoo, điều chỉnh mã Bản ghi mục tiêu để tìm bản ghi JSON được bao gồm trong payload khi yêu cầu API được thực hiện đến URL của webhook. Nếu hệ thống gửi webhook là cơ sở dữ liệu Odoo, hãy đảm bảo rằng idmodel xuất hiện trong payload.

    Nếu webhook được sử dụng để tạo bản ghi trong cơ sở dữ liệu Odoo, sử dụng model.browse(i) hoặc model.search(i) thay vì định dạng Bản ghi mục tiêu mặc định.

  7. Nhấp vào Thêm hành động trong tab Hành động cần thực hiện để xác định các hành động sẽ được thực thi.

  8. Trước khi triển khai webhook trong hệ thống bên ngoài, hãy kiểm tra nó để đảm bảo hoạt động như dự định.

Mẹo

  • Webhooks cũng có thể được tạo thông qua menu Tự động hóa trong Studio bằng cách chọn trình kích hoạt Trên webhook.

  • Để truy cập lịch sử các yêu cầu API nếu Ghi nhật ký cuộc gọi đã được bật, nhấp vào nút thông minh Nhật ký ở đầu biểu mẫu Quy tắc tự động.

  • Nếu mục đích của webhook là bất kỳ điều gì khác ngoài việc cập nhật bản ghi hiện có, ví dụ: để tạo bản ghi mới, phải chọn hành động Thực thi mã.

Kiểm tra webhook

Kiểm tra webhook yêu cầu một dữ liệu kiểm tra và một công cụ hoặc hệ thống bên ngoài, như Postman, để gửi dữ liệu thông qua yêu cầu API POST. Phần này trình bày các bước để kiểm tra webhook trong Postman.

Mẹo

  • Xem phần các trường hợp sử dụng webhook để biết giải thích từng bước về cách kiểm tra webhook sử dụng dữ liệu kiểm tra.

  • Để nhận trợ giúp cụ thể về kiểm tra webhook với Postman, hãy liên hệ với đội ngũ hỗ trợ của họ.

  1. Trong Postman, tạo một yêu cầu HTTP mới và đặt phương thức của nó thành POST.

  2. Sao chép URL của webhook từ cơ sở dữ liệu Odoo của bạn bằng biểu tượng (liên kết) và dán nó vào trường URL trong Postman.

  3. Nhấp vào tab Body và chọn raw.

  4. Đặt loại tệp thành JSON, sau đó sao chép mã từ dữ liệu kiểm tra và dán nó vào trình soạn thảo mã.

  5. Nhấp Send.

Trong trình xem Response ở cuối màn hình trong Postman, các thông tin chi tiết, bao gồm mã phản hồi HTTP, cho biết webhook có hoạt động chính xác hay không.

  • Thông báo 200 OK hoặc status: ok cho biết webhook đang hoạt động đúng cách ở phía Odoo. Từ đây, có thể bắt đầu triển khai với hệ thống khác để tự động gửi các yêu cầu API đến URL của webhook Odoo.

  • Nếu bất kỳ phản hồi nào khác được trả về, số liên kết với nó giúp xác định vấn đề. Ví dụ, thông báo 500 Internal Server Error có nghĩa là Odoo không thể giải thích cuộc gọi đúng cách. Trong trường hợp này, hãy đảm bảo các trường tìm thấy trong tệp JSON được ánh xạ đúng cách trong cấu hình của webhook và trong hệ thống gửi cuộc gọi kiểm tra.

Mẹo

Bật ghi nhận cuộc gọi trong cấu hình của webhook trong Odoo cung cấp nhật ký lỗi nếu webhook không hoạt động như dự kiến.

Triển khai webhook trong hệ thống bên ngoài

Khi webhook đã được tạo thành công trong Odoo và được kiểm tra, hãy triển khai nó trong hệ thống gửi dữ liệu đến cơ sở dữ liệu Odoo, đảm bảo các yêu cầu API POST được gửi đến URL của webhook.

Các trường hợp sử dụng webhook

Dưới đây là hai ví dụ về cách sử dụng webhook trong Odoo. Dữ liệu kiểm tra được cung cấp cho mỗi ví dụ và có thể tìm thấy trong phần kiểm tra webhook. Postman được sử dụng để gửi dữ liệu kiểm tra.

Cập nhật đơn vị tiền tệ của đơn bán hàng

Webhook này cập nhật đơn bán hàng trong ứng dụng Bán hàng thành USD khi hệ thống bên ngoài gửi yêu cầu API POST đến URL của webhook bao gồm số đơn bán hàng đó (được xác định bởi bản ghi id của dữ liệu).

Điều này có thể hữu ích cho các công ty con bên ngoài Hoa Kỳ với công ty mẹ đặt tại Hoa Kỳ hoặc trong quá trình sáp nhập khi hợp nhất dữ liệu vào một cơ sở dữ liệu Odoo.

Tạo webhook

Để tạo webhook này, tiến hành như sau:

  1. Mở ứng dụng Bán hàng, sau đó mở Studio và nhấp Webhooks. Mô hình Đơn bán hàng được chọn theo mặc định.

  2. Nhấp Mới. Trường Kích hoạt được đặt mặc định là Trên webhook.

  3. Đặt Bản ghi mục tiêu thành model.env[payload.get('_model')].browse(int(payload.get('_id'))), trong đó:

    • payload.get('_model') lấy giá trị liên kết với khóa model trong payload, tức là sale.order, đây là tên kỹ thuật của mô hình Đơn bán hàng.

    • payload.get('_id') lấy giá trị liên kết với khóa id trong payload, tức là số của đơn bán hàng mục tiêu trong cơ sở dữ liệu Odoo của bạn với chữ S và các số 0 đứng đầu đã được loại bỏ.

    • int chuyển đổi id lấy được thành số nguyên (tức là một số nguyên) vì phương thức browse() chỉ có thể được sử dụng với số nguyên.

  4. Nhấp Thêm hành động.

  5. Trong phần Loại, nhấp Cập nhật bản ghi.

  6. Trong phần Chi tiết hành động, chọn Cập nhật, chọn trường Tiền tệ và chọn USD.

  7. Nhấp Lưu và Đóng.

Kiểm tra webhook

Để kiểm tra webhook này, thực hiện như sau:

  1. Với Postman đã mở, tạo một yêu cầu HTTP mới và đặt phương thức của nó thành POST.

  2. Sao chép URL của webhook Odoo bằng biểu tượng (link) và dán nó vào trường URL trong Postman.

  3. Nhấp vào tab Body và chọn raw.

  4. Đặt loại tệp thành JSON, sau đó sao chép mã này, tức là payload, và dán nó vào trình soạn thảo mã:

    {
        "_model": "sale.order",
        "_id": "SALES ORDER NUMBER"
    }
    
  5. Trong cơ sở dữ liệu Odoo của bạn, chọn một đơn bán hàng để kiểm tra webhook. Trong mã đã dán, thay thế SALES ORDER NUMBER bằng số của đơn bán hàng mà không có chữ S hoặc bất kỳ số 0 nào trước số. Ví dụ, một đơn bán hàng có số S00007 nên được nhập là 7 trong Postman.

  6. Nhấp Send.

  7. Tham khảo Trình xem phản hồi trong Postman để xác định xem webhook có hoạt động đúng không. Nếu một thông báo khác với 200 OK hoặc status: ok được trả về, số liên kết với thông báo giúp xác định vấn đề.

Tạo một liên hệ mới

Webhook này sử dụng mã tùy chỉnh để tạo một liên hệ mới trong cơ sở dữ liệu Odoo khi hệ thống bên ngoài gửi yêu cầu API POST đến URL của webhook bao gồm thông tin của liên hệ. Điều này có thể hữu ích cho việc tự động tạo nhà cung cấp hoặc khách hàng mới.

Tạo webhook

Để tạo webhook này, tiến hành như sau:

  1. Mở ứng dụng Contacts, sau đó mở Studio và nhấp Webhooks. Mô hình Contact được chọn mặc định.

  2. Nhấp Mới. Trường Kích hoạt được đặt mặc định là Trên webhook.

  3. Đặt Bản ghi mục tiêu thành model.browse([2]). Đây về cơ bản là một giá trị giữ chỗ vì mã trong hành động tự động cho webhook biết những gì cần lấy từ payload và bản ghi cần được tạo trong mô hình nào.

  4. Nhấp Thêm hành động.

  5. Trong phần Loại, nhấp Thực thi mã.

  6. Sao chép mã này và dán nó vào trình soạn thảo mã trong tab của phần Chi tiết hành động:

    # 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. Nhấp Lưu và Đóng.

Kiểm tra webhook

Để kiểm tra webhook này, thực hiện như sau:

  1. Trong Postman, tạo một yêu cầu HTTP mới và đặt phương thức của nó thành POST.

  2. Sao chép URL của webhook Odoo bằng biểu tượng (link) và dán nó vào trường URL trong Postman.

  3. Nhấp vào tab Body và chọn raw.

  4. Đặt loại tệp thành JSON, sau đó sao chép mã này, tức là payload, và dán nó vào trình soạn thảo mã:

    {
        "name": "CONTACT NAME",
        "email": "CONTACTEMAIL@EMAIL.COM",
        "phone": "CONTACT PHONE NUMBER"
    }
    
  5. Trong đoạn mã đã dán, thay thế CONTACT NAME, CONTACTEMAIL@EMAIL.COMCONTACT PHONE NUMBER bằng thông tin của một liên hệ mới.

  6. Nhấp Send.

  7. Tham khảo Trình xem phản hồi trong Postman để xác định xem webhook có hoạt động đúng không. Nếu một thông báo khác với 200 OK hoặc status: ok được trả về, số liên kết với thông báo giúp xác định vấn đề.