Weiter machen nachdem die Gegenstelle aufhängt

luxland

Neuer User
Mitglied seit
22 Jun 2006
Beiträge
8
Punkte für Reaktionen
0
Punkte
0
Hallo

ich habe hier eine allgemeine Verständnisfrage zur extensions.conf.

Grob gesehen geht es darum:
Der Plan wird in der Regel nach Prioritäten abgearbeitet, außer zum Beispiel, wenn die Gegenstelle aufhängt. In einem solchen Fall wird nicht mehr die nächste Prio abegarbeitet, sondern zur h Extension verzeigt. Was kann ich jedoch machen, wenn ich nicht will, dass die Abarbeitung in einem solchen Fall abgebrochen wird.

Ein Beispiel wäre, wenn ich die Voicemail-funktion selber nachbauen will.
Hier ein zugehöriges Macro (könnte man auch mit GoSub aufrufen)

[macro-voice-mail]
;Schickt eine voicemail
exten => s,1,Answer
exten => s,n,Playback(my-nachricht-email)
exten => s,n,Record(/var/lib/asterisk/sounds/auf%d:wav|4|120|noanswer)
exten => s,n,System(echo "'anruf von <${CALLERID}> fuer ${EXTEN}'" | mutt -s "'voice mail'" -a ${RECORDED_FILE}.wav [email protected] &)
exten => s,n,Playback(my-nachricht-wird-versendet);
exten => s,n,Playback(${RECORDED_FILE});
exten => s,n,Wait(2)

exten => h,1,NoOp(hangup voive-mail)


Hängt hier die Gegenstelle beim Record auf, so wird nach h verzweigt (bei gosub lokal und bei macro zum aufrufer). Der Rest wird leider nicht mehr ausgeführt. Bei der h Extension kann ich den Code auch nicht nochmal reinschreiben. Denn wenn der Hangup später kommt wird der Code zweimal ausgeführt.


Hat jemand eine Ahnung für einen Workarraound oder eine saubere Systemeinstellung?

Danke
Dieter
 
Du könntest einfach die Asterisk Voicemail benutzen.

Du könntest es mit DeadAGI realisieren.
 
Man könnte auch einfach mal die Forumsuche verwenden oder einfach mal in den Asterisk-Rubriken schauen - es gibt grade noch einen aktuellen Thread der sich mit genau dem gleichen Thema beschäftigt.
 
ich habe es so gelösst, das bei einem Hanhup ein macro angestossen wird und dieses prüft, ob eine Aufnahmne vorhanden ist und ggf versendet.
 
Zuletzt bearbeitet:
Hi Thomas.

Du könntest einfach die Asterisk Voicemail benutzen.
In diesem Fall schon. Aber das Problem ist grundsätzlich da, wenn ein Programm (Dialplan) einfach abgebrochen wird. Eventuell bekommt man dadurch Inkonsistenzen.


Du könntest es mit DeadAGI realisieren.
Das werde ich mal ausprobieren. Lieber wäre mir allerdings gewesen, wenn ich es innerhalb der extension.conf lösen könnte um nicht parallel mit zwei Systemen arbeiten zu müssen. Das wird mit der Zeit unübersichtlich wenn man hin und her springt. Wenn es allerdings nicht anders geht, dann werde ich es so machen.


Hi Grandstream-Guru
Man könnte auch einfach mal die Forumsuche verwenden oder einfach mal in den Asterisk-Rubriken schauen - es gibt grade noch einen aktuellen Thread der sich mit genau dem gleichen Thema beschäftigt
Das habe ich gemacht, aber leider nichts passendes gefunden.
Ich habe nur "AGI Scriptausführung auch nach ext. Hangup" gefunden, was in diese Richtung ginge. Das ist aber nicht das, was ich suche.



Hi chaos2000
das bei einem Hanhup ein macro angestossen wird und dieses prüft, ob eine Aufnahmne vorhanden ist und ggtt versendet.
So hätte ich es auch gemacht. Aber irgendwie, sehe ich dabei Probleme, weil man ja nicht genau weiß, wo man unterbrochen wurde und eine saubere Behandlung dadurch ziemlich kompliziert wird.



Irgendwie zwickt es. Am besten wäre ein Schalter, mit dem man sagen könnte, dass ein Hangup den Dialplan oder einen Teil davon (Macro, Unterprogramm), nicht unterbrechen kann.


Grüße
Dieter
 
Zuletzt bearbeitet:
Ansonsten setze Variablen, so dass Du in h sehen kannst an welcher Stelle der Abbruch war und Du dann mit GoToIF fehlende Anweisungen nachholst und auch nur dann
oder packe die abschließenden Anweisungen generell in den h-Context...
 
Ich habe die Version von Thoams benutzt (Merkervariable und GotoIf in der h Extension)

Das Unterprogramm sieht dann so aus:
[macro-voice-mail]
;Schickt eine voicemail
exten => s,1,Answer
exten => s,n,Noop(VM_GESENDET ${VM_GESENDET} )
exten => s,n,Wait(1)
exten => s,n,Playback(my-nachricht-email)
exten => s,n,Wait(1)
exten => s,n,Record(/var/lib/asterisk/sounds/auf%d:wav|4|120)
exten => s,n,System(echo "'anruf von <${CALLERID}> fuer ${EXTEN}'" | mutt -s "'voice mail'" -a ${RECORDED_FILE}.wav ${pVOICE_MAIL_ADDR} &)
exten => s,n,Set(VM_GESENDET=true)
exten => s,n,Playback(my-nachricht-wird-versendet)
exten => s,n,Playback(${RECORDED_FILE})
exten => s,n,NoOp(Fertig)
exten => s,n,Return

exten => h,1,GotoIf($["${VM_GESENDET}" = "true"]?3:2)
exten => h,2,System(echo "'anruf von <${CALLERID}> fuer ${EXTEN}'" | mutt -s "'voice mail'" -a ${RECORDED_FILE}.wav ${pVOICE_MAIL_ADDR} )
exten => h,3,NoOp(voice-mail abgeschlossen)

Und der Aufruf so:
exten => 470101,1,Set([email protected])
exten => 470101,n,GoSub(macro-voice-mail,s,1)
exten => 470101,n,hangup

Ich habe das Unterprogramm komplett durchlaufen lassen und während der Aufnahme und auch während der Wiedergabe aufgelegt. Die Voicemail wird in jedem Fall zugestellt.

Den ganzen Code gleich in die h-Extension auslagern geht nicht, weil sonst beim Auflegen das h zweimal ausgeführt wird. Einmal durch einen Goto (der ja beabsichtigt ist) und einmal durch ein frühzeitiges Auflegen (auch wenn man sich bereits in der h-Extension befindet).

So ganz glücklich bin ich noch nicht üer diese Lösung, aber vieleicht fällt jemanden noch etwas besseres ein.



Danke
Dieter
 
Zuletzt bearbeitet:
Ist doch Ok so.
Im Macro braucht man kein Return.
 
Hallo Thomas

Ich rufe das Teil nicht als Makro, sondern als Unterprogramm auf.
siehe:
exten => 470101,1,Set([email protected])
exten => 470101,n,GoSub(macro-voice-mail,s,1)
exten => 470101,n,hangup

Ich habe Anfangs experimentiert und den Code teilweise als Macro oder als Unterprogramm aufgerufen (deswegen das macro- im Contextnamen). Dabei habe ich festgestellt, dass bei einem Macroaufruf, wenn aufgelegt wird, nicht die lokale, sondern die h-Extension vom Aufrufer angesprungen wird.

Grüße
Dieter
 
luxland schrieb:
Dabei habe ich festgestellt, dass bei einem Macroaufruf, wenn aufgelegt wird, nicht die lokale, sondern die h-Extension vom Aufrufer angesprungen wird.

Hi,
sollte bei der 1.2.X nicht so sein. Die Extension h wird in dem Macro gesucht, in dem der Anruf abgebrochen wurde. Das gibt Dir die Möglichkeit macro-spezifische Aktionen nach Abbruch der Verbindung durchzuführen.
 
Zuletzt bearbeitet von einem Moderator:
Stimmt das ist jetzt so!!

Ich habe zuerst mit 1.0.x gearbeitet, da war es anscheinend noch anders.
Unterprogramme finde ich besser. Weil man die beenden kann, wann man will. Leider funktioniert die Parameterübergabe nicht mit UPs.
Warum man überhaupt zwei Konzepte hat, ist mir schleierhaft??
 
Kostenlos!

Statistik des Forums

Themen
248,883
Beiträge
2,303,919
Mitglieder
378,562
Neuestes Mitglied
McBebe1