转 a2billing

转 a2billing

A2Billing 安裝篇 http://www.osslab.com.tw/VoIP/IP_PBX/%e8%bb%9f%e9%ab%94%e5%bc%8f_IP_PBX/Asterisk/Addons/A2Billing_%e5%ae%89%e8%a3%9d%e7%af%87

A2Billing 管理篇
    http://www.osslab.com.tw/VoIP/IP_PBX/%e8%bb%9f%e9%ab%94%e5%bc%8f_IP_PBX/Asterisk_-_%e5%85%8d%e8%b2%bb_IP_PBX_%e7%b6%b2%e8%b7%af%e9%9b%bb%e8%a9%b1%e4%ba%a4%e6%8f%9b%e5%b9%b3%e5%8f%b0/Addons/A2Billing_%e7%ae%a1%e7%90%86%e7%af%87
    1. 1. 前言
    2. 2. 初始化設定
    3. 3. 應用一:國際電話卡模式
    4. 4. 應用二:DID 轉接業務
    5. 5. 應用三:預付制、月付制會員模式
    6. 6. 應用四:整合 FreePBX 的應用
    7. 7. 應用五:Caller ID 認證模式
    8. 8. F.A.Q
      1. 8.1. Q:如何大量刪除 Customers?
      2. 8.2. Q:如何大量刪除 VoIP Settings?
      3. 8.3. Q:如何變更系統預設幣別 USD
      4. 8.4. Q:匯入 ratecard 時總是出現錯誤 ERROR: file type is not allowed: application/force-download
      5. 8.5. 相關連結
      6. 8.6. 發現 Bug

    前言

    A2Billing 是目前社群開發最熱門的計費系統套件,因為是開放原始碼授權所以可以合法免費使用。

    本篇主要在是教導如何使用這套件,若還沒完成安裝的朋友,請先前往閱讀 A2Billing 安裝篇。

    初始化設定

    系統在完成安裝後,第一個所要做的設定有:

    // FreePBX UI > Trunks

    新增 Outbound Trunk,本篇以 Voxalot 為例。

    Outgoing Settings
    Trunk Name = voxalot

    host=us.voxalot.com
    username=<sip_number>
    fromuser=<sip_number>
    secret=<sip_pass>
    fromdomain=voxalot.com
    nat=yes
    insecure=port,invite
    qualify=yes
    canreinvite=yes
    dtmfmode=auto
    disallow=all
    allow=ulaw&alaw
    type=peer
    context=from-trunk

    新增 Inbound Trunk,這個主要在展示國際電話卡及 DID 轉接的應用,本篇以 iptel 為例。

    Outgoing Settings
    Trunk Name: iptel

    username=<sip_username>
    type=friend
    secret=<sip_pass>
    qualify=yes
    insecure=port,invite
    host=iptel.org
    fromuser=osslab
    fromdomain=iptel.org
    context=a2billing
    

    Register String: <sip_username>:<sip_pass>@iptel.org/<sip_number>

    注意:context 必須是 a2billing

    // A2Billing Admin UI > Trunk > Create Provider

    provider name = VOXALOT_PROVIDER
    description = Voxalot Provider

    // A2Billing Admin UI > Trunk > Add Trunk

    voip-provider = VOXALOT_PROVIDER
    label = VOXALOT_TRUNK
    add prefix = 空白
    provider tech = SIP
    provider ip = voxalot
    status = Active

    TIPs:

    provider ip 必須與 FreePBX 的 trunk name 相同

    // A2Billing Admin UI > Ratecard > Create call plan

    name = VOXALOT_CALLPLAN
    remove inter prefix = YES

    TIPs:

    remove inter prefix = YES 若撥號有包含 00 或 011 開頭的國際冠碼,在套用 ratecard 的規則前會被去除。

    // A2Billing Admin UI > Ratecard > Create new ratecard

    tariffname = VOXALOT_RATECARD
    trunk = VOXALOT_TRUNK
    description = through voxalot trunk

    // A2Billing Admin UI > Ratecard > Add Rate

    ratecard = VOXALOT_RATECARD
    dialprefix = 1800
    destination = US-Tollfree
    buying rate = 1
    buyrate min duration = 6
    buyrate billing block = 6
    selling rate = 1.5
    sellrate min duration = 60
    sellrate billing block = 60
    trunk = VOXALOT_TRUNK

    TIPs:

    * dialprefix 若撥號規則符合,會以此費率計算
    * destination 用來敘述此費率的區域

    //新增 rate 後要再回到 call plan 將 rate card 加入到 call plan
    A2Billing Admin UI > Ratecard > List Call Plan > Edit: VOXALOT_CALLPLAN

    ratecard = 選擇 VOXALOT_RATECARD, Add Ratecard

    應用一:國際電話卡模式

    客戶操作流程:
    ① 使用手機或一般電話機撥打系統號碼(Access Number)

    ② 語音提示:輸入電話卡號+#

    ③ 語音提示餘額,輸入目的地電話號碼(00+國碼+區碼+電話號碼+#)

    // A2Billing Admin UI > Customers > Create Customers

    card number = <隨機產生>
    card alias = <隨機產生>;web 登入帳號
    webui password = <隨機產生>;web 登入密碼
    balance = 50.0;不可為零,且必須以 USD 計算
    call plan = VOXALOT_CALLPLAN
    activated = YES
    simultaneous access = INDIVIDUAL ACCESS
    card type = PREPAID CARD
    country = TAIWAN
    sip account = NO
    iax account = NO

    實際操作:

    因為本篇實做是以 iptel 的號碼作為系統號碼,所以用其他 IPTel 帳號撥入系統號碼,系統會提示語音:請輸入 card number,將剛剛新增的卡號輸入,完成後按#,若正確,系統會提示餘額及可用通話時間,並提示:請輸入目的地電話號碼,將完整電話號碼 011 + 國碼 + 區碼 + 電話號碼 輸入,完成後按#。

    TIPs:

    * 新增電話卡(Customer),有一些主要的設定,例如 card number, card alias, password,這些是由系統隨機產生,且沒有任何規則,hacker 無法事先計算出這些資訊。
    * 附加在 card number 的 另一組代號 alias,這個號碼或 email 地址都可以用來登入用戶的網頁,密碼就是 webui password。
    * 若用戶撥號時有加 00,請注意 Call PlanREMOVE INTER PREFIX 建議設為 YES,以避免 outbound 路由錯誤。

    應用二:DID 轉接業務

    A2Billing 提供 DID 接駁至經由 outbound trunk 的外部號碼、SIP URI、

    // A2Billing Admin UI > DID > Add DID Group

    name = DID TWN

    // A2Billing Admin UI > DID > Add DID

    DID = 99474
    billing = only dialout rate
    DID group = DID TWN
    country = TAIWAN
    activated = YES
    monthly rate = 0

    // A2Billing Admin UI > Customers > Create Customers

    balance = 50.0
    call plan = VOXALOT_CALLPLAN
    didgroup = DID TWN
    activated = YES
    card type = PREPAID CARD
    country = TAIWAN
    sip account = NO
    iax account = NO

    設定轉接的目的號碼,可以透過 Admin UI 或 Customer UI 來作
    客戶自行購買 DID 號碼
    // A2Billing Customer UI > DID

    select country = TAIWAN
    select virtual phone number = 99474
    voip call = NO
    destination = 8864123456

    TIPs:

    * select country 這裡內容會與 DID 的 country 相同
    * 若沒有出現 DID number 可選擇,請檢查所登入的 customer 帳號的 DIDGROUP 是否正確
    * voip call 若是 NO,輸入外部的 PSTN/SIP 號碼;若是 YES,輸入 SIP URI。

    管理員分配 DID 號碼給指定的客戶
    // A2Billing Admin UI > INBOUND DID > Destination

    destination = 8864123456
    customer ID = 選擇適當的 customer
    DID = 選擇適當的 DID
    activated = yes
    validated = 皆可
    voip_call = no

    TIPs:

    * voip call 若是 NO,輸入外部的 PSTN/SIP 號碼;若是 YES,輸入 SIP URI。

    * 若需 DID 接入內部分機號碼(不經過 A2B 的 trunk),可以這樣設
    -- destination = Local/101@from-internal (適用 FreePBX 的分機 101)
    -- destination = SIP/123456 (適用 A2Billing card number 123456)
    -- voip_call = yes

    * 如果 destination number 要走 A2B 的 trunk,不管該 trunk 是 SIP 或 Zaptel,voip_call 必須是 no。

    相關文章連結:

    • Elastix Forum :: Inbound DID Billing for A2Billing

    應用三:預付制、月付制會員模式

    用戶操作流程:
    ① 用戶使用 X-Lite 或 ATA 設備透過網路註冊為分機。

    ② 直接撥目的地電話號碼,例如 886+XXXXXXXX,886 是國碼。
    過程中不會有任何額外的提示音,就像一般的 SIP 分機操作相同。

    // A2Billing Admin UI > Customers > Create Customers

    card number = <隨機產生>
    card alias = <隨機產生>;web 登入帳號
    webui password = <隨機產生>;web 登入密碼
    balance = 50.0;不可為零,且必須以 USD 計算
    call plan = VOXALOT_CALLPLAN
    activated = YES
    simultaneous access = INDIVIDUAL ACCESS
    card type = PREPAID CARD
    country = TAIWAN
    sip account = YES
    iax account = YES

    TIPs:

    * 這裡與(應用一)模式設定相同,只差在 sip/iax account 為 YES。
    * 新增 customer 後,要 reload Asterisk 後,SIP 用戶端才能註冊使用。

    // 取消 "輸入目的地號碼" 及其他提示音
    // A2Billing Admin UI > System Settings > Global List
    如果這裡的所有項目沒有 GROUP 為 agi-conf2 的(可善用 GROUP 搜尋功能),請先前往 Add agi-conf > CREATE AGI-CONF2

    回到 Global List 找到 GROUP 為 agi-conf2 且 KEY/VALUE 按以下所述修改:

    use_dnid = yes

    這個SIP帳號除了要撥外部的路由外,如果還要撥內部的其他 SIP 分機號,需要繼續下面的修改:

    sip_iax_friends = yes
    sip_iax_pstn_direct_call_prefix = 555
    sip_iax_pstn_direct_call = yes

    ※是否要提示餘額的語音

    say_balance_after_auth = no
    say_timetocall = no

    如果電話不通,不要提示輸入目的地號碼的語音

    number_try = 1

    TIPs:

    * 參數說明:

    - Use DNID : YES 表示使用 DNID,並且不會提示 輸入目的地電話號碼的語音
    - SIP Call = yes, SIP Call Prefix, Direct Call: 這三個參數是用來使 SIP 註冊帳號後,也能撥其他分機號碼,撥法為 555+SIP Extension
    - Say Balance After Auth: 認證後是否提示餘額
    - Say Duration: 是否提示剩餘通話時間

    - 另一種比較快速的設定是:play_audio = no, use_dnid=yes, number_try=1。

    //為此模式新增 dialplan
    //編輯 /etc/asterisk/extensions_a2billing.conf,在底下加入:

    [custom-a2billing-sipclient]
    exten => _X.,1,Answer
    exten => _X.,n,Wait(1)
    exten => _X.,n,deadAGI(a2billing.php|2)
    exten => _X.,n,Hangup
    

     

    // 在 A2Billing 套用新增的 dialplan
    // A2Billing Admin UI > Customer > VoIP Settings
    找到 SIP 分機項目,按編輯

    Context = custom-a2billing-sipclient

    // 最後,執行指令套用所有的修改

    # asterisk -rx "reload"

    TIPs:

    由於版本 1.7.x 的 bug 關係,在 UI 做完操作後,並不會同步修改 asterisk 的設定檔,所以請依照方式作手動修改:
    編輯 /etc/asterisk/additional_a2billing_sip.conf ,修改 context 的內容。
    要避免每次都要作手動修改,可以參考 F.A.Q 的方法。

    應用四:整合 FreePBX 的應用

    用途:FreePBX 的分機用戶,在 Outbound Calling 時可以透過 A2Billing 來計費,但其他原有PBX的功能都不會有影響。

    // 編輯 /etc/asterisk/extensions_custom.conf

    [macro-dialout-trunk-predial-hook]
    exten => s,1,GotoIf($["${OUT_${DIAL_TRUNK}:4:4}" = "A2B/"]?custom-freepbx-a2billing,${OUTNUM},1:2)
    exten => s,2,MacroExit
    
    [custom-freepbx-a2billing]
    exten => _X.,1,DeadAGI(a2billing.php,${OUT_${DIAL_TRUNK}:8})
    exten => _X.,n,Hangup()
    

     

    // FreePBX UI > Trunks > Add Custom Trunk

    Custom Dial String = A2B/2

    Tips:

    2 代表是 agi-conf 2

    // FreePBX UI > Outbound Routes
    自行設定需要的參數,並導向剛剛的 Trunk。

    // FreePBX UI > Extensions
    在需要計費的分機設定裡,參數 accountcode 填入 A2Billing 的 Card Number。

    Tips:

    分機在外撥的路由規則,除了 outbound route 外,還要考慮 A2Billing 的,也就是 RATES 的相關設定。

    延伸閱讀

    • Using A2Billing to account for extension calls in Elastix (A2Billing 1.3.x)

    應用五:Caller ID 認證模式

    用途:設定電話卡時除了使用輸入卡號的認證方式以外,還能以來電號碼(Caller ID) 辨識來認證。

    • 啟用 Caller ID 後,用戶不需要先輸入卡號,就可以直接撥目的地號碼。
    • 一個卡號可以設定一組或多組的來電號碼。
    • 使用 Admin UI 來管理來電號碼。
    • 一旦啟用後,當用戶的來電號碼並非系統所允許時,系統會提示卡號的認證的方式。

     

    // 啟用方式
    A2Billing Admin UI > Syetem Settings >

    以 agi-conf 的方式來設,可以很容易啟用/關閉這功能,需要用到的參數(Key)如下:

    • cid_enable = yes ;yes 啟用,no 關閉,預設是關閉的
    • cid_askpincode_ifnot_callerid = yes ; 預設 yes,若 CID 認證失敗,系統會提示輸入 Card Number。
    • cid_auto_assign_card_to_cid = yes ; 預設 yes,用戶撥入系統後,如果 CID 認證失敗,系統會提示輸入 Card Number,一旦用戶輸入資訊正確,系統會自動新增 CID,以致於該用戶下次再撥入時,就可以通過 CID 認證,且不會再提示輸入 Card Number。
    • cid_auto_create_card = no

    // 新增 Caller ID

    A2Billing Admin UI > Customers > Caller-ID

    CallerID = <用戶的來電號碼>
    Activated = yes
    ID Card = <選擇卡號>

    F.A.Q

    Q:如何大量刪除 Customers?

    Ans: A2Billing UI > Customers > Add::Search > Search Customers

    設定搜尋條件 > 按 Search > 再按旁邊的 Delete All

    注意:這個方法無法將 VoIP Setting 一併刪除。

    Q:如何大量刪除 VoIP Settings?

    Ans: 目前沒有合適的作法。

    Q:如何變更系統預設幣別 USD

    Ans: 要改兩個地方,修改 base_currency 的參數及更新 currency list。

    1. A2Billing UI > System Settings > Global List
      搜尋 GROUP = global, Key = base_currency
      base_curreny = twd
    2. 即使修改了幣別,系統預設的 currency list 仍是以美金 1:1 計算,所以必須修改這個匯率對照表為 TWD 1:1。
      A2Billing UI > BILLING > Currency List > CLICK HERE TO UPDATE NOW
    Q:匯入 ratecard 時總是出現錯誤 ERROR: file type is not allowed: application/force-download

    Ans: 將副檔名 csv 改成 txt。

    相關連結
    • Asterisk: optimizing a2billing mysql database with more than 1,000,000 rates in cc_ratecard
    • 一些有用的教學(英文)
    發現 Bug

     

    版本 問題描述
    1.7.0/1 修改 VoIP Settings 的 內容,不會同步更新 Asterisk 設定
    Ans:這是因為 A2Billing 預設是啟動了 Realtime Asterisk 模式(Asterisk 以資料庫型式儲存設定),若只是檢查 *.conf 來判斷 Asterisk 是否更新是不準確的,然而這 bug 卻造成 A2Billing 無法以 relatime 模式更新 Asterisk。暫時的解決方法是使 A2Billing 關閉 realtime asterisk 模式,恢復成 *.conf 方式來更新 asterisk,步驟如下:

    A2Billing UI > System Settings > Global List
    搜尋 GROUP = global

    use_realtime = no (預設為 yes)

    Notes: 當關閉了 Realtime 後,爾後若有新增/編輯 VoIP Settings 時,在 CONFIRM DATA 之後,需要在作以下步驟完成 Asterisk 的更新:

    1. 點選 GENERATE ADDITIONAL_A2BILLING_SIP.CONF
    2. click here to reload your asterisk server
    1.7.0 新增 CUSTOMER 時,若 balance 欄位維持預設的 0,仍可以存檔
    Ans: 這項不確定是否為 bug,但在 1.3.x 穩定版,存檔前系統會檢查 balance 不可為 0。
    1.7.0 若建立電話卡是有 SIP 註冊帳號的,刪除這個電話卡後,SIP 終端仍可以註冊,但已無法正常撥出。
    1.7.0 在 Customer UI 的 DID 功能,操作 Release DID,按下 Release 後,雖然 DID 有 release,但畫面會成空白頁。
    1.7.0 在 Customer UI 的 DID 功能,從項目列表中刪除 destination number 時,所有欄位的值會出現空白,再按下 Delete 後,雖然資料仍會刪除,但需要再做一次 Release DID。

    你可能感兴趣的:(转 a2billing)