Während eines Gespräch Bedingung prüfen

TheZock

Neuer User
Mitglied seit
17 Aug 2010
Beiträge
5
Punkte für Reaktionen
0
Punkte
0
Hallo.

Ich frage mich aktuell wie man folgendes unter Asterisk am besten hinbekommen kann.

Während ein Telefonat läuft (vorher ist alles mögliche passiert, irgendwann wir eben der eine Teilnehmer mit dem anderen endgültig verbunden) soll im Abstand von sagen wir mal 60 Sekunden eine Bedingung geprüft werden. Wenn alles okay ist, soll das Telefonat weiterlaufen, wenn etwas bestimmtes vorliegt soll eine Ansage kommen und das Telefonat getrennt werden.

Ganz konkret soll währed des Gesprächs das Guthaben geprüft werden. Gutheben leer -> Ansage "Bitte Guthaben aufladen" und dann das gespräch trennen.

Die Dauer des Gesprächs kann im Vorfeld NICHT berechnet werden da sich das Guthaben durch verschiedene Faktoren WÄHREND des Gesprächs ändern kann.

Es muss also während das Gespräch läuft per Intervall geprüft werden. Die Prüfung kann konkret über eine SQL-Abfrage passieren. VOR dem Gespräch wird sowieso mit der Datenbank hin und her Kommunziert. Die SQL-Abfrage ist also nicht das Problem.

Eher wie man WÄHREND des Gesprächs einen Teil des Rufnummernplans durchlaufen kann.

Ich freue mich über Eure Tipps und Vorschläge.

Grüße

TheZock
 
Ich freue mich über Eure Tipps und Vorschläge.

haengt natuerlich alles speziell von deinem Setup ab. Grundsaetzlich geht es so:

voellig asynchron, wenn halt die Abbruchbedingung zutrifft einen Hangup() auf den betreffenden Channel schicken, z.B.
Code:
asterisk -rx 'channel request hangup SIP/yyy-xxx-00000005'

im Hangup-Context der betreffenden Extension kann dann noch eine abschliessende Ansage gemacht werden.

- sparkie
 
Gibt es keine Asterisk-Interne Lösung? Die irgendwie auf der extensions.conf basiert? Ich denke da an etwas wie bei JavaScript ein Interval.

Ich möchte ungerne von außen auf Asterisk einwirken.

Grüße

TheZock
 
Schau mal hier:
http://www.ip-phone-forum.de/showthread.php?t=142316
Da ist das schon mal besprochen worden.

Hi, und erstmal danke für den Verweis.

Leider ist das Thema in 2007 wohl am Ende nicht geklärt. Jedenfalls sehe ich den Thread nicht als beendet an. Da ist noch einiges offen.

Aber im Prinzip wollte der Threadersteller schon das gleiche wie ich erreichen.

Die Manager-API zu bedienen (wie es am Ende vorgeschlagen wird) ist ehrlich gesagt nicht ganz nach meinem Geschmack da ich mich mit TCP/IP-Sockets nicht genug auskenne. Den Daemon würde ich in Perl schreiben (weil ich mich ebenfalls mit C++ nicht genug auskenne) und da drin dann mit Sockets arbeiten...puh...

Wie genau ist der Lösungsansatz mit dem Makro der während des Calls ausgeführt wird zu bewerten?

"Schau Dir mal DIAL mit dem Befehl M an, ein Macro wird aufgerufen und Du kannst Datenbankeinträge vornehmen."

Der Parameter U sieht auch interessant aus.

Kann man dieses Macro bzw. Sub so lange laufen lassen wie der Anruf laufen soll?

Sub/Makro
- Ziehe Guthaben ab (SQL)
- Prüfe Guthaben > 0 (SQL)
- - Nein -> Sub/Makro abbrechen und Auflegen
- - Ja -> 60 Sekunden warten, Schleife nach oben

AGI und ein externer Daemon sind Dinge die ich eigentlich vermeiden möchte.

Grüße

TheZock
 
Hallo TheZock,

ich hatte mal was ähnliches vor und hab damals alle Varianten, die mir eingefallen sind, durchprobiert. Aber keine hat funktioniert. Ich hab's daraufhin auch widerwillig mit einem Daemon gelöst und war nachher überrascht, wie gut das geht.

Kennst Du eigentlich a2billing? Das hat glaube ich auch CallingCard Funktionen an Board.

Svenja
 
AGI und ein externer Daemon sind Dinge die ich eigentlich vermeiden möchte.

aber wie sollte das anders, also alleine mit den Mitteln eines Dialplanes, zu realisieren sein?

Dazu muesste in der extensions.conf ja so etwas wie co-Routinen unterstuetzt werden. Soweit sind die IMHO aber noch nicht:)

Auch Konstrukte wie
Code:
[test1]
exten => _[0-9].,1,Noop("test1")
exten => _[0-9].,n,Wait(2)
exten => _[0-9].,n,Goto(test1,01234,1)

[test2]
exten => _[0-9].,1,Noop("test2")
exten => _[0-9].,n,Wait(2)
exten => _[0-9].,n,Goto(test2,01234,1)

[...]
exten => _[0-9].,1,Dial(LOCAL/01234@test1&LOCAL/01234@test2)
die vermeintlich in 2 Contexte parallel verzweigen, sind offenbar nur ganz billig implementiert. Sobald ein Context (z.B. test1) davon haengt (weil z.B. ein Dial() dort erfolgreich ist), wird die Aktion im anderen Context (test2) abgebrochen. Also nix mit 'echter' Parallelitaet.

- sparkie
 
Zuletzt bearbeitet:
Hi.

Na dann muss ich mich wohl doch mit der Manager API befassen.

Gibt es irgendwo Howto's oder ein Beispielsource in Perl?

Grüße

TheZock
 

Zurzeit aktive Besucher

Neueste Beiträge

Statistik des Forums

Themen
246,273
Beiträge
2,249,292
Mitglieder
373,862
Neuestes Mitglied
904lte
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.