Pascom 17.10 & 18.03 - Benachrichtigung per E-Mail bei verpassten Anrufen

Hallo,

ich versuche gerade, für einen Kunden, die Möglichkeit einer E-Mail Benachrichtigung bei verpassten Anruf zu schaffen.

Dazu habe ich folgendes Script hier gefunden:

def_hangup:
exten => s,1,Set(mail=meine@email.de)
exten => n,NoOp(MAIL TO ${MAIL})
exten => n,system(echo “” | mail -s “Mobydick: Verpasster Anruf von ${CALLERID(num)} ${CALLERID(name)} an ${MDC_EXTEN} um ${STRFTIME(${EPOCH},%Y-%m-%d %H:%M:%S)}” ${MAIL})
exten => n,Return()

Diese habe ich in “extern/nachher” beim Benutzer mit ensprechenden Zuständen und im Script selber auf “nachher”.

Das ganze hat mitten in den Tests einmal funktioniert und danach nicht mehr. Habe auch kein timeout definiert in den folowme Einstellungen.

Kann mir bitte jemand einen Denkanstoß geben warum es nur einmal ging und danach nicht mehr ? Vieleicht übersehe ich was. Das ganze soll unter der 17.10 und 18.03 gehen. Aktiv testen tuhe ich es unter 17.10.

Edit: Das einemal ist er wohl doch in einen Timeout reingelaufen und hat dann extern/nachher beim user ausgelöst. Gibt es aber eine möglichkeit beim Auflegen ? Leider finde ich hier im Forum keine Lösung.

vielen Dank & Grüße

Hallo @radek

default009 - def_hangup wird beim Auflegen ausgeführt…
Aber Achtung - Auflegen bedeutet nicht gleichzeitig, dass der Anruf tatsächlich verpasst wurde.
Wenn Du entsprechende Variablen vorher abfragst, gelingt die Steuerung.
Und… - je nach Call-Routing wird das Skript nicht ausgeführt.

Suche mal in Forum nach verpassten Anrufen. Da gibt es einige Beispiele dazu.
Schau auch mal hier vorbei…

Bei der v18 wird es dann richtig kniffelig - zumindest in der Cloud-Variante. Da haben versch. Variablen nicht mehr zwingend den Inhalt, der ihnen ursprünglich mal angedacht war. Das bläht dann das Skript etwas auf, aber machbar ist es.

cu
Christoph

Möchtest du eine Mail, wenn der Anufer in der Warteschlange auflegt?

Die “10” in Zeile 2 des Scripts ist die Durchwahl des Teams. Die Mailadresse in Zeile zwei anpassen auf die Adresse, an welche die Mails versendet werden sollen.

exten => s,1,NoOp(>>>def_hangup:: EXTEN: ${ARG1} DIALSTATUS: ${ARG2} QUEUESTATUS: ${ARG3} REASON: ${ARG4})
exten => s,n,ExecIf($[("${MDC_EXTEN}" = “10”)&("${CHANNEL(state)}" = “Ring”)]?System(echo Verpasster Anruf von ${CALLERID(num)} | mail -s Anruf verpasst meineadresse@tld.de))

Wenn dann nach Timeout eine Mailbox annimmt, kommt keine Mail, da der Anruf von der Mailbox angenommen wurde und somit quasi nicht verpasst wurde. Das kannst du dann über ein Inline Script vor deiner Mailbox Ansage im Team über ein Inline Script mit folgendem Inhalt lösen:

system(echo irgendetwas mit nummer ${MDC_DIALCALLERNUM} hat hier ${MDC_DIALCALLEENUM} angerufen | mail -s “der betreff” email@domain.tld)

Hoffe ich konnte dir helfen.

LG THOMAS

Hi Thomas,

vielen Dank für deine Antwort. Leider wird bei mir keine E-Mail verschickt. In der messages finde ich folgenden Eintrag:

[Feb 19 15:36:10] WARNING[19583][C-00000167] pbx.c: The application delimiter is now the comma, not the pipe. Did you forget to convert your dialplan? (ExecIf(0?System(echo Verpasster Anruf von 00171XXXXXXX|mail -s Anruf verpasst meine@email.de)))

Ergendwie funktioniert bei mir keine der Lösungen ausn Forum für die Warteschleifen.

Danke & Grüße
Friedberger

Hi!

Du sprichst jetzt von der Mail die versendet werden soll, wenn jemand in der Warteschlange auflegt?

Du hast deine Anpassungen dazu im def_hangup Skript gemacht?

LG THOMAS

Hallo @radek
wenn dein def_hangup Script noch nicht greift, könntest du dann bitte dessen Inhalt “preformatted Text” hier einfügen? Ggf fehlt das Einfassen in Anführungszeichen bei “Anruf verpasst”, z.B.(ungetestet):

exten => s,1,NoOp(>>>def_hangup:: EXTEN: ${ARG1} DIALSTATUS: ${ARG2} QUEUESTATUS: ${ARG3} REASON: ${ARG4})
exten => s,n,ExecIf($[("${MDC_EXTEN}" = “10”)&("${CHANNEL(state)}" = “Ring”)]?System(echo "Verpasster Anruf von ${CALLERID(num)}" | mail -s "Anruf verpasst" meineadresse@tld.de)) 

Grüße,
Steve

Hi,

ja ich habe den eingebunden (default009 - def_hangup). Wenn ich die pipe rausnehme und ersetze mit , oder & dann kommt keine Warnung mehr. Somit sollte es ja das richtige sein. Es wird auch erst ausgeführt wenn ich beim Testanruf auflege.

exten => s,1,NoOp(>>>def_hangup:: EXTEN: ${ARG1} DIALSTATUS: ${ARG2} QUEUESTATUS: ${ARG3} REASON: ${ARG4})
exten => s,n,ExecIf($[("${MDC_EXTEN}" = “3211”)&("${CHANNEL(state)}" = “Ring”)]?System(echo "Verpasster Anruf von ${CALLERID(num)}" | mail -s "Anruf verpasst" radek@tmt.de))

Habe jetzt einfach mal alle Daten so drinnen gelassen.

In der Messages kommen beim Eintritt in die Warteschleife folgende Meldungen:

[Feb 19 16:18:26] WARNING[23366][C-00000176] format_wav.c: Unexpected frequency mismatch 16000 (expecting 8000)
[Feb 19 16:18:26] WARNING[23366][C-00000176] file.c: Unable to open format wav
[Feb 19 16:18:26] WARNING[23394][C-00000176] app_dial.c: Unable to create channel of type 'SIP' (cause 20 - Subscriber absent)

Nach dem Auflegen dann:

[Feb 19 16:18:29] WARNING[23366][C-00000176] pbx.c: The application delimiter is now the comma, not the pipe.  Did you forget to convert your dialplan?  (ExecIf(0?System(echo "Verpasster Anruf von 001714466272" | mail -s "Anruf verpasst" radek@tmt.de)))

Ich habe es jetzt mit Anführungszeichen und ohne Probiert. Bringt leider nix.

Vielen Dank Jungs & Grüße
Friedberger

Hallo @radek

ersetzte mal bitte die Hochkomma und Teste dann nochmal…

cu
Christoph

Hi,

habe ich gemacht, hätte mir schon früher auffallen können danke ;), hat leider nichts gebracht. Ich sehe ja dass es verarbeitet wird. Es wird bloss schlicht der E-Mail Versand ignoriert. Und da kommt dann die Warnung mit der pipe.

Aus der Konsole kann ich aber E-Mails verschicken. Ich weis echt nimmer was ihr alle anders macht …

Grüße & Danke !

Wenn ich die Zeile, genau so wie sie da steht, in mein Script kopiere, die Hochomma korrigiere und meine credentials einsetze, erhalte ich eine eMail wenn der Anrufer auflegt.
Vermutlich gibt es irgenwo noch einen typo im Script!?!

Im ersten Bsp. erkennst Du, dass die Bedingung nicht erfüllt ist. Das Script wird verarbeitet aber keine eMail versendet!

Im zweiten Bsp. erkennst Du, dass die Bedingung erfüllt ist und eine eMail versendet wird.

Um Dir die Variabeln anzeigen zu lassen kannst Du noch folgendes dem Script hinzufügen.

exten => s,1,NoOp(>>>def_hangup:: EXTEN: ${ARG1} DIALSTATUS: ${ARG2} QUEUESTATUS: ${ARG3} REASON: ${ARG4})

exten => s,n,NoOp(>>>> ##              Channel ----> ${CHANNEL(state)})
exten => s,n,NoOp(>>>> ##            Durchwahl ----> ${MDC_EXTEN})

exten => s,n,ExecIf($[("${MDC_EXTEN}" = "DEINEDURCHWAHL")&("${CHANNEL(state)}" = "Ring")]?System(echo "Verpasster Anruf von ${CALLERID(num)}" | mail -s "Anruf verpasst" DEINEeMAIL))

Könntest Du bitte mal einen Screenshot vom Inhalt des defaul009 machen und von der CLI ab dem >>>def_hangup::

…niemals aufgeben!

cu
Christoph

Hallo @radek

es ist mir gelungen, Deine Warnung zu reproduzieren. (s. Nr 1)
Die Ursache sind die fehlerhaften Hochkomma. Die Bedingungen im Skript sind erfüllt aber es wird keine eMail versendet. - Das kennen wir ja schon…

Jetzt kommst…
Nachdem ich das Skript wieder korrigiert habe, wird nach dem Auflegen eine eMail versendet (s. Nr 2) aber die Warnmeldung bleibt und ich ich bekomme sie nicht mehr weg.

Da wir nun wissen, dass trotz Warnmeldung eine eMail bei richtiger Script-Syntax versendet wird, kann die Ursache nur noch in der Bedingung liegen. Lass sie einfach mal weg und benutze nur…

exten => s,n,System(echo "Verpasster Anruf von ${CALLERID(num)}" | mail -s "Anruf verpasst" DEINEeMAIL)

…viel Erfolg!

cu
Christoph

Ist es denn überhaupt möglich, in der Cloud-Variante per Skript eine E-Mail zu versenden? Ich sehe zwar, dass mein Skript aufgerufen wird, aber eine E-Mail kommt nirgends an.

Vielleicht geht mail-s aber auch nicht mehr…

Gruß
Michael

Hallo Michael,

die Skripte für verpasste Anrufe mit mail -s funktionieren in der aktuellen Cloudversion…

Hier mal eine Variante als Inline-Skript

cu
Christoph

Gehr, mein Skript sieht so aus:

system(echo ${MDC_DIALCALLERNUM:1:15} ${MDC_DIALCALLERNAME} hat auf der 0123 45678 angerufen.| mail -s “Anruf verpasst ${MDC_DIALCALLERNAME} (${MDC_DIALCALLERNUM:1:15})” mail@meinedomain.de)

Vielen Dank Thomas, aber ich bekomme keine E-Mails, allerdings auch sonst keine Mails bei eingehenden Voicemails und Faxen. Der Mailversand will überhaupt nicht, hat also nix mit dem Skript zu tun.

Wie kann ich denn wohl den Mail-Versand auf der Konsole debuggen? Handelt sich um eine Onsite-Installation 18.07.

Gruß
Michael

War das nicht tail - f auf der Konsole?

Ich glaube, mit der 18er hat sich da was geändert. Es gibt ja journalctl mit diversen Parametern.

Inzwischen konnte ich das Problem allerdings auch eingrenzen und lösen. Ich hatte das von @radek gepostete Skript verwendet. Dieses enthält allerdings Syntaxfehler. Die habe ich nun beseitigt und alles ist schick. Ich werde das Skript nun noch ein wenig hübsch machen und dann hier posten für alle, die in der Zukunft Bedarf haben.

Gruß
Michael

Hallo Noses,
ich wäre dir sehr Dankbar wenn du dein Script hier posten könntest ich habe das gleiche Problem und noch keinen Erfolg

vielen Dank

Hallo wir haben ein funktionierendes Script ( als def_hangup)

exten => s,1,NoOp(>>>def_hangup:: EXTEN: ${ARG1} DIALSTATUS: ${ARG2} QUEUESTATUS: ${ARG3} REASON: ${ARG4})
exten => s,n,ExecIf($[("${MDC_EXTEN}" = “7355”)&("${CHANNEL(state)}" = “Ring”)]?System(echo “Hallo”, “am ${STRFTIME(${EPOCH}„%Y-%m-%d um %H:%M:%S)}” “hat ${CALLERID(num)} versucht Sie (Ihre Durchwahl: ${MDC_EXTEN}) anzurufen.” | mail -s “PASCOM - Verpasster Anruf” MAIL@TEST.de))

Lediglich die MAIL-Adresse (MAIL@TEST.de) und die Durchwahl (7355) würden wir gerne mit einer Variable und einem Inline-Script beim Benutzer austauschen - hat jemand hierzu eine Idee ?

vielen Dank

Hallo liebe Leut,

ich hänge mich hier auch noch einmal ein, weil es so schön passt. Gestern habe ich festgestellt das mein wie folgt angepasstes “def_hangup” Skript nicht mehr funktioniert.
Ob dies mit dem kürzlichem Update (Cloud) auf die 19.06R zusammenhängt, oder mit etwas anderem, kann ich nicht sagen.

exten => s,1,NoOp(>>>def_hangup:: EXTEN: ${ARG1} DIALSTATUS: ${ARG2} QUEUESTATUS: ${ARG3} REASON: ${ARG4})
exten => s,n,ExecIf($[("${MDC_EXTEN}" = “10”)&("${CHANNEL(state)}" = “Ring”)]?System(echo Verpasster Anruf von ${MDC_DIALCALLERNUM:1} | mail -s “Anruf verpasst ${MDC_DIALCALLERNAME} ${MDC_DIALCALLERNUM:1}” mail@meinedomain.de))

Mit dieser Anpassung bekamen wir dann immer eine Mail, wenn jemand in der Warteschlange aufgelegt hat, mit Namen (sofern im Telefonbuch) und mit der Rufnummer.

Ich habe dann das “def_hangup” so wie von Tyrion weiter oben geschrieben angepasst. Nun schaut es wie folgt aus:

exten => s,1,NoOp(>>>def_hangup:: EXTEN: ${ARG1} DIALSTATUS: ${ARG2} QUEUESTATUS: ${ARG3} REASON: ${ARG4})
exten => s,n,System(echo “Verpasster Anruf von ${CALLERID(num)}” | mail -s “Anruf verpasst” mail@meinedomain.de.de)

Damit wird die Mail versendet, aber es werden Anrufe als verpasst via Mail versendet die angenommen wurden. Außerdem ist die Mail nicht mehr so formatiert wie vorher. Weiterhin kommen bei einem wirklich verpassten Anruf, drei Mails und manchmal auch eine “verpasste Anruf Mail” von der externen Rufnummer unseres Teams (wir haben nur eines) in welchem der Anruf aufläuft

Kann mir bitte jemand helfen? Vielen Dank im voraus!

LG THOMAS

P.S.: Das Skript von @razorspade funktioniert bei mir ebenfalls nicht.