2016/02/05

Asterisk : The Cookbook 食譜 035 - a2billing

Q035: 如果我想在 Asterisk 之上再加裝 GUI 套件,請問有沒有什麼好建議?

比較流行的可能是 FreePBX, 另外我正在研讀的是 a2billing, 很多成功的案例通常都是在講 FreePBX, 其他像 AsteriskNOW, 及 PBX in a Flash 等專案也都是基於 FreePBX, 我們當然不會花太多心力在它們上面,主要原因有二,一個最主要原因是這些 GUI 套件都不怎麼提底層的 Asterisk 本身,第二個原因是要找這些 GUI 專案文件很容易,反而專門討論 Asterisk 的中文文件很少。

當然並不是說這些 GUI 專案不好,正因為有這些 GUI 套件才讓 Asterisk 成功起來。只是我想從基礎讀起而已。反過來說,對於一個想快速建立網路電話的人來說,相當建議您直接採用像 AsteriskNOW 這種使用 FreePBX 界面的專案套件來用。

這邊建議一個專案叫 a2billing, 它不止是 Asterisk 的 GUI 界面,而且提供完整的 VoIP 網路電話營運商解決方案。雖然如此,你也千萬別以為下載安裝了 a2billing 之後就可以安心當個網路電話運營商。

首先你可能要安裝一些套件,例如: perl-DBD-Pg subversion libapache2-mod-php5 php5 php5-common php5-cli php5-mysql mysql-server apache2 php5-gd openssh-server  php5-mcrypt python-setuptools python-mysqldb,總之,GUI 一般就是像這樣,透過 apache2 + php5 + Mysql
  1. 取得套件
    1. mkdir /usr/local/src/a2billing
    2. git clone https://github.com/Star2Billing/a2billing.git /usr/local/src/a2billing/
    3. cd /usr/local/src/a2billing
  2. 複製設定檔: cp a2billing.conf /etc/
  3. 更新相依套件
    1. curl -sS https://getcomposer.org/installer | php
    2. mv composer.phar /usr/local/bin/composer
    3. composer update && composer install
  4. 設定資料庫
    1. mysql -u root -p < DataBase/mysql-5.x/a2billing-createdb-user.sql
      這個步驟會產生底下資料庫資訊
      database name: mya2billing
      database user: a2billinguser
      user password: a2billing
    2. cd DataBase/mysql-5.x/ ; ./install-db.sh
    3. 驗證 
      1. mysql -u root -p mya2billing
        這一步會要求你輸入 MySQL 的 root 密碼,請自行根據設定登入
      2. mysql> show tables;
        這一步可以看到相當多表格,以我的來看是 97 個
      3. mysql> exit
    4. 修改 /etc/a2billing.conf,修改 [database] 節即可,如下
          [database]
          hostname = localhost
          port = 3306
          user = a2billinguser
          password = a2billing
          dbname = mya2billing
          dbtype = mysql
      
    5. 新增設定檔:
          touch /etc/asterisk/additional_a2billing_iax.conf
          touch /etc/asterisk/additional_a2billing_sip.conf
          echo \#include additional_a2billing_sip.conf >> /etc/asterisk/sip.conf
          echo \#include additional_a2billing_iax.conf >> /etc/asterisk/iax.conf
      
    6. 安裝音頻檔
      1. cd /usr/local/src/a2billing/addons/sounds
      2. ./install_a2b_sounds.sh
    7. 安裝 agi-bin
      1. cd /usr/local/src/a2billing
      2. cp -a AGI/*.php common/lib /var/lib/asterisk/agi-bin/
    8. 安裝網頁界面:
      1. 將必要的檔案複製/或移動到現有的 apache DocumentRoot 下
        1. mkdir /var/www/html/a2billing
        2. mv admin  agent  common  customer vendor  webservice /var/www/html/a2billing/
    9. 新增撥號計劃 /etc/asterisk/extensions.conf
          [a2billing]
          include => a2billing_callingcard
          include => a2billing_monitoring
          include => a2billing_voucher
          [a2billing_callingcard]
          ; CallingCard application
          exten => _X.,1,NoOp(A2Billing Start)
          exten => _X.,n,DeadAgi(a2billing.php|1)
          exten => _X.,n,Hangup
          [a2billing_voucher]
          exten => _X.,1,Answer(1)
          exten => _X.,n,DeadAgi(a2billing.php|1|voucher)
          ;exten => _X.,n,AGI(a2billing.php|1|voucher44) ; will add 44 in front of the callerID for the CID authentication
          exten => _X.,n,Hangup
          [a2billing_did]
          exten => _X.,1,DeadAgi(a2billing.php|1|did)
          exten => _X.,2,Hangup
    10. 增加 crontab, 請自行編譯,例如透過 crontab -e
       0 6 * * * php /usr/local/src/a2billing/Cronjobs/currencies_update_yahoo.php
      0 6 1 * * php /usr/local/src/a2billing/Cronjobs/a2billing_subscription_fee.php
      0 * * * * php /usr/local/src/a2billing/Cronjobs/a2billing_notify_account.php
      0 2 * * * php /usr/local/src/a2billing/Cronjobs/a2billing_bill_diduse.php
      0 12 * * * php /usr/local/src/a2billing/Cronjobs/a2billing_batch_process.php
      0 6 * * * php /usr/local/src/a2billing/Cronjobs/a2billing_batch_billing.php
      */5 * * * * php /usr/local/src/a2billing/Cronjobs/a2billing_batch_autodialer.php
      0 * * * * php /usr/local/src/a2billing/Cronjobs/a2billing_alarm.php
    11. 手動增加 log files:
      mkdir /var/log/a2billing; cd /var/log/a2billing
      touch cront_a2b_alarm.log
      touch cront_a2b_autorefill.log
      touch cront_a2b_batch_process.log
      touch cront_a2b_archive_data.log
      touch cront_a2b_bill_diduse.log
      touch cront_a2b_subscription_fee.log
      touch cront_a2b_currency_update.log
      touch cront_a2b_invoice.log
      touch cront_a2b_check_account.log
      touch a2billing_paypal.log
      touch a2billing_epayment.log
      touch a2billing_api_ecommerce_request.log
      touch a2billing_api_callback_request.log
      touch a2billing_api_card.log
      touch a2billing_agi.log
      cd /usr/local/src/a2billing
    12. 修改權限
      1. chown -R asterisk.asterisk /etc/asterisk /var/{log,run,lib,spool}/asterisk /var/log/a2billing /usr/local/src/a2billing /var/www/html/a2billing
      2. find /etc/asterisk /var/lib/asterisk /usr/local/src/a2billing -type d -exec chmod 777 {} \;
      3. 如果您發現網頁看不到或是其它怪怪的時候,很可能就是權限沒設定好,包括這邊寫的可能有遺漏, apache2 也要檢查
    13. 安裝 daemon
      1. cd /usr/local/src/a2billing/CallBack/callback-daemon-py/
      2. easy install sqlalchemy
      3. cp -a callback_daemon/a2b-callback-daemon.debian /etc/init.d/a2b-callback-daemon
      4. chmod a+x /etc/init.d/a2b-callback-daemon
      5. 如果要開機自動執行,請執行:
        update-rc.d a2b-callback-daemon  defaults
      6. tar zxf dist/callback_daemon-1.0.prod-r1528.tar.gz -C /tmp
      7. cd /tmp/callback_daemon-1.0.prod-r1528/
      8. touch callback_daemon/__init__.py
      9. python setup.py build &&python setup.py bdist_egg && python setup.py install --prefix=/usr
      10. easy_install dist/callback_daemon-1.0.prod_r1528-py2.7.egg
    14. 重新啟動系統
      1. 其實可以透過 service 重啟即可,但是因為我在寫這道食譜時亂試一通,系統後來怪怪的,重新啟動後又一切正常
      2. 需要重新啟動的或許是底下幾個
        1. mysql
        2. apache2
        3. asterisk
        4. a2b-callback-daemon
    15. 測試
      用瀏覽器瀏覽 http://localhost/a2billing/admin/