Webhooks

Warnung

Es wird dringend empfohlen, sich bei der Entscheidung für die Verwendung von Webhooks und während des gesamten Implementierungsprozesses mit einem Entwickler, Lösungsarchitekten oder einem anderen technischen Experten zu beraten. Wenn Webhooks nicht richtig konfiguriert sind, können sie die Odoo-Datenbank negativ beeinträchtigen und es kann einige Zeit dauern, bis sie wiederhergestellt ist.

Webhooks, die in Studio erstellt werden können, ermöglichen es Ihnen, eine Aktion in Ihrer Odoo-Datenbank zu automatisieren, wenn ein bestimmtes Ereignis in einem anderen externen System auftritt.

In der Praxis funktioniert das wie folgt: Wenn das Ereignis im externen System auftritt, wird eine Datendatei (die „Payload“) über eine POST-API-Anfrage an die URL des Odoo-Webhooks gesendet und eine vordefinierte Aktion wird in Ihrer Odoo-Datenbank ausgeführt.

Im Gegensatz zu geplanten Aktionen, die in vordefinierten Intervallen ausgeführt werden, oder manuellen API-Anfragen, die explizit aufgerufen werden müssen, ermöglichen Webhooks ereignisgesteuerte Kommunikation und Automatisierung in Echtzeit. Sie können beispielsweise einen Webhook einrichten, um Ihre Odoo-Lagerdaten automatisch zu aktualisieren, wenn ein Verkaufsauftrag in einem externen Kassensystem bestätigt wird.

Das Einrichten eines Webhooks in Odoo erfordert keine Programmierung, wenn zwei Odoo-Datenbanken verbunden werden, aber das Testen eines Webhooks erfordert ein externes Tool. Benutzerdefinierte Zieldatensätze oder Aktionen können Programmierkenntnisse erfordern.

Bemerkung

Dieser Artikel behandelt das Erstellen eines Webhooks, der Daten von einer externen Quelle empfängt. Es ist jedoch auch möglich, eine automatisierte Aktion zu erstellen, die Daten an einen externen Webhook sendet, wenn eine Änderung in Ihrer Odoo-Datenbank auftritt.

Webhook in Odoo erstellen

Wichtig

Konfigurieren und testen Sie einen Webhook mithilfe einer duplizierten Datenbank, bevor Sie ihn in einer Live-Datenbank implementieren, um sicherzustellen, dass der Webhook wie beabsichtigt funktioniert.

Tipp

Den Entwicklermodus zu aktivieren, bevor ein Webhook erstellt wird, bietet größere Flexibilität bei der Auswahl des Modells, auf das die Automatisierungsregel abzielt. Es ermöglicht auch, den technischen Namen des Modells und der Felder zu finden, die möglicherweise zur Konfiguration der Payload benötigt werden.

Um den technischen Namen eines Modells zu finden, fahren Sie bei aktiviertem Entwicklermodus über den Modellnamen und klicken Sie dann auf Interner Link. Der technische Name befindet sich im Feld Modell. Beispielsweise verwendet ein Verkaufsauftrag-Webhook das Modell Verkaufsauftrag, aber der technische Name sale.order wird in der Payload verwendet.

Um einen Webhook in Studio zu erstellen, gehen Sie wie folgt vor:

  1. Studio öffnen und auf Webhooks klicken, dann auf Neu.

  2. Geben Sie dem Webhook einen klaren, aussagekräftigen Namen, der seinen Zweck identifiziert.

  3. Falls erforderlich und sofern der Entwicklermodus aktiviert ist, wählen Sie das entsprechende Modell aus dem Dropdown-Menü aus. Wenn der Entwicklermodus nicht aktiviert ist, zielt die Automatisierungsregel standardmäßig auf das aktuelle Modell ab.

  4. Die URL des Webhooks wird automatisch generiert, kann aber bei Bedarf durch Klicken auf Secret rotieren geändert werden. Dies ist die URL, die beim Implementieren des Webhooks im externen System verwendet werden sollte, das Updates an die Datenbank sendet.

    Warnung

    Die URL ist vertraulich und sollte mit Vorsicht behandelt werden. Wenn Sie sie online oder unvorsichtig teilen, kann dies unbeabsichtigten Zugriff auf die Odoo-Datenbank ermöglichen. Wenn die URL nach der ersten Implementierung aktualisiert wird, stellen Sie sicher, dass sie im externen System aktualisiert wird.

  5. Falls gewünscht, aktivieren Sie Aufrufe protokollieren, um den Verlauf der API-Anfragen an die URL des Webhooks zu verfolgen, z. B. für Fehlerbehebungszwecke.

  6. Wenn das System, das den Webhook sendet, nicht Odoo ist, passen Sie den Code für Zieldatensatz an, um nach dem JSON-Datensatz zu suchen, der in der Payload enthalten ist, wenn die API-Anfrage an die URL des Webhooks gestellt wird. Wenn das System, das den Webhook sendet, eine Odoo-Datenbank ist, stellen Sie sicher, dass id und model in der Payload erscheinen.

    Wenn der Webhook zum Erstellen von Datensätzen in der Odoo-Datenbank verwendet wird, verwenden Sie model.browse(i) oder model.search(i) anstelle des Standard-Zieldatensatz-Formats.

  7. Klicken Sie auf Aktion hinzufügen im Tab Auszuführende Aktionen, um die auszuführenden Aktionen zu definieren.

  8. Bevor Sie den Webhook im externen System implementieren, testen Sie ihn, um sicherzustellen, dass er wie beabsichtigt funktioniert.

Tipp

  • Webhooks können auch über das Menü Automationen in Studio erstellt werden, indem der Auslöser Bei Webhook ausgewählt wird.

  • Um auf den Verlauf der API-Anfragen zuzugreifen, falls Aufrufe protokollieren aktiviert wurde, klicken Sie auf die Schaltfläche Protokolle oben im Formular Automatisierungsregeln.

  • Falls der Zweck des Webhooks nicht darin besteht, einen vorhandenen Datensatz zu aktualisieren, z. B. um einen neuen Datensatz zu erstellen, muss die Aktion Code ausführen gewählt werden.

Webhook testen

Das Testen eines Webhooks erfordert eine Test-Payload und ein externes Tool oder System wie Postman, um die Payload über eine POST-API-Anfrage zu senden. Dieser Abschnitt stellt die Schritte zum Testen eines Webhooks in Postman vor.

Tipp

  • Siehe den Abschnitt zu Webhook-Anwendungsfällen für schrittweise Erklärungen zum Testen von Webhooks mit Test-Payloads.

  • Um spezifische Hilfe beim Testen eines Webhooks mit Postman zu erhalten, kontaktieren Sie deren Support-Team.

  1. Erstellen Sie in Postman eine neue HTTP-Anfrage und setzen Sie deren Methode auf POST.

  2. Kopieren Sie die URL des Webhooks aus Ihrer Odoo-Datenbank mit dem Symbol (Link) und fügen Sie sie in das URL-Feld in Postman ein.

  3. Klicken Sie auf den Tab Body und wählen Sie raw.

  4. Setzen Sie den Dateityp auf JSON, kopieren Sie dann den Code aus der Test-Payload und fügen Sie ihn in den Code-Editor ein.

  5. Klicken Sie auf Senden.

Im Viewer Response unten auf dem Bildschirm in Postman zeigen Details, einschließlich eines HTTP-Antwortcodes, an, ob der Webhook korrekt funktioniert oder nicht.

  • Eine Meldung 200 OK oder status: ok zeigt an, dass der Webhook auf Odoo-Seite ordnungsgemäß funktioniert. Von hier aus kann die Implementierung mit dem anderen System beginnen, um die API-Anfragen automatisch an die URL des Odoo-Webhooks zu senden.

  • Wenn eine andere Antwort zurückgegeben wird, hilft die zugehörige Nummer dabei, das Problem zu identifizieren. Beispielsweise bedeutet eine Meldung 500 Internal Server Error, dass Odoo den Aufruf nicht korrekt interpretieren konnte. Stellen Sie in diesem Fall sicher, dass die in der JSON-Datei gefundenen Felder in der Konfiguration des Webhooks und im System, das den Testaufruf sendet, korrekt zugeordnet sind.

Tipp

Das Aktivieren der Aufrufprotokollierung in der Konfiguration des Webhooks in Odoo liefert Fehlerprotokolle, falls der Webhook nicht wie beabsichtigt funktioniert.

Webhook in einem externen System implementieren

Wenn der Webhook erfolgreich in Odoo erstellt und getestet wurde, implementieren Sie ihn in dem System, das Daten an die Odoo-Datenbank sendet, und stellen Sie sicher, dass die POST-API-Anfragen an die URL des Webhooks gesendet werden.

Webhook-Anwendungsfälle

Im Folgenden finden Sie zwei Beispiele für die Verwendung von Webhooks in Odoo. Für jedes Beispiel wird eine Test-Payload bereitgestellt, die im Abschnitt zum Testen des Webhooks zu finden ist. Postman wird verwendet, um die Test-Payload zu senden.

Währung eines Verkaufsauftrags aktualisieren

Dieser Webhook aktualisiert einen Verkaufsauftrag in der App Verkauf auf USD, wenn das externe System eine POST-API-Anfrage an die URL des Webhooks sendet, die diese Verkaufsauftragsnummer enthält (die durch den id-Datensatz der Payload identifiziert wird).

Dies könnte nützlich sein für Tochtergesellschaften außerhalb der Vereinigten Staaten mit einer Muttergesellschaft innerhalb der Vereinigten Staaten oder während Fusionen, wenn Daten in einer Odoo-Datenbank konsolidiert werden.

Webhook erstellen

Um diesen Webhook zu erstellen, gehen Sie wie folgt vor:

  1. Öffnen Sie die Verkauf-App, dann öffnen Sie Studio und klicken Sie auf Webhooks. Das Modell Verkaufsauftrag ist standardmäßig ausgewählt.

  2. Klicken Sie auf Neu. Der Auslöser ist standardmäßig auf Bei Webhook gesetzt.

  3. Setzen Sie den Zieldatensatz auf model.env[payload.get('_model')].browse(int(payload.get('_id'))), wobei:

    • payload.get('_model') den Wert abruft, der mit dem Schlüssel model in der Payload verknüpft ist, d. h. sale.order, was der technische Name des Modells Verkaufsauftrag ist.

    • payload.get('_id') ruft den Wert ab, der mit dem Schlüssel id in der Payload verknüpft ist, d. h. die Nummer des Ziel-Verkaufsauftrags in Ihrer Odoo-Datenbank ohne das S und ohne führende Nullen.

    • int konvertiert die abgerufene ID in eine Ganzzahl, da die Methode browse() nur mit einer Ganzzahl verwendet werden kann.

  4. Klicken Sie auf Aktion hinzufügen.

  5. Klicken Sie im Abschnitt Typ auf Datensatz aktualisieren.

  6. Wählen Sie im Abschnitt Aktionsdetails die Option Aktualisieren, wählen Sie das Feld Währung und wählen Sie USD.

  7. Klicken Sie auf Speichern & Schließen.

Webhook testen

Um diesen Webhook zu testen, gehen Sie wie folgt vor:

  1. Öffnen Sie Postman, erstellen Sie eine neue HTTP-Anfrage und setzen Sie die Methode auf POST.

  2. Kopieren Sie die URL des Odoo-Webhooks über das (Link)-Symbol und fügen Sie sie in das URL-Feld in Postman ein.

  3. Klicken Sie auf den Tab Body und wählen Sie raw.

  4. Setzen Sie den Dateityp auf JSON, kopieren Sie dann diesen Code, d. h. die Payload, und fügen Sie ihn in den Code-Editor ein:

    {
        "_model": "sale.order",
        "_id": "SALES ORDER NUMBER"
    }
    
  5. Wählen Sie in Ihrer Odoo-Datenbank einen Verkaufsauftrag aus, um den Webhook zu testen. Ersetzen Sie im eingefügten Code SALES ORDER NUMBER durch die Nummer des Verkaufsauftrags ohne das S und ohne Nullen vor der Nummer. Beispielsweise sollte ein Verkaufsauftrag mit der Nummer S00007 in Postman als 7 eingegeben werden.

  6. Klicken Sie auf Senden.

  7. Sehen Sie sich den Response-Viewer in Postman an, um festzustellen, ob der Webhook ordnungsgemäß funktioniert. Wenn eine andere Meldung als 200 OK oder status: ok zurückgegeben wird, hilft die mit der Meldung verbundene Nummer, das Problem zu identifizieren.

Neuen Kontakt erstellen

Dieser Webhook verwendet benutzerdefinierten Code, um einen neuen Kontakt in einer Odoo-Datenbank zu erstellen, wenn das externe System eine POST-API-Anfrage an die URL des Webhooks sendet, die die Informationen des Kontakts enthält. Dies könnte hilfreich sein, um automatisch neue Lieferanten oder Kunden zu erstellen.

Webhook erstellen

Um diesen Webhook zu erstellen, gehen Sie wie folgt vor:

  1. Öffnen Sie die Kontakte-App, dann öffnen Sie Studio und klicken Sie auf Webhooks. Das Kontakt-Modell ist standardmäßig ausgewählt.

  2. Klicken Sie auf Neu. Der Auslöser ist standardmäßig auf Bei Webhook gesetzt.

  3. Setzen Sie den Zieldatensatz auf model.browse([2]). Dies ist im Wesentlichen ein Platzhalter, da der Code in der automatisierten Aktion dem Webhook mitteilt, was aus der Nutzlast abgerufen werden muss und in welchem Modell der Datensatz erstellt werden muss.

  4. Klicken Sie auf Aktion hinzufügen.

  5. Klicken Sie im Bereich Typ auf Code ausführen.

  6. Kopieren Sie diesen Code und fügen Sie ihn in den Code-Editor auf der Registerkarte Code im Bereich Aktionsdetails ein:

    # 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. Klicken Sie auf Speichern & Schließen.

Webhook testen

Um diesen Webhook zu testen, gehen Sie wie folgt vor:

  1. Erstellen Sie in Postman eine neue HTTP-Anfrage und setzen Sie die Methode auf POST.

  2. Kopieren Sie die URL des Odoo-Webhooks über das (Link)-Symbol und fügen Sie sie in das URL-Feld in Postman ein.

  3. Klicken Sie auf den Tab Body und wählen Sie raw.

  4. Setzen Sie den Dateityp auf JSON, kopieren Sie dann diesen Code, d. h. die Payload, und fügen Sie ihn in den Code-Editor ein:

    {
        "name": "CONTACT NAME",
        "email": "CONTACTEMAIL@EMAIL.COM",
        "phone": "CONTACT PHONE NUMBER"
    }
    
  5. Ersetzen Sie im eingefügten Code CONTACT NAME, CONTACTEMAIL@EMAIL.COM und CONTACT PHONE NUMBER durch die Informationen eines neuen Kontakts.

  6. Klicken Sie auf Senden.

  7. Sehen Sie sich den Response-Viewer in Postman an, um festzustellen, ob der Webhook ordnungsgemäß funktioniert. Wenn eine andere Meldung als 200 OK oder status: ok zurückgegeben wird, hilft die mit der Meldung verbundene Nummer, das Problem zu identifizieren.