Webhook für Externe Apps (MS Teams) / Senden von POST-Requests

  • Hallo zusammen,

    ich habe einen Shelly plus 1 pm und frage mich, ob ich bestimmte Status per Webhook an Fremdsysteme z.B. an MS Teams senden kann. Beide unterstützen ja Webhooks an sich. In MS Teams kann ich "incoming websockets" als Connector erstellen und erhalte dabei die entsprechende URL. Teams unterstütz dabei ausschließlich POST-Request:

    Zitat

    Karten stellen Informationen klar und konsistent bereit. Jedes Tool oder Framework, das HTTPS-POST-Anforderungen senden kann, kann über einen eingehenden Webhook Nachrichten an Teams senden.

    Grundsätzlich funktioniert das Senden einer Nachricht per Post auch auch. Das habe ich mit Postman ausprobiert. Im Body/ Payload der Nachricht muss dabei eine bestimmte Nachricht gesendet werden (ein JSON mit Type Message Card), damit Teams den Text korrekt interpretieren und anzeigen kann.

    Ich vermute mal,

    - dass die Webhook Einstellungen im Shelly nur GET-Requests versenden,

    - dass man das nicht umstellen kann auf POST und auch keine Payload mitgeben kann.

    - dass man auch nicht per scripting POST-Nachrichten versenden kann (Shelly.call macht ja GET)

    ==> Also wäre meine Idee (Shelly sendet Nachricht an MS Teams) nicht umsetzbar.

    Korrekt?

    Vielen Dank im Voraus.

    Einmal editiert, zuletzt von sentinel0815 (17. Mai 2022 um 14:59)

  • sentinel0815 17. Mai 2022 um 15:33

    Hat den Titel des Themas von „Webhook für Externe Apps (MS Teams)“ zu „Webhook für Externe Apps (MS Teams) / Senden von POST-Requests“ geändert.
  • Hallo,

    jetzt fand ich endlich Zeit, mal wieder etwas auszuprobieren. Und es hat em Ende geklappt :)

    Mein erster Versuch hat natürlich nicht geklappt. Aber hier saß das Problem vor dem Monitor... Im Script kann nicht einfach HTTP.POST verwenden werden. Folgendes Beispiel führt zur Fehlermeldung "Failed to apply setting. [HTTP] is not defined"

    Code
    let url = 'https://blablalbla.egal';  // eine von MS Teams zur Verfügung gestellte URL (Connectors > Incoming Webhook) 
    let body = '{"title": "Test Nachricht","text": "Eine Webhook MessageCard vom Shelly."}';
    HTTP.POST(url, body);

    Wir ihr schon merkt, muss ich erst noch etwas Verständnis aufbauen, was das Scripten im Shelly angeht. Nach nochmaligem Lesen der Doku muss natürlich Shelly.call verwendet werden. Da funktioniert dann auch im einfachsten Fall wie folgt:

    Code
    Shelly.call("HTTP.POST", {"url" : url, "body" : body}, 
          function (result, error_code, error_message, userdata) {}, null);

    Over and out :)