· documentation · 2 min read
Webhooks API Odoo V15
ตัวอย่างการเรียก API ในระบบ Odoo version 15
Source Code: https://github.com/ecosoft-odoo/ecosoft-addons/tree/15.0/usability_webhooks
การ Call API ในระบบ Odoo สามารถทำได้ 2 วิธีหลักคือ
- XML-RPC (Standard Odoo)
- Rest API
สำหรับบทความนี้จะแนะนำ Module usability_webhooks สำหรับการ Call API โดยใช้ Rest API เชื่อมกับระบบ Odoo version15 เพื่อสร้างและอัปเดตเอกสารในระบบอย่างง่าย ซึ่งจะมี 2 ขั้นตอนหลักคือ
- Call API เพื่อตรวจสอบสิทธิ์การเข้าสู่ระบบ (Authenticate)
- Call API เพื่อสร้างหรืออัปเดตเอกสารในระบบ (Create / Update)
Call API เพื่อตรวจสอบสิทธิ์การเข้าสู่ระบบ (Authenticate)
HTTP Route: /web/session/authenticate
Body:
{ “jsonrpc”: “2.0”, “method”: “call”, “params”: { “db”: “<database name>”, “login”: “<username>”, “password”: “<password>” } }
ตัวอย่างการ Call API Authenticate
ตัวอย่างผลลัพธ์การ Return API
Call API เพื่อสร้างหรืออัปเดตเอกสารในระบบ (Create / Update)
HTTP Route มี 2 Function ให้ใช้ได้ดังนี้
- /api/create_data
- /api/create_update_data
/api/create_data
Call API ด้วย Route นี้เพื่อสร้างเอกสารใหม่
HTTP Route: /api/create_data
Body:
{ “params”: { “model”: “<model>”, # model ที่ต้องการสร้าง “vals”: { “payload”: { “<field name>”: “<value>”, # ข้อมูลที่ต้องการสร้างตามชื่อ field odoo … } } } }
ตัวอย่างการ Call API เพื่อสร้างข้อมูลใหม่
ตัวอย่างผลลัพธ์การ Return API
หากการ Return API มีค่า is_success = True หมายถึงระบบสามารถสร้างเอกสารได้สำเร็จ
ระบบจะสร้างเอกสารที่ Model ที่กำหนด และข้อมูลตาม API
/api/create_update_data
Call API ด้วย Route นี้เพื่ออัปเดตเอกสารเดิม หากข้อมูลที่ส่งมาไม่มีระบบจะไปเรียก /api/create_data แทน
HTTP Route: /api/create_update_data
Body:
{ “params”: { “model”: “res.partner”, # model ที่ต้องการสร้าง “vals”: { “payload”: { “ref”: “test”, # การอ้างถึงเอกสารที่ต้องการอัปเดต(ต้องเป็น Unique)* “phone”: “0999999999”, # ข้อมูลที่ต้องการแก้ไข “mobile”: “0666666666”, “email”: “new_email@email.email” } } } }
ตัวอย่างการ Call API เพื่ออัปเดตข้อมูล
ตัวอย่างผลลัพธ์การ Return API
ระบบจะอัปเดตเอกสารตามข้อมูลที่ส่งมา
การอ้างถึงเอกสารที่ต้องการอัปเดต จะต้อง Implement เพิ่มเติมหากต้องการใช้ Unique ค่าอื่น ที่ /ecosoft-addons/usability_webhooks/controllers/utils.py ใน function _search_key
หากต้องการ Implement Unique จะต้อง hook function _search_key
การตั้งค่า Rollback กรณีทำงานไม่สำเร็จ
การ Call API มีโอกาสที่การรับส่งข้อมูลอาจไม่ถูกต้อง จึงเกิด Error ได้ และในบางครั้งการ Implement API อาจมีการเขียนเพื่อให้ระบบทำงานในส่วนอื่นให้อัตโนมัติ ซึ่งหาก Error ส่วนที่ทำงานไปแล้วอาจจะไม่ได้ Rollback กลับไป จะทำให้การ Call API ในครั้งถัดไปเกิด Error ได้อีก
ซึ่งสามารถตั้งค่าการ Rollback ได้ที่เมนู Settings > Technical > Parameters > System Parameters
- webhook.rollback_except : การ Rollback เมื่อ Call API ไม่สำเร็จ (error exceptions)
- webhook.rollback_state_failed : การ Rollback เมื่อ Call API สำเร็จ แต่ is_success ไม่เป็น True
หากไม่ต้องการที่จะ Rollback ในส่วนไหนสามารถลบบรรทัดนั้นได้
การตรวจสอบ Logs การรับส่ง
ทุกครั้งที่มีการ Call API เข้าระบบ Odoo (ไม่นับการ Authenticate) ระบบจะเก็บ Logs ไว้เพื่อดูย้อนหลัง และยังสามารถใช้ในกรณีอื่น ๆ ได้ เช่น โปรแกรมอื่นสามารถ Call API มาที่ระบบได้ครั้งเดียว หากเกิด Error ระบบจะยังเก็บ Logs ที่เคยส่งมาในระบบ และสามารถ Call API ตรงที่ระบบได้
โดยไปที่เมนู Settings > Technical > API Configuration > API Logs
รายละเอียดของการเก็บ Logs จะแบ่งออกเป็น 5 ส่วนหลักคือ
- Update API: ใช้สำหรับการ Call API ในระบบอีกครั้งหนึ่ง โดยจะใช้ข้อมูลจาก Input และเรียก Function จาก Function Name
- ข้อมูลในส่วน Information เพื่อแยกประเภท Logs โดยแยกได้ดังนี้
- Model — ชื่อ Model ที่ทำการ Update
- Route — Route ในการ Call API
- Function Name — Function ที่ระบบจะเรียกใช้เมื่อกด Update API
- Log Type — ประเภทการเก็บ Log โดยจะมีทั้ง Receive และ Send (ส่วน Send จะต้อง Implement เพิ่มเติม หากต้องการให้ระบบเก็บ Log ในส่วนของการที่ระบบ Odoo ส่ง API ออกข้างนอก)
- Created on — วันที่ระบบสร้างเอกสาร
- Input: ข้อมูลในส่วนที่ต้องการ Call API โดยสามารถตรวจสอบและแก้ไขได้จาก field นี้
- Output: ผลลัพธ์การ Call API
- Status Logs: หากระบบสามารถ Call API สำเร็จจะมีสถานะเป็น Done หากไม่สำเร็จจะมีสถานะเป็น Failed
End.
by Saran Lim.
Image by Freepik