WhatsApp Nachrichten mit ioBroker versenden

In ioBroker gibt es so gut wie für jede Funktion einen eigenen Adapter. Diese verbrauchen jedoch Arbeitsspeicher, der auf einem Raspberry Pi leider nicht erweitert werden kann. Viele Dinge lassen sich mit Hilfe eines Skriptes ähnlich oder genauso gut implementieren, wie es der Adapter selbst kann. Wer also schon verschiedene Skripte laufen hat, der benötigt nicht unbedingt den WhatsApp Adapter, sondern kann sich mit meinem Skript genauso gut helfen – wenn nicht sogar noch besser, da mein Skript die Versendung an viele Empfänger bietet 😉

Hinweis

Aktuell ist die Versendung auf 25 Nachrichten pro 4 Stunden begrenzt!

Vorbereitung

Zuerst musst Du den WhatsApp Service für deine eigene Telefonnummer freischalten. Dazu nimmst Du den sogenannten WhatsApp Bot in dein Telefonbuch auf.

Nummer: +38 644 59 71 67

Nachdem Du dies erledigt hast, schickst du via WhatsApp folgenden Text an den neuen Kontakt:

I allow callmebot to send me messages

Da sich der Service aktuell noch in einer Art Testphase befindet, kommen die Nachrichten leicht verzögert (max. 1 Minute) an. Nach etwa dieser Zeit bekommst Du eine Bestätigung, das Deine Nummer für den Service aktiviert wurde. Hierin enthalten ist der sogenannte API-Key. Dieser ist zwingend für die Versendung der Nachrichten notwendig.

Skript

Zuerst erstellst Du ein neues Javascript im Bereich global.

/*
 * @copyright 2021 Stephan Kreyenborg <stephan@kreyenborg.koeln>
 *
 * @author 2021 Stephan Kreyenborg <stephan@kreyenborg.koeln>
 *
 * Dieses Skript dient zur freien Verwendung in ioBroker zur Verbrauchserfassung der Shelly Geräte.
 * Jegliche Verantwortung liegt beim Benutzer. Das Skript wurde unter Berücksichtigung der bestmöglichen Nutzung
 * und Performance entwickelt.
 * Der Entwickler versichert, das keine böswilligen Systemeingriffe im originalen Skript vorhanden sind.
 *
 * Sollte das Skript wider Erwarten nicht korrekt funktionieren, so hast Du jederzeit die Möglichkeit, Dich auf
 * https://www.kreyenborg.koeln
 * für Unterstützung zu melden. Jedes Skript besitzt seine eigene Kommentarseite, auf der,
 * nach zeitlicher Möglichkeit des Autors, Hilfe angeboten wird. Ein Anrecht hierauf besteht nicht!
 * 
 * Ansprüche gegenüber Dritten bestehen nicht. 
 * 
 * Skript Name:		WhatsAppBot
 * Skript Version:	1.0
 * Erstell-Datum:	19. Februar 2021
 * 
 */
function WhatsAppBot(empfaenger, text) {
    // Hier kommen Deine API Keys rein
    var api_keys = ["xxxxxx"];

    // Hier kommen die zughörigen Telefonnummern rein
    var telephone_nummer = ["+49171xxxxxxx"];

    // Textnachricht bereinigen
    var nachricht = text.replace(/\s/g, "+");

    // An alle oder nur an einen bestimmten Empfänger
    if (Array.isArray(empfaenger)) {
        for (let i = 0; i < empfaenger.length; i++) {
            sendeWhatsApp(telephone_nummer[empfaenger[i]], api_keys[empfaenger[i]], nachricht);
        }
    }
    if (empfaenger == "alle") {
        for (let i = 0; i < telephone_nummer.length; i++) {
            sendeWhatsApp(telephone_nummer[i], api_keys[i], nachricht);
        }
    }

    if (Number.isInteger(empfaenger)) {
        sendeWhatsApp(telephone_nummer[empfaenger], api_keys[empfaenger], nachricht);
    }
}

function sendeWhatsApp(empfaenger, api_key, nachricht) {
    if (empfaenger != "" && api_key != "" && empfaenger != undefined && api_key != undefined) {
        exec("curl -X GET 'https://api.callmebot.com/whatsapp.php?phone=" + empfaenger + "&text=" + nachricht + "&apikey=" + api_key + "'",
            function (error, stdout, stderr) {
                if (stdout.includes("Message queued") || stdout.includes("invalid") || stdout.includes("currently a limit")) {
                    if (stdout.includes("Message queued")) {
                        log("WhatsAppBot: Erfolg: Nachricht an " + empfaenger + " verschickt!");
                    }
                    if (stdout.includes("invalid")) {
                        log("WhatsAppBot: Fehler: API Key für " + empfaenger + " ist ungültig!");
                    }
                    if (stdout.includes("currently a limit")) {
                        log("WhatsAppBot: Fehler: 25 Nachrichten pro 4 Stunden Limit erreicht für " + empfaenger + "!");
                    }
                } else {
                    log("WhatsAppBot: Fehler: Nachricht an " + empfaenger + " konnte nicht verschickt werden! Error: " + error);
                }
            });
    } else {
        log("WhatsAppBot: Fehler: Empfänger oder API Key für diese Position ungültig!");
    }
}

Skript anpassen

Sobald du das Skript angelegt hast, musst Du es noch etwas anpassen.

Hierzu benötigst Du den empfangenen API Key und deine Telefonnummer.

Verwendung mit einer Telefonnummer und einem API Key

Wenn Du nur eine Telefonnummer in dem Skript verwenden möchtest, brauchst Du nur die “x”-Zeichen in den Zeilen 25 und 28 mit deinen Daten ersetzen. Denke bitte an das internationale Format der Telefonnummer.

// Hier kommen Deine API Keys rein
var api_keys = ["xxxxxx"];

// Hier kommen die zughörigen Telefonnummern rein
var telephone_nummer = ["+49171xxxxxxx"];

Verwendung mit mehreren Telefonnummern und mehreren API Key’s

Solltest Du mehrere Telefonnummern ablegen wollen, so geht dies natürlich auch. Hier bitte darauf achten, das die Position der API Keys und Telefonnummern an den gleichen Positionen im Array stehen.
Position 1: Telefonnummer 1, API Key 1
Position 2: Telefonnummer 2, API Key 2

Die Nachrichten können dann an alle oder einzelne Telefonnummern geschickt werden. Dazu kommen wir im nächsten Abschnitt.

// Hier kommen Deine API Keys rein
var api_keys = ["xxxxxx","xxxxxx","xxxxxx"];

// Hier kommen die zughörigen Telefonnummern rein
var telephone_nummer = ["+49171xxxxxxx","+49151xxxxxxx","+49150xxxxxxx"];

Skript verwenden

Sobald Du das Skript angepasst und abgespeichert hast, steht die Funktion “WhatsAppBot” in allen Skripten im “common” Bereich zur Verfügung.

Mit einer Telefonnummer

Möchtest Du nun eine Nachricht an eine Telefonnummer versenden und hast auch nur eine Nummer hinterlegt, so ist dies mit folgendem Code möglich:

WhatsAppBot(0, "Dies ist eine Testnachricht!");

Mit mehreren Telefonnummern

Verwendest Du das Skript mit mehreren Telefonnummern, so kannst Du beim Aufruf entscheiden, ob Du die Nachricht nun an alle Nummern oder nur bestimmte Nummern versenden möchtest.

An alle Nummern
WhatsAppBot("alle", "Dies ist eine Testnachricht!");
An bestimmte Nummern

Um eine Nachricht an mehrere, bestimmte hinterlegte Nummern zu versenden, musst Du den Aufruf ein klein wenig abändern und auf die Zählweise achten. In der Programmierung startet das 1. Element immer bei 0 – somit hat die erste Nummer, die gespeichert ist, die Nummer 0.
Im folgenden Beispiel wird es deutlicher.

Nehmen wir an, Du hast 4 Nummern gespeichert, es sollen aber nur die erste und letzte Nummer diese Nachricht erhalten. In dem Falle wäre der Aufruf wie folgt:

WhatsAppBot([0,3], "Dies ist eine Testnachricht!");

Natürlich lassen sich auch alle 4 Nummern eintragen. Entweder mit “alle” oder mit dem Wert [0,1,2,3].

Nachrichten formatieren

In WhatsApp gibt es auch die Möglichkeit, Nachrichten zu formatieren.

Kursiv

Um deine Nachricht kursiv zu formatieren, schreibe einen Unterstrich auf beide Seiten des Textes:

_Text_

Fett

Um deine Nachricht fett zu formatieren, schreibe ein Sternchen auf beide Seiten des Textes:

*Text*

Durchgestrichen

Um deine Nachricht durchgestrichen zu formatieren, schreibe ein Tilde-Zeichen auf beide Seiten des Textes:

~Text~

Monospace

Um deine Nachricht in Monospace zu formatieren, schreibe drei Hochkomma auf beide Seiten des Textes:

“`Text“`

Die Formartierungen lassen sich natürlich auch kombinieren. So ergibt:

*_Hallo_* -> Hallo (fett und kursiv)

Viel Spaß mit dem Skript!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.