Webhooks¶
Atenționare
Este foarte recomandat să consultați un dezvoltator, arhitect de soluții sau alt rol tehnic atunci când decideți să folosiți webhooks și pe tot parcursul implementării. Dacă nu sunt configurate corect, webhooks pot perturba baza de date Odoo și pot necesita timp pentru a reveni la starea inițială.
Webhook-urile, care pot fi create în Odoo Studio, vă permit să automatizați o acțiune în baza de date Odoo atunci când un eveniment specific are loc într-un alt sistem extern.
În practică, funcționează după cum urmează: atunci când evenimentul are loc în sistemul extern, un fișier de date („payload”) este trimis la adresa URL a webhook-ului Odoo printr-o cerere API POST, iar o acțiune predefinită este executată în baza dumneavoastră de date Odoo.
Spre deosebire de acțiunile programate, care rulează la intervale predefinite, sau de cererile API manuale, care trebuie invocate în mod explicit, webhook-urile permit comunicare și automatizare în timp real, bazate pe evenimente. De exemplu, puteți configura un webhook pentru ca datele de stoc Odoo să fie actualizate automat atunci când o comandă de vânzare este confirmată într-un sistem extern de puncte de vânzare.
Configurarea unui webhook în Odoo nu necesită programare atunci când conectați două baze de date Odoo, dar testarea unui webhook necesită un instrument extern. Înregistrările sau acțiunile țintă personalizate pot necesita abilități de programare.
Notă
Acest articol acoperă crearea unui webhook care primește date dintr-o sursă externă. Cu toate acestea, este posibil și să creați o acțiune automată care trimite date către un webhook extern atunci când apare o modificare în baza dumneavoastră de date Odoo.
Creați un webhook în Odoo¶
Important
Înainte de a implementa un webhook într-o bază de date activă, configurează și testează-l folosind o bază de date duplicată pentru a te asigura că webhook-ul funcționează conform intențiilor.
Sfat
Activarea modului dezvoltator înainte de a crea un webhook oferă o flexibilitate mai mare în selectarea modelului vizat de regula de automatizare. De asemenea, vă permite să găsiți numele tehnic al modelului și câmpurilor, care poate fi necesar pentru configurarea payload-ului.
Pentru a găsi numele tehnic al unui model, cu modul dezvoltator activat, plasați cursorul peste numele modelului și apoi dați clic pe (Link intern). Numele tehnic poate fi găsit în câmpul Model. De exemplu, un webhook pentru comandă de vânzare folosește modelul Comandă de vânzare, dar numele tehnic sale.order este folosit în payload.
Pentru a crea un webhook în Studio, procedați după cum urmează:
Deschideți Studio și dați clic pe Webhook-uri, apoi Nou.
Dați webhook-ului un nume clar și semnificativ care îi identifică scopul.
Dacă este necesar și cu condiția ca modul dezvoltator să fie activat, selectați Modelul adecvat din meniul derulant. Dacă modul dezvoltator nu este activat, regula de automatizare vizează în mod implicit modelul curent.
Adresa URL a webhook-ului este generată automat, dar poate fi modificată dacă este necesar dând clic pe Rotește secretul. Aceasta este adresa URL care trebuie utilizată la implementarea webhook-ului în sistemul extern care va trimite actualizări către baza de date.
Atenționare
Adresa URL este confidențială și trebuie tratată cu atenție. Partajarea ei online sau fără precauție poate oferi acces neintenționat la baza de date Odoo. Dacă adresa URL este actualizată după implementarea inițială, asigurați-vă că o actualizați și în sistemul extern.
Dacă doriți, activați Înregistrează apelurile pentru a urmări istoricul cererilor API făcute către adresa URL a webhook-ului, de exemplu, în scopuri de depanare.
Dacă sistemul care trimite webhook-ul nu este Odoo, ajustați codul Înregistrare țintă pentru a căuta înregistrarea JSON inclusă în payload atunci când cererea API este făcută către adresa URL a webhook-ului. Dacă sistemul care trimite webhook-ul este o bază de date Odoo, asigurați-vă că
idșimodelapar în payload.Dacă webhook-ul este folosit pentru a crea înregistrări în baza de date Odoo, folosiți
model.browse(i)saumodel.search(i)în loc de formatul implicit Înregistrare țintă.Faceți clic pe Add an action în fila Actions To Do pentru a defini acțiunile care urmează să fie executate.
Înainte de a implementa webhook-ul în sistemul extern, testați-l pentru a vă asigura că funcționează conform așteptărilor.
Sfat
Webhook-urile pot fi create și prin meniul Automations din Studio, selectând declanșatorul On webhook.
Pentru a accesa istoricul cererilor API dacă Log Calls a fost activat, faceți clic pe butonul inteligent Logs din partea de sus a formularului Automation rules.
Dacă scopul webhook-ului este altul decât actualizarea unei înregistrări existente, de exemplu, crearea unei noi înregistrări, trebuie aleasă acțiunea Execute Code.
Testarea unui webhook¶
Testarea unui webhook necesită un payload de testare și un instrument sau sistem extern, cum ar fi Postman, pentru a trimite payload-ul printr-o cerere API POST. Această secțiune prezintă pașii pentru testarea unui webhook în Postman.
Sfat
Consultați secțiunea cu cazuri de utilizare a webhook-urilor pentru explicații pas cu pas despre cum să testați webhook-uri folosind payload-uri de testare.
Pentru a obține asistență specifică privind testarea unui webhook cu Postman, contactați echipa lor de suport.
În Postman, creați o nouă cerere HTTP și setați metoda la POST.
Copiați URL-ul webhook-ului din baza de date Odoo folosind pictograma (link) și lipiți-l în câmpul URL din Postman.
Faceți clic pe fila Body și selectați raw.
Setați tipul de fișier la JSON, apoi copiați codul din payload-ul de testare și lipiți-l în editorul de cod.
Faceți clic pe Trimite.
În vizualizatorul Response din partea de jos a ecranului din Postman, detaliile, inclusiv un cod de răspuns HTTP, indică dacă webhook-ul funcționează corect sau nu.
Un mesaj
200 OKsaustatus: okindică faptul că webhook-ul funcționează corect din partea Odoo. De aici, se poate începe implementarea cu celălalt sistem pentru a trimite automat cererile API către URL-ul webhook-ului Odoo.Dacă este returnat orice alt răspuns, numărul asociat cu acesta ajută la identificarea problemei. De exemplu, un mesaj
500 Internal Server Errorînseamnă că Odoo nu a putut interpreta apelul corect. În acest caz, asigurați-vă că câmpurile găsite în fișierul JSON sunt mapate corect în configurația webhook-ului și în sistemul care trimite apelul de testare.
Sfat
Activarea înregistrării apelurilor în configurația webhook-ului din Odoo furnizează jurnale de erori dacă webhook-ul nu funcționează conform intenției.
Implementarea unui webhook într-un sistem extern¶
Când webhook-ul a fost creat cu succes în Odoo și testat, implementați-l în sistemul care trimite date către baza de date Odoo, asigurându-vă că cererile API POST sunt trimise către URL-ul webhook-ului.
Cazuri de utilizare pentru webhook-uri¶
Mai jos sunt două exemple despre cum să utilizați webhook-uri în Odoo. Un payload de testare este furnizat pentru fiecare exemplu și poate fi găsit în secțiunea despre testarea webhook-ului. Postman este folosit pentru a trimite payload-ul de testare.
Actualizează moneda unei comenzi de vânzare¶
Acest webhook actualizează o comandă de vânzare în aplicația Vânzări la USD atunci când sistemul extern trimite o cerere API POST către URL-ul webhook-ului care include numărul comenzii de vânzare respective (identificat prin înregistrarea id din payload).
Acest lucru ar putea fi util pentru filialele din afara Statelor Unite cu o companie-mamă localizată în Statele Unite sau în timpul fuziunilor atunci când se consolidează datele într-o singură bază de date Odoo.
Creează webhook-ul¶
Pentru a crea acest webhook, procedați după cum urmează:
Deschide aplicația Vânzări, apoi deschide Studio și dă clic pe Webhooks. Modelul Comandă de vânzare este selectat implicit.
Dă clic pe Nou. Declanșatorul este setat la La webhook implicit.
Setează Înregistrarea țintă la
model.env[payload.get('_model')].browse(int(payload.get('_id'))), unde:payload.get('_model')preia valoarea asociată cu cheiamodeldin payload, adicăsale.order, care este numele tehnic al modelului Comandă de vânzare.payload.get('_id')preia valoarea asociată cu cheiaiddin payload, adică numărul comenzii de vânzare țintă din baza ta de date Odoo cuSși zerourile inițiale eliminate.intconvertște id-ul preluat într-un număr întreg deoarece metodabrowse()poate fi utilizată doar cu un număr întreg.
Dă clic pe Adăugă o acțiune.
În secțiunea Tip, dă clic pe Actualizează înregistrarea.
În secțiunea Detalii acțiune, selectează Actualizează, alege câmpul Monedă și selectează USD.
Dă clic pe Salvează și închide.
Testează webhook-ul¶
Pentru a testa acest webhook, procedați după cum urmează:
Cu Postman deschis, creează o nouă cerere HTTP și setează metoda sa la POST.
Copiază URL-ul webhook-ului Odoo folosind pictograma (link) și lipește-l în câmpul URL din Postman.
Faceți clic pe fila Body și selectați raw.
Setează tipul de fișier la JSON, apoi copiază acest cod, adică payload-ul, și lipește-l în editorul de cod:
{ "_model": "sale.order", "_id": "SALES ORDER NUMBER" }
În baza ta de date Odoo, alege o comandă de vânzare pentru a testa webhook-ul. În codul lipit, înlocuiește
SALES ORDER NUMBERcu numărul comenzii de vânzare fărăSsau zerouri înainte de număr. De exemplu, o comandă de vânzare cu numărulS00007trebuie introdusă ca7în Postman.Faceți clic pe Trimite.
Consultă Vizualizatorul de răspunsuri din Postman pentru a determina dacă webhook-ul funcționează corect sau nu. Dacă este returnat un mesaj diferit de
200 OKsaustatus: ok, numărul asociat mesajului ajută la identificarea problemei.
Creează un contact nou¶
Acest webhook folosește cod personalizat pentru a crea un contact nou într-o bază de date Odoo atunci când sistemul extern trimite o cerere API POST către URL-ul webhook-ului care include informațiile contactului. Aceasta poate fi utilă pentru crearea automată de noi furnizori sau clienți.
Creează webhook-ul¶
Pentru a crea acest webhook, procedați după cum urmează:
Deschide aplicația Contacte, apoi deschide Studio și dă clic pe Webhooks. Modelul Contact este selectat implicit.
Dă clic pe Nou. Declanșatorul este setat la La webhook implicit.
Setează Target Record la
model.browse([2]). Acesta este în esență un substituent, deoarece codul din acțiunea automatizată îi spune webhook-ului ce trebuie preluat din payload și în ce model trebuie creat înregistrarea.Dă clic pe Adăugă o acțiune.
În secțiunea Type, dă clic pe Execute Code.
Copiază acest cod și lipește-l în editorul de cod din fila Code a secțiunii 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'")
Dă clic pe Salvează și închide.
Testează webhook-ul¶
Pentru a testa acest webhook, procedați după cum urmează:
În Postman, creează o nouă cerere HTTP și setează metoda sa la POST.
Copiază URL-ul webhook-ului Odoo folosind pictograma (link) și lipește-l în câmpul URL din Postman.
Faceți clic pe fila Body și selectați raw.
Setează tipul de fișier la JSON, apoi copiază acest cod, adică payload-ul, și lipește-l în editorul de cod:
{ "name": "CONTACT NAME", "email": "CONTACTEMAIL@EMAIL.COM", "phone": "CONTACT PHONE NUMBER" }
În codul lipit, înlocuiește
CONTACT NAME,CONTACTEMAIL@EMAIL.COMșiCONTACT PHONE NUMBERcu informațiile unui contact nou.Faceți clic pe Trimite.
Consultă Vizualizatorul de răspunsuri din Postman pentru a determina dacă webhook-ul funcționează corect sau nu. Dacă este returnat un mesaj diferit de
200 OKsaustatus: ok, numărul asociat mesajului ajută la identificarea problemei.