Kategorien
Randnotiz

Bash: Webhooks in MS Teams

Microsoft Teams lässt sich hervorragend für den EDV Support nutzen. Wie wäre es wenn der Kunde von der Website aus, direkt in den Techniker Kanal im Teams posten kann? Oder der Kundenserver im Fall einer Warnung, diese direkt publiziert?

Ein Webhook läßt sich jedem Kanal in jedem Team hinzufügen – Wir haben im Workshop ausgiebig geübt. Bisher haben wir Webhooks genutzt, um via Microsoft Visual Code, ganze Listings oder einzelne Zeilen im Micosoft Teams zu publizieren und zu diskutieren. Kopieren wir uns die URL des Webhooks.

Einstellung / Verwaltung der Connectoren in einem Kanal

Wie überträgt man nun eine Nachricht über den Webhook an den Microsoft Teams Kanal? Kurz: curl -H „Content-Type: application/json“ -d JSON URL. Diese Zeile in einem Bashscript würde ausreichen um eine Nachricht, als JSON Datensatz formatiert, der Webhook URL zu übergeben. Als Beispiel ein Bash Script:

#!/bin/sh

# Thomas Schilling Oktober 2019
# Testscript Webhook in Microsft Teams

WEBHOOK_URL="https://outlook.office.com/webhook/...."
TITLE=$1
shift
COLOR="#FF0000"
TEXT=$1

MESSAGE=$( echo ${TEXT} | sed 's/"/\"/g' | sed "s/'/\'/g" )
JSON="{\"title\": \"${TITLE}\", \"themeColor\": \"${COLOR}\", \"text\": \"${MESSAGE}\" }"

curl -H "Content-Type: application/json" -d "${JSON}" "${WEBHOOK_URL}"

Mit Aufruf des Bash Scripts übergeben wir eine Überschrift und einen Text. Das ist beliebig. Zum Beispiel möchte ich aktuelle Warnmeldungen der bund.de im Kanal veröffentlichen. In einem vorherigen Workshop haben wir mit den Wetterdaten bereits gespielt. Das PHP Script nutzen wir.

 $inhalt){
$m1 = $inhalt->info[0]->headline;
$m2 = $inhalt->info[0]->description;
        foreach ($inhalt->info[0]->area as $id2 => $in2){
                if ($in2->geocode[0]->value=='053780000000'){
                    $z++;
                    print('{"data": { "head": "'.$m1.'"}}');                
                    shell_exec('/teams.sh "'.$m1.'" "'.$m2.'"');
                } 
       }
}
if ($z==0){
print('{"data": { "head": "keine Gefahrenmeldung"}}');
}
?>

In den Zeilen 7 und 8 werden Überschrift und Gefahrenmeldung aus dem SOAP Array gelesen. In Zeile 13 rufen wir das obige Bash Script auf – In Zeile 8 des Bash Scripts teilen wir die übergebenen Texte. Die Farbe, der Meldung in Teams, ist im Bash Script in Zeile 13 im JSON Datensatz.

Meldung im Kanal
Gefahrenmeldung mit auffälliger Farbe im Kanal

Mit dem Bash Script lässt sich jeder Text publizieren. Zum Beispiel Fehlermeldungen oder Warnungen eines Kundenservers.