Webhooks

Varning

Det är starkt rekommenderat att rådfråga en utvecklare, lösningsarkitekt eller en annan teknisk roll när man beslutar att använda webhooks och under hela implementeringsprocessen. Om de inte är korrekt konfigurerade kan webhooks störa Odoo-databasen och kan ta tid att återställa.

Webhooks, som kan skapas i Odoo Studio, gör det möjligt att automatisera en åtgärd i din Odoo-databas när en specifik händelse inträffar i ett annat, externt system.

I praktiken fungerar detta enligt följande: när händelsen inträffar i det externa systemet skickas en datafil (”nyttolasten”) till Odoo-webhookens URL via en ”POST” API-förfrågan, och en fördefinierad åtgärd utförs i din Odoo-databas.

Till skillnad från schemalagda åtgärder, som körs med fördefinierade intervall, eller manuella API-förfrågningar, som måste anropas explicit, möjliggör webhooks realtidskommunikation och automatisering som är händelsestyrd. Du kan till exempel installera en webhook för att automatiskt uppdatera dina Odoo-lagerdata när en försäljningsorder bekräftas i ett externt kassasystem.

Att konfigurera en webhook i Odoo kräver ingen kodning när du ansluter två Odoo-databaser, men testning av en webhook kräver ett externt verktyg. Anpassade målhandlingar eller åtgärder kan kräva programmeringskunskaper.

Observera

Den här artikeln handlar om att skapa en webhook som tar emot data från en extern källa. Det är dock även möjligt att skapa en automatiserad åtgärd som skickar data till en extern webhook när en förändring sker i din Odoo-databas.

Skapa en webhook i Odoo

Viktigt

Innan du implementerar en webhook i en aktiv databas, konfigurera och testa den med en kopierad databas för att säkerställa att webhooken fungerar som avsett.

Tips

Aktivering av utvecklarläget innan du skapar en webhook ger större flexibilitet när du väljer den modell som automatiseringsregeln riktar sig mot. Det gör det också möjligt att hitta modellens och fältens tekniska namn, vilket kan behövas för att konfigurera nyttolasten.

För att hitta en modells tekniska namn, med utvecklarläget aktiverat, håll muspekaren över modellnamnet och klicka sedan på (Intern länk). Det tekniska namnet finns i fältet Modell. Till exempel använder en försäljningsorderwebhook modellen Försäljningsorder, men det tekniska namnet sale.order används i nyttolasten.

För att skapa en webhook i Studio, gör så här:

  1. Öppna Studio och klicka på Webhooks, sedan Ny.

  2. Ge webhooken ett tydligt, meningsfullt namn som identifierar dess syfte.

  3. Om det behövs, och förutsatt att utvecklarläget är aktiverat, välj lämplig Modell från rullgardinsmenyn. Om utvecklarläget inte är aktiverat riktar sig automatiseringsregeln mot den aktuella modellen som standard.

  4. Webhookens URL genereras automatiskt, men kan ändras vid behov genom att klicka på Rotera hemlighet. Detta är den URL som ska användas när webhooken implementeras i det externa systemet som ska skicka uppdateringar till databasen.

    Varning

    URL:en är konfidentiell och ska hanteras med försiktighet. Att dela den online eller utan försiktighet kan ge oavsiktlig åtkomst till Odoo-databasen. Om URL:en uppdateras efter den ursprungliga implementeringen, se till att uppdatera den i det externa systemet.

  5. Om så önskas, aktivera Logga anrop för att spåra historiken för API-förfrågningar som görs till webhookens URL, t.ex. i felsökningssyfte.

  6. Om systemet som skickar webhooken inte är Odoo, justera koden för Målhandling för att leta efter JSON-handlingen som ingår i nyttolasten när API-förfrågan görs till webhookens URL. Om systemet som skickar webhooken är en Odoo-databas, se till att id och model visas i nyttolasten.

    Om webhooken används för att skapa handlingar i Odoo-databasen, använd model.browse(i) eller model.search(i) istället för standardformatet Målhandling.

  7. Klicka på Lägg till en åtgärd i fliken Åtgärder att utföra för att definiera de åtgärder som ska verkställas.

  8. Innan du implementerar webhooken i det externa systemet, testa den för att säkerställa att den fungerar som avsett.

Tips

  • Webhooks kan också skapas via menyn Automatiseringar i Studio genom att välja utlösaren Vid webhook.

  • För att komma åt historiken för API-förfrågningar om Logga anrop har aktiverats, klicka på den smarta knappen Loggar högst upp i formuläret Automatiseringsregler.

  • Om syftet med webhooken är något annat än att uppdatera en befintlig handling, t.ex. att skapa en ny handling, måste åtgärden Verkställ kod väljas.

Testa en webhook

Testning av en webhook kräver en testnyttolast och ett externt verktyg eller system, som Postman, för att skicka nyttolast via en POST programmeringsgränssnitt-förfrågan. Denna sektion presenterar stegen för att testa en webhook i Postman.

Tips

  • Se sektionen om webhook användningsfall för steg-för-steg-förklaringar av hur man testar webhooks med hjälp av testnyttolaster.

  • För att få specifik hjälp med att testa en webhook med Postman, kontakta deras kundtjänst.

  1. I Postman, skapa en ny HTTP-förfrågan och ställ in dess metod till POST.

  2. Kopiera webhooken:s URL från din Odoo-databas med hjälp av (länk)-ikonen och klistra in den i URL-fältet i Postman.

  3. Klicka på fliken Body och välj raw.

  4. Ställ in filtypen till JSON, kopiera sedan koden från testnyttolasten och klistra in den i kodredigeraren.

  5. Klicka på Skicka.

I Response-visaren längst ner på skärmen i Postman visar detaljer, inklusive en HTTP-svarskod, om webhooken fungerar korrekt eller inte.

  • Ett 200 OK- eller status: ok-meddelande indikerar att webhooken fungerar korrekt på Odoos sida. Härifrån kan implementering påbörjas med det andra systemet för att automatiskt skicka programmeringsgränssnitt-förfrågningar till Odoo-webhookens URL.

  • Om något annat svar returneras hjälper numret som är associerat med det till att identifiera problemet. Till exempel betyder ett 500 Internal Server Error-meddelande att Odoo inte kunde tolka anropet korrekt. I detta fall, se till att fälten som finns i JSON-filen är korrekt mappade i webhookens konfiguration och i systemet som skickar testanropet.

Tips

Att aktivera anropsloggning i webhookens konfiguration i Odoo ger felloggar om webhooken inte fungerar som avsett.

Implementera en webhook i ett externt system

När webhooken har skapats framgångsrikt i Odoo och testats, implementera den i systemet som skickar data till Odoo-databasen och se till att POST programmeringsgränssnitt-förfrågningar skickas till webhookens URL.

Användningsfall för webhooks

Nedan finns två exempel på hur man använder webhooks i Odoo. En testnyttolast tillhandahålls för varje exempel och kan hittas i sektionen om att testa webhooken. Postman används för att skicka testnyttolasten.

Uppdatera en försäljningsorders valuta

Denna webhook uppdaterar en försäljningsorder i appen Försäljning till USD när det externa systemet skickar en POST programmeringsgränssnitt-förfrågan till webhookens URL som inkluderar det försäljningsordernumret (som identifieras av nyttolastens id-post).

Detta kan vara användbart för dotterbolag utanför USA med ett moderföretag beläget i USA eller under fusioner när data konsolideras i en Odoo-databas.

Skapa webhooken

För att skapa denna webhook, gör följande:

  1. Öppna appen Försäljning, öppna sedan Studio och klicka på Webhooks. Modellen Försäljningsorder är vald som standard.

  2. Klicka på Ny. Utlösare är inställd på Vid webhook som standard.

  3. Ställ in Målpost till model.env[payload.get('_model')].browse(int(payload.get('_id'))), där:

    • payload.get('_model') hämtar värdet kopplat till nyckeln model i nyttolasten, dvs. sale.order, vilket är det tekniska namnet på modellen Försäljningsorder.

    • payload.get('_id') hämtar värdet kopplat till nyckeln id i nyttolasten, dvs. numret på målförsäljningsordern i din Odoo-databas med S och inledande nollor borttagna.

    • int konverterar det hämtade id:t till ett heltal (dvs. ett helt nummer) eftersom metoden browse() endast kan användas med ett heltal.

  4. Klicka på Lägg till en åtgärd.

  5. I sektionen Typ, klicka på Uppdatera post.

  6. I sektionen Åtgärdsdetaljer, välj Uppgradering, välj fältet Valuta och välj USD.

  7. Klicka på Spara & stäng.

Testa webhooken

Testa denna webhook enligt följande:

  1. Med Postman öppen, skapa en ny HTTP-förfrågan och ställ in dess metod till POST.

  2. Kopiera URL:en för Odoo-webhooken med ikonen (länk) och klistra in den i URL-fältet i Postman.

  3. Klicka på fliken Body och välj raw.

  4. Ställ in filtypen till JSON, kopiera sedan denna kod, dvs. nyttolasten, och klistra in den i kodredigeraren:

    {
        "_model": "sale.order",
        "_id": "SALES ORDER NUMBER"
    }
    
  5. I din Odoo-databas, välj en försäljningsorder att testa webhooken på. I den inklistrade koden, ersätt SALES ORDER NUMBER med försäljningsorderns nummer utan S eller några nollor före numret. Till exempel ska en försäljningsorder med numret S00007 anges som 7 i Postman.

  6. Klicka på Skicka.

  7. Konsultera Responsvisaren i Postman för att avgöra om webhooken fungerar korrekt eller inte. Om ett annat meddelande än 200 OK eller status: ok returneras, hjälper numret kopplat till meddelandet att identifiera problemet.

Skapa en ny kontakt

Denna webhook använder anpassad kod för att skapa en ny kontakt i en Odoo-databas när det externa systemet skickar en POST API-förfrågan till webhookens URL som inkluderar kontaktens information. Detta kan vara användbart för att automatiskt skapa nya leverantörer eller kunder.

Skapa webhooken

För att skapa denna webhook, gör följande:

  1. Öppna appen Kontakter, öppna sedan Studio och klicka på Webhooks. Modellen Kontakt är vald som standard.

  2. Klicka på Ny. Utlösare är inställd på Vid webhook som standard.

  3. Ställ in Målpost till model.browse([2]). Detta är i huvudsak en platshållare eftersom koden i den automatiserade åtgärden talar om för webhooken vad som behöver hämtas från nyttolasten och i vilken modell posten behöver skapas.

  4. Klicka på Lägg till en åtgärd.

  5. I sektionen Typ, klicka på Verkställ kod.

  6. Kopiera denna kod och klistra in den i kodredigeraren på fliken Kod i sektionen Åtgärdsdetaljer:

    # 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'")
    
  7. Klicka på Spara & stäng.

Testa webhooken

Testa denna webhook enligt följande:

  1. Skapa en ny HTTP-förfrågan i Postman och ställ in metoden till POST.

  2. Kopiera URL:en för Odoo-webhooken med ikonen (länk) och klistra in den i URL-fältet i Postman.

  3. Klicka på fliken Body och välj raw.

  4. Ställ in filtypen till JSON, kopiera sedan denna kod, dvs. nyttolasten, och klistra in den i kodredigeraren:

    {
        "name": "CONTACT NAME",
        "email": "CONTACTEMAIL@EMAIL.COM",
        "phone": "CONTACT PHONE NUMBER"
    }
    
  5. I den inklistrade koden, ersätt CONTACT NAME, CONTACTEMAIL@EMAIL.COM och CONTACT PHONE NUMBER med en ny kontakts information.

  6. Klicka på Skicka.

  7. Konsultera Responsvisaren i Postman för att avgöra om webhooken fungerar korrekt eller inte. Om ett annat meddelande än 200 OK eller status: ok returneras, hjälper numret kopplat till meddelandet att identifiera problemet.