Channels, Extensions und Events... wie ist der Zusammenhang?

Antimon

Neuer User
Mitglied seit
23 Aug 2005
Beiträge
33
Punkte für Reaktionen
0
Punkte
0
Hallo zusammen,

für eine GUI möchte ich den Zustand von Extensions und Verbindungen visualisieren, das Ganze geschieht über Java und AMI.

Allerdings verstehe ich den Zusammenhang der einzelnen Verbindungs-Aufbau-Stufen und Events noch nicht so ganz, über entsprechende Hinweise würde ich mich sehr freuen. Ich versuche einmal das zu dokumentieren, was ich bisher verstanden habe, bitte korrigieren, falls etwas nicht stimmt.

Gehen wir von zwei internen Telefonen am Asterisk aus, Telefon 100 und 200:
- An Telefon 100 wird die Nummer 200 eingetippt und auf Abheben gedrückt
* Asterisk erstellt einen Channel für das Telefon, sendet dabei das NewChannelEvent raus
-> Hier die erste Frage: Auf der Konsole erscheint NewStateEvent "Ring" - heisst das, in diesem Moment wird dem Telefon 100 schon ein Rufsignal eingespielt?
- Asterisk versucht nun über einen neuen, zweiten Kanal, das Telefon 200 zu erreichen
* Asterisk sendet das NewChannelEvent für diesen zweiten Kanal raus
- Nachdem der Kanal zum Telefon erfolgreich aufgebaut wurde (?), kann Teilnehmer 200 per Dial angerufen werden (von Asterisk aus gesehen)
* Asterisk sendet das DialEvent raus
- Das Telefon 200 fängt an zu klingeln (Status "Ringing")
* Asterisk signalisiert, dass das Telefon klingelt durch den NewStateEvent "Ringing"
- Der angerufene Teilnehmer (200) hebt ab, der Channel (vorerst noch zu Asterisk) ist im Status "up"
* Asterisk meldet dies per NewStateEvent "up"
- Der rufende Teilnehmer bekommt auch einen aktiven Channel (->kann dies auch vor dem gerufenen Teilnehmer passieren?)
* Asterisk meldet auch dies per NewStateEvent "up"
- Nachdem beide Kanäle aufgebaut sind, werden sie miteinander verbunden, und die Teilnehmer können miteinander sprechen
* Dies wird von Asterisk per BridgeEvent gemeldet mit beiden eindeutigen Channel-IDs

... Ab hier wird gesprochen...

- Teilnehmer 200 legt auf
* Asterisk meldet HangupEvent für Teilnehmer 200
- Der Dialstatus ändert sich in "End", das Gespräch ist vorbei
* Asterisk meldet DialEvent mit Status "End" (-> hier die Frage, warum noch einmal DialEvent? Ist an dieser Stelle das Gespräch zuende, der CDR wird geschrieben?)
- Der andere Teilnehmer legt auf, bis dahin besteht noch der Channel zu Asterisk und könnte z.B. weiterverbunden werden (so wie viele Hotlines das Gespräch bewerten lassen, nachdem der Hotline-Mitarbeiter aufgelegt hat?)
* Asterisk meldet das Auflegen durch den HangupEvent


Ist die Abfolge und das, was ich als Anmerkung geschrieben habe soweit richtig?
Sehe ich das richtig, dass "Ring" bedeutet, beim Anrufer ertönt das Tuuut-Tuuut (Wählsignal), und "Ringing" bedeutet, dass das angerufene Telefon läutet?

Wenn ich die Stati der Telefone anzeigen lassen möchte (idle, klingelt, im Gespräch, belegt, ...), brauche ich folgende Events:
- NewStateEvent
- BridgeEvent
- HangupEvent

Stimmt das so oder habe ich welche vergessen?

Wenn die Telefone Hints vergeben haben, kommen zwischendrin noch "ExtensionStatusEvents" - ist es sicherer, sich auf die zu verlassen (wenn verfügbar), statt auf die oben genannten?

Das waren jetzt viele Fragen auf einmal... ich hoffe nicht zu viel :)
 
Ok, ich sehe schon, das war zu viel des Guten...

Vielleicht mal anders gefragt... was ist ein Channel, bzw. was charakterisiert einen Channel?

Ein Channel ist wohl eine Verbindung zwischen zwei Enden, um das mal abstrahiert darzustellen. Beispielsweise baut Asterisk per SIP einen Channel zum Telefon auf, wenn dies läuten soll, richtig? Bezeichnet dann Channel lediglich den Austausch der Verbindungsinformationen (z.B. die SIP-Pakete) oder ist Audio dort mit inbegriffen?

Wie kann ich ein Gespräch "verfolgen"? Angenommen, es kommt ein Gespräch von "aussen" rein, dann wird quasi ein Channel zu Asterisk aufgebaut, Asterisk baut einen oder mehrere Channels zu den Endgeräten auf und wenn ein Teilnehmer abhebt, verbindet Asterisk den ankommenden sowie den internen, selbst aufgebauten Channel (Stichwort BridgeEvent).

Jeder Channel hat eine eindeutige ID, damit kann ich im eben aufgeführten Beispiel die zu verbindenen Channels identifizieren.

Was aber wenn eine Dial()-Applikation dazwischenliegt? Dann gibt es ja zwei zusätzliche Channels, die zwei zusätzliche eindeutige IDs haben - wie bekomme ich die der Verbindung zugeordnet?

Oder anders gefragt - wenn jemand von "aussen" anruft und intern ein Teilnehmer abhebt, wie bekomme ich die Nummer des Anrufenden sowie des Teilnehmers, der das Gespräch beantwortet hat?
 
Wofür genau soll diese Visualisierung sein? Sowas hat jede besser Asterisk-Lösung doch schon fertig dabei?! Oder geht es Dir ums Lernen?
 
Was aber wenn eine Dial()-Applikation dazwischenliegt? Dann gibt es ja zwei zusätzliche Channels, die zwei zusätzliche eindeutige IDs haben - wie bekomme ich die der Verbindung zugeordnet?

Das kann ich Dir auf die Schnelle beantworten, mit dem AMI Befehl Status bekommst Du unter anderem den verbundenen Channel.

Als Beispiel für foschis Anmerkung das Flash Operator Panel.
 
@foschi: Neben dem Lerneffekt (mal tiefer in Asterisk einzusteigen) geht es nicht nur um die Visualisierung, sondern um die Daten an sich. Grob gesagt soll Asterisk in eine Gebäudeautomatisierung integriert werden (siehe dazu http://www.isysbus.org - die Webseite wird aber momentan noch überarbeitet). Das heisst - Steuern über Anrufe, Visualisieren der Leitungsbelegungen etc. - und natürlich auch sowas wie Anrufhistorie, Telefonbuch usw.

@rentier-s: Den Status-Befehl habe ich mir schon angeschaut, den nutze ich für die initiale Abfrage der Stati. Aber pollen möchte ich ungern, wenns schon die Events gibt. Nur zeigen die halt quasi stückweise den Verbindungsaufbau bis zum Endgerät hin auf, für mich wichtig/interessant wären halt die Informationen über die Endpunkte, nachdem die Verbindung aufgebaut wurde. Natürlich könnte ich wenn ich das mitbekomm, den Status-Befehl absetzen, aber schöner wärs, ich würde das Prinzip verstehen, sonst bin ich evtl. demnächst wieder an nem Punkt, wo ich nicht weiterkomme ;)

Momentan versuche ich herauszufinden, ob der Channel-Name nicht sinnvoller wäre als die Channel-ID. Allerdings fehlt mir dazu noch ein Puzzleteil: Wird ein Channel lokal weitergeleitet (Dial(Local/...)), erscheinen manchmal solche Channelnamen: Local/1234@via_12345-b8cd;1
Weiter gehts dann mit dem Namen Local/1234@via_12345-b8cd;2
Bis auf den Strichpunkt und die Zahl dahinter stimmen die Namen überein und könnten auch zusammengeführt werden, was die Zahl bedeutet ist mir aber noch nicht klar. Evtl. wenn zwei mal hintereinander die gleiche Technologie verwendet wird, um es zu unterscheiden?
 
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.