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“.
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?
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.
Hallo, wie füge ich denn mehrer Alexa ID`s in das Script ein? Ich komme nicht drauf sorry.
Hallo,
Was muss ich eintragen wenn ich mehrere Echo Geräte habe ?
Gruß Andreas
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
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.
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
}
}
Hallo, wie komme ich an meine AlexaID?
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
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);
}
}
Hört sich gut an. Werde es unbedingt auch ausprobieren.
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
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???
Danke für den Hinweis. Ich habe den Artikel ergänzt. Jetzt können gesperrte Anrufer herausgefiltert werden. Bin gespannt auf deine Rückmeldung!