Dear All,
I'm trying to use a2billing for prepaid calling cards...The system should check if the caller number is on the system else it will ask to enter a PIN number...
I have the following config:
a2billing.conf:
sip.conf:
[sip_proxy_39]
type=peer
context=a2billing-did
host=81.201.82.39
allow=alaw
allow=ulaw
allow=g729
dtmfmode = RFC2833
extensions.conf:
[a2billing-did]
exten => _X.,1,DeadAGI(a2billing.php|6|did)
exten => _X.,n,Hangup
[agi-conf6]
; the debug level
; 0=none, 1=low, 2=normal, 3=all
debug = 3
; Asterisk Version Information
; 1_1,1_2,1_4 By Default it will take 1_2 or higher
asterisk_version = 1_4
; Manage the answer on the call
answer_call = NO
; Play audio - this will disable all stream file but not the Get Data
; for wholesale ensure that the authentication works and than number_try = 1
play_audio = NO
; play the goodbye message when the user has finished.
say_goodbye = NO
; enable the menu to choose the language
; press 1 for English, pulsa 2 para el español, Pressez 3 pour Français
play_menulanguage = NO
; force the use of a language, if you dont want to use it leave the option empty
; Values : ES, EN, FR, etc... (according to the audio you have installed)
force_language =
; Introduction prompt : to specify an additional prompt to play at the beginning of the application
intro_prompt =
; Minimum amount of credit to use the application
min_credit_2call = 0
; this is the minimum duration in seconds of a call in order to be billed
; any call with a length less than min_duration_2bill will have a 0 cost
; useful not to charge callers for system errors when a call was answered but it actually didn't connect
min_duration_2bill = 0
; if user doesn't have enough credit to call a destination, prompt him to enter another cardnumber
notenoughcredit_cardnumber = YES
; if notenoughcredit_cardnumber = YES then assign the CallerID to the new cardnumber
notenoughcredit_assign_newcardnumber_cid = YES
; if YES it will use the DNID and try to dial out, without asking for the phonenumber to call
; value : YES, NO
use_dnid = NO
; list the dnid on which you want to avoid the use of the previous option "use_dnid"
no_auth_dnid = 2400,2300
; number of times the user can dial different number
number_try = 1
; this will force to select a specific call plan by the Rate Engine
force_callplan_id =
; Play the balance to the user after the authentication (values : yes - no)
say_balance_after_auth = yes
; Play the balance to the user after the call (values : yes - no)
say_balance_after_call = NO
; Play the initial cost of the route (values : yes - no)
say_rateinitial = NO
; Play the amount of time that the user can call (values : yes - no)
say_timetocall = NO
; enable the setup of the callerID number before the outbound is made, by default the user callerID value will be use
auto_setcallerid = YES
; If auto_setcallerid is enabled, the value of force_callerid will be set as CallerID
force_callerid =
; If force_callerid is not set, then the following option ensures that CID is set to one of the card's configured caller IDs or blank if none available.
; NO - disable this feature, caller ID can be anything.
; CID - Caller ID must be one of the customers caller IDs
; DID - Caller ID must be one of the customers DID nos.
; BOTH - Caller ID must be one of the above two items.
cid_sanitize = NO
; enable the callerid authentication
; if this option is active the CC system will check the CID of caller
cid_enable = NO
; if the CID does not exist, then the caller will be prompt to enter his cardnumber
#Changed By AJ
cid_askpincode_ifnot_callerid = YES
#cid_askpincode_ifnot_callerid = NO
; if the callerID authentication is enable and the authentication fails then the user will be prompt to enter his cardnumber
; this option will bound the cardnumber entered to the current callerID so that next call will be directly authenticate
cid_auto_assign_card_to_cid = YES
; if the callerID is captured on a2billing, this option will create automatically a new card and add the callerID to it
; set the length of the card that will be auto create (ie, 10)
cid_auto_create_card_len = 10
; If cid_auto_create_card has been set to YES, the following options will define with which configuration we will create the card
;
; billing type of the new card
; ( value : POSTPAY or PREPAY)
cid_auto_create_card_typepaid = POSTPAY
; amount of credit of the new card
cid_auto_create_card_credit = 0
; if postpay, define the credit limit for the card
cid_auto_create_card_credit_limit = 1000
; the tariffgroup to use for the new card (this is the ID that you can find on the admin web interface)
cid_auto_create_card_tariffgroup = 6
; to check callerID over the cardnumber authentication (to guard against spoofing)
callerid_authentication_over_cardnumber = NO
; enable the option to call sip/iax friend for free (values : YES - NO)
sip_iax_friends = NO
; if SIP_IAX_FRIENDS is active, you can define a prefix for the dialed digits to call a pstn number
; values : number
sip_iax_pstn_direct_call_prefix = 555
; this will enable a prompt to enter your destination number.
; if number start by sip_iax_pstn_direct_call_prefix we do directly a sip iax call, if not we do a normal call
sip_iax_pstn_direct_call = YES
; enable the option to refill card with voucher in IVR (values : YES - NO)
ivr_voucher = NO
; if ivr_voucher is active, you can define a prefix for the voucher number to refill your card
; values : number - don't forget to change prepaid-refill_card_with_voucher audio accordingly
ivr_voucher_prefix = 8
; When the user credit are below the minimum credit to call min_credit
; jump directly to the voucher IVR menu (values: YES - NO)
jump_voucher_if_min_credit = NO
; Extracharge DIDs, multiple numbers and fees must be separated by comma
; extracharge_did = 1800XXXXXXX,1888XXXXXXX
extracharge_did =
;extracharge_fee = 0.02,0.03
extracharge_fee =
;extracharge_buyfee = 0.015,0.025
extracharge_buyfee =
; List the prefixes that will be stripped off if the call plan requires it
international_prefixes = 011,00,09
; More information about the Dial :
http://voip-info.org/wiki-Asterisk+cmd+dial
; 30 : The timeout parameter is optional. If not specifed, the Dial command will wait indefinitely, exiting only when the originating channel hangs up, or all the dialed channels return a busy or error condition. Otherwise it specifies a maximum time, in seconds, that the Dial command is to wait for a channel to answer.
; H: Allow the caller to hang up by dialing *
; r: Generate a ringing tone for the calling party
; g: When the called party hangs up, exit to execute more commands in the current context. (new in 1.4)
; i: Asterisk will ignore any forwarding (302 Redirect) requests received. Essential for DID usage to prevent fraud. (new in 1.4) Useful if you are ringing a group of people and one person has set their phone to forwarded direct to voicemail on their cell or something which normally prevents any of the other phones from ringing.
; R: Indicate ringing to the calling party when the called party indicates ringing, pass no audio until answered.
; m: Provide Music on Hold to the calling party until the called channel answers.
; L(x[:y][:z]): Limit the call to 'x' ms, warning when 'y' ms are left, repeated every 'z' ms)
; %timeout% tag is replaced by the calculated timeout according the credit & destination rate!
dialcommand_param = "|60|HRgL(%timeout%:61000:30000)"
; by default (3600000 = 1HOUR MAX CALL)
dialcommand_param_sipiax_friend = "|60|HRgiL(3600000:61000:30000)"
; Define the order to make the outbound call
; YES -> SIP/dialedphonenumber@gateway_ip - NO SIP/gateway_ip/dialedphonenumber
; Both should work exactly the same but i experimented one case when gateway was supporting dialedphonenumber@gateway_ip
; So in case of trouble, try it out
switchdialcommand = NO
; failover recursive search - define how many time we want to authorize the research of the failover trunk when a call fails (value : 0 - 20)
failover_recursive_limit = 2
; For free calls, limit the duration: amount in seconds
maxtime_tocall_negatif_free_route = 5400
; Send a reminder email to the user when they are under min_credit_2call
send_reminder = NO
; enable to monitor the call (to record all the conversations)
; value : YES - NO
record_call = NO
; format of the recorded monitor file
monitor_formatfile = gsm
; Force to play the balance to the caller in a predefined currency, to use the currency set for by the customer leave this field empty
agi_force_currency =
; CURRENCY SECTION
; Define all the audio (without file extensions) that you want to play according to currency (use , to separate, ie "usd:prepaid-dollar,mxn:pesos,eur:Euro,all:credit")
currency_association = usd:dollars,mxn:pesos,eur:euros,all:credit
; Please enter the file name you want to play when we prompt the calling party to enter the destination number
; file_conf_enter_destination = prepaid-enter-number-u-calling-1-or-011
;file_conf_enter_destination = prepaid-enter-dest
; Please enter the file name you want to play when we prompt the calling party to choose the prefered language
; file_conf_enter_menulang = prepaid-menulang
file_conf_enter_menulang = prepaid-menulang2
; Define if you want to bill the 1st leg on callback even if the call is not connected to the destination
callback_bill_1stleg_ifcall_notconnected = YES
The issue is when i dial the did number that forward the call to asterisk, I got cll declined...Please find below the log:
AGI Script a2billing.php completed, returning 0
-- Executing [1905964541@a2billing-did:1] DeadAGI("SIP/voxbone.com-b78ebef8", "a2billing.php|6|did") in new stack
[Apr 14 12:03:10] WARNING[8220]: res_agi.c:2129 deadagi_exec: Running DeadAGI on a live channel will cause problems, please use AGI
-- Launched AGI Script /var/lib/asterisk/agi-bin/a2billing.php
a2billing.php|6|did: A2Billing AGI internal configuration:
a2billing.php|6|did: Array
a2billing.php|6|did: (
a2billing.php|6|did: [debug] => 3
a2billing.php|6|did: [asterisk_version] => 1_4
a2billing.php|6|did: [answer_call] =>
a2billing.php|6|did: [play_audio] =>
a2billing.php|6|did: [say_goodbye] =>
a2billing.php|6|did: [play_menulanguage] =>
a2billing.php|6|did: [force_language] =>
a2billing.php|6|did: [intro_prompt] =>
a2billing.php|6|did: [min_credit_2call] => 0
a2billing.php|6|did: [min_duration_2bill] => 0
a2billing.php|6|did: [notenoughcredit_cardnumber] => 1
a2billing.php|6|did: [notenoughcredit_assign_newcardnumber_cid] => 1
a2billing.php|6|did: [use_dnid] =>
a2billing.php|6|did: [no_auth_dnid] => Array
a2billing.php|6|did: (
a2billing.php|6|did: [0] => 2400
a2billing.php|6|did: [1] => 2300
a2billing.php|6|did: )
a2billing.php|6|did:
a2billing.php|6|did: [number_try] => 1
a2billing.php|6|did: [force_callplan_id] =>
a2billing.php|6|did: [say_balance_after_auth] => 1
a2billing.php|6|did: [say_balance_after_call] =>
a2billing.php|6|did: [say_rateinitial] =>
a2billing.php|6|did: [say_timetocall] =>
a2billing.php|6|did: [auto_setcallerid] => 1
a2billing.php|6|did: [force_callerid] =>
a2billing.php|6|did: [cid_sanitize] =>
a2billing.php|6|did: [cid_enable] =>
a2billing.php|6|did: [cid_askpincode_ifnot_callerid] => 1
a2billing.php|6|did: [#cid_askpincode_ifnot_callerid] =>
a2billing.php|6|did: [cid_auto_assign_card_to_cid] => 1
a2billing.php|6|did: [cid_auto_create_card_len] => 10
a2billing.php|6|did: [cid_auto_create_card_typepaid] => POSTPAY
a2billing.php|6|did: [cid_auto_create_card_credit] => 0
a2billing.php|6|did: [cid_auto_create_card_credit_limit] => 1000
a2billing.php|6|did: [cid_auto_create_card_tariffgroup] => 6
a2billing.php|6|did: [callerid_authentication_over_cardnumber] =>
a2billing.php|6|did: [sip_iax_friends] =>
a2billing.php|6|did: [sip_iax_pstn_direct_call_prefix] => 555
a2billing.php|6|did: [sip_iax_pstn_direct_call] => 1
a2billing.php|6|did: [ivr_voucher] =>
a2billing.php|6|did: [ivr_voucher_prefix] => 8
a2billing.php|6|did: [jump_voucher_if_min_credit] =>
a2billing.php|6|did: [extracharge_did] => Array
a2billing.php|6|did: (
a2billing.php|6|did: [0] =>
a2billing.php|6|did: )
a2billing.php|6|did:
a2billing.php|6|did: [extracharge_fee] => Array
a2billing.php|6|did: (
a2billing.php|6|did: [0] =>
a2billing.php|6|did: )
a2billing.php|6|did:
a2billing.php|6|did: [extracharge_buyfee] => Array
a2billing.php|6|did: (
a2billing.php|6|did: [0] =>
a2billing.php|6|did: )
a2billing.php|6|did:
a2billing.php|6|did: [international_prefixes] => Array
a2billing.php|6|did: (
a2billing.php|6|did: [0] => 011
a2billing.php|6|did: [1] => 00
a2billing.php|6|did: [2] => 09
a2billing.php|6|did: )
a2billing.php|6|did:
a2billing.php|6|did: [dialcommand_param] => |60|HRgL(%timeout%:61000:30000)
a2billing.php|6|did: [dialcommand_param_sipiax_friend] => |60|HRgiL(3600000:61000:30000)
a2billing.php|6|did: [switchdialcommand] =>
a2billing.php|6|did: [failover_recursive_limit] => 2
a2billing.php|6|did: [maxtime_tocall_negatif_free_route] => 5400
a2billing.php|6|did: [send_reminder] =>
a2billing.php|6|did: [record_call] =>
a2billing.php|6|did: [monitor_formatfile] => gsm
a2billing.php|6|did: [agi_force_currency] =>
a2billing.php|6|did: [currency_association] => Array
a2billing.php|6|did: (
a2billing.php|6|did: [0] => usd:dollars
a2billing.php|6|did: [1] => mxn:pesos
a2billing.php|6|did: [2] => eur:euros
a2billing.php|6|did: [3] => all:credit
a2billing.php|6|did: )
a2billing.php|6|did:
a2billing.php|6|did: [file_conf_enter_menulang] => prepaid-menulang2
a2billing.php|6|did: [callback_bill_1stleg_ifcall_notconnected] => 1
a2billing.php|6|did: [logger_enable] => 1
a2billing.php|6|did: [log_file] => /tmp/a2billing.log
a2billing.php|6|did: [currency_association_internal] => Array
a2billing.php|6|did: (
a2billing.php|6|did: [usd] => dollars
a2billing.php|6|did: [mxn] => pesos
a2billing.php|6|did: [eur] => euros
a2billing.php|6|did: [all] => credit
a2billing.php|6|did: )
a2billing.php|6|did:
a2billing.php|6|did: [file_conf_enter_destination] => prepaid-enter-number-u-calling-1-or-011
a2billing.php|6|did: [ivr_voucher_prefixe] => 8
a2billing.php|6|did: )
a2billing.php|6|did:
a2billing.php|6|did: file:a2billing.php - line:78 - IDCONFIG : 6
a2billing.php|6|did: file:a2billing.php - line:79 - MODE : did
a2billing.php|6|did: file:a2billing.php - line:91 - AGI Request:
a2billing.php|6|did: file:a2billing.php - line:92 - Array
a2billing.php|6|did: (
a2billing.php|6|did: [agi_request] => a2billing.php
a2billing.php|6|did: [agi_channel] => SIP/voxbone.com-b78ebef8
a2billing.php|6|did: [agi_language] => en
a2billing.php|6|did: [agi_type] => SIP
a2billing.php|6|did: [agi_uniqueid] => 1239706990.370482
a2billing.php|6|did: [agi_callerid] => 14455522562
a2billing.php|6|did: [agi_calleridname] => 14455522562
a2billing.php|6|did: [agi_callingpres] => 0
a2billing.php|6|did: [agi_callingani2] => 0
a2billing.php|6|did: [agi_callington] => 0
a2billing.php|6|did: [agi_callingtns] => 0
a2billing.php|6|did: [agi_dnid] => 1905964541
a2billing.php|6|did: [agi_rdnis] => unknown
a2billing.php|6|did: [agi_context] => a2billing-did
a2billing.php|6|did: [agi_extension] => 1905964541
a2billing.php|6|did: [agi_priority] => 1
a2billing.php|6|did: [agi_enhanced] => 0.0
a2billing.php|6|did: [agi_accountcode] =>
a2billing.php|6|did: )
a2billing.php|6|did:
a2billing.php|6|did: file:Class.A2Billing.php - line:621 - get_agi_request_parameter = 14455522562 ; SIP/voxbone.com-b78ebef8 ; 1239706990.370482 ; ; 1905964541
a2billing.php|6|did: file:a2billing.php - line:335 - [NO ANSWER CALL]
a2billing.php|6|did: file:a2billing.php - line:347 - [DID CALL - [CallerID=14455522562]:[DID=1905964541]
a2billing.php|6|did: file:a2billing.php - line:359 - SELECT cc_did.id, cc_did_destination.id, billingtype, tariff, destination, voip_call, username FROM cc_did, cc_did_destination, cc_card WHERE id_cc_did=cc_did.id and cc_card.id=id_cc_card and cc_did_destination.activated=1 and cc_did.activated=1 and did='1905964541' AND cc_did.startingdate<= CURRENT_TIMESTAMP AND (cc_did.expirationdate > CURRENT_TIMESTAMP OR cc_did.expirationdate IS NULL OR cc_did.expirationdate = '0000-00-00 00:00:00') ORDER BY priority ASC
a2billing.php|6|did: file:a2billing.php - line:361 -
-- AGI Script a2billing.php completed, returning 0
Can someone help me to find the issue?