[HOWTO] Freiminuten abtelefonieren, dann Provider wechseln

@TinTin
Nach dieser Erklärung hab selbst ich es nun verstanden :). Der asterisk ist aber auch ein extrem komplexes Programm. Ohne Foren wie diesem hier wär man glatt aufgeschmissen.

@beta
Ich gehöre auch zu den "Glücklichen", die letztes Jahr im Juli auf den 9,95-Zug aufgesprungen sind. Seitdem hab ich die 120 min regelmässig verfallen lassen. Um so mehr freue ich mich jetzt, wenn mir die nette *-Dame ins Ohr haucht "Sie haben noch ... Minuten". Mir war nicht bewusst, dass die jetzige 9,95-flat die 120min nicht mehr beinhaltet. Na ja, wer soll bei der Preisgestaltung und den 120 Fussnoten in Lupenschrift pro Tarif auch noch durchsehen.

Grüße
revki
 
Wobei diese Anleitung ja nicht nur für SIP-Provider gilt, sondenr auch mit ISDN nutzbar ist. In meinem ISDN-Tarif sind (ohne Kosten) 120 Minuten ohne Berechnung enthalten. Mir ist es eigentlich ziemlcih egal ob ich über die 120 Minuten oder über eine Telefonieflat rausgehe.
 
Ich muss wohl meinen vorigen Post korrigieren ;)
Wenn ich über Zap rauswähle, scheint die Variable ANSWEREDTIME nicht gesetzt zu sein. Aber mit einem eigenen Timer dürfte das klappen.
 
Database put arbeitet nicht

TinTin schrieb:
asterisk -rx "database put tonline minutes 120"

Die 120 ggf. ersetzen mit den tatsächlich noch verbliebenen Freiminuten des aktuellen Abrechnungszeitraums.

Tin

Eingabe von:
asterisk -rx "database put tonline minutes 120"
ergibt bei mir folgendes Resultat.

voipgate:~# asterisk -rx .database put tonline minutes 120.
No such command '.database' (type 'help' for help)
Verbosity is at least 3

Ich bitte um Hilfestellung

Asterisk Version 1.2.2
 
TinTin schrieb:
Linux Shell eintippen:

asterisk -rx "database put tonline minutes 120"

Du hast:
asterisk -rx .database put tonline minutes 120.

eingetippt? Da fehlen die Anführungszeichen und die Punkte müssen weg.


Wenn Du es auf der CLI von Asterisk eingeben willst dann:

database put tonline minutes 120

Gruß,
Tin
 
Mit SIPDiscount.com, Internetcalls.com etc. wird das ja wieder interessant. Dort gibt es 300 Freiminuten (für diverse Länder) innerhalb von 7 Tagen. Somit wird die Berechnung etwas komplizierter, denn ich muss täglich die Zahlen der jeweils letzten 6 Tage auswerten (und zu diesem Zweck zunächst abspeichern):

Verbrauch(heute) = Startwert - Endwert
Neues Limit = Endwert + Verbrauch(heute vor einer Woche)

Weiterhin gibt es einen Mindestumsatz von 10 Euro im Quartal. Diesen kann man entsprechend für Mobilgespräche verbraten und in einer zweiten Variable dieses Guthaben aufbrauchen.

Bei optimaler Nutzung sind diese Provider dann oft günstiger als manche Flat.


Inter-nette Grüße
Mathias
 
Ich grabe mal den Thread hier nochmal aus.

Ich benutze einige Finareas um nach Russland zu telefonieren.
Es läuft freepbx auf einem V-Server mit aktuellster asterisk-Version.

Ich würde das (am besten auch noch in der Freepbx-Oberfläche) gerne mal so einstellen, dass wenn die 300 Minuten von z.B. voipstunt.com verbraucht sind, dass der asterisk dann automatisch über z.B. internetcalls.com vermittelt. Und wenn die 300 Minuten bei Internetcalls auch verbraucht sind, soll asterisk über Webcalldirect.com vermitteln usw.

Wie kann man das am einfachsten realisieren?
 
PsychoMantis schrieb:
Wie kann man das am einfachsten realisieren?

Einfach wir das nicht!

Du bauchst einen (Daten)bankeintrag für heute und für jeden der vorangeangenen 6 Tage auch. Und das für jeden Account separat.
Der Eintrag heute wird hochgezählt. Vor Gesprächsbeginn bildest du die Summe über den Account zur Ermittlung der Restsumme.
Um Mitternacht lässt du einen Cronjob laufen, der alle Einträge um einen Tag nach hinten kopiert.
Und weil das so ja viel zu einfach wäre, brauchst du noch eine providerabhängige Liste, in der die freien Ziele hinterlegt sind, damit Asterisk weiss, ob er die Minuten dazuzählen muss oder nicht.

Diese Liste der Ziele wird sehr umfangreich, da du darin die ganzen Handynumern ausschliessen musst, Sonderrufnummern brauchst du nicht beachten, die sind nicht möglich sind. Wie es mit xx800 aussieht weiss ich nicht.

Wenn du das am Laufen hast, melde dich. Das würde sicherlich viele interessieren.
 
Das wird nicht ganz so aufwändig, wie es zunächst scheint. Den größten Teil habe ich bereits bei mir realisiert.

1.) Verzonung - In Abhängigkeit vom Zielbereich wähle ich den Provider aus
Code:
exten => _417[6789].,1,Set(Area=CH_cellular!18!60!lowratevoip)
(Zone!Preis!Takt!Provider)
2.) Abrechnung - In der Prio h schreibe ich in die Datenbank
3.) crontab mit asterisk -rx ... Datenbank bearbeiten

Da es aufwändig war die Verzonungstabelle (Vorwahl -> Zone) zu erstellen könnten wir hier evt. diese Tabelle im Wiki gemeinsam pflegen.
 
Mathias-R schrieb:
1.) Verzonung - In Abhängigkeit vom Zielbereich wähle ich den Provider aus

Ja, nur habe ich mehr als einen Betamax. Das hat zwei Ursachen:

1. unterschiedliche Preise und
2. mehrere Leitungen

Bei belegt oder gestört wird auf einen anderen Account weitergeschaltet, dann müssen die Minuten auch dort erfasst werden. Wir brauchen also auch eine accountabhängige Auswertung, nicht nur eine zielabhängige.

Allein die Auswahl der kostenfreien Ziele sind fast 100 Zeilen, denn in deinem Beispiel sind die schweizer Handys gebührenpflichtig, aber auch _4184. kostet.
Nur diese kostenfreien Minuten müssen dann auch erfasst werden.
 
kombjuder schrieb:
Wir brauchen also auch eine accountabhängige Auswertung, nicht nur eine zielabhängige.

Es ist ja kein Problem den Provider, im Beispiel Lowratevoip, mit in die Datenbank zu schreiben. Das mache ich bei mir auch so, denn einer meiner Schlüssel lautet z.B. Users/Billing/${provider}, mit anderen Datenbankeinträgen summiere ich die Verbindungen nach Zielzone sowie die Kosten je Teilnehmer.

Natürlich müssen wir hierbei noch zwischen den Gratis-Gesprächen und kostenpflichtigen Verbindungen unterscheiden.

Die Zeile aus dem Zone-File war nur ein Beispiel, die Datei kennt natürlich mehrere Zonen für die Schweiz. Dennoch ist sie sicher nicht vollständig. Daher wäre eine gemeinsame Basis für die Verzonung im Wiki vielleicht eine gute Idee.
 
Mathias-R schrieb:
Daher wäre eine gemeinsame Basis für die Verzonung im Wiki vielleicht eine gute Idee.

Kein Problem, ich mache mit.
Wir bräuchten also eine Tabelle die etwa so aussieht:

Schweiz
_41XX.
_417[6789]. ;Handy
_4184. ;Sonderdienste
...

Oder wie stellst du dir das vor?
 
Das sieht ja richtig gut aus, wie sich das hier entwickelt.
Bitte schreibt dann auch eine idiotensichere Anleitung.

Ich kenne mich mit Asterisk nur minimal aus (um nicht zu sagen gar nicht). Benutze es mit freepbx, und da ist ja alles idiotensicher über webinterface.
 
kombjuder schrieb:
... wie stellst du dir das vor?

Bezüglich der Verzonung sehe ich drei Möglichkeiten:

a) Datenbankeinträge - sehr schnell, aber keine Pattern (z.B. _[789].) möglich

b) extensions.conf - evt. mit Providern und Preisen ergänzt

c) extensions.ael - gab bei mir Probleme wenn die Datei zu groß wird (> 2000 Zeilen)

Am ehesten würde ich derzeit zur extensions.conf tendieren.

exten => _41XX.,1,Set(Area=CH_stationary-0-60-betamax)
exten => _417[46789].,1,Set(Area=CH_cellular-16-60-betamax)
exten => _418[47].,1,Set(Area=CH_shared) ; Shared Cost Services
exten => _1490.,1,Set(Area=CH_premium) ; Premium-Services

Damit kann man die Blöcke mit wenig Aufwand in eigene Dialpläne integrieren. Die einzelnen Werte (Name, Preis, Taktung, Provider) ziehe ich mir mit CUT heraus. Mit einem einfachen Replace kann ich betamax durch einen anderen Provider ersetzen.

MfG Mathias
 
Mathias-R schrieb:
Am ehesten würde ich derzeit zur extensions.conf tendieren.

Damit kann man die Blöcke mit wenig Aufwand in eigene Dialpläne integrieren.


Hallo Mathias,

ich verwende eine separate Datei, die ich mit #include in die extensions.conf einbinde.
 
Das habe ich genau so gelöst, macht aber von der Syntax keinen Unterschied.

Wichtiger ist der Aufbau. Ich arbeite an dieser Stelle mit Rufnummern im internationalen Format (491712345678). Wer mit 00 oder 011 wählt kann dies ja einfach mit ${EXTEN:2} erzeugen.

Um den Dialplan nicht unermesslich lang werden zu lassen setze ich jetzt nur eine Variable (Area). Somit benötige ich nur eine Zeile je Zone. Die benötigten Werte hole ich mir anschließend mit CUT heraus.

An Werten erscheint sinnvoll: Zonen-Name, Preis, Taktung sowie der Provider, evt. Fallback-Provider. Alternativ zum Provider kann auch ein Context stehen. Die Infos kann man noch nach Bedarf ergänzen. Sofern wir Zonen-Namen mit "-" zulassen wollen müssen wir ein abweichendes Trennzeichen für die Variablenteile verwenden. Daher setze ich jetzt ein "!" als Trenner ein.

In unserem Falle heißt das für Betamax free destinations folgt der Context Betamax, in dem die Minuten aufaddiert werden um dann den abgehenden Provider zu wählen.

Zu anderen Zielen (z.B. Mobilfunk) wird direkt ein Dial/SIP...@Provider ausgeführt, ggf. mit Fallback auf Fallback-Provider.
 
Hallo Leute,
wollte mich mal eben für dieses super Beispiel bedanken.

Habe jetzt ein Call & Surf Paket mit 240 Frei Minuten und da lässt sich dieses Beispiel super anwenden.

Danke :D
Gruß
Sven
 
Finarea/Betamax und 300/200 Freiminuten pro Woche

Du bauchst einen (Daten)bankeintrag für heute und für jeden der vorangeangenen 6 Tage auch. Der Eintrag heute wird hochgezählt. Vor Gesprächsbeginn bildest du die Summe über den Account zur Ermittlung der Restsumme.

Hast du dir das etwa so vorgestellt?
Code:
exten => _007[34589].,1,Set(FREEMINUTES=$[200 - $[${DB(nonoh1/minutes)} + ${DB(nonoh2/minutes)} + ${DB(nonoh3/minutes)} + ${DB(nonoh4/minutes)} + ${DB(nonoh5/minutes)} + ${DB(nonoh6/minutes)} + ${DB(nonoh7/minutes)}]])
exten => _007[34589].,2,GotoIf($[${FREEMINUTES} > 0]?3:7)
exten => _007[34589].,3,Set(CALLERID(all)=Anonymous)
exten => _007[34589].,4,Set(LIMIT_WARNING_FILE=noch60sekunden)
exten => _007[34589].,5,Dial(SIP/${EXTEN}@nonoh,60,rg,L($[${FREEMINUTES} * 60000]:$[$[${FREEMINUTES} * 60000] - 60000]))
exten => _007[34589].,6,Set(DB(nonoh1/minutes)=$[${DB(nonoh1/minutes)} + $[$[${ANSWEREDTIME} + 59] / 60]])
exten => _007[34589].,7,ExecIf($[${FREEMINUTES} = 0],Dial,SIP/${EXTEN}@alternativprovider|60)
exten => _007[34589].,8,Hangup

Auf das PlayBack(noch), SayNumber(${FREEMINUTES}) und PlayBack(Minuten) verzichte ich aufgrund dieser Problematik.

${DB(nonoh1/minutes)} ist heute
${DB(nonoh2/minutes)} ist gestern
${DB(nonoh3/minutes)} ist vorgestern usw.
Bei nonoh gibt es 200 minuten pro Woche. 200 minus diese 7 DB-Einträge erigibt meine Freiminuten.
Nach dem Gespräch wird zu ${DB(nonoh1/minutes)} die gerade verbrauchten Minuten dazuaddiert.

Passt das so, oder habe ich da noch irgendwo einen Denkfehler drin?

Um Mitternacht lässt du einen Cronjob laufen, der alle Einträge um einen Tag nach hinten kopiert.

Das habe ich allerdings nicht kapiert :-(
Die sieben Datenbankeinträge erzeugt man (muss man ja nur ein einziges mal machen) so weit ich das verstanden habe so:
Code:
asterisk -rx "database put nonoh1 minutes 0" 
asterisk -rx "database put nonoh2 minutes 73" 
asterisk -rx "database put nonoh3 minutes 6" 
asterisk -rx "database put nonoh4 minutes 0" 
asterisk -rx "database put nonoh5 minutes 0" 
asterisk -rx "database put nonoh6 minutes 0" 
asterisk -rx "database put nonoh7 minutes 0"


Jetzt muss ich nur noch irgendwie in die database eintragen können (das wird um Mitternacht vom cronjob übernommen) nonoh7=nonoh6, nonoh6=nonoh5 ... nonoh1=0
Wie mache ich das?

Nachtrag (15:48): So müsste es gehen, obwohl es bestimmt eine nicht so komplizierte Möglichkeit gibt:
Code:
wert=$(echo $(asterisk -rx "database get nonoh6 minutes") | sed s/"Value: "//g)
asterisk -rx "database put nonoh7 minutes $wert"
wert=$(echo $(asterisk -rx "database get nonoh5 minutes") | sed s/"Value: "//g)
asterisk -rx "database put nonoh6 minutes $wert"
wert=$(echo $(asterisk -rx "database get nonoh4 minutes") | sed s/"Value: "//g)
asterisk -rx "database put nonoh5 minutes $wert"
wert=$(echo $(asterisk -rx "database get nonoh3 minutes") | sed s/"Value: "//g)
asterisk -rx "database put nonoh4 minutes $wert"
wert=$(echo $(asterisk -rx "database get nonoh2 minutes") | sed s/"Value: "//g)
asterisk -rx "database put nonoh3 minutes $wert"
wert=$(echo $(asterisk -rx "database get nonoh1 minutes") | sed s/"Value: "//g)
asterisk -rx "database put nonoh2 minutes $wert"
asterisk -rx "database put nonoh1 minutes 0"
wert=

Nachtrag (20:13): Ich hatte da oben wohl doch einen Denkfehler drin. Die Option "g" nach dem "Dial" bewirkt zwar, dass im Context weitergegangen wird, aber nur wenn mein Gegenüber auflegt. Lege ich auf, dann wird nicht im Kontext weitergegangen und meine neue Anzahl Freiminuten wird nicht in die Datenbank übernommen. Da ist es mit der h-extension doch besser gelöst:
Code:
exten => _007[34589].,1,Set(NONOHFREIMINUTEN=$[200 - $[${DB(nonoh1/minutes)} + ${DB(nonoh2/minutes)} + ${DB(nonoh3/minutes)} + ${DB(nonoh4/minutes)} + ${DB(nonoh5/minutes)} + ${DB(nonoh6/minutes)} + ${DB(nonoh7/minutes)}]])
exten => _007[34589].,2,GotoIf($[${NONOHFREIMINUTEN} > 0]?3:8)
exten => _007[34589].,3,Set(NONOHCALL=1)
exten => _007[34589].,4,Set(CALLERID(all)=Anonymous)
exten => _007[34589].,5,Set(LIMIT_WARNING_FILE=noch60sekunden)
exten => _007[34589].,6,Dial(SIP/${EXTEN}@nonoh,60,L($[${NONOHFREIMINUTEN} * 60000]:$[$[${NONOHFREIMINUTEN} * 60000] - 60000]))
exten => _007[34589].,7,Hangup
exten => _007[34589].,8,ExecIf($[${NONOHFREIMINUTEN} = 0],Dial,SIP/${EXTEN}@voipdiscount|60)

exten => h,1,GotoIf($[${NONOHCALL}0 = 10]?2:4)
exten => h,2,GotoIf($[${ANSWEREDTIME} > 0]?3:4)
exten => h,3,Set(DB(nonoh1/minutes)=$[${DB(nonoh1/minutes)} + $[$[${ANSWEREDTIME} + 59] / 60]])
exten => h,4,NoOp
exten => h,5,hangup

Nachtrag : Habe weiter getüftelt und nun sieht das so aus:
Code:
exten => _007[34589].,1,Set(NONOHFREIMINUTEN=$[200 - $[${DB(nonoh1/minutes)} + ${DB(nonoh2/minutes)} + ${DB(nonoh3/minutes)} + ${DB(nonoh4/minutes)} + ${DB(nonoh5/minutes)} + ${DB(nonoh6/minutes)} + ${DB(nonoh7/minutes)}]])
exten => _007[34589].,2,Set(12VOIPFREIMINUTEN=$[300 - $[${DB(12voip/minutes1)} + ${DB(12voip/minutes2)} + ${DB(12voip/minutes3)} + ${DB(12voip/minutes4)} + ${DB(12voip/minutes5)} + ${DB(12voip/minutes6)} + ${DB(12voip/minutes7)}]])
exten => _007[34589].,3,Set(JUSTVOIPFREIMINUTEN=$[300 - $[${DB(justvoip/minutes1)} + ${DB(justvoip/minutes2)} + ${DB(justvoip/minutes3)} + ${DB(justvoip/minutes4)} + ${DB(justvoip/minutes5)} + ${DB(justvoip/minutes6)} + ${DB(justvoip/minutes7)}]])
exten => _007[34589].,4,Set(LIMIT_WARNING_FILE=noch60sekunden)
exten => _007[34589].,5,Set(CALLERID(all)=Anonymous)
exten => _007[34589].,6,Set(NONOHCALL=0)
exten => _007[34589].,7,Set(12VOIPCALL=0)
exten => _007[34589].,8,Set(JUSTVOIPCALL=0)
exten => _007[34589].,9,GotoIf($[${JUSTVOIPFREIMINUTEN} > 30]?10:12)
exten => _007[34589].,10,Set(JUSTVOIPCALL=1)
exten => _007[34589].,11,Dial(SIP/${EXTEN}@justvoip,60,L($[${JUSTVOIPFREIMINUTEN} * 60000]:$[$[${JUSTVOIPFREIMINUTEN} * 60000] - 60000]))
exten => _007[34589].,12,GotoIf($[${NONOHFREIMINUTEN} > 30]?13:15)
exten => _007[34589].,13,Set(NONOHCALL=1)
exten => _007[34589].,14,Dial(SIP/${EXTEN}@nonoh,60,L($[${NONOHFREIMINUTEN} * 60000]:$[$[${NONOHFREIMINUTEN} * 60000] - 60000]))
exten => _007[34589].,15,GotoIf($[${12VOIPFREIMINUTEN} > 30]?16:18)
exten => _007[34589].,16,Set(12VOIPCALL=1)
exten => _007[34589].,17,Dial(SIP/${EXTEN}@12voip,60,L($[${12VOIPFREIMINUTEN} * 60000]:$[$[${12VOIPFREIMINUTEN} * 60000] - 60000]))
exten => _007[34589].,18,Dial,SIP/${EXTEN}@voipdiscount|60
exten => _007[34589].,19,Macro(dialnow,${EXTEN})

exten => h,1,GotoIf($[${NONOHCALL} = 1]?2:4)
exten => h,2,GotoIf($[${ANSWEREDTIME} > 1]?3:4)
exten => h,3,Set(DB(nonoh1/minutes)=$[${DB(nonoh1/minutes)} + $[$[${ANSWEREDTIME} + 59] / 60]])
exten => h,4,GotoIf($[${12VOIPCALL} = 1]?5:7)
exten => h,5,GotoIf($[${ANSWEREDTIME} > 1]?6:7)
exten => h,6,Set(DB(12voip/minutes1)=$[${DB(12voip/minutes1)} + $[$[${ANSWEREDTIME} + 59] / 60]])
exten => h,7,GotoIf($[${JUSTVOIPCALL} = 1]?8:10)
exten => h,8,GotoIf($[${ANSWEREDTIME} > 1]?9:10)
exten => h,9,Set(DB(justvoip/minutes1)=$[${DB(justvoip/minutes1)} + $[$[${ANSWEREDTIME} + 59] / 60]])
exten => h,10,Hangup

Nachtrag:
Die Sache mit den Crontabs habe ich irgendwie nicht hinbekommen. Wenn ich mein Script mit dem Befehl "/root/script.cmd" ausführe, dann funktioniert das und die Datenbankeinträge werden tatsächlich um einen Tag nach hinten verschoben so wie ich es wollte. Aber automatisch geschieht das nicht :-(

Ich wollte, dass jede Nacht um 1 Uhr der script ausgeführt wird, wird er aber nicht. Die zweite Zeile habe ich dazu hinzugefügt:
Code:
*/1 * * * *     if [ ! -f /var/run/asterisk.pid ]; then /usr/sbin/asterisk; fi
* 01 * * *      /root/script.cmd

Was mache ich nur falsch???
 
Zuletzt bearbeitet:
Problem!

So sieht mein funktionierendes Endergebnis aus:
Code:
exten => _007[34589].,1,Set(NONOHFREIMINUTEN=$[200 - ${DB(nonoh/minutes1)} - ${DB(nonoh/minutes2)} - ${DB(nonoh/minutes3)} - ${DB(nonoh/minutes4)} - ${DB(nonoh/minutes5)} - ${DB(nonoh/minutes6)} - ${DB(nonoh/minutes7)}])
exten => _007[34589].,2,Set(12VOIPFREIMINUTEN=$[300 - $[${DB(12voip/minutes1)} + ${DB(12voip/minutes2)} + ${DB(12voip/minutes3)} + ${DB(12voip/minutes4)} + ${DB(12voip/minutes5)} + ${DB(12voip/minutes6)} + ${DB(12voip/minutes7)}]])
exten => _007[34589].,3,Set(JUSTVOIPFREIMINUTEN=$[300 - $[${DB(justvoip/minutes1)} + ${DB(justvoip/minutes2)} + ${DB(justvoip/minutes3)} + ${DB(justvoip/minutes4)} + ${DB(justvoip/minutes5)} + ${DB(justvoip/minutes6)} + ${DB(justvoip/minutes7)}]])
exten => _007[34589].,4,Set(LIMIT_WARNING_FILE=noch60sekunden)
exten => _007[34589].,5,Set(CALLERID(all)=Anonymous)
exten => _007[34589].,6,Set(NONOHCALL=N)
exten => _007[34589].,7,Set(12VOIPCALL=N)
exten => _007[34589].,8,Set(JUSTVOIPCALL=N)
exten => _007[34589].,9,GotoIf($[${JUSTVOIPFREIMINUTEN} > 30]?10:12)
exten => _007[34589].,10,Set(JUSTVOIPCALL=Y)
exten => _007[34589].,11,Dial(SIP/${EXTEN}@justvoip,60,L($[${JUSTVOIPFREIMINUTEN} * 60000]:$[$[${JUSTVOIPFREIMINUTEN} * 60000] - 60000]))
exten => _007[34589].,12,GotoIf($[${NONOHFREIMINUTEN} > 30]?13:15)
exten => _007[34589].,13,Set(NONOHCALL=Y)
exten => _007[34589].,14,Dial(SIP/${EXTEN}@nonoh,60,L($[${NONOHFREIMINUTEN} * 60000]:$[$[${NONOHFREIMINUTEN} * 60000] - 60000]))
exten => _007[34589].,15,GotoIf($[${12VOIPFREIMINUTEN} > 30]?16:18)
exten => _007[34589].,16,Set(12VOIPCALL=Y)
exten => _007[34589].,17,Dial(SIP/${EXTEN}@12voip,60,L($[${12VOIPFREIMINUTEN} * 60000]:$[$[${12VOIPFREIMINUTEN} * 60000] - 60000]))
exten => _007[34589].,18,Dial,SIP/${EXTEN}@voipdiscount|60
exten => _007[34589].,19,Macro(dialnow,${EXTEN})

exten => h,1,GotoIf($[${NONOHCALL} = Y]?2:4)
exten => h,2,GotoIf($[${ANSWEREDTIME} > 1]?3:4)
exten => h,3,Set(DB(nonoh/minutes1)=$[${DB(nonoh/minutes1)} + $[$[${ANSWEREDTIME} + 59] / 60]])
exten => h,4,GotoIf($[${12VOIPCALL} = Y]?5:7)
exten => h,5,GotoIf($[${ANSWEREDTIME} > 1]?6:7)
exten => h,6,Set(DB(12voip/minutes1)=$[${DB(12voip/minutes1)} + $[$[${ANSWEREDTIME} + 59] / 60]])
exten => h,7,GotoIf($[${JUSTVOIPCALL} = Y]?8:10)
exten => h,8,GotoIf($[${ANSWEREDTIME} > 1]?9:10)
exten => h,9,Set(DB(justvoip/minutes1)=$[${DB(justvoip/minutes1)} + $[$[${ANSWEREDTIME} + 59] / 60]])
exten => h,10,Hangup

Allerdings gibt es da ein Problem: Mal angenommen, ich habe bei justvoip noch 40 Freiminuten. Einer fängt an zu telefonieren und hängt schon seit 30 Minuten an der Strippe und telefoniert immer noch. Wenn jetzt noch einer Anruft, dann wird ja angenommen, dass ich bei justvoip immer noch 40 Minuten habe, obwohl es in Wirklichkeit nun so um die 10 sein müssten. Also brauche ich irgendwas, was die Freiminuten nicht erst nach dem Ende des Gespräches zusammenzählt, sonder schon während des Gespräches. Irgendwas, womit sagen wir mal jede Minute ein
Code:
Set(DB(justvoip/minutes1)=$[${DB(justvoip/minutes1)} + 1])
ausgeführt wird. Aber wie kriege ich das während eines laufenden Gespräches hin?
 
Während des laufenden Gespräches wird schwierig.
Das einzige, was mir einfällt, ist per cron eine Abfrage auf die offenen Asterisk-Channel zu machen und sowohl Channel (betamax) als auch gewähltes Ziel zu prüfen ...
Aber vielleicht hat ja noch jemand eine bessere Basisidee.

Zu Deinem Dialplan und weil wir das Thema für andere Länder schon mal hatten:

Da ist in Bezug auf die Betamaxe ein Trugschluss drin:

0079 ist Mobilfunk, wird also nicht zu 0 abgerechnet.
bei 0075, das sind Overlays, bin ich mir ob der Abrechnung nicht sicher.

Ich habe mal alle derzeitigen russischen Extensions (ähnlich wie im NANP sind die weiteren 3 Stellen nach der 7 relevant) zusammengestellt:

Code:
Exten   Bezeichnung                       Russisch              Zeitzone
007301  Russland Republik Burjatija  Республика Бурятия  	Asia/Irkutsk
007302 	Russland Tschitinsker Gebiet   Читинская область 	Asia/Yakutsk
007341 	Russland Udmurtische Republik 	Удмуртская Республика 	Europe/Samara
007342 	Russland Permer Gebiet 	Пермская область 	Asia/Yekaterinburg
007343 	Russland Swerdlowsker Gebiet 	Свердловская область 	Asia/Yekaterinburg
007345 	Russland Tjumener Gebiet 	Тюменская область 	Asia/Yekaterinburg
007346 	Russland Autonomer Kreis Chanty-Mansy 	Ханты-мансийский Автономный Округ 	Asia/Yekaterinburg
007347 	Russland Republik Baschkortostan 	Республика Башкортостан 	Asia/Yekaterinburg
007349 	Russland Autonomer Kreis Jamalo-Nenez 	Ямало-ненецкий Автономный Округ 	Asia/Yekaterinburg
007351 	Russland Tscheljabinsker Gebiet 	Челябинская область 	Asia/Yekaterinburg
007352 	Russland Kurgansker Gebiet 	Курганская область 	Asia/Yekaterinburg
007353 	Russland Orenburger Gebiet 	Оренбургская область 	Asia/Yekaterinburg
007381 	Russland Omsker Gebiet 	Омская область 	Asia/Omsk
007382 	Russland Tomsker Gebiet 	Томская область 	Asia/Omsk
007383 	Russland Nowosibirsker Gebiet 	Новосибирская область 	Asia/Novosibirsk
007384 	Russland Kemerowsker Gebiet 	Кемеровская область 	Asia/Krasnoyarsk
007385 	Russland Altaiski Krai 	Алтайский Край 	Asia/Krasnoyarsk
007388 	Russland Republik Altai 	Республика Алтай 	Asia/Irkutsk
007390 	Russland Republik Kaukasus 	Республика Хакасия 	Asia/Krasnoyarsk
007391 	Russland Krasnojarski Krai 	Красноярский Край 	Asia/Krasnoyarsk
007394 	Russland Republik Tuwa 	Республика Тува 	Asia/Krasnoyarsk
007395 	Russland Irkutsker Gebiet 	Иркутская область 	Asia/Irkutsk
007401 	Russland Kaliningrader Gebiet 	Калининградская область 	Europe/Kaliningrad
007411 	Russland Republik Sacha-Jakutien 	Республика Саха-Якутия 	Asia/Yakutsk
007413 	Russland Magadansker Gebiet 	Магаданская область 	Asia/Magadan
007415 	Russland Kamtschatkaer Gebiet 	Камчатская область 	Asia/Kamchatka
007416 	Russland Amursker Gebiet 	Амурская область 	Asia/Yakutsk
007421 	Russland Chabarowski Krai 	Хабаровский Край 	Asia/Vladivostok
007423 	Russland Primorski Krai 	Приморский Край 	Asia/Vladivostok
007424 	Russland Sachaliner Gebiet 	Сахалинская область 	Asia/Sakhalin
007426 	Russland Jüdisches Autonomes Gebiet 	Еврейская Автономная область 	Asia/Sakhalin
007427 	Russland Autonomes Gebiet Tschukotsk 	Чукотский Автономный Округ 	Asia/Anadyr
007471 	Russland Kursker Gebiet 	Курская область 	Europe/Moscow
007472 	Russland Belgorodsker Gebiet 	Белгородская область 	Europe/Moscow
007473 	Russland Woronesher Gebiet 	Воронежская область 	Europe/Moscow
007474 	Russland Lipezker Gebiet 	Липецкая область 	Europe/Moscow
007475 	Russland Tambower Gebiet 	Тамбовская область 	Europe/Moscow
007477 	Russland Gastelekom 	Газтелеком 	Europe/Moscow
007478 	Russland Kominkom Woronesh 	Коминком Воронеж 	Europe/Moscow
007481 	Russland Smolensker Gebiet 	Смоленская область 	Europe/Moscow
007482 	Russland Twerer Gebiet 	Тверская область 	Europe/Moscow
007483 	Russland Brjansker Gebiet 	Брянская область 	Europe/Moscow
007484 	Russland Kalushsker Gebiet 	Калужская область 	Europe/Moscow
007485 	Russland Jaroslawler Gebiet 	Ярославская область 	Europe/Moscow
007486 	Russland Orlowsker Gebiet 	Орловская область 	Europe/Moscow
007487 	Russland Tulsker Gebiet 	Тульская область 	Europe/Moscow
007491 	Russland Rjasaner Gebiet 	Рязанская область 	Europe/Moscow
007492 	Russland Wladimirer Gebiet 	Владимирская область 	Europe/Moscow
007493 	Russland Iwanowsker Gebiet 	Ивановская область 	Europe/Moscow
007494 	Russland Kostromsker Gebiet 	Костромская область 	Europe/Moscow
007495 	Russland Moskau 	Москва 	Europe/Moscow
007496 	Russland Moskauer Gebiet 	Московская область 	Europe/Moscow
007498 	Russland Moskauer Gebiet 	Московская область 	Europe/Moscow
007499 	Russland Moskau 	Москва 	Europe/Moscow
007811 	Russland Pskower Gebiet 	Псковская область 	Europe/Moscow
007812 	Russland Sankt Petersburg 	Санкт Петербург 	Europe/Moscow
007813 	Russland Sankt Petersburger Gebiet 	Ленинградская область 	Europe/Moscow
007814 	Russland Republik Karelien 	Республика Карелия 	Europe/Moscow
007815 	Russland Murmansker Gebiet 	Мурманская область 	Europe/Moscow
007816 	Russland Nowgorodsker Gebiet 	Новгородская область 	Europe/Moscow
007817 	Russland Wologodsker Gebiet 	Вологодская область 	Europe/Moscow
007818 	Russland Archangelsker Gebiet 	Архангельская область 	Europe/Moscow
007821 	Russland Republik Komi 	Республика Коми 	Europe/Moscow
007831 	Russland Nishegorodsker Gebiet 	Нижегородская область 	Europe/Moscow
007833 	Russland Kirowsker Gebiet 	Кировская область 	Europe/Moscow
007834 	Russland Republik Mordowija 	Республика Мордовия 	Europe/Moscow
007835 	Russland Tschuwaschische Republik 	Чувашская Республика 	Europe/Moscow
007836 	Russland Republik Mari El 	Республика Марий Эл 	Europe/Moscow
007841 	Russland Pensener Gebiet 	Пензенская область 	Europe/Moscow
007842 	Russland Uljanower Gebiet 	Ульяновская область 	Europe/Samara
007843 	Russland Republik Tatarstan 	Республика Татарстан 	Europe/Moscow
007844 	Russland Wolgograder Gebiet 	Волгоградская область 	Europe/Moscow
007845 	Russland Saratower Gebiet 	Саратовская область 	Europe/Moscow
007846 	Russland Samaraer Gebiet 	Самарская область 	Europe/Samara
007847 	Russland Republik Kalmückien 	Республика Калмыкия 	Europe/Moscow
007851 	Russland Astrachansker Gebiet 	Астраханская область 	Europe/Moscow
007861 	Russland Krasnodarski Krai 	Краснодарский Край 	Europe/Moscow
007863 	Russland Rostower Gebiet 	Ростовская область 	Europe/Moscow
007865 	Russland Stawropolski Krai 	Ставропольский Край 	Europe/Moscow
007866 	Russland Kabardino-Balkarsk Republik 	Кабардино - Балкарская Республика 	Europe/Moscow
007867 	Russland Republik Nordossetien 	Республика Северная Осетия 	Europe/Moscow
007871 	Russland Tschetschenische Republik 	Чеченская Республика 	Europe/Moscow
007872 	Russland Republik Dagestan 	Республика Дагестан 	Europe/Moscow
007873 	Russland Republik Inguschetien 	Республика Ингушетия 	Europe/Moscow
007877 	Russland Republik Adygeja 	Республика Адыгея 	Europe/Moscow
007878 	Russland Karatschajewo-Tscherkessk Republik 	Карaчаево - Черкесская Республика 	Europe/Moscow
007879 	Russland Stawropolski Krai 	Ставропольский Край 	Europe/Moscow

Bei

Code:
007477 	Russland Gastelekom 
007478 	Russland Kominkom Woronesh

bin ich mir auch hinsichtlich der Tarifierung nicht sicher, da dies gesonderte Anbieter sind (ähnlich alternative Anbieter in Rumänien oder Bulgarien).

Für Deine 9er noch ein kurzer Abriss:

00790[12478] Verschiedene Anbieter NMT-450,IMT-MC450,GSM
00790[3569] Beeline (Vimpelcom)
0079[18] MTS
0079[23] Megafon
00795[12] Tele2
0079[67] Beeline (Vimpelcom)

im 00795-Bereich gibt es noch TETRA- und SAT-Anbieter

PS: Für alle, die nachlesen wollen:

Mobilfunk-Übersicht (russisch)
Mobilfunk DEF Details Achtung: Der Stand ist teils nicht ganz aktuell!
Russland Area Codes Festnetz (russisch)
 
Zuletzt bearbeitet:
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.