Eingehende Gespräche: Verboseausgabe bei Gesprächsannahme

Friederich

Neuer User
Mitglied seit
1 Feb 2012
Beiträge
22
Punkte für Reaktionen
0
Punkte
0
Hallo,

Dumme Frage: Ist es irgend möglich, im Dialplan eine Verboseausgabe machen zu lassen, wenn ein Gespräch an einem angeschlossenen Telefon angenommen wird?

Gruß
Friederich
 
An sich bekommst Du ja eine Ausgabe (NOTIFY-Klasse) in etwa mit "Channel B answered Channel A". Du kannst natürlich weitere Ausgaben produzieren lassen, in dem gewünschten Falle über den U-Parameter im Dialcommand und eine entsprechend ausformulierte Subroutine (mit der man naturgemäß noch viel mehr machen kann).
 
Danke.
Ich hab jetzt im Dial()-Cmd den U-Parameter gesetzt.
Hier nochmal die Dokumentation
https://wiki.asterisk.org/wiki/display/AST/Application_Dial
Was man über dieses Gosub eigentlich genau anspringen kann, ist erstmal völlig unklar. "subroutine" ist jedenfalls kein Begriff, den ich in dem Zusammenhang deuten kann.

Hier mal ein paar Hinweise für Leute, die den Thread finden und dank gewohnt beschi**ener Asterisk-Dokumentation nicht erstmal ebenso dumm wie ich aus der Wäsche schauen wollen:

1.) Wenn man als "subroutine" einen Contextnamen angibt, dann landet man in dessen "s"-Extension.

2.) Argumente kann man beim Aufruf ja auch übergeben: Statt "^" funktioniert beim Aufruf offenbar auch ",", was einigermaßen verwirrend sein kann.

3.) Beispiel (springt in den Context "pickupmsg" und übergibt ${CHANNEL} an ${ARG1} dort):

Code:
...
same => n,Dial(SIP/622, 30, U(pickupmsg^${CHANNEL})) ; bei Gesprächsannahme nach pickupmsg spingen
...

4.) Man befindet sich im Sprungziel am annehmenden Arm der Verbindung: CALLERID(num) ist in der Extension also bspw. die Nummer des Annehmenden...
...

@abw1oim
Ich komme mit der Dokumentation zu Asterisk nicht wirklich gut zurecht. Mir fehlen häufig einfach kurze Beispiele.

Kannst du ein Buch zu Asterisk empfehlen? Wenn möglich eines, welches sich nicht an absolute Neueinsteiger richtet. (und ja, das aus dem Forum hier kenne ich). Ich wette du hast da einiges an Literatur durch :)
 
Lieraturempfehlungen - die hier im Forum nicht schon erwähnt worden wären - habe ich tatsächlich nicht (man mag's kaum glauben). Was hilft, ist das Asterisk-Wiki von Digium und tatsächlich die entsprechenden READMEs bzw. ChangeLogs der jeweiligen Versionen.

BTW: "subroutine" war ein möglicherweise verwirrender Begriff meinerseits. Streng genommen bedeutet U(): Führe den angegebenen Context mit Gosub aus. Daher muß Context dann auch ein Return beinhalten (insoweit mein "subroutine"-Begriff). Die Parametersyntax bei U() ist tatsächlich recht abenteuerlich, allerdings kann man ja tatsächlich auf alle Channel-Variablen des Annehmenden zugreifen (wie gewohnt), aber eben auch auf alle Channelvariablen des Anrufenden, nämlich über MASTER_CHANNEL(). Über diesen Trick lasse ich etwa bei Gruppenrufen die tatsächliche Gegenstelle, die den Ruf angenommen hat, gesondert in den CDR schreiben (damit man sie nicht aus dem dstchannel extrahieren muss). Und wegen dieses allgemein möglichen Zugriffs auf beide CHANNEL und deren Variablen brauche zumindest ich eher selten noch zusätzlich explizite Parameterübergaben bei der U()-Option.
 
@abw1oim:
Ich sehe es erst jetzt: Du hast ja auch von "subroutinen" geschrieben. Das habe ich allerdings nicht gemeint. Im Rahmen einer kurzen Antwort hier ist das ja völlig i.O. Dich trifft absolut keine Schuld :)

Was ich eigentlich kritisierte: Die "offizielle" Asterisk-Doku benutzt in der Dial()-Dokumentation auch diesen Terminus. Und das ist wieder genau so ein typisches Beispiel für das, was mich an Asterisk nervt:
- unscharfe Termini
- der Docu-Text zum "M"-Parameter gleicht dem des "U"-Parameters fast aufs Haar. Die Syntax ist aber dann letztlich doch wohl ziemlich anders.
- Auch gleicht bspw. die Syntax dieser Gosub-Anweisung in Dial() überhaupt nicht der Syntax des GoSub()-Kommandos. Obwohl die geworfenen Fehlermeldungen (für mich) darauf hindeuten, dass die vom gleichen Binary gehandhabt werden.
- Die gesamte Beschreibung ist ziemlich nichtssagend, was soll z.B. die sinnfreie Liste dort:
x - Name of the subroutine to execute via Gosub
arg - Arguments for the Gosub routine
Wo soll man da entnehmen, wie "x" und "arg" irgendwie zu nutzen sind? Auf der ganzen Seite kein Hinweis darauf ...

Ich finde Asterisk an sich schon ziemlich gefrickelt (sicher schon alt) und dazu nur sehr, sehr wenig anschaulich dokumentiert. Ich bin eigentlich die ganze Zeit nur am Suchen von Beispielen (man findet meist nur steinalte) und der Rest ist dann Try&Error ...

Daher wäre ein schönes Buch nicht schlecht.

Danke übrigens für den "MASTER_CHANNEL()". Leider ist die "Dokumentation" dazu wieder so ein Beispiel:
https://wiki.asterisk.org/wiki/display/AST/Function_MASTER_CHANNEL

Nutzinformation = Null!

BTW: Gibt es irgendwie eine Liste mit ALLEN verfügbaren Channelvariablen?
 
Zuletzt bearbeitet:
Liste mit ALLEN verfügbaren Channelvariablen

Nicht wirklich, da ja naturgemäß beliebig viele gesetzt werden können. Allerdings gibt es natürlich die "Standardvariablen", die man sich über core show function CHANNEL ansehen kann (da gibt es Unterschiede je nach CHANNEL-Technologie), dann gibt es natürlich die serienmäßigen CDR-Variablen und noch einige mehr (zu denen ich jetzt aber auch keine Doku kenne), u.a. für verbundene Channel BRIDGEPEER

Hinzu kommen aber alle Variablen, die man während des Channellebens selbst setzt (sofern sie nicht ein einer mit Gosub aufgerufenen Routine mit LOCAL() definiert werden).

Insoweit ist dieses Thema nicht abschließend zu beantworten. Im Zweifel hilft auch mal die Nutzung von DumpChan() im Dialplan, da bekommt mal alle Variablen des aktuellen Channels nebst deren Werten ausgegeben.
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.