[HOWTO] Freiminuten abtelefonieren, dann Provider wechseln

Also brauche ich irgendwas, was die Freiminuten nicht erst nach dem Ende des Gespräches zusammenzählt, sonder schon während des Gespräches.

Meines Wissens ist nur ein Gespräch gleichzeitig möglich. Also kein Problem, ausser es käme die Regel zur Anwendung, dass die Minuten pro IP providerübergreifend addiert werden.
 
Meines Wissens ist nur ein Gespräch gleichzeitig möglich.

Das, zumindestens als offizielle Aussage von Betamax, viel mir heut' nacht nicht mehr ein. Allerdings hab ich es schon geschafft, über den selben Account parallel zu telefonieren.
Abhilfe schaffen könnte aber

Code:
outgoinglimit=1

in der sip.conf für den Provider, dann kümmert sich Asterisk darum, dass es keine parallelen Calls über den Anbieter gibt. Da bin ich dank später (früher) Stunde auch nicht mehr draufgekommen :mad:
 
Das mit dem call-limit=1 in der sip.conf ist eine schlechte Lösung.
Zur Frage wieviel Telefonate gleichzeitig: ich dachte immer es sind zwei gleichzeitig möglich. Habe es gestern ausprobiert. Drei gleichzeitig habe ich ausprobiert - mehr Telefone hatte ich nicht - vielleicht geht noch mehr. Aber mehr als zwei gleichzeitige Gespräche wird es wohl bei mir nicht geben. Ich habe das jetzt so gelöst, dass erstmal überprüft wird, wo es noch am meisten Freiminuten gibt und der Anbieter dann genommen wird.
Code:
exten => _0079[01235678].,1,Dial(SIP/${EXTEN}@nonoh,60)			;Russland Mobilfunk

exten => _007[3458].,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[3458].,n,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[3458].,n,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[3458].,n,Set(LIMIT_WARNING_FILE=noch60sekunden)
exten => _007[3458].,n,GotoIf($[${CALLERID(name):0:8} = callback]?keinplayback:)
exten => _007[3458].,n,Playback(kostenlos)
exten => _007[3458].,n(keinplayback),Set(CALLERID(all)=Anonymous)
exten => _007[3458].,n,Set(NONOHCALL=N)
exten => _007[3458].,n,Set(12VOIPCALL=N)
exten => _007[3458].,n,Set(JUSTVOIPCALL=N)
exten => _007[3458].,n,GotoIf($[${JUSTVOIPFREIMINUTEN} > 200]?justvoipcall:)
exten => _007[3458].,n,GotoIf($[${12VOIPFREIMINUTEN} > 200]?12voipcall:)
exten => _007[3458].,n,GotoIf($[${JUSTVOIPFREIMINUTEN} > 100]?justvoipcall:)
exten => _007[3458].,n,GotoIf($[${12VOIPFREIMINUTEN} > 100]?12voipcall:)
exten => _007[3458].,n,GotoIf($[${NONOHFREIMINUTEN} > 100]?nonohcall:)
exten => _007[3458].,n,GotoIf($[${JUSTVOIPFREIMINUTEN} > 50]?justvoip:)
exten => _007[3458].,n,GotoIf($[${12VOIPFREIMINUTEN} > 50]?12voip:)
exten => _007[3458].,n,GotoIf($[${NONOHFREIMINUTEN} > 50]?nonoh:)
exten => _007[3458].,n,GotoIf($[${JUSTVOIPFREIMINUTEN} > 20]?justvoip:)
exten => _007[3458].,n,GotoIf($[${12VOIPFREIMINUTEN} > 20]?12voip:)
exten => _007[3458].,n,GotoIf($[${NONOHFREIMINUTEN} > 20]?nonoh:)
exten => _007[3458].,n(justvoip),GotoIf($[${JUSTVOIPFREIMINUTEN} > 0]?:nonoh)
exten => _007[3458].,n,PlayBack(vm-youhave)
exten => _007[3458].,n,SayNumber(${JUSTVOIPFREIMINUTEN})
exten => _007[3458].,n,PlayBack(minutes)
exten => _007[3458].,n(justvoipcall),Set(JUSTVOIPCALL=Y)
exten => _007[3458].,n,Dial(SIP/${EXTEN}@justvoip,60,L($[${JUSTVOIPFREIMINUTEN} * 60000]:$[$[${JUSTVOIPFREIMINUTEN} * 60000] - 60000]))
exten => _007[3458].,n(nonoh),GotoIf($[${NONOHFREIMINUTEN} > 0]?:12voip)
exten => _007[3458].,n,PlayBack(vm-youhave)
exten => _007[3458].,n,SayNumber(${NONOHFREIMINUTEN})
exten => _007[3458].,n,PlayBack(minutes)
exten => _007[3458].,n(nonohcall),Set(NONOHCALL=Y)
exten => _007[3458].,n,Dial(SIP/${EXTEN}@nonoh,60,L($[${NONOHFREIMINUTEN} * 60000]:$[$[${NONOHFREIMINUTEN} * 60000] - 60000]))
exten => _007[3458].,n(12voip),GotoIf($[${12VOIPFREIMINUTEN} > 0]?:voipdiscount)
exten => _007[3458].,n,PlayBack(vm-youhave)
exten => _007[3458].,n,SayNumber(${12VOIPFREIMINUTEN})
exten => _007[3458].,n,PlayBack(minutes)
exten => _007[3458].,n(12voipcall),Set(12VOIPCALL=Y)
exten => _007[3458].,n,Dial(SIP/${EXTEN}@12voip,60,L($[${12VOIPFREIMINUTEN} * 60000]:$[$[${12VOIPFREIMINUTEN} * 60000] - 60000]))
exten => _007[3458].,n(voipdiscount),Dial,SIP/${EXTEN}@voipdiscount|60
exten => _007[3458].,n,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
Wenn jetzt ein Anbieter genommen wird, wo noch 200 Minuten frei sind, und dann telefoniert einer und noch einer fängt dann auch noch an, dann ist es immer noch unwahrscheinlich, dass beide 200 Freiminuten telefonieren. Dann passt es immer noch. Es wird ja ganz normal am Ende jedes Gespräches abgerechnet.

Danke übrigens für die List mit den russischen Vorwahlen.

Das mit den Cronjobs läuft bei immer noch nicht. Könnte jemand bitte die richtige Zeile posten, welche ich in crontab -e eintragen soll?

Nachtrag: So ein Ding wie GotoIf([blablabla]?12voip:) geht nicht. Der springt dann nicht zur Extension _blabla.,n(12voip) sondern zu der Extension mit der Nummer 12. Ich habe das "12voip" daher durch ein "twelvevoip" ersetzt.
 
Zuletzt bearbeitet:
Mach mal

Code:
0 1 * * *      sh /root/script.cmd

Das sollte funktionieren.
 
Bin nun absolut zufrieden.

So. Habe nun den Script so erstellt
Code:
/usr/sbin/asterisk -rx "database put nonoh minutes7 `/usr/sbin/asterisk -rx "database get nonoh minutes6" | sed s/"Value: "//g`"
/usr/sbin/asterisk -rx "database put nonoh minutes6 `/usr/sbin/asterisk -rx "database get nonoh minutes5" | sed s/"Value: "//g`"
/usr/sbin/asterisk -rx "database put nonoh minutes5 `/usr/sbin/asterisk -rx "database get nonoh minutes4" | sed s/"Value: "//g`"
/usr/sbin/asterisk -rx "database put nonoh minutes4 `/usr/sbin/asterisk -rx "database get nonoh minutes3" | sed s/"Value: "//g`"
/usr/sbin/asterisk -rx "database put nonoh minutes3 `/usr/sbin/asterisk -rx "database get nonoh minutes2" | sed s/"Value: "//g`"
/usr/sbin/asterisk -rx "database put nonoh minutes2 `/usr/sbin/asterisk -rx "database get nonoh minutes1" | sed s/"Value: "//g`"
/usr/sbin/asterisk -rx "database put nonoh minutes1 0"

/usr/sbin/asterisk -rx "database put 12voip minutes7 `/usr/sbin/asterisk -rx "database get 12voip minutes6" | sed s/"Value: "//g`"
/usr/sbin/asterisk -rx "database put 12voip minutes6 `/usr/sbin/asterisk -rx "database get 12voip minutes5" | sed s/"Value: "//g`"
/usr/sbin/asterisk -rx "database put 12voip minutes5 `/usr/sbin/asterisk -rx "database get 12voip minutes4" | sed s/"Value: "//g`"
/usr/sbin/asterisk -rx "database put 12voip minutes4 `/usr/sbin/asterisk -rx "database get 12voip minutes3" | sed s/"Value: "//g`"
/usr/sbin/asterisk -rx "database put 12voip minutes3 `/usr/sbin/asterisk -rx "database get 12voip minutes2" | sed s/"Value: "//g`"
/usr/sbin/asterisk -rx "database put 12voip minutes2 `/usr/sbin/asterisk -rx "database get 12voip minutes1" | sed s/"Value: "//g`"
/usr/sbin/asterisk -rx "database put 12voip minutes1 0"

/usr/sbin/asterisk -rx "database put justvoip minutes7 `/usr/sbin/asterisk -rx "database get justvoip minutes6" | sed s/"Value: "//g`"
/usr/sbin/asterisk -rx "database put justvoip minutes6 `/usr/sbin/asterisk -rx "database get justvoip minutes5" | sed s/"Value: "//g`"
/usr/sbin/asterisk -rx "database put justvoip minutes5 `/usr/sbin/asterisk -rx "database get justvoip minutes4" | sed s/"Value: "//g`"
/usr/sbin/asterisk -rx "database put justvoip minutes4 `/usr/sbin/asterisk -rx "database get justvoip minutes3" | sed s/"Value: "//g`"
/usr/sbin/asterisk -rx "database put justvoip minutes3 `/usr/sbin/asterisk -rx "database get justvoip minutes2" | sed s/"Value: "//g`"
/usr/sbin/asterisk -rx "database put justvoip minutes2 `/usr/sbin/asterisk -rx "database get justvoip minutes1" | sed s/"Value: "//g`"
/usr/sbin/asterisk -rx "database put justvoip minutes1 0"
und so gehts mit cronjob.


Ansonsten bin eigentlich zufrieden, nur eins wünsche ich mir noch: Bevor der Provider gewählt wird, soll erstmal der mit den meisten Freiminuten ermittelt werden und dann über den gegangen werden. Mir fehlt aber die Idee es zu realisieren. Bisher habe ich das so gelöst:
Code:
exten => _0033.,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 => _0033.,n,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 => _0033.,n,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 => _0033.,n,Set(SMSLISTOFREIMINUTEN=$[300 - ${DB(smslisto/minutes1)} - ${DB(smslisto/minutes2)} - ${DB(smslisto/minutes3)} - ${DB(smslisto/minutes4)} - ${DB(smslisto/minutes5)} - ${DB(smslisto/minutes6)} - ${DB(smslisto/minutes7)}])
exten => _0033.,n,Set(LIMIT_WARNING_FILE=noch60sekunden)
exten => _0033.,n,GotoIf($[${CALLERID(name):0:8} = callback]?keinplayback:)
exten => _0033.,n,Playback(kostenlos)
exten => _0033.,n(keinplayback),Set(CALLERID(all)=Anonymous)
exten => _0033.,n,Set(NONOHCALL=N)
exten => _0033.,n,Set(12VOIPCALL=N)
exten => _0033.,n,Set(JUSTVOIPCALL=N)
exten => _0033.,n,Set(SMSLISTOCALL=N)
exten => _0033.,n,GotoIf($[${SMSLISTOFREIMINUTEN} > 200]?smslistocall:)
exten => _0033.,n,GotoIf($[${JUSTVOIPFREIMINUTEN} > 200]?justvoipcall:)
exten => _0033.,n,GotoIf($[${12VOIPFREIMINUTEN} > 200]?twelvevoipcall:)
exten => _0033.,n,GotoIf($[${JUSTVOIPFREIMINUTEN} > 100]?justvoipcall:)
exten => _0033.,n,GotoIf($[${12VOIPFREIMINUTEN} > 100]?twelvevoipcall:)
exten => _0033.,n,GotoIf($[${NONOHFREIMINUTEN} > 100]?nonohcall:)
exten => _0033.,n,GotoIf($[${SMSLISTOFREIMINUTEN} > 100]?smslistocall:)
exten => _0033.,n,GotoIf($[${SMSLISTOFREIMINUTEN} > 50]?smslisto:)
exten => _0033.,n,GotoIf($[${JUSTVOIPFREIMINUTEN} > 50]?justvoip:)
exten => _0033.,n,GotoIf($[${12VOIPFREIMINUTEN} > 50]?twelvevoip:)
exten => _0033.,n,GotoIf($[${NONOHFREIMINUTEN} > 50]?nonoh:)
exten => _0033.,n,GotoIf($[${SMSLISTOFREIMINUTEN} > 20]?smslisto:)
exten => _0033.,n,GotoIf($[${JUSTVOIPFREIMINUTEN} > 20]?justvoip:)
exten => _0033.,n,GotoIf($[${12VOIPFREIMINUTEN} > 20]?twelvevoip:)
exten => _0033.,n,GotoIf($[${NONOHFREIMINUTEN} > 20]?nonoh:)
exten => _0033.,n(smslisto),GotoIf($[${JUSTVOIPFREIMINUTEN} > 0]?:nonoh)
exten => _0033.,n,PlayBack(vm-youhave)
exten => _0033.,n,SayNumber(${SMSLISTOFREIMINUTEN})
exten => _0033.,n,PlayBack(minutes)
exten => _0033.,n(smslistocall),Set(SMSLISTOCALL=Y)
exten => _0033.,n,Dial(SIP/${EXTEN}@smslisto,60,L($[${SMSLISTOFREIMINUTEN} * 60000]:$[$[${SMSLISTOFREIMINUTEN} * 60000] - 60000]))
exten => _0033.,n(justvoip),GotoIf($[${JUSTVOIPFREIMINUTEN} > 0]?:nonoh)
exten => _0033.,n,PlayBack(vm-youhave)
exten => _0033.,n,SayNumber(${JUSTVOIPFREIMINUTEN})
exten => _0033.,n,PlayBack(minutes)
exten => _0033.,n(justvoipcall),Set(JUSTVOIPCALL=Y)
exten => _0033.,n,Dial(SIP/${EXTEN}@justvoip,60,L($[${JUSTVOIPFREIMINUTEN} * 60000]:$[$[${JUSTVOIPFREIMINUTEN} * 60000] - 60000]))
exten => _0033.,n(nonoh),GotoIf($[${NONOHFREIMINUTEN} > 0]?:12voip)
exten => _0033.,n,PlayBack(vm-youhave)
exten => _0033.,n,SayNumber(${NONOHFREIMINUTEN})
exten => _0033.,n,PlayBack(minutes)
exten => _0033.,n(nonohcall),Set(NONOHCALL=Y)
exten => _0033.,n,Dial(SIP/${EXTEN}@nonoh,60,L($[${NONOHFREIMINUTEN} * 60000]:$[$[${NONOHFREIMINUTEN} * 60000] - 60000]))
exten => _0033.,n(twelvevoip),GotoIf($[${12VOIPFREIMINUTEN} > 0]?:voipdiscount)
exten => _0033.,n,PlayBack(vm-youhave)
exten => _0033.,n,SayNumber(${12VOIPFREIMINUTEN})
exten => _0033.,n,PlayBack(minutes)
exten => _0033.,n(twelvevoipcall),Set(12VOIPCALL=Y)
exten => _0033.,n,Dial(SIP/${EXTEN}@12voip,60,L($[${12VOIPFREIMINUTEN} * 60000]:$[$[${12VOIPFREIMINUTEN} * 60000] - 60000]))
exten => _0033.,n(voipdiscount),Dial,SIP/${EXTEN}@voipdiscount|60
exten => _0033.,n,Hangup

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

Hat vielleicht jemand eine Idee?

Nachtrag: Und so läuft es nun:
Code:
exten => _0033.,1,Set(LIMIT_WARNING_FILE=noch60sekunden)
exten => _0033.,n,Set(FAVORIT=0.voipdiscount)
exten => _0033.,n,ExecIf($[$[200 - ${DB(nonoh/minutes1)} - ${DB(nonoh/minutes2)} - ${DB(nonoh/minutes3)} - ${DB(nonoh/minutes4)} - ${DB(nonoh/minutes5)} - ${DB(nonoh/minutes6)} - ${DB(nonoh/minutes7)}] > ${CUT(FAVORIT,.,1)}],Set,FAVORIT=$[200 - ${DB(nonoh/minutes1)} - ${DB(nonoh/minutes2)} - ${DB(nonoh/minutes3)} - ${DB(nonoh/minutes4)} - ${DB(nonoh/minutes5)} - ${DB(nonoh/minutes6)} - ${DB(nonoh/minutes7)}].nonoh)
exten => _0033.,n,ExecIf($[$[300 - ${DB(12voip/minutes1)} - ${DB(12voip/minutes2)} - ${DB(12voip/minutes3)} - ${DB(12voip/minutes4)} - ${DB(12voip/minutes5)} - ${DB(12voip/minutes6)} - ${DB(12voip/minutes7)}] > ${CUT(FAVORIT,.,1)}],Set,FAVORIT=$[300 - ${DB(12voip/minutes1)} - ${DB(12voip/minutes2)} - ${DB(12voip/minutes3)} - ${DB(12voip/minutes4)} - ${DB(12voip/minutes5)} - ${DB(12voip/minutes6)} - ${DB(12voip/minutes7)}].12voip)
exten => _0033.,n,ExecIf($[$[300 - ${DB(justvoip/minutes1)} - ${DB(justvoip/minutes2)} - ${DB(justvoip/minutes3)} - ${DB(justvoip/minutes4)} - ${DB(justvoip/minutes5)} - ${DB(justvoip/minutes6)} - ${DB(justvoip/minutes7)}] > ${CUT(FAVORIT,.,1)}],Set,FAVORIT=$[300 - ${DB(justvoip/minutes1)} - ${DB(justvoip/minutes2)} - ${DB(justvoip/minutes3)} - ${DB(justvoip/minutes4)} - ${DB(justvoip/minutes5)} - ${DB(justvoip/minutes6)} - ${DB(justvoip/minutes7)}].justvoip)
exten => _0033.,n,ExecIf($[$[300 - ${DB(smslisto/minutes1)} - ${DB(smslisto/minutes2)} - ${DB(smslisto/minutes3)} - ${DB(smslisto/minutes4)} - ${DB(smslisto/minutes5)} - ${DB(smslisto/minutes6)} - ${DB(smslisto/minutes7)}] > ${CUT(FAVORIT,.,1)}],Set,FAVORIT=$[300 - ${DB(smslisto/minutes1)} - ${DB(smslisto/minutes2)} - ${DB(smslisto/minutes3)} - ${DB(smslisto/minutes4)} - ${DB(smslisto/minutes5)} - ${DB(smslisto/minutes6)} - ${DB(smslisto/minutes7)}].smslisto)
exten => _0033.,n,GotoIf($[${CALLERID(name):0:8} = callback]?call:)
exten => _0033.,n,Playback(kostenlos)
exten => _0033.,n,GotoIf($[${CUT(FAVORIT,.,1)} > 50]?call:)
exten => _0033.,n,PlayBack(vm-youhave)
exten => _0033.,n,SayNumber(${CUT(FAVORIT,.,1)})
exten => _0033.,n,PlayBack(minutes)
exten => _0033.,n(call),Set(${CUT(FAVORIT,.,2)}call=Y)
exten => _0033.,n,ExecIf($[${CUT(FAVORIT,.,1)} > 0],Dial,SIP/${EXTEN}@${CUT(FAVORIT,.,2)}|60|L($[${CUT(FAVORIT,.,1)} * 60000]:$[$[${CUT(FAVORIT,.,1)} * 60000] - 60000]))
exten => _0033.,n,Dial,SIP/${EXTEN}@voipdiscount|60
exten => _0033.,n,Macro(dialnow,${EXTEN})
exten => _0033.,n,Hangup

exten => h,1,GotoIf($[${${CUT(FAVORIT,.,2)}call} =Y]?:4)
exten => h,2,GotoIf($[${ANSWEREDTIME} > 1]?:4)
exten => h,3,Set(DB(${CUT(FAVORIT,.,2)}/minutes1)=$[${DB(${CUT(FAVORIT,.,2)}/minutes1)} + $[$[${ANSWEREDTIME} + 59] / 60]])
exten => h,4,Hangup

Hab festgestellt: je mehr man mit Variablen arbeitet, desto kürzer kann der dialplan werden.

Gibt es eigentlich eine Möglichkeit dieses "exten => _0033.,1,Set(LIMIT_WARNING_FILE=noch60sekunden)" fest zu devinieren? Die Variable soll immer vorhanden sein, ohne dass ich die bei jedem Anruf devinieren muss.
 
Zuletzt bearbeitet:
Wenn Du das global definieren willst, dann in der [globals]-Sektion der extensions.conf:

Code:
[globals]
LIMIT_WARNING_FILE => noch60sekunden

Der Zugriff im Dialplan erfolgt dann wie üblich über

Code:
${LIMIT_WARNING_FILE}
 
Leider taucht nun ein Problem auf. Habe dazu ein Extra-Thread erstellt, da es ja ein Problem mit der AstDB ist.
 
Vielleicht ein timing problem, erstens würde ich probieren die updates einzeln händisch auszuführen und kontrollieren und wenn es dabei keine Probleme gibt, würde ich versuchen ein/zwei sek. pause einzurichten zwischen den einzelnen steps im script.
 
Hallo!
Ist hier nicht ein Fehler in der Logik? Zweimal dasselbe?
Sollte das erste nohnoh nich justvoip und 12voip nicht twelvevoip heissen?
Ist das vielleicht nicht die letzte Version Deines Scripts?
Danke und Gruß!

exten => _0033.,n(smslisto),GotoIf($[${JUSTVOIPFREIMINUTEN} > 0]?:nonoh)
exten => _0033.,n,PlayBack(vm-youhave)
exten => _0033.,n,SayNumber(${SMSLISTOFREIMINUTEN})
exten => _0033.,n,PlayBack(minutes)
exten => _0033.,n(smslistocall),Set(SMSLISTOCALL=Y)
exten => _0033.,n,Dial(SIP/${EXTEN}@smslisto,60,L($[${SMSLISTOFREIMINUTEN} * 60000]:$[$[${SMSLISTOFREIMINUTEN} * 60000] - 60000])) exten => _0033.,n(justvoip),GotoIf($[${JUSTVOIPFREIMINUTEN} > 0]?:nonoh)
exten => _0033.,n,PlayBack(vm-youhave)
exten => _0033.,n,SayNumber(${JUSTVOIPFREIMINUTEN})
exten => _0033.,n,PlayBack(minutes)
exten => _0033.,n(justvoipcall),Set(JUSTVOIPCALL=Y)
exten => _0033.,n,Dial(SIP/${EXTEN}@justvoip,60,L($[${JUSTVOIPFREIMINUTEN} * 60000]:$[$[${JUSTVOIPFREIMINUTEN} * 60000] - 60000]))
exten => _0033.,n(nonoh),GotoIf($[${NONOHFREIMINUTEN} > 0]?:12voip

exten => _0033.,n,PlayBack(vm-youhave)
exten => _0033.,n,SayNumber(${NONOHFREIMINUTEN})
exten => _0033.,n,PlayBack(minutes)
exten => _0033.,n(nonohcall),Set(NONOHCALL=Y)
exten => _0033.,n,Dial(SIP/${EXTEN}@nonoh,60,L($[${NONOHFREIMINUTEN} * 60000]:$[$[${NONOHFREIMINUTEN} * 60000] - 60000]))
exten => _0033.,n(twelvevoip),GotoIf($[${12VOIPFREIMINUTEN} > 0]?:voipdiscount)
exten => _0033.,n,PlayBack(vm-youhave)
exten => _0033.,n,SayNumber(${12VOIPFREIMINUTEN})
exten => _0033.,n,PlayBack(minutes)
exten => _0033.,n(twelvevoipcall),Set(12VOIPCALL=Y)
exten => _0033.,n,Dial(SIP/${EXTEN}@12voip,60,L($[${12VOIPFREIMINUTEN} * 60000]:$[$[${12VOIPFREIMINUTEN} * 60000] - 60000]))
exten => _0033.,n(voipdiscount),Dial,SIP/${EXTEN}@voipdiscount|60
exten => _0033.,n,Hangup
 
Ja, irgendein Fehler ist da, so weit ich das schnell überblicken kann.
Sorry, als ich das alles erstellt hatte, war ich ein absoluter Asterisk-Noob mit guten DOS-Kenntnissen (also scripts für DOS zu programmieren konnte ich). Außerdem ist es schon Ewigkeiten her.
Erstell dir einfach deine eigene Logik. Schreib das script so, dass erstmal Anbieter A genommen wird, und falls die freedays bei dem aufgebraucht sind, soll Anbieter B genommen werden usw.
Solltest du innerhalb paar Tagen nicht drauf kommen, werde ich (oder jemand anderer aus diesem Forum) Zeit finden dir so was zu schreiben.
 
...naja, war ja eh nur das Versuchs-Script von Dir (wie ich erst nachher gelesen hab).

Also ich benutze jetzt folgendes. Hat sich noch irgend eine Syntax außer die Dial-Funktion für Asterisk 1.6 geändert?

Code:
exten => _0.,1,Set(LIMIT_WARNING_FILE=noch60sekunden)
exten => _0.,n,Set(FAVORIT=0.einsundeins)
exten => _0.,n,ExecIf($[$[300 - ${DB(webcalldirect/minutes1)} - ${DB(webcalldirect/minutes2)} - ${DB(webcalldirect/minutes3)} - ${DB(webcalldirect/minutes4)} - ${DB(webcalldirect/minutes5)} - ${DB(webcalldirect/minutes6)} - ${DB(webcalldirect/minutes7)}] > ${CUT(FAVORIT,.,1)}],Set,FAVORIT=$[300 - ${DB(webcalldirect/minutes1)} - ${DB(webcalldirect/minutes2)} - ${DB(webcalldirect/minutes3)} - ${DB(webcalldirect/minutes4)} - ${DB(webcalldirect/minutes5)} - ${DB(webcalldirect/minutes6)} - ${DB(webcalldirect/minutes7)}].webcalldirect)
exten => _0.,n,ExecIf($[$[300 - ${DB(justvoip/minutes1)} - ${DB(justvoip/minutes2)} - ${DB(justvoip/minutes3)} - ${DB(justvoip/minutes4)} - ${DB(justvoip/minutes5)} - ${DB(justvoip/minutes6)} - ${DB(justvoip/minutes7)}] > ${CUT(FAVORIT,.,1)}],Set,FAVORIT=$[300 - ${DB(justvoip/minutes1)} - ${DB(justvoip/minutes2)} - ${DB(justvoip/minutes3)} - ${DB(justvoip/minutes4)} - ${DB(justvoip/minutes5)} - ${DB(justvoip/minutes6)} - ${DB(justvoip/minutes7)}].justvoip)
exten => _0.,n,GotoIf($[${CALLERID(name):0:8} = callback]?call:)
exten => _0.,n,Playback(kostenlos)
exten => _0.,n,GotoIf($[${CUT(FAVORIT,.,1)} > 50]?call:)
exten => _0.,n,PlayBack(vm-youhave)
exten => _0.,n,SayNumber(${CUT(FAVORIT,.,1)})
exten => _0.,n,PlayBack(minutes)
exten => _0.,n(call),Set(${CUT(FAVORIT,.,2)}call=Y)
exten => _0.,n,ExecIf($[${CUT(FAVORIT,.,1)} > 0],Dial(SIP/${EXTEN}@${CUT(FAVORIT,.,2)},60,L($[${CUT(FAVORIT,.,1)} * 60000]:$[$[${CUT(FAVORIT,.,1)} * 60000] - 60000])))
exten => _0.,n,Dial(SIP/${EXTEN}@einsundeins,60)
exten => _0.,n,Macro(dialnow,${EXTEN})
exten => _0.,n,Hangup
exten => h,1,GotoIf($[${${CUT(FAVORIT,.,2)}call} =Y]?:4
exten => h,2,GotoIf($[${ANSWEREDTIME} > 1]?:4)
exten => h,3,Set(DB(${CUT(FAVORIT,.,2)}/minutes1)=$[${DB(${CUT(FAVORIT,.,2)}/minutes1)} + $[$[${ANSWEREDTIME} + 59] / 60]])
exten => h,4,Hangup

Code:
fritz*CLI>
  == Using SIP RTP CoS mark 5
    -- Executing [029312345678@einsundeins_out:1] Set("SIP/997-00596b50", "LIMIT_WARNING_FILE=noch60sekunden") in new stack
    -- Executing [029312345678@einsundeins_out:2] Set("SIP/997-00596b50", "FAVORIT=0.einsundeins") in new stack
[Feb 25 20:47:12] WARNING[3322]: pbx.c:3082 pbx_extension_helper: No application 'ExecIf' for extension (einsundeins_out, 029312345678, 3)
  == Spawn extension (einsundeins_out, 029312345678, 3) exited non-zero on 'SIP/997-00596b50'
[Feb 25 20:47:12] WARNING[3322]: pbx.c:2969 pbx_substitute_variables_helper_full: Error in extension logic (missing ']')
[Feb 25 20:47:12] WARNING[3322]: pbx.c:2882 pbx_substitute_variables_helper_full: Error in extension logic (missing '}')
[Feb 25 20:47:12] WARNING[3322]: pbx.c:2882 pbx_substitute_variables_helper_full: Error in extension logic (missing '}')
[Feb 25 20:47:12] WARNING[3322]: pbx.c:2760 func_args: Can't find trailing parenthesis?
[Feb 25 20:47:12] ERROR[3322]: pbx.c:2772 ast_func_read: Function CUT not registered
    -- Executing [h@einsundeins_out:1] GotoIf("SIP/997-00596b50", "") in new stack
[Feb 25 20:47:12] WARNING[3322]: pbx.c:8183 pbx_builtin_gotoif: Ignoring, since there is no variable to check
[Feb 25 20:47:12] WARNING[3322]: ast_expr2.fl:437 ast_yyerror: ast_yyerror():  syntax error: syntax error, unexpected '>', expecting $end; Input:
 > 1
 ^
[Feb 25 20:47:12] WARNING[3322]: ast_expr2.fl:441 ast_yyerror: If you have questions, please refer to doc/tex/channelvariables.tex in the asterisk source.
    -- Executing [h@einsundeins_out:2] GotoIf("SIP/997-00596b50", "?:4") in new stack
    -- Goto (einsundeins_out,h,4)
    -- Executing [h@einsundeins_out:4] Hangup("SIP/997-00596b50", "") in new stack
  == Spawn extension (einsundeins_out, h, 4) exited non-zero on 'SIP/997-00596b50'
fritz*CLI>
 
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.