เว็บฮุค¶
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 โมเดล คำสั่งขาย จะถูกเลือกตามค่าเริ่มต้น
คลิก ใหม่ ตัวกระตุ้น จะถูกตั้งค่าเป็น เมื่อมีเว็บฮุค ตามค่าเริ่มต้น
Set the Target Record to
model.env[payload.get('model')].browse(int(payload.get('id'))), where:payload.get('model')retrieves the value associated with themodelkey in the payload, i.e.,sale.order, which is the technical name of the Sales Order model.payload.get('id')retrieves the value associated with theidkey in the payload, i.e., the number of the target sales order in your Odoo database with theSand leading zeros removed.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หมายเลขที่เกี่ยวข้องกับข้อความจะช่วยระบุปัญหาได้