Preis für Verbindung anhand der Vorwahl ermitteln

Kingpin90

Neuer User
Mitglied seit
5 Nov 2008
Beiträge
9
Punkte für Reaktionen
0
Punkte
0
Hallo zusammen,

ich möchte gerne ein Prepaid Abrechnungsscript schreiben das noch während des gesprächs regelmäßig prüft ob noch aureichend Guthaben zu Verfügung steht.

Ich habe nun in einer MySQL Datenbank eine Tabelle mit einem Feld für die Vorwahl und einem Feld für den Preis pro Minute angelegt.

Nun zu meinem Problem:
Wenn nun ein Anruf rausgeht wird die Rufnummer im Format 004920812345 an das Script übergeben. Das Script müsste nun anhand der Vorwahl den Preis pro Minute aus der Datenbank abfragen und würde dann die Information bekommen, das Telefonate zu Rufnummern die mit 0049208 anfangen pro Minute z.B. 1 Cent kosten. In diesem Fall könnte ich dann eigentlich alles hinter der 7. Ziffer abschneiden und den Teil der noch übrig bleibt dann für die Abfrage nutzen. Wenn der Anruf aber nach Berlin (004930) oder auf deine Servicenummer (z.B. 00491805) dann funktioniert die ganze Geschichte natürlich nicht. Die Vorwahlen sind einfach unterschiedlich lang.

Für dieses Problem suche ich nun eine Lösung und hoffe das mir hier jemand weiterhelfen kann...
 
Ich hätte eine Idee, allerdings ist das von der Laufzeit her ziemlich bescheiden.

Im Grunde mußt Du über die gesamte Datenbank gehen und mittels eines regulären Ausdrucks den längsten Match bezüglich Deiner übergebenen Nummer und den DB-Feldern bilden. Beim größten Match (max. Anzahl übereinstimmernder Zeichen von Anfang des Strings) hast Du die entsprechende Vorwahl gefunden.

Eine Verbesserung der Laufzeit tritt ein, wenn man nicht über alle Einträge geht, sondern per SQL vorher filtert. Wir haben hier in D dreistellige Vorwahlen, also vergleicht man nur mit denen, wo mind. die ersten drei Stellen übereinstimmen.
 
Wenn Du nicht nach Entfernung abrechnen willst, brauchst Du doch nur die "Nichtfestnetz"-nummern ausfiltern. Der Bereich ist ja überschaubar.

jo
 
Erstens gibt es dafür fertige Lösungen (soweit ich weiß, stehen Lösungen sogar seit Jahren hier im Forum, z.B. auch für die LCR-Skripte)

Zweitens ist Dein Gedankengang für den Lösungsansatz nicht der beste. Man prüft nicht während des Gespräches das Guthaben, sondern rechnet anhand des Minutenpreises und des vorhandenen Guthabens die Zeit aus, die das Gespräch dauern darf. Dann wird von Asterisk der Anruf beendet. Diese Zeit läßt sich schon direkt im Verbindungsaufbau als Parameter übergeben.
 
Wenn Du nicht nach Entfernung abrechnen willst, brauchst Du doch nur die "Nichtfestnetz"-nummern ausfiltern. Der Bereich ist ja überschaubar.

jo

Das stimmt aber sobald ich auch Gespräche ins Ausland anbiete stehe ich wieder vor dem gleichen Problem.

Erstens gibt es dafür fertige Lösungen (soweit ich weiß, stehen Lösungen sogar seit Jahren hier im Forum, z.B. auch für die LCR-Skripte)

Hast du hier ein Beispiel? Ich habe lange nach so einem Script gesucht aber keins gefunden.

Zweitens ist Dein Gedankengang für den Lösungsansatz nicht der beste. Man prüft nicht während des Gespräches das Guthaben, sondern rechnet anhand des Minutenpreises und des vorhandenen Guthabens die Zeit aus, die das Gespräch dauern darf. Dann wird von Asterisk der Anruf beendet. Diese Zeit läßt sich schon direkt im Verbindungsaufbau als Parameter übergeben.

Das mag sein, deiner ist aber auch nicht Perfekt:) Mit deiner Lösung hat der Kunde 1 Euro Guthaben und kann damit 10 Minuten telefonieren. Problem: Wenn der Kunde gleichzeitig 100 Verbindungen aufbaut kann er mit 1 Euro 1000 Minuten telefonieren. Man könnte die gleichzeitigen Verbindungen natürlich begrenzen...
 
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.