AVM-Fritzbox meldet Anrufe über Alexa

Alexa macht’s möglich: Sprachunterstützung bei der Telefonie mit der Fritzbox

Update am Montag, 29. April 2019

Anrufernamen wiederholen

In der Praxis hat sich herausgestellt, dass man manchmal die Ansage des Anrufernamens nicht mitbekommt.

Ich habe daher eine Funktion ergänzt, die sich immer wieder aufruft, bis das Klingeln aufhört. Zur Sicherheit kann man zusätzlich die Anzahl begrenzen.

Bitte beachten: Der Name des Anrufers (callerName) und der Zähler (counter) sind nun globale Variablen!

/************* Anruf ansagen ***************/
var callerName = "";
var counter = 0;

on({id: 'tr-064.0.callmonitor.inbound.json'/*json*/, change : "any"}, function(obj) {
var jsonObj = JSON.parse(obj.state.val);
if (jsonObj.callee.endsWith("9876543")) {
var callerName = jsonObj.callerName;
if (callerName === "") {
callerName = "Unbekannt";
}
anruferAnsagen() ;
}
});

function anruferAnsagen() {
if (getState('tr-064.0.callmonitor.ringing'/*ringing*/).val && counter++ < 3) {
setState(
"alexa2.0.Echo-Devices.<alexaId>.Commands.speak",
"Anruf von " + callerName
);
setTimeout(anruferAnsagen, 4000);
}
}

Auf der nächsten Seite findest du das Update "Gesperrte Rufnummern nicht ansagen".

Autor: Rai

jahrelanger Homematic-Benutzer, öffnet sich mit Hilfe von Raspberry Pi und ioBroker für Neues im Internet of Things

16 Gedanken zu „AVM-Fritzbox meldet Anrufe über Alexa“

  1. Kann es sein das dieses Skript nur bei Amazon Devices funktioniert. Habe eine Bose Soundbar mit Alexa, diese reagiert aber leider nicht auf den Anruf, im iobroker bekomme ich unter dem Device aber die Ausgabe angezeigt.

    Vllt hat ja jemand eine Lösung für mich.

    Danke

  2. Hallo, vielen Dank für das tolle Skript und vor allem für die Ausfühliche Erläuterung. Leider erhalte ich im Log folgende Fehlermeldung und es kommt nicht zu einer Sprachausgabe beim ausgewählten Echo-Gerät. Ich habe im Skript die ID des Gerätes anepasst.
    [39m: javascript.0 (18793) script.js.common.Alexa.Ausgabe_von_Name_wenn_Anruf_auf_Festnetz: setForeignState(id=alexa2.0.Echo-Devices.XXXX.Commands.speak, state="Anruf von XXX XXXX") – wurde nicht ausgeführt, während der Debug-Modus aktiv ist

    Woran kann das liegen?

  3. Script No.1 läuft auf Anhieb, aber Script No. 2 und No. 3 wird die Variable CallerName nicht mehr modifiziert, sodass die Ausgabe auf der Alexa lediglich als "Anruf von" ertönt . Ich suche mir einen Wolf, aber finde den Fehler nicht. Bitte um Hilfe.

  4. Hallo,
    damit Alexa wieder den Anrufernamen ansagt, musste ich bei dem Script auf der zweite Seite folgendes ändern.

    Alt: var callerName = jsonObj.callerName;
    Neu: callerName = jsonObj.callerName;

    Wenn man möchte das bei übetragener, aber unbekannter Nummer, die Nummer angesagt wird.
    Kann man noch folgende Änderung durchführen.

    if (callerName === "") {
    callerName = jsonObj.caller;
    }

    Danke für den tollen Artikel hat prima funktioniert.

    Gruß Sven

  5. Ich habe es auch ausprobiert und es ist easy in das System einzupflegen – vielen Dank dafür.

    Was cool wäre, wenn es Zeitgesteuert wäre, oder die Ansage nur kommt, wenn jemand zuhause wäre, oder die Ansage nur bei bestimmten Anrufern kommt, also nicht bei jedem Anruf.

  6. Hallo,
    ich habe das Programm etwas auf meine Ansprüche angepasst. Vielleicht hilft es dem einem oder anderem weiter. hier mein Code:
    (Bereiche mit ********* müssen mit den eigenen Werten ersetzt werden.)

    /* Anruf ansagen */
    var callerName = "";
    var caller = "";
    var counter = 0;

    on({id: 'tr-064.0.callmonitor.inbound.json’/*json*/, change : "any"}, function(obj) {
    var jsonObj = JSON.parse(obj.state.val);
    if (jsonObj.callee.endsWith("*******")) { //nur Anrufe, die Aufdiese nummer eingehen werden angesagt
    callerName = jsonObj.callerName;
    if (callerName === "") { //Hat ein Anrufer keinen "Namen", dann ist er nicht im Telefonbuch
    callerName = "unbekannter Nummer"; //also wird der Name mit "unbekannter Nummer" ersetzt
    }
    caller = jsonObj.caller; //Telefonnumer laden
    counter = 0; //counter vorm Aufruf der Funktion auf 0 setzen, damit der counter nicht "überläuft"
    setState( "alexa2.0.Echo-Devices..*****************..Commands.speak-volume", 50 ); //Lautstärke von Alexa auf 5 setzen
    anruferAnsagen() ; //Aufruf der Funktion
    }
    });

    function anruferAnsagen() {
    if (getState('tr-064.0.callmonitor.ringing’/*ringing*/).val && counter++ < 3) {

    if (caller === "") { //Hat der Anrufer keinen Name, dann ist es ein unterdrückter Anrufer
    setState(
    "alexa2.0.Echo-Devices.*****************.Commands.speak",
    "Unterdrückter Anruf" );
    }
    else{ //Hat der Anrufer einen Namen, so wird dieser vorgelesen
    setState(
    "alexa2.0.Echo-Devices..*****************..Commands.speak",
    "Anruf von " + callerName );
    }

    setTimeout(anruferAnsagen, 6000); //Timeout aufrufen
    }
    }

    1. Hallo Maik, die AlexaID findet du am einfachsten in der ioBroker-Objektansicht der Alexa2-Instanz, wenn du die Liste der Echo-Devices aufgeklappst. Ich habe den Text oben etwas angepassst. Ist dann hoffentlich verständlicher. Grüße Rai

      1. Danke für die schnelle Antwort und das gute Programm. Damit hast du mir echt viel "try and error – Arbeit" erspart. Danke! 🙂
        Ich musste allerdings noch eine paar Änderungen vornehmen, da es bei mir nicht direkt lief.
        Der Counter für die wiederholte Ansage wird nur bei Skript neustart zurück gesetzt. Wenn ich zwei mal nacheinander mit der selben Nummer angerufen hatte und die drei Ansagen vom Counter durchgelaufen waren, schwieg meine Alexa beim nächsten Anruf. Hierfür habe ich den Counter vorm Funktionsaufruf zurückgesetzt.
        Zudem kam mein ioBroker mit dem zweiten mal "var" vor der Variable "callerName" nicht zurecht. Das habe ich raus genommen.

        Als kleine Erweiterung habe ich die Lautstärke des Echos für die Ansage auf 60% festgesetzt. So hört man die Ansage auch wenn zuvor die Lautstärke auf einem kleinem Level eingestellt war.

        Hier der abgeänderte Code:

        /************* Anruf ansagen ***************/
        var callerName = "";
        var counter = 0;

        on({id: 'tr-064.0.callmonitor.inbound.json’/*json*/, change : "any"}, function(obj) {
        var jsonObj = JSON.parse(obj.state.val);
        if (jsonObj.callee.endsWith("9876543")) {
        callerName = jsonObj.callerName;
        if (callerName === "") {
        callerName = "Unbekannt";
        }
        counter = 0;
        setState( "alexa2.0.Echo-Devices.ABCDEFG123456.Commands.speak-volume", 60 );
        anruferAnsagen() ;
        }
        });

        function anruferAnsagen() {
        if (getState('tr-064.0.callmonitor.ringing’/*ringing*/).val && counter++ < 3) {
        setState(
        "alexa2.0.Echo-Devices.ABCDEFG123456.Commands.speak",
        "Anruf von " + callerName
        );
        setTimeout(anruferAnsagen, 6000);
        }
        }

    1. Hallo Sven, schön, dass dir der Artikel gefällt. Wenn du das umgesetzt hast, bitte schreib mal, wie es war, ob Probleme aufgetreten sind usw. Gruß Rai

  7. Hallo, die Idee ist nicht schlecht. Funktioniert wie beschrieben.
    Prob bei mir: In der Fritze gesperrte Anrufer werden auch angesagt. Kann man da was machen???

    1. Danke für den Hinweis. Ich habe den Artikel ergänzt. Jetzt können gesperrte Anrufer herausgefiltert werden. Bin gespannt auf deine Rückmeldung!

Schreibe einen Kommentar

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