Webhook-uri

Atenționare

Este foarte recomandat să consultați un dezvoltator, un arhitect de soluții sau un alt rol tehnic atunci când decideți să utilizați webhook-uri și pe tot parcursul procesului de implementare. Dacă nu sunt configurate corect, webhook-urile pot perturba baza de date Odoo, iar remedierea poate dura.

Webhook-urile, care sunt reguli de automatizare cu declanșatorul Pe webhook, vă permit să automatizați o acțiune în baza de date Odoo atunci când are loc un anumit eveniment într-un alt sistem, extern.

În practică, acest lucru funcționează astfel: când evenimentul are loc în sistemul extern, un fișier de date („payload”) este trimis către URL-ul webhook-ului Odoo printr-o cerere API POST, iar o acțiune predefinită este efectuată în baza de date Odoo.

Spre deosebire de acțiunile programate, care rulează la intervale predefinite, sau de cererile API manuale, care trebuie invocate explicit, webhook-urile permit comunicarea și automatizarea în timp real, bazate pe evenimente. De exemplu, puteți configura un webhook pentru ca datele de stoc din Odoo să fie actualizate automat atunci când o comandă de vânzare este confirmată într-un sistem extern de punct 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 competențe de programare.

Notă

Acest articol descrie crearea unui webhook care primește date dintr-o sursă externă. Totuși, este posibil să creați și o acțiune automatizată care trimite date către un webhook extern atunci când are loc o modificare în baza de date Odoo.

Crearea unui webhook în Odoo

Important

Înainte de a implementa un webhook într-o bază de date de producție, configurați-l și testați-l folosind o bază de date duplicată (de test), pentru a vă asigura că webhook-ul funcționează conform intenției.

Sfat

Activarea modului dezvoltator înainte de crearea unui webhook oferă mai multă flexibilitate în selectarea modelului vizat de regula de automatizare. De asemenea, vă permite să găsiți numele tehnic al modelului și al câmpurilor, care ar putea 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, apoi faceți clic pe (Link intern). Numele tehnic se găsește în câmpul Model. De exemplu, un webhook pentru comenzi de vânzare utilizează modelul Comandă de vânzare, dar numele tehnic sale.order este utilizat în payload.

Pentru a crea un webhook, procedați astfel:

  1. Cu modul dezvoltator activat, accesați Setări ‣ Tehnic ‣ Automatizare ‣ Reguli de automatizare, apoi faceți clic pe Nou.

  2. Dați webhook-ului un nume clar și sugestiv, care să identifice scopul lui.

  3. Selectați Model potrivit din lista derulantă.

  4. Setați Declanșator la Pe webhook.

  5. URL-ul webhook-ului este generat automat, dar poate fi modificat, dacă este necesar, făcând clic pe Schimbă secretul. Acesta este URL-ul care trebuie utilizat la implementarea webhook-ului în sistemul extern care va trimite actualizări către baza de date.

    Atenționare

    URL-ul este confidențial și trebuie tratat cu grijă. Partajarea lui online sau fără precauție poate oferi acces nedorit la baza de date Odoo. Dacă URL-ul este actualizat după implementarea inițială, asigurați-vă că îl actualizați și în sistemul extern.

  6. Dacă doriți, activați Înregistrează apelurile pentru a urmări istoricul cererilor API făcute către URL-ul webhook-ului, de ex. în scopuri de depanare.

  7. 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 URL-ul webhook-ului. Dacă sistemul care trimite webhook-ul este o bază de date Odoo, asigurați-vă că id și model apar în payload.

    Dacă webhook-ul este utilizat pentru a crea înregistrări în baza de date Odoo, utilizați model.browse(i) sau model.search(i) în loc de formatul implicit al câmpului Înregistrare țintă.

  8. Faceți clic pe Adaugă o acțiune în fila Acțiuni de efectuat pentru a defini acțiunile care urmează să fie executate.

  9. Înainte de a implementa webhook-ul în sistemul extern, testați-l pentru a vă asigura că funcționează conform intenției.

Sfat

  • Pentru a accesa istoricul cererilor API dacă Înregistrează apelurile a fost activat, faceți clic pe butonul inteligent Jurnale din partea de sus a formularului Reguli de automatizare.

  • Dacă scopul webhook-ului este altul decât actualizarea unei înregistrări existente, de ex. crearea unei înregistrări noi, trebuie aleasă acțiunea Executați codul.

Testarea unui webhook

Testarea unui webhook necesită un payload de test și un instrument sau sistem extern, precum Postman, pentru a trimite payload-ul printr-o cerere API POST. Această secțiune prezintă pașii de testare a unui webhook în Postman.

Sfat

  • Consultați secțiunea cu cazuri de utilizare ale webhook-urilor pentru explicații pas cu pas despre cum se testează webhook-urile folosind payload-uri de test.

  • Pentru ajutor specific privind testarea unui webhook cu Postman, contactați echipa lor de asistență.

  1. În Postman, creați o cerere HTTP nouă și setați metoda acesteia la POST.

  2. Copiați URL-ul webhook-ului din baza de date Odoo folosind pictograma (link) și lipiți-l în câmpul URL din Postman.

  3. Faceți clic pe fila Body și selectați raw.

  4. Setați tipul de fișier la JSON, apoi copiați codul din payload-ul de test și lipiți-l în editorul de cod.

  5. Faceți clic pe Send.

Î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 OK sau status: ok indică faptul că webhook-ul funcționează corect de partea Odoo. De aici, poate începe implementarea în 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 acestuia ajută la identificarea problemei. De exemplu, un mesaj 500 Internal Server Error înseamnă că Odoo nu a putut interpreta corect apelul. În acest caz, asigurați-vă că câmpurile din fișierul JSON sunt mapate corect în configurația webhook-ului și în sistemul care trimite apelul de test.

Sfat

Activarea înregistrării apelurilor în configurația webhook-ului din Odoo oferă jurnale de erori dacă webhook-ul nu funcționează conform intenției.

Implementarea unui webhook într-un sistem extern

După ce 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 ale webhook-urilor

Mai jos sunt două exemple de utilizare a webhook-urilor în Odoo. Pentru fiecare exemplu este furnizat un payload de test, care se găsește în secțiunea despre testarea webhook-ului. Pentru trimiterea payload-ului de test se utilizează Postman.

Actualizarea monedei unei comenzi de vânzare

Acest webhook actualizează o comandă de vânzare din 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 acelei comenzi de vânzare (identificat prin înregistrarea id din payload).

Acest lucru poate fi util pentru filialele din afara Statelor Unite ale unei companii-mamă aflate în Statele Unite sau în cazul fuziunilor, la consolidarea datelor într-o singură bază de date Odoo.

Crearea webhook-ului

Pentru a crea acest webhook, procedați astfel:

  1. Accesați Setări ‣ Tehnic ‣ Automatizare ‣ Reguli de automatizare și faceți clic pe Nou. Selectați modelul Comandă de vânzare și setați Declanșator la Pe webhook.

  2. Setați Înregistrare țintă la model.env[payload.get('model')].browse(int(payload.get('id'))), unde:

    • payload.get('model') returnează valoarea asociată cheii model din payload, adică sale.order, care este numele tehnic al modelului Comandă de vânzare.

    • payload.get('id') returnează valoarea asociată cheii id din payload, adică numărul comenzii de vânzare țintă din baza de date Odoo, fără S și fără zerourile de la început.

    • int convertește id-ul returnat într-un număr întreg (adică un număr fără zecimale), deoarece metoda browse() poate fi utilizată numai cu un număr întreg.

  3. Faceți clic pe Adaugă o acțiune.

  4. În secțiunea Tip, faceți clic pe Actualizare înregistrare.

  5. În secțiunea Detalii acțiune, selectați Actualizează, alegeți câmpul Monedă și selectați USD.

  6. Faceți clic pe Salvează & Închide.

Testarea webhook-ului

Pentru a testa acest webhook, procedați astfel:

  1. Cu Postman deschis, creați o cerere HTTP nouă și setați metoda acesteia la POST.

  2. Copiați URL-ul webhook-ului Odoo folosind pictograma (link) și lipiți-l în câmpul URL din Postman.

  3. Faceți clic pe fila Body și selectați raw.

  4. Setați tipul de fișier la JSON, apoi copiați acest cod, adică payload-ul, și lipiți-l în editorul de cod:

    {
        "model": "sale.order",
        "id": "SALES ORDER NUMBER"
    }
    
  5. În baza de date Odoo, alegeți o comandă de vânzare pe care să testați webhook-ul. În codul lipit, înlocuiți SALES ORDER NUMBER cu numărul comenzii de vânzare, fără S și fără zerourile dinaintea numărului. De exemplu, o comandă de vânzare cu numărul S00007 trebuie introdusă ca 7 în Postman.

  6. Faceți clic pe Send.

  7. Consultați vizualizatorul Response din Postman pentru a stabili dacă webhook-ul funcționează corect sau nu. Dacă este returnat un alt mesaj decât 200 OK sau status: ok, numărul asociat mesajului ajută la identificarea problemei.

Crearea unui contact nou

Acest webhook utilizează 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. Acest lucru poate fi util pentru crearea automată a unor noi furnizori sau clienți.

Crearea webhook-ului

Pentru a crea acest webhook, procedați astfel:

  1. Accesați Setări ‣ Tehnic ‣ Automatizare ‣ Reguli de automatizare și faceți clic pe Nou. Selectați modelul Contact și setați Declanșator la Pe webhook.

  2. Setați Înregistrare țintă la model.browse([2]). Aceasta 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.

  3. Faceți clic pe Adaugă o acțiune.

  4. În secțiunea Tip, faceți clic pe Executați codul.

  5. Copiați acest cod și lipiți-l în editorul de cod din fila Cod a secțiunii Detalii acțiune:

    # 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'")
    
  6. Faceți clic pe Salvează & Închide.

Testarea webhook-ului

Pentru a testa acest webhook, procedați astfel:

  1. În Postman, creați o cerere HTTP nouă și setați metoda acesteia la POST.

  2. Copiați URL-ul webhook-ului Odoo folosind pictograma (link) și lipiți-l în câmpul URL din Postman.

  3. Faceți clic pe fila Body și selectați raw.

  4. Setați tipul de fișier la JSON, apoi copiați acest cod, adică payload-ul, și lipiți-l în editorul de cod:

    {
        "name": "CONTACT NAME",
        "email": "[email protected]",
        "phone": "CONTACT PHONE NUMBER"
    }
    
  5. În codul lipit, înlocuiți CONTACT NAME, [email protected] și CONTACT PHONE NUMBER cu informațiile unui contact nou.

  6. Faceți clic pe Send.

  7. Consultați vizualizatorul Response din Postman pentru a stabili dacă webhook-ul funcționează corect sau nu. Dacă este returnat un alt mesaj decât 200 OK sau status: ok, numărul asociat mesajului ajută la identificarea problemei.