Hoi,
We hebben hier een Asterisk 1.4.44 machine waar we onze klanten op laten connecten. Wij gebruiken de standaard CDR billing (via MySQL) van Asterisk en dat werkt allemaal probleemloos.
Om onze dienstverlening te verbeteren hebben we nu bedacht om door te schakelen indien een klant (type=friend) onbereikbaar is. Oftewel, een inkomend gesprek naar klant X moet worden doorgeschakeld naar een externe lijn (via één van de peers) waarbij de klant X wordt gefactureerd als zijnde een uitgaand gesprek naar dat telefoonnr. Klinkt als een niet zo moeilijk probleem en dat zou het ook niet moeten zijn, zij het dat de billing hier stuk op gaat. De gesprekken worden namelijk als 'Intern' gezien (verkeerde context)
Korte beschrijving hoe onze Asterisk is ingericht:
Binnenkomende gesprekken komen binnen in de [macro-stdexten]. Uitgaande gesprekken komen normaliter in de context [outgoing] waarna deze via loadbalanced peers naar buiten worden gestuurd.
De [macro-stdexten] ziet er zo uit (zonder overige logging vooraf)
Normaliter gaan uitgaande gesprekken via de volgende macro:
Zoals gezegd, inkomende telefoongesprekken komen in de context 'customers', uitgaande gesprekken staan in 'outgoing'.
Het truukje wat ik wil doen is feiltelijk de context veranderen zodat de billing uiteindelijk goed gaat. Helaas is CDR(context) een read-only var.
De 'Dial(Local/$FWSTRING@outgoing)' plaatst de context wel goed, maar maakt 2 database entries waarbij de entry met de goede context maar 9 seconden duurt. De andere (met context customers) blijft het gesprek wel tellen, maar dat is dus een 'gratis' gesprek.
Ik heb inmiddels GotoIf, GosubIf en zelfs een ResetCDR() geprobeerd, maar geen resultaat
Wat vergeet ik hier of anders, hoe kan ik het inkomende gesprek naar Klant-X verplaatsen naar een uitgaand gesprek waarbij Klant-X ook de correcte kosten krijgt doorberekend
Iemand die mij hier iets over kan melden??
We hebben hier een Asterisk 1.4.44 machine waar we onze klanten op laten connecten. Wij gebruiken de standaard CDR billing (via MySQL) van Asterisk en dat werkt allemaal probleemloos.
Om onze dienstverlening te verbeteren hebben we nu bedacht om door te schakelen indien een klant (type=friend) onbereikbaar is. Oftewel, een inkomend gesprek naar klant X moet worden doorgeschakeld naar een externe lijn (via één van de peers) waarbij de klant X wordt gefactureerd als zijnde een uitgaand gesprek naar dat telefoonnr. Klinkt als een niet zo moeilijk probleem en dat zou het ook niet moeten zijn, zij het dat de billing hier stuk op gaat. De gesprekken worden namelijk als 'Intern' gezien (verkeerde context)
Korte beschrijving hoe onze Asterisk is ingericht:
Binnenkomende gesprekken komen binnen in de [macro-stdexten]. Uitgaande gesprekken komen normaliter in de context [outgoing] waarna deze via loadbalanced peers naar buiten worden gestuurd.
De [macro-stdexten] ziet er zo uit (zonder overige logging vooraf)
Vanaf prioriteit 31 kun je zien wat ik al heb geprobeerd. De ene werkt beter/sneller dan de andere variant alleen op geen enkele wijze komt de context goed te staan (deze blijft op 'customers' en daarmee een 'Intern Gesprek')exten => s,15,Verbose(1,"Account: [${ARG1}] incoming call on channel [${CHANNEL}] from A: [${CALLERID(name)} <${CALLERID(num)}>] B: [${ARG2}]")
exten => s,16,Dial(${DIALSTRING},90) ; Ring the interface, 90 seconds maximum
exten => s,17,GosubIf($[${DIALSTATUS}=BUSY]?20) ; Jump to Busy if Busy signal is found
exten => s,18,GosubIf($[${DIALSTATUS}=CHANUNAVAIL]?22) ; Jump to new forward-my-call
exten => s,19,Congestion()
exten => s,20,Busy()
exten => s,21,Hangup()
exten => s,22,Verbose(1,"Peer ${ARG1} is unavailable")
exten => s,23,AGI(callforward.php|${ARG1}|y) ; This checks database if customers wants a call forward, will return in $FWSTRING and $FORWARD = y if customer wants forward
exten => s,24,Set(CDR(accountcode)=${ARG1}) ; Set CDR(accountcode) to accountname being called for billing
exten => s,25,Verbose(1,FORWARDING Call from ${ARG1} to ${FWSTRING} with originally ${DIALSTRING})
;exten => s,30,Set(MACRO_CONTEXT=outgoing) ; Setting Macro context
exten => s,31,Dial(Local/${FWSTRING}@outgoing,,G(outgoing^${FWSTRING}^1),tTrR) ; Works, but opens a new billing entry with correct billing, except it will last only 9 sec at the most
;exten => s,31,Macro(load-balancer,SIP/btngn-1/${FWSTRING}#SIP/btngn-2/${FWSTRING},,) ; Works, CDR context wrong (=customer)
;exten => s,31,GotoIf($["${FORWARD}" = "y"]?outgoing,${FWSTRING},1:31) ; Works, CDR context wrong
;exten => s,31,Macro(safedial-proxy,${FWSTRING}) ; Works, CDR context wrong
;exten => s,50,Hangup() ; Fallback
; Final Fallback
exten => s,80,Congestion()
exten => s,81,Hangup()
Normaliter gaan uitgaande gesprekken via de volgende macro:
Checknumber doet niks meer (Alleen een NoOp). Vanaf daar is het een Goto(outgoing) waarna het via een safedial-proxy-macro uiteindelijk naar de load-balance macro gaat welke de loadbalanced macro aanspreekt en de daadwerkelijk Dial uitvoert.[customers]
switch => Realtime/customers@
include => checknumber
Zoals gezegd, inkomende telefoongesprekken komen in de context 'customers', uitgaande gesprekken staan in 'outgoing'.
Het truukje wat ik wil doen is feiltelijk de context veranderen zodat de billing uiteindelijk goed gaat. Helaas is CDR(context) een read-only var.
De 'Dial(Local/$FWSTRING@outgoing)' plaatst de context wel goed, maar maakt 2 database entries waarbij de entry met de goede context maar 9 seconden duurt. De andere (met context customers) blijft het gesprek wel tellen, maar dat is dus een 'gratis' gesprek.
Ik heb inmiddels GotoIf, GosubIf en zelfs een ResetCDR() geprobeerd, maar geen resultaat
Wat vergeet ik hier of anders, hoe kan ik het inkomende gesprek naar Klant-X verplaatsen naar een uitgaand gesprek waarbij Klant-X ook de correcte kosten krijgt doorberekend
Iemand die mij hier iets over kan melden??
HomeComputerMuseum - Interactief computermuseum waar wij de geschiedenis van de thuiscomputer preserveren. Centraal gelegen in de Benelux.