Using A2Billing to account for extension calls in Elastix

A2Billing is a very flexible piece of software and can be used in many situations. One of these is to account/charge for calls from extensions in Elastix/FreePBX.

I’ve put together a walkthrough about how to do this. The walkthrough is done on a Elastix 1.6 Sysadminman VPS template. I’ve broken it in to 8 parts.

The first 4 parts are getting an extension up and running in Elastix and then the last 4 parts show how to configure A2Billing to account for these calls. Due to the version of A2Billing that comes with Elastix 1.6 (A2Billing version 1.3) it is nescesary to edit a few files manually using the command prompt.

A setup similar to this could possibly be used for a call shop or a hotel system.

Here are the parts –

Part 1 – Create a test extension in Elastix
Part 2 – Set up x-lite to use your Elastix extension
Part 3 – Create a trunk in Elastix
Part 4 – Create an outbound route in Elastix
Part 5 – Creating a trunk in A2Billing on Elastix
Part 6 – Create a customer in a2billing on Elastix
Part 7 – Create a call plan and rate card in A2Billing on Elastix
Part 8 – Create a custom trunk in Elastix for use with A2Billing

21 thoughts on “Using A2Billing to account for extension calls in Elastix

  1. Glauco Perez

    This is a terrific series and very helpful. I use it constantly to educate myself on the asterisk boxes esp. Elastix and a2billing. It would be helpful if you would do a part on installing ilbc, gsm and the other codecs onto Elastix as well as update the auto rate download from callwithus or a generic that can be configured for any voip providers. Finally a section on how to install cheap USB phones ( the skype types) to overcome the expensive voip phones would be terrific. Keep up the good work.

    kind regards,
    Glauco

  2. matt Post author

    Thank you for the kind words Glauco, I’m glad you find the articles interesting.

    I definitely plan on writing more, and will try to include your suggestion. Updating the callwithus script is something I’ve been meaning to do.

    Matt

  3. Adam

    Hi

    can you explain if I want to make a call from one extension to other extension and it should be charged via a2 billing ? is it possible ?

  4. matt Post author

    I can’t think that routing freepbx extension to extension calls through a2billing to charge for them is easy I’m afraid. At least I can’t think if a way to do it.

  5. Chris

    I have tried this several times with the latest install of elastix and is not working. Any ideas why?

  6. matt Post author

    How far are you getting Chris? Can you make a call from the extension just sending via the trunk in FreePBX, rather than routing through A2Billing?

  7. Chris

    I can get incoming calls and get external calls. the only problem is routing calls through a2billing. I just updated a2billing to 1.6 and will try it again.

  8. John

    Chris/Matt – did you fix this problem? I have everything setup but I’m unsure how to route through to a2billing.
    If i create a card/customer in a2billing then give out my pbx IP with the customer card/password I am unable to connect to it over x-lite

    Any ideas how to link the two so that any incoming card/pass is checked on logging in via IP using xlite?

  9. Chris

    I forgot to update, but I did update a2billing to 1.8.1 and from reading the comments on the page Matt linked in the previous comment I was able to get everything working. Thanks for your help matt. The tutorials are great they are really appreciated.

  10. Socotroco Santana

    Hi,
    I did every thing in both tutorials:
    – Integrating FreePBX with A2Billing
    – Using A2Billing to account for extension calls in Elastix
    When I try to call system says “Please enter your pin number” x 3 times and hangup.

    How can I fix it?

    Thanks,
    Sssoc

  11. Socotroco Santana

    If I set USE_DNID=No system ask me to enter the phone number and then #
    May know a agi-conf1 settings.
    I’m sure all steps are done as your tutorial says.

    Thanks in advance,
    S. Santana
    ——————————-
    With USE_DNID set to NO
    ——————————-
    [Jan 17 21:00:08] VERBOSE[20592] res_agi.c: a2billing.php,1: [restriction] => 0
    [Jan 17 21:00:08] VERBOSE[20592] res_agi.c: a2billing.php,1: [29] => 1
    [Jan 17 21:00:08] VERBOSE[20592] res_agi.c: a2billing.php,1: [countryprefix] => 1
    [Jan 17 21:00:08] VERBOSE[20592] res_agi.c: a2billing.php,1: )
    [Jan 17 21:00:08] VERBOSE[20592] res_agi.c: a2billing.php,1:
    [Jan 17 21:00:08] VERBOSE[20592] res_agi.c: a2billing.php,1: )
    [Jan 17 21:00:08] VERBOSE[20592] res_agi.c: a2billing.php,1:
    [Jan 17 21:00:08] VERBOSE[20592] res_agi.c: a2billing.php,1: file:Class.A2Billing.php – line:2873 – uniqueid:1295312384.22 – [SET CHANNEL(language) es]
    [Jan 17 21:00:08] VERBOSE[20592] res_agi.c: a2billing.php,1: file:Class.A2Billing.php – line:747 – uniqueid:1295312384.22 – [CARD STATUS UPDATE]
    [Jan 17 21:00:08] VERBOSE[20592] res_agi.c: a2billing.php,1: file:Class.A2Billing.php – line:756 – uniqueid:1295312384.22 – [QUERY USING CARD UPDATE::> UPDATE cc_card SET inuse=inuse+1, credit=credit-0.25 WHERE username=’9500975365′]
    [Jan 17 21:00:08] VERBOSE[20592] res_agi.c: a2billing.php,1: file:a2billing.php – line:178 – uniqueid:1295312384.22 – [TRY : callingcard_ivr_authenticate]
    [Jan 17 21:00:08] VERBOSE[20592] res_agi.c: a2billing.php,1: file:Class.A2Billing.php – line:2264 – uniqueid:1295312384.22 – [AUTO SetCallerID]
    [Jan 17 21:00:08] VERBOSE[20592] res_agi.c: a2billing.php,1: file:Class.A2Billing.php – line:2270 – uniqueid:1295312384.22 – [REQUESTED SetCallerID : 500]
    [Jan 17 21:00:08] VERBOSE[20592] res_agi.c: a2billing.php,1: file:Class.A2Billing.php – line:2282 – uniqueid:1295312384.22 – [EXEC SetCallerID : 500]
    [Jan 17 21:00:08] VERBOSE[20592] res_agi.c: a2billing.php,1: file:a2billing.php – line:193 – uniqueid:1295312384.22 – [CHANNEL STATUS : 6 = Line is up]
    [Jan 17 21:00:08] VERBOSE[20592] res_agi.c: a2billing.php,1: [CREDIT : 50][CREDIT MIN_CREDIT_2CALL : 0]
    [Jan 17 21:00:08] VERBOSE[20592] res_agi.c: a2billing.php,1: file:a2billing.php – line:396 – uniqueid:1295312384.22 – TARIFF ID -> 1
    [Jan 17 21:00:08] VERBOSE[20592] file.c: — Playing ‘prepaid-enter-dest.gsm’ (language ‘es’)
    [Jan 17 21:00:18] VERBOSE[20592] res_agi.c: a2billing.php,1: file:a2billing.php – line:537 – uniqueid:1295312384.22 – RES sip_iax_pstndirect_call DTMF : 17873155050
    [Jan 17 21:00:18] VERBOSE[20592] res_agi.c: a2billing.php,1: file:a2billing.php – line:555 – uniqueid:1295312384.22 – TRUNK – dnid : 17873155050 (1)
    [Jan 17 21:00:18] VERBOSE[20592] res_agi.c: a2billing.php,1: file:a2billing.php – line:566 – uniqueid:1295312384.22 – CALL SIP_IAX_BUDDY
    [Jan 17 21:00:18] VERBOSE[20592] res_agi.c: a2billing.php,1: file:Class.A2Billing.php – line:3421 – uniqueid:1295312384.22 – [SAVING DESTINATION FOR REDIAL: SQL: UPDATE cc_card SET redial = ‘17873155050’ WHERE username=’9500975365′]:[result: 1]
    [Jan 17 21:00:18] VERBOSE[20592] res_agi.c: a2billing.php,1: file:Class.A2Billing.php – line:1083 – uniqueid:1295312384.22 – SIP o IAX DESTINATION : 17873155050
    [Jan 17 21:00:18] VERBOSE[20592] res_agi.c: a2billing.php,1: file:Class.A2Billing.php – line:1089 – uniqueid:1295312384.22 –
    [Jan 17 21:00:18] VERBOSE[20592] res_agi.c: a2billing.php,1: file:Class.A2Billing.php – line:1100 – uniqueid:1295312384.22 – RESULT :
    [Jan 17 21:00:18] VERBOSE[20592] res_agi.c: a2billing.php,1: file:Class.A2Billing.php – line:747 – uniqueid:1295312384.22 – [CARD STATUS UPDATE]
    [Jan 17 21:00:18] VERBOSE[20592] res_agi.c: a2billing.php,1: file:Class.A2Billing.php – line:756 – uniqueid:1295312384.22 – [QUERY USING CARD UPDATE::> UPDATE cc_card SET inuse=inuse-1, credit=credit+0.25 WHERE username=’9500975365′]
    [Jan 17 21:00:18] VERBOSE[20592] res_agi.c: — AGI Script a2billing.php completed, returning -1
    [Jan 17 21:00:18] VERBOSE[20591] pbx.c: — Executing [[email protected]:1] Macro(“SIP/500-0000000a”, “hangupcall,”) in new stack
    [Jan 17 21:00:18] VERBOSE[20591] pbx.c: — Executing [[email protected]:1] GotoIf(“SIP/500-0000000a”, “1?skiprg”) in new stack
    [Jan 17 21:00:18] VERBOSE[20591] pbx.c: — Goto (macro-hangupcall,s,4)
    [Jan 17 21:00:18] VERBOSE[20591] pbx.c: — Executing [[email protected]:4] GotoIf(“SIP/500-0000000a”, “1?skipblkvm”) in new stack
    [Jan 17 21:00:18] VERBOSE[20591] pbx.c: — Goto (macro-hangupcall,s,7)
    [Jan 17 21:00:18] VERBOSE[20591] pbx.c: — Executing [[email protected]:7] GotoIf(“SIP/500-0000000a”, “1?theend”) in new stack
    [Jan 17 21:00:18] VERBOSE[20591] pbx.c: — Goto (macro-hangupcall,s,9)
    [Jan 17 21:00:18] VERBOSE[20591] pbx.c: — Executing [[email protected]:9] Hangup(“SIP/500-0000000a”, “”) in new stack
    [Jan 17 21:00:18] VERBOSE[20591] app_macro.c: == Spawn extension (macro-hangupcall, s, 9) exited non-zero on ‘SIP/500-0000000a’ in macro ‘hangupcall’
    [Jan 17 21:00:18] VERBOSE[20591] features.c: == Spawn extension (macro-dialout-trunk, h, 1) exited non-zero on ‘SIP/500-0000000a’
    [Jan 17 21:00:18] VERBOSE[20591] app_macro.c: == Spawn extension (macro-dialout-trunk, s, 27) exited non-zero on ‘SIP/500-0000000a’ in macro ‘dialout-trunk’
    [Jan 17 21:00:18] VERBOSE[20591] pbx.c: == Spawn extension (from-internal, 17873155050, 6) exited non-zero on ‘SIP/500-0000000a’
    [Jan 17 21:00:18] VERBOSE[20591] pbx.c: — Executing [[email protected]:1] Macro(“SIP/500-0000000a”, “hangupcall”) in new stack
    [Jan 17 21:00:18] VERBOSE[20591] pbx.c: — Executing [[email protected]:1] GotoIf(“SIP/500-0000000a”, “1?skiprg”) in new stack
    [Jan 17 21:00:18] VERBOSE[20591] pbx.c: — Goto (macro-hangupcall,s,4)
    [Jan 17 21:00:18] VERBOSE[20591] pbx.c: — Executing [[email protected]:4] GotoIf(“SIP/500-0000000a”, “1?skipblkvm”) in new stack
    [Jan 17 21:00:18] VERBOSE[20591] pbx.c: — Goto (macro-hangupcall,s,7)
    [Jan 17 21:00:18] VERBOSE[20591] pbx.c: — Executing [[email protected]:7] GotoIf(“SIP/500-0000000a”, “1?theend”) in new stack
    [Jan 17 21:00:18] VERBOSE[20591] pbx.c: — Goto (macro-hangupcall,s,9)
    [Jan 17 21:00:18] VERBOSE[20591] pbx.c: — Executing [[email protected]:9] Hangup(“SIP/500-0000000a”, “”) in new stack
    [Jan 17 21:00:18] VERBOSE[20591] app_macro.c: == Spawn extension (macro-hangupcall, s, 9) exited non-zero on ‘SIP/500-0000000a’ in macro ‘hangupcall’
    [Jan 17 21:00:18] VERBOSE[20591] pbx.c: == Spawn extension (from-internal, h, 1) exited non-zero on ‘SIP/500-0000000a’

    ——————————-
    USE_DNID set to YES
    ——————————-
    [Jan 17 21:07:41] VERBOSE[20729] res_agi.c: a2billing.php,1: [voicemail_activated] => 0
    [Jan 17 21:07:41] VERBOSE[20729] res_agi.c: a2billing.php,1: [28] => 0
    [Jan 17 21:07:41] VERBOSE[20729] res_agi.c: a2billing.php,1: [restriction] => 0
    [Jan 17 21:07:41] VERBOSE[20729] res_agi.c: a2billing.php,1: [29] => 1
    [Jan 17 21:07:41] VERBOSE[20729] res_agi.c: a2billing.php,1: [countryprefix] => 1
    [Jan 17 21:07:41] VERBOSE[20729] res_agi.c: a2billing.php,1: )
    [Jan 17 21:07:41] VERBOSE[20729] res_agi.c: a2billing.php,1:
    [Jan 17 21:07:41] VERBOSE[20729] res_agi.c: a2billing.php,1: )
    [Jan 17 21:07:41] VERBOSE[20729] res_agi.c: a2billing.php,1:
    [Jan 17 21:07:41] VERBOSE[20729] res_agi.c: a2billing.php,1: file:Class.A2Billing.php – line:2873 – uniqueid:1295312840.25 – [SET CHANNEL(language) es]
    [Jan 17 21:07:41] VERBOSE[20729] res_agi.c: a2billing.php,1: file:Class.A2Billing.php – line:747 – uniqueid:1295312840.25 – [CARD STATUS UPDATE]
    [Jan 17 21:07:41] VERBOSE[20729] res_agi.c: a2billing.php,1: file:Class.A2Billing.php – line:756 – uniqueid:1295312840.25 – [QUERY USING CARD UPDATE::> UPDATE cc_card SET inuse=inuse+1, credit=credit-0.25 WHERE username=’9500975365′]
    [Jan 17 21:07:41] VERBOSE[20729] res_agi.c: a2billing.php,1: file:a2billing.php – line:178 – uniqueid:1295312840.25 – [TRY : callingcard_ivr_authenticate]
    [Jan 17 21:07:41] VERBOSE[20729] res_agi.c: a2billing.php,1: file:Class.A2Billing.php – line:2264 – uniqueid:1295312840.25 – [AUTO SetCallerID]
    [Jan 17 21:07:41] VERBOSE[20729] res_agi.c: a2billing.php,1: file:Class.A2Billing.php – line:2270 – uniqueid:1295312840.25 – [REQUESTED SetCallerID : 500]
    [Jan 17 21:07:41] VERBOSE[20729] res_agi.c: a2billing.php,1: file:Class.A2Billing.php – line:2282 – uniqueid:1295312840.25 – [EXEC SetCallerID : 500]
    [Jan 17 21:07:41] VERBOSE[20729] res_agi.c: a2billing.php,1: file:a2billing.php – line:193 – uniqueid:1295312840.25 – [CHANNEL STATUS : 6 = Line is up]
    [Jan 17 21:07:41] VERBOSE[20729] res_agi.c: a2billing.php,1: [CREDIT : 50][CREDIT MIN_CREDIT_2CALL : 0]
    [Jan 17 21:07:41] VERBOSE[20729] res_agi.c: a2billing.php,1: file:a2billing.php – line:396 – uniqueid:1295312840.25 – TARIFF ID -> 1
    [Jan 17 21:07:41] VERBOSE[20729] res_agi.c: a2billing.php,1: file:a2billing.php – line:555 – uniqueid:1295312840.25 – TRUNK – dnid : unknown (1)
    [Jan 17 21:07:41] VERBOSE[20729] res_agi.c: a2billing.php,1: file:a2billing.php – line:566 – uniqueid:1295312840.25 – CALL SIP_IAX_BUDDY
    [Jan 17 21:07:41] VERBOSE[20729] res_agi.c: a2billing.php,1: file:Class.A2Billing.php – line:3421 – uniqueid:1295312840.25 – [SAVING DESTINATION FOR REDIAL: SQL: UPDATE cc_card SET redial = ‘unknown’ WHERE username=’9500975365′]:[result: 1]
    [Jan 17 21:07:41] VERBOSE[20729] res_agi.c: a2billing.php,1: file:Class.A2Billing.php – line:1083 – uniqueid:1295312840.25 – SIP o IAX DESTINATION : unknown
    [Jan 17 21:07:41] VERBOSE[20729] res_agi.c: a2billing.php,1: file:Class.A2Billing.php – line:1089 – uniqueid:1295312840.25 –
    [Jan 17 21:07:41] VERBOSE[20729] res_agi.c: a2billing.php,1: file:Class.A2Billing.php – line:1100 – uniqueid:1295312840.25 – RESULT :
    [Jan 17 21:07:41] VERBOSE[20729] res_agi.c: a2billing.php,1: file:Class.A2Billing.php – line:747 – uniqueid:1295312840.25 – [CARD STATUS UPDATE]
    [Jan 17 21:07:41] VERBOSE[20729] res_agi.c: a2billing.php,1: file:Class.A2Billing.php – line:756 – uniqueid:1295312840.25 – [QUERY USING CARD UPDATE::> UPDATE cc_card SET inuse=inuse-1, credit=credit+0.25 WHERE username=’9500975365′]
    [Jan 17 21:07:41] VERBOSE[20729] res_agi.c: — AGI Script a2billing.php completed, returning -1
    [Jan 17 21:07:41] VERBOSE[20728] pbx.c: — Executing [[email protected]:1] Macro(“SIP/500-0000000b”, “hangupcall,”) in new stack
    [Jan 17 21:07:41] VERBOSE[20728] pbx.c: — Executing [[email protected]:1] GotoIf(“SIP/500-0000000b”, “1?skiprg”) in new stack
    [Jan 17 21:07:41] VERBOSE[20728] pbx.c: — Goto (macro-hangupcall,s,4)
    [Jan 17 21:07:41] VERBOSE[20728] pbx.c: — Executing [[email protected]:4] GotoIf(“SIP/500-0000000b”, “1?skipblkvm”) in new stack
    [Jan 17 21:07:41] VERBOSE[20728] pbx.c: — Goto (macro-hangupcall,s,7)
    [Jan 17 21:07:41] VERBOSE[20728] pbx.c: — Executing [[email protected]:7] GotoIf(“SIP/500-0000000b”, “1?theend”) in new stack
    [Jan 17 21:07:41] VERBOSE[20728] pbx.c: — Goto (macro-hangupcall,s,9)
    [Jan 17 21:07:41] VERBOSE[20728] pbx.c: — Executing [[email protected]:9] Hangup(“SIP/500-0000000b”, “”) in new stack
    [Jan 17 21:07:41] VERBOSE[20728] app_macro.c: == Spawn extension (macro-hangupcall, s, 9) exited non-zero on ‘SIP/500-0000000b’ in macro ‘hangupcall’
    [Jan 17 21:07:41] VERBOSE[20728] features.c: == Spawn extension (macro-dialout-trunk, h, 1) exited non-zero on ‘SIP/500-0000000b’
    [Jan 17 21:07:41] VERBOSE[20728] app_macro.c: == Spawn extension (macro-dialout-trunk, s, 27) exited non-zero on ‘SIP/500-0000000b’ in macro ‘dialout-trunk’
    [Jan 17 21:07:41] VERBOSE[20728] pbx.c: == Spawn extension (from-internal, 17873155050, 6) exited non-zero on ‘SIP/500-0000000b’
    [Jan 17 21:07:41] VERBOSE[20728] pbx.c: — Executing [[email protected]:1] Macro(“SIP/500-0000000b”, “hangupcall”) in new stack
    [Jan 17 21:07:41] VERBOSE[20728] pbx.c: — Executing [[email protected]:1] GotoIf(“SIP/500-0000000b”, “1?skiprg”) in new stack
    [Jan 17 21:07:41] VERBOSE[20728] pbx.c: — Goto (macro-hangupcall,s,4)
    [Jan 17 21:07:41] VERBOSE[20728] pbx.c: — Executing [[email protected]:4] GotoIf(“SIP/500-0000000b”, “1?skipblkvm”) in new stack
    [Jan 17 21:07:41] VERBOSE[20728] pbx.c: — Goto (macro-hangupcall,s,7)
    [Jan 17 21:07:41] VERBOSE[20728] pbx.c: — Executing [[email protected]:7] GotoIf(“SIP/500-0000000b”, “1?theend”) in new stack
    [Jan 17 21:07:41] VERBOSE[20728] pbx.c: — Goto (macro-hangupcall,s,9)
    [Jan 17 21:07:41] VERBOSE[20728] pbx.c: — Executing [[email protected]:9] Hangup(“SIP/500-0000000b”, “”) in new stack
    [Jan 17 21:07:41] VERBOSE[20728] app_macro.c: == Spawn extension (macro-hangupcall, s, 9) exited non-zero on ‘SIP/500-0000000b’ in macro ‘hangupcall’
    [Jan 17 21:07:41] VERBOSE[20728] pbx.c: == Spawn extension (from-internal, h, 1) exited non-zero on ‘SIP/500-0000000b’

  12. matt Post author

    I assume you want DNID set to YES so that the number you dialled is passed to A2Billing? In the example you posted above the number to dial is being passed as ‘Unknown’, this isn’t correct.

    Please post your “Custom Dial String” on the custom trunk you setup.

    Also post the “a2billing” context you have setup in the file extensions_a2billing.conf (or similar file, not always in the same place depending what distro you’re running)

    Something is probably wrong in one of those places.

  13. Socotroco Santana

    Hi Matt,
    I assume you want DNID set to YES so that the number you dialled is passed to A2Billing? Yes

    Custom Dial String
    ——————
    Local/[email protected]/n
    —————————-

    “a2billing” context you have setup in the file extensions_a2billing.conf
    ————————————————————————-
    [a2billing]
    exten => _X.,1,Answer
    exten => _X.,2,Wait(1)
    exten => _X.,3,AGI(a2billing.php,1)
    exten => _X.,4,Wait(1)
    exten => _X.,5,Hangup

    [a2billing-callback]
    exten => _X.,1,AGI(a2billing.php,1,callback)
    exten => _X.,2,Hangup

    [a2billing-cid-callback]
    exten => _X.,1,Wait(1)
    exten => _X.,2,AGI(a2billing.php,1,cid-callback)
    exten => _X.,3,Hangup

    [a2billing-all-callback]
    exten => _X.,1,AGI(a2billing.php,1,all-callback,1) ;last parameter is the callback area code
    exten => _X.,2,Hangup

    [a2billing-predictivedialer]
    exten => _X.,1,AGI(a2billing.php,1,predictivedialer)
    exten => _X.,2,Hangup

    [a2billing-did]
    exten => _X.,1,AGI(a2billing.php,1,did)
    exten => _X.,2,Hangup

    [a2billing-voucher]
    exten => _X.,1,AGI(a2billing.php,1,voucher)
    ;exten => _X.,1,AGI(a2billing.php,1,voucher,1) ; will add 44 in front of the callerID for the CID authentication
    exten => _X.,2,Hangup

    [a2billing-sip]
    exten => _X.,1,AGI(a2billing.php,2)
    exten => _X.,2,Hangup
    —————————————-
    I’m using:
    Centos 5.5
    Asterisk 1.8.1.1
    FreePBX
    FreePBX 2.8.0.4
    A2billing 1.8.1
    —————————————-
    Thanks in advance,
    S. Santana

  14. matt Post author

    I think, despite the warning it generates, you should still be using DeadAGI. Try this from the docs for the a2billing context –

    [a2billing]
    exten => _X.,1,NoOp(A2Billing Start)
    exten => _X.,n,DeadAgi(a2billing.php,1)
    exten => h,1,Hangup

    (be careful that this may mess up other calls if you’re using the a2billing context for those as it doesn’tanswer the call first)

    Also, I haven’t moved to Asterisk 1.8 yet.

  15. adel

    hi matt thanks for ur tutorials its really helpful 🙂

    i faced problem with using a2billing system, ur tutorial worked with sip trunk but i am trying to use it with ZAP but it’s not working, any ideas ??

    thanks in advance

    Adel

  16. matt Post author

    Hi Adel,

    I’m afraid not. If the ZAP trunk works fine in FreePBX for normal calling then I’m not aware of any issues using it in A2Billing.

  17. Robert

    I would like to return to the problem from Socotroco Santana: “Hi,
    I did every thing in both tutorials:
    – Integrating FreePBX with A2Billing
    – Using A2Billing to account for extension calls in Elastix
    When I try to call system says “Please enter your pin number” x 3 times and hangup.

    I have the same problem.
    What I have found is that variable a2billing.php,1: [agi_accountcode] => is empty but it should be with the accountcode that is added to freepbx account.
    Any suggestions why accountcode is not passed from freepbx / in elastix/ to a2billing?

Comments are closed.