เว็บฮุค¶
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 ใช้ในเพย์โหลด
เพื่อสร้างเว็บฮุกใน สตูดิโอ ดำเนินการดังนี้:
เปิดสตูดิโอ และคลิก เว็บฮุก จากนั้นคลิก สร้างใหม่
ตั้งชื่อเว็บฮุคที่ชัดเจนและมีความหมาย เพื่อระบุวัตถุประสงค์ของเว็บฮุค
หากจำเป็น และเปิดใช้งานโหมดผู้พัฒนาแล้ว ให้เลือก:guilabel:`โมเดล`ที่เหมาะสมจากรายการแบบเลื่อนลง หากไม่ได้เปิดใช้งานโหมดผู้พัฒนา กฎการทำงานอัตโนมัติจะกำหนดเป้าหมายเป็นโมเดลปัจจุบันโดยค่าเริ่มต้น
URL ของเว็บฮุคจะถูกสร้างขึ้นโดยอัตโนมัติ แต่สามารถเปลี่ยนแปลงได้หากจำเป็นโดยคลิก:guilabel:
หมุนเปลี่ยนรหัสลับนี่คือ URL ที่ควรใช้เมื่อใช้งานเว็บฮุคในระบบภายนอกที่จะส่งการอัปเดตไปยังฐานข้อมูลWarning
URL นี้เป็น**ข้อมูลลับ**และควรได้รับการดูแลอย่างระมัดระวัง การแชร์ออนไลน์หรือโดยไม่ระมัดระวังอาจทำให้เกิดการเข้าถึงฐานข้อมูล Odoo โดยไม่ตั้งใจ หากมีการอัปเดต URL หลังจากการใช้งานครั้งแรก ต้องแน่ใจว่าได้อัปเดตในระบบภายนอกด้วย
หากต้องการ ให้เปิดใช้งาน:guilabel:`บันทึกการเรียก`เพื่อติดตามประวัติคำขอ API ที่ทำกับ URL ของเว็บฮุค เช่น เพื่อวัตถุประสงค์ในการแก้ไขปัญหา
หากระบบที่ส่งเว็บฮุคไม่ใช่ Odoo ให้ปรับโค้ด:guilabel:
เรกคอร์ดเป้าหมาย`เพื่อค้นหาเรกคอร์ด JSON ที่รวมอยู่ในเพย์โหลดเมื่อมีการทำคำขอ API ไปยัง URL ของเว็บฮุค หากระบบที่ส่งเว็บฮุคเป็นฐานข้อมูล Odoo ต้องแน่ใจว่า `idและmodelปรากฏในเพย์โหลดหากใช้เว็บฮุคเพื่อสร้างเรกคอร์ดในฐานข้อมูล Odoo ให้ใช้
model.browse(i)หรือmodel.search(i)แทนรูปแบบ:guilabel:`เรกคอร์ดเป้าหมาย`เริ่มต้นคลิก:guilabel:`เพิ่มการดำเนินการ`ในแท็บ:guilabel:`การดำเนินการที่ต้องทำ`เพื่อกำหนด:ref:`การดำเนินการ <studio/automated-actions/action>`ที่จะดำเนินการ
ก่อนใช้งานเว็บฮุคในระบบภายนอก ให้:ref:`ทดสอบ <studio/webhooks/test-webhook>`เพื่อให้แน่ใจว่าทำงานตามที่ตั้งใจไว้
Tip
สามารถสร้างเว็บฮุคได้ผ่านเมนู:guilabel:
ระบบอัตโนมัติ`ใน**สตูดิโอ**โดยเลือกตัวกระตุ้น:guilabel:`บนเว็บฮุคเพื่อเข้าถึงประวัติคำขอ API หากเปิดใช้งาน:guilabel:
บันทึกการเรียก`แล้ว ให้คลิกปุ่มสมาร์ท:guilabel:`ล็อก`ที่ด้านบนของแบบฟอร์ม:guilabel:`กฎการทำงานอัตโนมัติหากวัตถุประสงค์ของเว็บฮุคไม่ใช่เพื่ออัปเดตเรกคอร์ดที่มีอยู่ เช่น เพื่อสร้างเรกคอร์ดใหม่ ต้องเลือกการดำเนินการ:guilabel:
รันโค้ด
ทดสอบเว็บฮุค¶
การทดสอบเว็บฮุคต้องใช้เพย์โหลดทดสอบและเครื่องมือหรือระบบภายนอก เช่น Postman เพื่อส่งเพย์โหลดผ่านคำขอ API แบบ POST ส่วนนี้แสดงขั้นตอนการทดสอบเว็บฮุคใน Postman
Tip
ดู:ref:`ส่วนกรณีการใช้งานเว็บฮุค <studio/webhooks/webhook-examples>`สำหรับคำอธิบายทีละขั้นตอนของวิธีทดสอบเว็บฮุคโดยใช้เพย์โหลดทดสอบ
หากต้องการความช่วยเหลือเฉพาะเจาะจงในการทดสอบเว็บฮุคกับ Postman ให้ติดต่อทีมสนับสนุนของพวกเขา
ใน Postman ให้สร้างคำขอ HTTP ใหม่และตั้งค่าวิธีการเป็น:guilabel:
POSTคัดลอก URL ของเว็บฮุคจากฐานข้อมูล Odoo โดยใช้ไอคอน:icon:
fa-link:guilabel:`(ลิงก์)`และวางลงในฟิลด์ URL ใน Postmanคลิกแท็บ:guilabel:
เนื้อหา`และเลือก:guilabel:`ดิบตั้งค่าประเภทไฟล์เป็น:guilabel:
JSONจากนั้นคัดลอกโค้ดจากเพย์โหลดทดสอบและวางลงในตัวแก้ไขโค้ดคลิก ส่ง
ในเครื่องมือดู 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 เดียว
สร้างเว็บฮุค¶
ในการสร้างเว็บฮุคนี้ ให้ดำเนินการดังนี้:
เปิดแอป การขาย จากนั้น เปิด Studio และคลิก Webhooks โมเดล คำสั่งขาย จะถูกเลือกตามค่าเริ่มต้น
คลิก ใหม่ ตัวกระตุ้น จะถูกตั้งค่าเป็น เมื่อมีเว็บฮุค ตามค่าเริ่มต้น
ตั้งค่า ระเบียนเป้าหมาย เป็น
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()สามารถใช้กับจำนวนเต็มเท่านั้น
คลิก เพิ่มการดำเนินการ
ในส่วน ประเภท คลิก อัปเดตระเบียน
ในส่วน Action details เลือก Update เลือกฟิลด์ Currency และเลือก USD
คลิก Save & Close
ทดสอบเว็บฮุค¶
หากต้องการทดสอบเว็บฮุคนี้ ให้ดำเนินการดังนี้:
เปิด Postman สร้างคำขอ HTTP ใหม่และตั้งค่าเมธอดเป็น POST
คัดลอก URL ของเว็บฮุค Odoo โดยใช้ไอคอน (link) และวางลงในฟิลด์ URL ใน Postman
คลิกแท็บ:guilabel:
เนื้อหา`และเลือก:guilabel:`ดิบตั้งค่าประเภทไฟล์เป็น JSON จากนั้นคัดลอกโค้ดนี้ (เพย์โหลด) และวางลงในตัวแก้ไขโค้ด:
{ "_model": "sale.order", "_id": "SALES ORDER NUMBER" }
ในฐานข้อมูล Odoo ของคุณ เลือกคำสั่งขายเพื่อทดสอบเว็บฮุค ในโค้ดที่วาง ให้แทนที่
SALES ORDER NUMBERด้วยหมายเลขคำสั่งขายโดยไม่ต้องมีSหรือศูนย์นำหน้า ตัวอย่างเช่น คำสั่งขายที่มีหมายเลขS00007ควรป้อนเป็น7ใน Postmanคลิก ส่ง
ตรวจสอบ Response viewer ใน Postman เพื่อดูว่าเว็บฮุคทำงานอย่างถูกต้องหรือไม่ หากได้รับข้อความอื่นนอกเหนือจาก
200 OKหรือstatus: okหมายเลขที่เกี่ยวข้องกับข้อความจะช่วยระบุปัญหาได้
สร้างผู้ติดต่อใหม่¶
เว็บฮุคนี้ใช้โค้ดที่กำหนดเองเพื่อสร้างรายชื่อผู้ติดต่อใหม่ในฐานข้อมูล Odoo เมื่อระบบภายนอกส่งคำขอ API แบบ POST ไปยัง URL ของเว็บฮุคพร้อมข้อมูลของผู้ติดต่อ วิธีนี้มีประโยชน์สำหรับการสร้างผู้ขายหรือลูกค้าใหม่โดยอัตโนมัติ
สร้างเว็บฮุค¶
ในการสร้างเว็บฮุคนี้ ให้ดำเนินการดังนี้:
เปิดแอป รายชื่อผู้ติดต่อ จากนั้น เปิดสตูดิโอ และคลิก Webhooks โมเดล Contact จะถูกเลือกโดยค่าเริ่มต้น
คลิก ใหม่ ตัวกระตุ้น จะถูกตั้งค่าเป็น เมื่อมีเว็บฮุค ตามค่าเริ่มต้น
ตั้งค่า Target Record เป็น
model.browse([2])นี่เป็นเพียงตัวยึดตำแหน่งเนื่องจากโค้ดในแอคชันอัตโนมัติจะบอกเว็บฮุคว่าต้องดึงข้อมูลอะไรจากเพย์โหลดและต้องสร้างเรคคอร์ดในโมเดลใดคลิก เพิ่มการดำเนินการ
ในส่วน Type คลิก Execute Code
คัดลอกโค้ดนี้และวางลงในตัวแก้ไขโค้ดในแท็บ 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'")
คลิก Save & Close
ทดสอบเว็บฮุค¶
หากต้องการทดสอบเว็บฮุคนี้ ให้ดำเนินการดังนี้:
ใน Postman สร้างคำขอ HTTP ใหม่และตั้งค่าเมธอดเป็น POST
คัดลอก URL ของเว็บฮุค Odoo โดยใช้ไอคอน (link) และวางลงในฟิลด์ URL ใน Postman
คลิกแท็บ:guilabel:
เนื้อหา`และเลือก:guilabel:`ดิบตั้งค่าประเภทไฟล์เป็น JSON จากนั้นคัดลอกโค้ดนี้ (เพย์โหลด) และวางลงในตัวแก้ไขโค้ด:
{ "name": "CONTACT NAME", "email": "CONTACTEMAIL@EMAIL.COM", "phone": "CONTACT PHONE NUMBER" }
ในโค้ดที่วาง ให้แทนที่
CONTACT NAME,CONTACTEMAIL@EMAIL.COMและCONTACT PHONE NUMBERด้วยข้อมูลของผู้ติดต่อใหม่คลิก ส่ง
ตรวจสอบ Response viewer ใน Postman เพื่อดูว่าเว็บฮุคทำงานอย่างถูกต้องหรือไม่ หากได้รับข้อความอื่นนอกเหนือจาก
200 OKหรือstatus: okหมายเลขที่เกี่ยวข้องกับข้อความจะช่วยระบุปัญหาได้