Hauptmenü

Webhook zu Discord

Begonnen von TWART016, 01 November 2021, 21:12:15

Vorheriges Thema - Nächstes Thema

TWART016

Hallo,

wie kann ich per Webhook eine Nachricht an einen Discord Server schicken?

Der Webhook sieht so aus:
https://discord.com/api/webhooks/546798634241346646/fdHkie_fkeiNlpwmdnw_C-JOwidDfe_a_dlskdHMCiWHWlxmshj

546798634241346646 ist der Token
fdHkie_fkeiNlpwmdnw_C-JOwidDfe_a_dlskdHMCiWHWlxmshj die Webhook ID

bartman121

HTTPMOD...

Übrigens musst du webhook.id und webhhok.token tauschen

Beschrieben ist das hier:
https://discord.com/developers/docs/resources/webhook#execute-webhook

Aber ohne lesen, überlegen und probieren wird's wohl eher nichts...

TWART016

Das vertauschen von ID und Token ist mir bewusst.

Ich habe das HTTPMOD device angelegt
defmod Discord HTTPMOD https://discord.com/api/webhooks/546798634241346646/fdHkie_fkeiNlpwmdnw_C-JOwidDfe_a_dlskdHMCiWHWlxmshj

Wenn ich die URL im Browser aufrufe kommt der Fehler. Müsste das funktionieren?
// 20211102003410
// https://discord.com/api/webhooks/fdHkie_fkeiNlpwmdnw_C-JOwidDfe_a_dlskdHMCiWHWlxmshj/546798634241346646

{
  "webhook_id": [
    "Wert ,,fdHkie_fkeiNlpwmdnw_C-JOwidDfe_a_dlskdHMCiWHWlxmshj" entspricht nicht snowflake."
  ]
}

Wie ich den Content angeben kann weiß ich auch noch nicht.

Bisher habe ich mit Webhooks noch nicht gearbeitet. Daher ist der Einstieg ein wenig schwierig.


bartman121

Also.... Grundsätzlich würde ich Mal mit einem beliebigen Tool anfangen wo man http-requests ausführen kann ...

Ich selbst nutze https://insomnia.rest/ ...

Dort kannst du dann erstmal "einfach rumprobieren" ....

Ein einfacher Browser-Aufruf geht nicht, da du den Body nicht manipulieren kannst. In einem api-cliebt (insomnia z.b.) hast du alle Freiheiten und kannst Body,Header usw. "Frei vorgeben"

Achtung, der Inhalt des Bodys muss json sen. Also

{ "Foo" : "bar",
"Foo2" : "bar2"}

Hilft das erstmal?

binford6000

Zitat von: bartman121 am 02 November 2021, 06:19:19
Ich selbst nutze https://insomnia.rest/ ...

Dort kannst du dann erstmal "einfach rumprobieren" ....

Hallo bartman121,
danke für den Tipp mit Insomnia - das kann ich hier auch gebrauchen (Nextcloud Talk API):
https://forum.fhem.de/index.php/topic,114481.0.html

VG Sebastian

TWART016

Erstmal muss ich mich damit beschäftigen. Die Schritte wären erstmal mit einem Tool die Webhooks zu senden. Wenn das funktioniert in FHEM mit HTTPMOD umsetzen?

Insomnia ist vermutlich etwas ähnliches wie Postman?

bartman121

Ja genau... Insomnia ist sowas wie Postman...

TWART016

Ich habe es in Postman geschafft eine Nachricht zu senden
https://birdie0.github.io/discord-webhooks-guide/tools/postman.html

Die Frage die sich gerade stellt, wie kann aus FHEM heraus ein Webhook gesendet werden. Habt ihr da ein paar Ratschläge?

bartman121

#8
naja, wenn du in der Anleitung nur abgetippt und nicht selbst überlegt hast, dann wirds schwer ... wenn du aber halbwegs nachvollziehen kannst, was getan wurde ... dann FEUER FREI

Mit Postman hast du jetzt schon mehr als 2/3 deines Zieles erreicht ...

Du hast mit Sicherheit folgende Dinge:
Request-Body
Request-Header
Request-Url

du kannst jetzt weitermachen wie es Dir gefällt
... du könntest mittels { qx(curl ....)} das ganze aus einem notify oder sonstwas ausführen. Den curl-Befehl kann man bei Postman denke ich  mal direkt "exportieren" lassen

du könntest aber auch HTTPMOD nutzen, Beispiele sind eigentlich ein paar im Wiki bzw. in der Commandref ... Ich zeige dir mal ein Beispiel wie ich es mit der homeassistant-api gemacht habe ...



defmod ha_bedside_lamp HTTPMOD http://homeassistant.fritz.box:8123/api/ 0
attr ha_bedside_lamp enableControlSet 0
attr ha_bedside_lamp room ZZZ_HTTPMOD
attr ha_bedside_lamp set01Data {"entity_id":"$val"}
attr ha_bedside_lamp set01Method POST
attr ha_bedside_lamp set01Name Off
attr ha_bedside_lamp set01TextArg $val
attr ha_bedside_lamp set01URL http://homeassistant.fritz.box:8123/api/services/homeassistant/turn_off
attr ha_bedside_lamp setHeader01 Authorization: Bearer <token entfernt>\
Content-Type: application/json
attr ha_bedside_lamp showBody 1
attr ha_bedside_lamp verbose 3


eigentlich ist das leicht zu verstehen .... die "\" stellen Zeilenumbrüche dar

Kommst du damit weiter?

Ich weiß aber selbst nicht genug über httpmod, zum Beispiel ist mir nicht klar, wie man eine Datei senden könnte oder wie man die URL dynamisch anpasst, also per Parameter bestimmte URL-Bestandteile austauscht ... aber bei Bedarf kann man das ja noch lernen....

TWART016

Habe es mittlerweile hinbekommen:

In 99_myUtils:
sub SendDiscord($$) {
    my ($username, $content) = @_;
my $webhookURL="https://discord.com/api/webhooks/MyURL";
{ qx(curl -H "Content-Type: application/json" -d '{"username": "$username", "content": "$content"}' "$webhookURL")}

}


Ausruf dann mit:
{SendDiscord('Name', 'Hier kommt der Text rein')}