NEWS
IoBroker und VOIP / SIP Calls mit Asterisk + Fritzbox
-
Wenn musst Du mir die ganze Fehlermeldung schicken, sonnst kann ich Dir nicht sagen wo der Fehler ist.
Hast Du die 3 Dateien /etc/asterisk/manager.conf, /etc/asterisk/sip.conf und /etc/asterisk/extensions.ael angepaßt, d.h alles gelöscht mit dem Teil aus der README ersetzt? Hast Du auch die Stellen in der Konfiguration angepaßt, die ich im Kommentar gekennzeichnet habe? Die müssen mit Deiner Friztbox Konfiguration übereinstimmen. Und zu aller Letzt musst Du in der Asterisk Instanz Administration auch noch die passenden Werte hinterlegen.
Asterisk muss Du nach der Konfiguration neu starten /etc/init.d/astersik restart oder asterisk -vvvv aufrufen und reload eingeben.
führe mal folgende nacheinander Befehle aus
cat /etc/asterisk/manager.conf
cat /etc/asterisk/sip.conf
cat /etc/asterisk/extensions.ael
Und schicke mir den jeweiligen Output! (Passwort entfernen!!!!) und ein Screenshot von der Asterisk Instanz Administration.
VG
-
manager.conf :
[general] ; Do not change
enabled = yes ; Do not change
port = 5038 ; Do not change
bindaddr = 0.0.0.0 ; Do not change
[manager] ; Do not change
secret = XXXXXX ; Change Manager password for ioBroker asterisk adapter
permit = 192.168.0.1/255.255.255.0 255 ; Change to your subnet and netmask
read = all ; Do not change
write = all ; Do not change
–-----------
hier sehe ich schon ein Fehler bei permit ( 192.168.0.1/255.255.255.0 255
sip.conf :
[general] ; Do not change
port = 5060 ; Do not change
bindaddr = 0.0.0.0 ; Do not change
context = default ; Do not change
subscribecontext = default ; Do not change
register => XXXXXXX:XXXXXXX@192.168.0.1/1000 ; Username, Password and IP address of Fritzbox WLAN/LAN telephone
[XXXXXXXXXX] ; Change to username of Fritzbox WLAN/LAN telephone
type = friend ; Do not change
username = XXXXXXX ; Change to username of Fritzbox WLAN/LAN telephone
host = 192.168.ß.1 ; Change hostname / IP address of Fritzbox
secret = XXXXXXXX ; Change password of Fritzbox WLAN/LAN telephone
fromdomain = 192.168.0.1 ; Change hostname / IP address of Fritzbox
fromuser =XXXXXXX ; Change username of Fritzbox WLAN/LAN telephone
–--------
oh man, das ß ist der zweiter Fehler....
extensions.ael :
context default {
1000 => {
Goto(ael-antwort,10,1);
}
}
context ael-ansage {
10 => {
Answer();
Wait(1);
Read(dtmf,${file}&beep,0,s,${repeat},1);
if ("${dtmf}" != "") {
SayDigits(${dtmf});
}
Hangup();
}
}
context ael-antwort {
10 => {
Answer();
Wait(1);
Set(repeat=5);
Read(dtmf,/tmp/asterisk_dtmf&beep,0,s,${repeat},1);
if ("${dtmf}" != "") {
SayDigits(${dtmf});
}
Hangup();
}
}
–---
und hier der Screenshot
So, habe doch schon alles geändert, brachte aber nichts, im Log steht trotzdem cannot start asterisk….
-
Okay, wenn Du die Dateien korrigiert hast, schreibe mir bitte eine PN nochmals mit den 3 Config Files + Screenshot + Admin Config. Bitte alles mit Benutzernamen und IP Adressen, nur das Passwort entfernen.
-
Fehler gefunden, es lag wirklich an den Rechten…
nun läuft es , Danke !!!
-
Hi,
ich bin auf den Adapter gestoßen, welchen ich auch direkt eingerichtet habe. Nun möchte ich primär keine Ansagen haben, sondern einfach nur einen ausgehenden Call. Hintergrund ist der, dass ich per GSM meine Alarmanlage steuern kann, indem ich z.B. +49176123456,,1234,,1,## anrufe.zum scharf schalten etc.
Wie kann ich den Adapter nur für das Wählen von Nummern benutzen, ohne dass ich eine Ansage dabei habe?
Vielen Dank & Gruß
-
Das müsste gehen, habe es aber noch nicht getestet. Versuche mal folgendes.
in der /etc/extensions.ael fügst Du die Exten 20 bei ael-ansage ein:
context default { 1000 => { Goto(ael-antwort,10,1); } } context ael-ansage { 10 => { Answer(); Wait(1); Read(dtmf,${file}&beep,0,s,${repeat},1); if ("${dtmf}" != "") { SayDigits(${dtmf}); } Hangup(); } 20 => { Wait(1); SendDTMF(${dtmf}); } } context ael-antwort { 10 => { Answer(); Wait(1); Set(repeat=5); Read(dtmf,/tmp/asterisk_dtmf&beep,0,s,${repeat},1); if ("${dtmf}" != "") { SayDigits(${dtmf}); } Hangup(); } }
Und in Asterisk rufst Du dann den Context wie folgt auf (123456789 mit Benutzername in sip.conf und die Telefonnummer ersetzen):
let options = { 'action': 'originate', 'channel': 'SIP/123456789/0176123456', 'context': 'ael-ansage', 'exten': 20, 'priority': 1, 'variable': { 'dtmf': 'ww1234ww1w##' } }; sendTo('asterisk.0', 'action', options, (res) => { console.log('Result ' + JSON.stringify(res)); });
Dann einmal asterisk neu starten oder in unter asterisk -rvvvvv den Befehl ael reload ausführen.
Bin mir aber nicht sicher ob es mit dem Codec funktioniert. Da musst Du vielleicht ein wenig spielen.
-
Hallo zusammen,
da ich das selbe Problem habe wie Kai102, hänge ich mich mal an dieses Thema an.
Ich habe gefühlt alles versuch, weiß aber nicht woran es liegen könnte.
Beim Start des Adapters bekomme ich im Log den Fehler "Cound not connect to Asterisk Manager".
Weil ich mir nicht sicher war, habe ich mehrere Möglichkeiten versucht.
Besonders "unsicher" bin ich mir bei folgenden Einstellungen:
Ich habe unter Manager bei der Fritzbox "manager" stehen lassen, ich habe es aber auch mit dem Nutzernamen des Telefons, welches ich angelegt habe, versucht. Ohne Erfolgt.
In der sip.conf ist die Zeile
register => 12345678:XXXXXX@192.168.178.1/1000 ; Username, Password and IP address of Fritzbox WLAN/LAN telephone
zu editieren.
Die "/1000" habe ich so übernommen - oder muss das durch irgendetwas anderes ersetzt werden?
Meine Screenshots sind mit denen von Kai102 vergleichbar.
cat /etc/asterisk/manager.conf
! ````
;
; Asterisk Call Management support
;! ; By default asterisk will listen on localhost only.
[general]
enabled = yes
port = 5038
bindaddr = 127.0.0.1
! [manager] ; Do not change
secret = XXXXXXXX ; Change Manager password for ioBroker asterisk adapter
permit = 192.168.178.0/255.255.255.0 ; Change to your subnet and netmask
read = all ; Do not change
write = all ; Do not change
! ````cat /etc/asterisk/sip.conf
!
! [general] ; Do not change port = 5060 ; Do not change bindaddr = 0.0.0.0 ; Do not change context = default ; Do not change subscribecontext = default ; Do not change ! register => 12345678:XXXXXX@192.168.178.1/1000 ; Username, Password and IP address of Fritzbox WLAN/LAN telephone ! [12345678] ; Change to username of Fritzbox WLAN/LAN telephone type = friend ; Do not change username = 12345678 ; Change to username of Fritzbox WLAN/LAN telephone host = 192.168.178.1 ; Change hostname / IP address of Fritzbox secret = XXXXXXX ; Change password of Fritzbox WLAN/LAN telephone fromdomain = 192.168.178.1 ; Change hostname / IP address of Fritzbox fromuser = 12345678 ; Change username of Fritzbox WLAN/LAN telephone !
Mir fehlen leider noch absolut die erforderlichen Kenntnisse im Umgang mit Linux, um alles zu verstehen. Ich stehe da leider noch sehr am Anfang.
Daher bedanke ich mich schon einmal im Voraus für die Hilfe
Grüße,
TemPeck
-
Auf dem ersten Blick, hast du nicht die Konfiguration aus der README übernommen. Zum Beispiel bind ist anders als in der manager.conf .
Punkt 1 verstehe ich nicht.
Also was ist zu tun! Bitte übernehme 1 zu 1 die Konfiguration aus der Readme. Wähle die SIP und nicht PJSIP Variante. Ersetzte vollständig den Inhalt der Konfiguration manager.conf, sip.conf, extensions.ael mit der aus der Konfiguration.
Aufpassen die Unix Berchtigungen auf Dateiebene müssen gleich bleiben! Z.b sip.conf gehört dem Unix User asterisk ( https://linuxwiki.org/DateiRechte )
https://github.com/schmupu/ioBroker.ast … /README.md
manager.conf
Nur Passwort und Subnetz anpassen. Sonst nichts. Die hat nichts mit der Fritzbox zu tun!
sip.conf
Richte auf der Fritzbox ein LAN/WLAN Telefon ein. Der Benutzername in der Frizzbox für dieses Telefon darf nur aus Zahlen bestehen. Zum Beispiel 123456789
Nun musst du nur noch in der sip.conf 123456789 durch deinen Benutzernamen ersetzen. Dann noch Passwort (passend zum Benutzernamen), Subnetz und IP Adresse der Frizbox anpassen. Das war's. Nicht mehr ändern!!
extensions.ael
Keine Anpassungen vornehmen.
Wenn das alles nicht hilft, schicke mir alle deine 3 config Files und Screenshots vom Fritzbox Wlan/LAN Telefon und ioBroker Asterisk admin per PN
Bitte IP Adressen so lassen. Nur Passwort schwärzen
Gesendet von iPhone mit Tapatalk
-
Hallo
Mit der Änderung von bind hat es geklappt.
Ich kann dir gar nicht sagen, wo ich die anderen Werte herauskopiert habe :?
Danke für den Support :!:
-
So, jetzt kommt der nächste Linux-Idiot.
Habe alles laut Anleitung gemacht und iobroker Log sagt "Cound not connect to Asterisk Manager"
Kann mir jemand erklären wie ich den Inhalt der Dateien per nano kopieren und einfügen kann? Ich denke da hat sich irgendwo ein Fehler eingeschlichen den ich nicht finde. -
@martin said in IoBroker und VOIP / SIP Calls mit Asterisk + Fritzbox:
So, jetzt kommt der nächste Linux-Idiot.
Habe alles laut Anleitung gemacht und iobroker Log sagt "Cound not connect to Asterisk Manager"
Kann mir jemand erklären wie ich den Inhalt der Dateien per nano kopieren und einfügen kann? Ich denke da hat sich irgendwo ein Fehler eingeschlichen den ich nicht finde.ich kenne mich leider mit "nano" nicht aus. Ich benutze den vi Editor.
Hast Du die manager.conf mit der aus der readme auf Github ersetzt?
Du kannst mir gerne Deine Asterisk Konfigurationsdateien (Passwort schwärzen) und die Asterisk ioBroker Admin Konfiguration als Scrennshot als PN schicken. -
@martin
ging mir genauso, hatte bis gestern abend auch keine Ahnung, wie ich hier im Editor alles markiere / lösche / einfüge, weil die üblichen (Windows-)copy&paste-Griffe nicht funktionierten.Andererseits hatte ich böse Erinnerung an "Vi" bzgl. kryptischer Befehle und Zeilenorientiertheit aus meinen Anfängen vor einigen Jahrzehnten. (klar, weil nie genutzt/trainiert damit umzugehen). Da kommt mir "nano" doch etwas plausibler daher, auch wenn ich den hier jetzt das erste mal sah. Man ist eben aus (kundenbedingter) jahrzehntelanger ausschließlicher Windows-Arbeit doch erheblich vorbelastet und kommt sich plötzlich vor wie ein Säugling.
Also, nach Frage an Tante G hat mir folgendes geholfen:
Markiermodus anstellen: ALT + M + A (Alt gedrückt halten, dann nacheinander M bzw. A), das ermöglicht dann entweder per Maus oder (bei gedrückter Strg/Ctrl) per Cursortaste Text zu markieren.Um das Markieren dann seitenweise (z.B. über 1300 sip.conf-Zeilen) zu machen: Ctrl+V für PgDn (ich glaube Ctrl+Y für PgUp). Auch wenns nicht sichtbar wird, weil Cursor ganz oben steht: geh mal ne Zeile hoch, dann blätterts auf die davorliegende Seite und da ist die Markierung dann sichtbar. Auch wenn's sich komisch anfühlt, mit der millionenfach genutzten "Einfüge-Taste"=Crtl+V nun plötzlich zu blättern: dat is hier offenbar so.
Ein "alles markieren" (wie sonst: Ctrl+A) habe ich nicht gefunden, bzw. dann auch nicht mehr gesucht.
Aber das war noch nicht alles: Wie löscht man das Markierte nun? Ausschneiden (sonst: Ctrl+X) ist ja hier "verlassen" ...und alles markierte verlieren!
Alles markierte Löschen: Ctrl+K. Steht übrigens auch unten im Fuß vom Nano.
Danach vorsichtshalber die leere Datei sichern (Ctrl+O)
Einfügen ging bei mir nur per Maus-Rechtsklick auf der Cursor-Position.
Ich hoffe, das hilft anderen Newbies wie uns erstmal weiter.
Achja: Alle Buchstaben-Kommandos waren bei mir Case-insensitiv, also Ctr+O = Ctrl+o usw.
Gruß von der Küste!
-
Danke für deine Hilfe.
Mit stuebis Hilfe habe ich jetzt den Adapter zum laufen gebraucht.Jetzt weiß ich nur nicht wie ich das in einem Script einstellen kann, dass er eine bestimmte Nummer anwählt und einen bestimmten Text erzählt.
Habe auch den Telegram-Adapter laufen, da gibt es in Blockly einen extra Block wo man das alles einstellen und eingeben kann. -
Die Idee ist genial.
Aber noch habe ich (bisher) meine Asterisk-Installation nicht zum Laufen bekommen. Allerdings habe ich einen Verdacht bzgl. meiner Systemumgbung. Deshalb nun dazu folgende Fragen mit dem Hintergrund eines (Linux-/Raspi-)-Newbies:
Wichtigste:
Wie genau ist "ioBroker- und Asterisk-Server getrennter / gleicher Server" zu verstehen, wenn es sich um eine Multihost-Umgebung handelt?Also einerseits:
ioBroker ist ja auch auf dem"Slave-Host" lokal installiert, auf dem die Asterisk-Installation folgte (und meine Adapter-/Instanz-Parameter wie IP, Pfade etc. beziehen sich, wie bei anderen verteilt auf Slaves liegenden Instanzen (Homematic, History...) natürlich auch hier auf diesen Slave)andererseits:
...liegt der Host-Master auf einem anderen Gerät (der aber doch eigentlich nichts damit zu tun haben dürfte?), aber dann doch: getrennte Server?Meine Multihost-Umgebung:
HOST-Master: Windows Server (kleine alte HP-Kiste mit Win 2016-Essential-Server, 1 Platte, 1x 4-core-CPU, aber eben echter 24/7-Server)
HOST-Slaves: diverse Raspi (3B und 3B+) zur Last- und Standortverteilung (externer Pflegefall), sowie NAS QNAP 453Pro mit ioBroker-Installation lt. Install-Anleitung, aber Ubuntu 16.04 auf der QNAP-Linux-Station (quasi virtueller Server auf dem NAS)
Um Asterisk installieren zu können (gibts/geht ja offenbar nur unter Linux?), habe ich mich für den QNAP-Slave entschieden. Raspi nicht, weil auf dem NAS echte Platten für die Filearbeit zur Verfügung stehen und keine SD-Card durch ständiges Write geschädigt wird.
Andere Adapter/Instanzen laufen auf dieser verteilten Umgebung sehr gut und stabil, z.B. HM-ReGa, -RPC, SQL, JS, History (mit aus Slave-Sicht virtuellem Verzeichnis per Samba auf echter Platte) usw.
Also, die Fragen bzgl. der Asterisk-Installation:
- kann Asterisk auf Multi-HOST-Slaves installiert werden (überhaupt?), hat das schon jemand erfolgreich getan?
- wenn ja: gilt das noch als "gleicher Server"?
- wenn nicht (Asterisk muss dann also auf den Master): Gibt es doch eine Installationsmöglichkeit unter Windows?
- wenn unter Windows: Was nehme ich dort als "SSH-Server"?
Falls unter Ubuntu / in Linux-Station des NAS nicht möglich: aber dann optional auf einem Raspi:
- liegt "/tmp" unter raspian eigentlich auf dem RAM oder schreibt das laufend auf die SD-Karte? (vgl.:raspmatic und diverse Erläuterungen dort dazu von Jens Maus)
- alternativ wäre hier (wie schon für History laufend) natürlich ein SAMBA-Verzeichnis auf echte Platte möglich (Win-Server oder NAS), aber irgendwie für Asterisk und die hier nun wirklich temporären Files eine ...ähm... kranke Lösung (zB. aus Sicht "Singe Point of failure"), oder?
Noch eine wichtige Linux-Newbie-Frage:
- wie kontrolliere ich / gebe ich Ports unter Linux frei?
- unter raspian
- unter debian (QNAP-Linux-Station)
Natürlich kann ich das alles selbst recherchieren und erforschen und werde das auch hier selbst ergänzen, falls ich etwas herausbekomme, aber
- wo liegt der generelle Ansatz, um sich nicht sinnlos zu verrennen? Geht das überhaupt, was ich vorhabe?
- Lösung sicher auch für andere Anwender interessant, deshalb besser hier als Ergänzung der Anleitung?
- vielleicht hat da einer einen kleinen Tipp oder Link, der tagelanges Warten auf Zeitfenster für eigenes Probieren/Suchen erheblich abkürzen könnte (diese Zeit ich dann besser in die eigentliche Lösung / akustisch ausgelöster Notruf, wird natürlich dann hier veröffentlicht) stecken könnte. Sorry, Pflegefall über 100km entfernt mit tgl. Fahren kostet leider viel Zeit, die es wenigstens zum Teil hiermit einzusparen gilt.
Es sind einfach noch zu viele Freiheitsgrade bei kurzfristig zu knapper Reserve für Linux-Grundkurs, deshalb meine Bitte um einen kleinen Anstoß.
Viele Grüße von der Küste!
-
@martin said in IoBroker und VOIP / SIP Calls mit Asterisk + Fritzbox:
Danke für deine Hilfe.
Mit stuebis Hilfe habe ich jetzt den Adapter zum laufen gebraucht.Jetzt weiß ich nur nicht wie ich das in einem Script einstellen kann, dass er eine bestimmte Nummer anwählt und einen bestimmten Text erzählt.
Habe auch den Telegram-Adapter laufen, da gibt es in Blockly einen extra Block wo man das alles einstellen und eingeben kann.Ich denke mal: Mit eigenen Scripts.
da sind doch Beispiele in der Online-Hilfe. Klick mal unter "Adapter" auf das Fragezeichen. Wenn ich meinen Asterix ...ähm... -sk zum Laufen habe, kann ich das probieren und mehr sagen.
Gruss Gerd
-
@martin , wenn jemand ein Blocky Beispiel hat, dann her damit, sonst findest Du Javascript Beispiele hier: https://github.com/schmupu/ioBroker.asterisk
-
@bb61 said in IoBroker und VOIP / SIP Calls mit Asterisk + Fritzbox:
Habe die Lösung! --> Asterisk läuft im Multihost!! :
Also, die Fragen bzgl. der Asterisk-Installation:
- kann Asterisk auf Multi-HOST-Slaves installiert werden (überhaupt?), hat das schon jemand erfolgreich getan?
Ja. Ich seit soeben. "Same Server" für Asterisk- und ioBroker-(Slave-)Host auf QNAP NAS unter debian 16.04
- wenn ja: gilt das noch als "gleicher Server"?
Ja
- wenn nicht (Asterisk muss dann also auf den Master): Gibt es doch eine Installationsmöglichkeit unter Windows?
Nein. Keine Installmöglichkeit unter Windows lt. asterisk-Homepage (alternativ zu Linux nur Solaris für Sun)
- wenn unter Windows: Was nehme ich dort als "SSH-Server"?
k.A. Nicht geprüt, da Einbindung des HOST-Masters (bei mir: Windows) nicht notwendig.
Falls unter Ubuntu / in Linux-Station des NAS nicht möglich: aber dann optional auf einem Raspi:
- liegt "/tmp" unter raspian eigentlich auf dem RAM oder schreibt das laufend auf die SD-Karte? (vgl.:raspmatic und diverse Erläuterungen dort dazu von Jens Maus)
Offenbar schreibt "/Tmp" auf dem Raspi tatsächlich direkt auf die SD-Card. Mehrere Lösungen gefunden, um dieses aus genau den von mir genannten Gründen auf RAM zu verlagern, z.B. hier und hier - sollte man generell / werde ich bei all meinen Raspis derart ändern.
Noch eine wichtige Linux-Newbie-Frage:
- wie kontrolliere ich / gebe ich Ports unter Linux frei?
- unter raspian
- unter debian (QNAP-Linux-Station)
Offenbar gibt es gar keine, der lokalen Windows-Firewall vergleichbare Sicherheitsschale, um die genannten Linux-Systeme herum. --> Dort ist also keine Portfreigabe für Geräte im LAN (hier: Port 5038) notwendig, da alle (Linux-)Geräte-Ports im LAN sowieso frei zugänglich sind(??!). - auwaia!
Ach ja, die Lösung:
Wie immer saß der Fehler VOR dem Monitor. Ich hatte schon vor vielen Tagen erst den Asterisk-Adapter auf dem NAS-Slave-HOST installiert, diesen dann aber ein paar Tage später umbenannt..... Nochmal den HOST-Namen angeclickt und richtigen Namen ausgewählt, unn dat Ding löppt!Nirgends tauchte eine Meldung oder Warnung auf, alles war bedienbar... nur es lief am Ende natürlich nicht (da nun gesetzte Parameter wohl nicht wirklich auf den installierten Adapter angewendet wurden)
Idee / Hinweis --> IObroker-Admin:
Unter "Instanzen" sollten vielleicht eben solche, die auf nicht mehr unter HOSTS geführten / existierenden Hosts verweisen/registriert sind irgendwie markiert werden (ausgrauen, rot hinterlegen, farbigen Rahmen, Name in Rot o.ä.). Das Problem ist so primitiv, aber sicher eine dumme und zeitfressende Falle für jeden, der eine Multihost-Umgebung managed. ...und so sicher ganz einfach zu umgehen....und: Danke, dass ich mich hier mal schriftlich austoben durfte. Das sortiert die Gedanken doch ganz gut und hilft, strukturiert und schnell eine Lösung zu finden!
...wg. Blockly-Anwendung: Ich schau mal, da geht (nun) sicher was. Aber nicht vorm Wochenende! Leider keine Zeit vorher...
Gruß von der Küste
-
-
Ging doch unerwartet etwas schneller.
Nachfolgend ein frisches Blockly-Demo. Einfach in einem leeren neuen Script importieren, dann die beiden Nummern (ziel- und quellnr "number" und "callerid") anpassen, das ist alles.
<xml xmlns="http://www.w3.org/1999/xhtml"> <block type="comment" id="iQk[*%#vV)/#GSZr%wCu" x="-662" y="-437"> <field name="COMMENT">ASTERISK-Blockly-Demo</field> <next> <block type="comment" id="CdBGv/twUt|*^x0(Z`0}"> <field name="COMMENT">Rel 1 2019-02-14 / gw (TheDoctor / bb61)</field> <next> <block type="comment" id="Anv#=F5PT*U8WeFd?p%l"> <field name="COMMENT"></field> <next> <block type="comment" id=")jiDC@fb~x!5.]6etF/u"> <field name="COMMENT">The initialisation (or: input definition)</field> <next> <block type="variables_set" id="yHrxb?yJJ6;e-4TY%NQA" disabled="true"> <field name="VAR">text</field> <value name="VALUE"> <block type="text" id="t?.~W)KsIld^pq*qUA]h"> <field name="TEXT">Hello World. This is your programmers night ending waking call.</field> </block> </value> <next> <block type="variables_set" id="{!kdzMn+F8qItV8Zn;/P"> <field name="VAR">text</field> <value name="VALUE"> <block type="text" id="Ai1)QSgP-`u-5[7,-oDt"> <field name="TEXT">Tach. Post.</field> </block> </value> <next> <block type="variables_set" id="-|@a_X4vv*[,su?Fsc2%"> <field name="VAR">number</field> <value name="VALUE"> <block type="text" id=".:i_Wbv,R.s@o|P-xlBS"> <field name="TEXT">0123 / 456-789</field> </block> </value> <next> <block type="variables_set" id="O8wCGuQaE73NK5x)dWQZ"> <field name="VAR">callerid</field> <value name="VALUE"> <block type="text" id="lr[9d1YKX8t_;WW+qBC%"> <field name="TEXT">0123 / 456-780</field> </block> </value> <next> <block type="variables_set" id="d%TndOTur7*4`l4Np;m^"> <field name="VAR">repeat</field> <value name="VALUE"> <block type="math_number" id="4SaGzyJ)oSt3[,95:6Fb"> <field name="NUM">5</field> </block> </value> <next> <block type="variables_set" id="=JBIH,:sBB+PRV:g9]1|"> <field name="VAR">priority</field> <value name="VALUE"> <block type="math_number" id="e4fB,U{R.~zmey`wib,]"> <field name="NUM">1</field> </block> </value> <next> <block type="variables_set" id=")x~*qF!eX`(EHx,!ZSV?"> <field name="VAR">timeout</field> <value name="VALUE"> <block type="math_number" id="W`OtfSa2W(v^WN+_h)V="> <field name="NUM">60000</field> </block> </value> <next> <block type="variables_set" id="#+c~MSYJJNnb@vjq?o_}" disabled="true"> <field name="VAR">language</field> <value name="VALUE"> <block type="text" id="KYUiVH=wSRt#^OMb.dQ*"> <field name="TEXT">en</field> </block> </value> <next> <block type="variables_set" id="fFtZc8kQKWn)40Pr`sr`"> <field name="VAR">language</field> <value name="VALUE"> <block type="text" id="mS2QWE(TTaSK4%Z|bMeM"> <field name="TEXT">de</field> </block> </value> <next> <block type="variables_set" id="kTMsGQ[J4v?O*rx,*ggH"> <field name="VAR">async</field> <value name="VALUE"> <block type="logic_boolean" id="].:2h04Jf,AXFxl7:t7k"> <field name="BOOL">FALSE</field> </block> </value> <next> <block type="variables_set" id="aCLu97fteG+tqgF`tr6["> <field name="VAR">audiofile</field> <value name="VALUE"> <block type="text" id="J6C/jF+/1[@7E#y2!M:z"> <field name="TEXT"></field> </block> </value> <next> <block type="comment" id="]G2HqcW*R}?FisL4FBZ+"> <field name="COMMENT">...some code...</field> <next> <block type="comment" id="|Q}NQ`kDAQ?F4:7:}n71"> <field name="COMMENT">The output:</field> <next> <block type="sendto_custom" id="~{xFT|#IM5~3(KVlOI1C"> <mutation items="text,telnr,callerid,repeat,priority,timeout,language,async,audiofile" with_statement="true"></mutation> <field name="INSTANCE">asterisk.0</field> <field name="COMMAND">dial</field> <field name="WITH_STATEMENT">TRUE</field> <field name="LOG"></field> <value name="ARG0"> <shadow type="text" id="?P|yZqU;J/P51dZ=]0~0"> <field name="TEXT"></field> </shadow> <block type="variables_get" id="Y?.3E)^k:#9E~=vpYkk:"> <field name="VAR">text</field> </block> </value> <value name="ARG1"> <shadow type="text" id="Q+X~VRg9.JK~+ae*S:`("> <field name="TEXT"></field> </shadow> <block type="variables_get" id="`9`/4G+-x?`.VkKHWo51"> <field name="VAR">number</field> </block> </value> <value name="ARG2"> <shadow type="text" id="~7OP`9Il(?JWX3dR7134"> <field name="TEXT"></field> </shadow> <block type="variables_get" id="_-c)3-Zh^R^I+@2jIP]R"> <field name="VAR">callerid</field> </block> </value> <value name="ARG3"> <shadow type="text" id="wt8VyUGOy6.WaGTj!Ae)"> <field name="TEXT"></field> </shadow> <block type="variables_get" id="57fYTEI1+a,1=EdO@]TI"> <field name="VAR">repeat</field> </block> </value> <value name="ARG4"> <shadow type="text" id="jKKv8ctfZeuK`B4[D-l%"> <field name="TEXT"></field> </shadow> <block type="variables_get" id="k.7HR)oIjRWGmE@6UY`H"> <field name="VAR">priority</field> </block> </value> <value name="ARG5"> <shadow type="text" id="K^aSRDKX|UL=H[ik0495"> <field name="TEXT"></field> </shadow> <block type="variables_get" id="9Jv@HJzOH,Kg8gPGGOgc"> <field name="VAR">timeout</field> </block> </value> <value name="ARG6"> <shadow type="text" id="W+#VKhnJ%T1_b|lD7w-h"> <field name="TEXT"></field> </shadow> <block type="variables_get" id="[Cohr1.,bHSF=IMs_n0:"> <field name="VAR">language</field> </block> </value> <value name="ARG7"> <shadow type="text" id="^=xQ{Azr#kgvrOAT?i,8"> <field name="TEXT"></field> </shadow> <block type="variables_get" id="yLUavn=dTttr%.yo|~]|"> <field name="VAR">async</field> </block> </value> <value name="ARG8"> <shadow type="text" id="a(eJ50,[r`#auRFF!JQa"> <field name="TEXT"></field> </shadow> <block type="variables_get" id="DhIsb(~E,%1tpwz~3GnC"> <field name="VAR">audiofile</field> </block> </value> <statement name="STATEMENT"> <block type="comment" id="CzlEMqMFo:NC3CxdTJ0M"> <field name="COMMENT">The feedback:</field> <next> <block type="comment" id="c!LZ5@a4PeUj{;ZU*4B]"> <field name="COMMENT"> V1: (embedded function)</field> <next> <block type="debug" id="4S22Ag(aYa[1_1,TgZv8"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text" id="XKX-#GFD4HX5c5tKgkla"> <field name="TEXT">test</field> </shadow> <block type="text_join" id="olKx{f~7W%}anV@!7ZGo"> <mutation items="2"></mutation> <value name="ADD0"> <block type="text" id="6#V|Tu0X^SROz#eVfIO^"> <field name="TEXT">Result V1:</field> </block> </value> <value name="ADD1"> <block type="convert_object2json" id="@71%(iKA*TEvYuo/K@I2"> <field name="PRETTIFY">FALSE</field> <value name="VALUE"> <block type="variables_get" id="d%m~mCV!STYZtV_c2GIR"> <field name="VAR">result</field> </block> </value> </block> </value> </block> </value> <next> <block type="comment" id="^QF%e}~kI#NG8}cWV?yQ"> <field name="COMMENT"> V2:(local function /w ability for modification)</field> <next> <block type="debug" id="l~|`?4TRuX7#a[s{BW1~"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text" id="XKX-#GFD4HX5c5tKgkla"> <field name="TEXT">test</field> </shadow> <block type="text_join" id="Og]}wvu.V(rK`T!?SkHB"> <mutation items="2"></mutation> <value name="ADD0"> <block type="text" id="u#b@4Hh}Rg2D]hH=P0zo"> <field name="TEXT">Result V2:</field> </block> </value> <value name="ADD1"> <block type="procedures_callcustomreturn" id="S.T~95tpH6K=PgT({!pS"> <mutation name="fl_stringifyWoJoin"> <arg name="inp"></arg> </mutation> <value name="ARG0"> <block type="variables_get" id="qIlwo_X(Z(iWU,RJ_`tx"> <field name="VAR">result</field> </block> </value> </block> </value> </block> </value> </block> </next> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> <block type="procedures_defcustomreturn" id="FK-`e`q2wN;WHVhQR+b1" x="-13" y="-337"> <mutation statements="false"> <arg name="inp"></arg> </mutation> <field name="NAME">fl_stringifyWoJoin</field> <field name="SCRIPT">Ly8gSlNPTi5zdHJpbmdpZnkgd2l0aG91dCAiam9pbigpIiIKLy8gUmVsLjEgICAgMjAxOS0wMi0xNCAvIGd3IChUaGVEb2N0b3IgLyBiYjYxKQoKcmV0dXJuIEpTT04uc3RyaW5naWZ5KGlucCk7</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> </block> <block type="comment" id="OplW|CVD9,UV{JYEF,M7" x="-288" y="-287"> <field name="COMMENT"><< DEMO (modify this number!)</field> <next> <block type="comment" id="t|70wz8P.*:o7IULt3.D"> <field name="COMMENT"><< DEMO (modify this number!)</field> </block> </next> </block> </xml>
Es gibt zwei alternative Feedback-Objekte: Eins mit der embedded function, ein zweites mit einer lokalen Funktion, um ggf. die Feedback-Werte dort individuell weiter zu verarbeiten.
Gruß von der Küste /gerd
-
VIELEN DANK für das Script.
Könntest du das ganze Script mal etwas erklären. Ist auf den 1. Blick doch etwas kompliziert.