เว็บฮุค

Warning

แนะนำอย่างยิ่ง ให้ปรึกษากับนักพัฒนา สถาปนิกโซลูชัน หรือบทบาททางเทคนิคอื่นๆ เมื่อตัดสินใจใช้เว็บฮุคและตลอดกระบวนการนำไปใช้ หากไม่ได้กำหนดค่าอย่างเหมาะสม เว็บฮุคอาจรบกวนฐานข้อมูล Odoo และอาจใช้เวลานานในการคืนสภาพ

เว็บฮุก ซึ่งสามารถสร้างใน Odoo สตูดิโอ ช่วยให้คุณสามารถทำการดำเนินการในฐานข้อมูล Odoo ของคุณโดยอัตโนมัติเมื่ออีเวนต์ที่เฉพาะเจาะจงเกิดขึ้นในระบบภายนอกอื่น

ในทางปฏิบัติ การทำงานเป็นดังนี้: เมื่ออีเวนต์เกิดขึ้นในระบบภายนอก ไฟล์ข้อมูล ("เพย์โหลด") จะถูกส่งไปยัง URL ของเว็บฮุก Odoo ผ่านคำขอ API แบบ POST และการดำเนินการที่กำหนดไว้ล่วงหน้าจะถูกดำเนินการในฐานข้อมูล Odoo ของคุณ

ต่างจากการดำเนินการตามกำหนดเวลา ซึ่งทำงานในช่วงเวลาที่กำหนดไว้ล่วงหน้า หรือคำขอ API แบบแมนนวล ซึ่งต้องเรียกใช้อย่างชัดเจน เว็บฮุกช่วยให้มีการสื่อสารและระบบอัตโนมัติแบบเรียลไทม์ที่ขับเคลื่อนด้วยเหตุการณ์ ตัวอย่างเช่น คุณสามารถตั้งค่าเว็บฮุกเพื่ออัปเดตข้อมูลคลังสินค้า Odoo ของคุณโดยอัตโนมัติเมื่อคำสั่งขายได้รับการยืนยันในระบบจุดขายภายนอก

การตั้งค่าเว็บฮุกใน Odoo ไม่ต้องใช้การเขียนโค้ดเมื่อเชื่อมต่อฐานข้อมูล Odoo สองฐาน แต่:ref:`การทดสอบเว็บฮุก <studio/webhooks/test-webhook>`ต้องใช้เครื่องมือภายนอก :ref:`เรกคอร์ดหรือการดำเนินการเป้าหมายแบบกำหนดเอง <studio/webhooks/webhook-example>`อาจต้องใช้ทักษะการเขียนโปรแกรม

Note

บทความนี้ครอบคลุมการสร้างเว็บฮุกที่*รับ*ข้อมูลจากแหล่งภายนอก อย่างไรก็ตาม ยังสามารถสร้างการดำเนินการอัตโนมัติที่:ref:`ส่งข้อมูลไปยังเว็บฮุกภายนอก <studio/automated-actions/action-webhook>`เมื่อมีการเปลี่ยนแปลงเกิดขึ้นในฐานข้อมูล Odoo ของคุณ

สร้างเว็บฮุกใน Odoo

Important

ก่อนนำ webhook ไปใช้งานในฐานข้อมูลจริง ให้กำหนดค่าและทดสอบโดยใช้ ฐานข้อมูลที่ทำสำเนา เพื่อให้แน่ใจว่า webhook ทำงานตามที่ต้องการ

Tip

:ref:`การเปิดใช้งานโหมดนักพัฒนา <developer-mode>`ก่อนสร้างเว็บฮุกจะให้ความยืดหยุ่นมากขึ้นในการเลือก:doc:`โมเดล <../models_modules_apps>`ที่กฎระบบอัตโนมัติกำหนดเป้าหมาย นอกจากนี้ยังช่วยให้คุณค้นหาชื่อทางเทคนิคของโมเดลและฟิลด์ ซึ่งอาจจำเป็นในการกำหนดค่าเพย์โหลด

เพื่อค้นหาชื่อทางเทคนิคของโมเดล เมื่อเปิดใช้งานโหมดนักพัฒนาแล้ว ให้เลื่อนเมาส์ไปที่ชื่อโมเดล จากนั้นคลิก (ลิงก์ภายใน) ชื่อทางเทคนิคสามารถพบได้ในฟิลด์ โมเดล ตัวอย่างเช่น เว็บฮุกคำสั่งขายใช้โมเดล คำสั่งขาย แต่ชื่อทางเทคนิค sale.order ใช้ในเพย์โหลด

เพื่อสร้างเว็บฮุกใน สตูดิโอ ดำเนินการดังนี้:

  1. เปิดสตูดิโอ และคลิก เว็บฮุก จากนั้นคลิก สร้างใหม่

  2. ตั้งชื่อเว็บฮุคที่ชัดเจนและมีความหมาย เพื่อระบุวัตถุประสงค์ของเว็บฮุค

  3. หากจำเป็น และเปิดใช้งานโหมดผู้พัฒนาแล้ว ให้เลือก:guilabel:`โมเดล`ที่เหมาะสมจากรายการแบบเลื่อนลง หากไม่ได้เปิดใช้งานโหมดผู้พัฒนา กฎการทำงานอัตโนมัติจะกำหนดเป้าหมายเป็นโมเดลปัจจุบันโดยค่าเริ่มต้น

  4. URL ของเว็บฮุคจะถูกสร้างขึ้นโดยอัตโนมัติ แต่สามารถเปลี่ยนแปลงได้หากจำเป็นโดยคลิก:guilabel:หมุนเปลี่ยนรหัสลับ นี่คือ URL ที่ควรใช้เมื่อใช้งานเว็บฮุคในระบบภายนอกที่จะส่งการอัปเดตไปยังฐานข้อมูล

    Warning

    URL นี้เป็น**ข้อมูลลับ**และควรได้รับการดูแลอย่างระมัดระวัง การแชร์ออนไลน์หรือโดยไม่ระมัดระวังอาจทำให้เกิดการเข้าถึงฐานข้อมูล Odoo โดยไม่ตั้งใจ หากมีการอัปเดต URL หลังจากการใช้งานครั้งแรก ต้องแน่ใจว่าได้อัปเดตในระบบภายนอกด้วย

  5. หากต้องการ ให้เปิดใช้งาน:guilabel:`บันทึกการเรียก`เพื่อติดตามประวัติคำขอ API ที่ทำกับ URL ของเว็บฮุค เช่น เพื่อวัตถุประสงค์ในการแก้ไขปัญหา

  6. หากระบบที่ส่งเว็บฮุคไม่ใช่ Odoo ให้ปรับโค้ด:guilabel:เรกคอร์ดเป้าหมาย`เพื่อค้นหาเรกคอร์ด JSON ที่รวมอยู่ในเพย์โหลดเมื่อมีการทำคำขอ API ไปยัง URL ของเว็บฮุค หากระบบที่ส่งเว็บฮุคเป็นฐานข้อมูล Odoo ต้องแน่ใจว่า `id และ model ปรากฏในเพย์โหลด

    หากใช้เว็บฮุคเพื่อสร้างเรกคอร์ดในฐานข้อมูล Odoo ให้ใช้ model.browse(i) หรือ model.search(i) แทนรูปแบบ:guilabel:`เรกคอร์ดเป้าหมาย`เริ่มต้น

  7. คลิก:guilabel:`เพิ่มการดำเนินการ`ในแท็บ:guilabel:`การดำเนินการที่ต้องทำ`เพื่อกำหนด:ref:`การดำเนินการ <studio/automated-actions/action>`ที่จะดำเนินการ

  8. ก่อนใช้งานเว็บฮุคในระบบภายนอก ให้:ref:`ทดสอบ <studio/webhooks/test-webhook>`เพื่อให้แน่ใจว่าทำงานตามที่ตั้งใจไว้

Tip

  • สามารถสร้างเว็บฮุคได้ผ่านเมนู:guilabel:ระบบอัตโนมัติ`ใน**สตูดิโอ**โดยเลือกตัวกระตุ้น:guilabel:`บนเว็บฮุค

  • เพื่อเข้าถึงประวัติคำขอ API หากเปิดใช้งาน:guilabel:บันทึกการเรียก`แล้ว ให้คลิกปุ่มสมาร์ท:guilabel:`ล็อก`ที่ด้านบนของแบบฟอร์ม:guilabel:`กฎการทำงานอัตโนมัติ

  • หากวัตถุประสงค์ของเว็บฮุคไม่ใช่เพื่ออัปเดตเรกคอร์ดที่มีอยู่ เช่น เพื่อสร้างเรกคอร์ดใหม่ ต้องเลือกการดำเนินการ:guilabel:รันโค้ด

ทดสอบเว็บฮุค

การทดสอบเว็บฮุคต้องใช้เพย์โหลดทดสอบและเครื่องมือหรือระบบภายนอก เช่น Postman เพื่อส่งเพย์โหลดผ่านคำขอ API แบบ POST ส่วนนี้แสดงขั้นตอนการทดสอบเว็บฮุคใน Postman

Tip

  • ดู:ref:`ส่วนกรณีการใช้งานเว็บฮุค <studio/webhooks/webhook-examples>`สำหรับคำอธิบายทีละขั้นตอนของวิธีทดสอบเว็บฮุคโดยใช้เพย์โหลดทดสอบ

  • หากต้องการความช่วยเหลือเฉพาะเจาะจงในการทดสอบเว็บฮุคกับ Postman ให้ติดต่อทีมสนับสนุนของพวกเขา

  1. ใน Postman ให้สร้างคำขอ HTTP ใหม่และตั้งค่าวิธีการเป็น:guilabel:POST

  2. คัดลอก URL ของเว็บฮุคจากฐานข้อมูล Odoo โดยใช้ไอคอน:icon:fa-link :guilabel:`(ลิงก์)`และวางลงในฟิลด์ URL ใน Postman

  3. คลิกแท็บ:guilabel:เนื้อหา`และเลือก:guilabel:`ดิบ

  4. ตั้งค่าประเภทไฟล์เป็น:guilabel:JSON จากนั้นคัดลอกโค้ดจากเพย์โหลดทดสอบและวางลงในตัวแก้ไขโค้ด

  5. คลิก ส่ง

ในเครื่องมือดู Response ที่ด้านล่างของหน้าจอใน Postman รายละเอียดต่างๆ รวมถึงรหัสการตอบกลับ HTTP จะระบุว่าเว็บฮุคทำงานอย่างถูกต้องหรือไม่

  • ข้อความ 200 OK หรือ status: ok ระบุว่าเว็บฮุคทำงานอย่างถูกต้องในส่วนของ Odoo จากจุดนี้สามารถเริ่มการใช้งานกับระบบอื่นเพื่อส่งคำขอ API ไปยัง URL ของเว็บฮุค Odoo โดยอัตโนมัติ

  • หากได้รับการตอบกลับอื่นใด ตัวเลขที่เกี่ยวข้องจะช่วยระบุปัญหา ตัวอย่างเช่น ข้อความ 500 Internal Server Error หมายความว่า Odoo ไม่สามารถตีความการเรียกได้อย่างถูกต้อง ในกรณีนี้ ให้ตรวจสอบว่าฟิลด์ที่พบในไฟล์ JSON ได้รับการจับคู่อย่างถูกต้องในการกำหนดค่าของเว็บฮุคและในระบบที่ส่งการเรียกทดสอบ

Tip

การเปิดใช้งานการบันทึกการเรียกในการกำหนดค่าของเว็บฮุคใน Odoo จะให้บันทึกข้อผิดพลาดหากเว็บฮุคไม่ทำงานตามที่ตั้งใจไว้

ใช้งานเว็บฮุคในระบบภายนอก

เมื่อสร้างเว็บฮุคใน Odoo สำเร็จและทดสอบแล้ว ให้ใช้งานในระบบที่ส่งข้อมูลไปยังฐานข้อมูล Odoo โดยตรวจสอบให้แน่ใจว่าคำขอ API แบบ POST ถูกส่งไปยัง URL ของเว็บฮุค

กรณีการใช้งานเว็บฮุค

ด้านล่างนี้เป็นตัวอย่างสองตัวอย่างของวิธีใช้เว็บฮุคใน Odoo มีการให้เพย์โหลดทดสอบสำหรับแต่ละตัวอย่าง และสามารถพบได้ในส่วนของการทดสอบเว็บฮุค ใช้ Postman ในการส่งเพย์โหลดทดสอบ

อัปเดตสกุลเงินของคำสั่งขาย

เว็บฮุคนี้อัปเดตคำสั่งขายในแอป การขาย เป็น USD เมื่อระบบภายนอกส่งคำขอ API แบบ POST ไปยัง URL ของเว็บฮุคที่มีหมายเลขคำสั่งขายนั้น (ซึ่งระบุโดยระเบียน id ของเพย์โหลด)

สิ่งนี้อาจมีประโยชน์สำหรับบริษัทในเครือนอกสหรัฐอเมริกาที่มีบริษัทแม่ตั้งอยู่ในสหรัฐอเมริกา หรือระหว่างการควบรวมกิจการเมื่อรวมข้อมูลเข้าในฐานข้อมูล Odoo เดียว

สร้างเว็บฮุค

ในการสร้างเว็บฮุคนี้ ให้ดำเนินการดังนี้:

  1. เปิดแอป การขาย จากนั้น เปิด Studio และคลิก Webhooks โมเดล คำสั่งขาย จะถูกเลือกตามค่าเริ่มต้น

  2. คลิก ใหม่ ตัวกระตุ้น จะถูกตั้งค่าเป็น เมื่อมีเว็บฮุค ตามค่าเริ่มต้น

  3. ตั้งค่า ระเบียนเป้าหมาย เป็น model.env[payload.get('_model')].browse(int(payload.get('_id'))) โดยที่:

    • payload.get('_model') ดึงค่าที่เกี่ยวข้องกับคีย์ model ในเพย์โหลด เช่น sale.order ซึ่งเป็นชื่อทางเทคนิคของโมเดล คำสั่งขาย

    • payload.get('_id') ดึงค่าที่เกี่ยวข้องกับคีย์ id ในเพย์โหลด เช่น หมายเลขของคำสั่งขายเป้าหมายในฐานข้อมูล Odoo ของคุณโดยเอา S และศูนย์นำหน้าออก

    • int แปลง id ที่ดึงมาเป็นจำนวนเต็ม (คือ เลขจำนวนเต็ม) เนื่องจากเมธอด browse() สามารถใช้กับจำนวนเต็มเท่านั้น

  4. คลิก เพิ่มการดำเนินการ

  5. ในส่วน ประเภท คลิก อัปเดตระเบียน

  6. ในส่วน Action details เลือก Update เลือกฟิลด์ Currency และเลือก USD

  7. คลิก Save & Close

ทดสอบเว็บฮุค

หากต้องการทดสอบเว็บฮุคนี้ ให้ดำเนินการดังนี้:

  1. เปิด Postman สร้างคำขอ HTTP ใหม่และตั้งค่าเมธอดเป็น POST

  2. คัดลอก URL ของเว็บฮุค Odoo โดยใช้ไอคอน (link) และวางลงในฟิลด์ URL ใน Postman

  3. คลิกแท็บ:guilabel:เนื้อหา`และเลือก:guilabel:`ดิบ

  4. ตั้งค่าประเภทไฟล์เป็น JSON จากนั้นคัดลอกโค้ดนี้ (เพย์โหลด) และวางลงในตัวแก้ไขโค้ด:

    {
        "_model": "sale.order",
        "_id": "SALES ORDER NUMBER"
    }
    
  5. ในฐานข้อมูล Odoo ของคุณ เลือกคำสั่งขายเพื่อทดสอบเว็บฮุค ในโค้ดที่วาง ให้แทนที่ SALES ORDER NUMBER ด้วยหมายเลขคำสั่งขายโดยไม่ต้องมี S หรือศูนย์นำหน้า ตัวอย่างเช่น คำสั่งขายที่มีหมายเลข S00007 ควรป้อนเป็น 7 ใน Postman

  6. คลิก ส่ง

  7. ตรวจสอบ Response viewer ใน Postman เพื่อดูว่าเว็บฮุคทำงานอย่างถูกต้องหรือไม่ หากได้รับข้อความอื่นนอกเหนือจาก 200 OK หรือ status: ok หมายเลขที่เกี่ยวข้องกับข้อความจะช่วยระบุปัญหาได้

สร้างผู้ติดต่อใหม่

เว็บฮุคนี้ใช้โค้ดที่กำหนดเองเพื่อสร้างรายชื่อผู้ติดต่อใหม่ในฐานข้อมูล Odoo เมื่อระบบภายนอกส่งคำขอ API แบบ POST ไปยัง URL ของเว็บฮุคพร้อมข้อมูลของผู้ติดต่อ วิธีนี้มีประโยชน์สำหรับการสร้างผู้ขายหรือลูกค้าใหม่โดยอัตโนมัติ

สร้างเว็บฮุค

ในการสร้างเว็บฮุคนี้ ให้ดำเนินการดังนี้:

  1. เปิดแอป รายชื่อผู้ติดต่อ จากนั้น เปิดสตูดิโอ และคลิก Webhooks โมเดล Contact จะถูกเลือกโดยค่าเริ่มต้น

  2. คลิก ใหม่ ตัวกระตุ้น จะถูกตั้งค่าเป็น เมื่อมีเว็บฮุค ตามค่าเริ่มต้น

  3. ตั้งค่า Target Record เป็น model.browse([2]) นี่เป็นเพียงตัวยึดตำแหน่งเนื่องจากโค้ดในแอคชันอัตโนมัติจะบอกเว็บฮุคว่าต้องดึงข้อมูลอะไรจากเพย์โหลดและต้องสร้างเรคคอร์ดในโมเดลใด

  4. คลิก เพิ่มการดำเนินการ

  5. ในส่วน Type คลิก Execute Code

  6. คัดลอกโค้ดนี้และวางลงในตัวแก้ไขโค้ดในแท็บ Code ของส่วน Action details:

    # 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. คลิก Save & Close

ทดสอบเว็บฮุค

หากต้องการทดสอบเว็บฮุคนี้ ให้ดำเนินการดังนี้:

  1. ใน Postman สร้างคำขอ HTTP ใหม่และตั้งค่าเมธอดเป็น POST

  2. คัดลอก URL ของเว็บฮุค Odoo โดยใช้ไอคอน (link) และวางลงในฟิลด์ URL ใน Postman

  3. คลิกแท็บ:guilabel:เนื้อหา`และเลือก:guilabel:`ดิบ

  4. ตั้งค่าประเภทไฟล์เป็น JSON จากนั้นคัดลอกโค้ดนี้ (เพย์โหลด) และวางลงในตัวแก้ไขโค้ด:

    {
        "name": "CONTACT NAME",
        "email": "CONTACTEMAIL@EMAIL.COM",
        "phone": "CONTACT PHONE NUMBER"
    }
    
  5. ในโค้ดที่วาง ให้แทนที่ CONTACT NAME, CONTACTEMAIL@EMAIL.COM และ CONTACT PHONE NUMBER ด้วยข้อมูลของผู้ติดต่อใหม่

  6. คลิก ส่ง

  7. ตรวจสอบ Response viewer ใน Postman เพื่อดูว่าเว็บฮุคทำงานอย่างถูกต้องหรือไม่ หากได้รับข้อความอื่นนอกเหนือจาก 200 OK หรือ status: ok หมายเลขที่เกี่ยวข้องกับข้อความจะช่วยระบุปัญหาได้