Raspberry PiでPBXとFAXの構築 - PBXのセットアップ

投稿 2024/06/16 | パソコン | hotall

すべての機器を接続して、以降のインストールをしていきます。




さて、いよいよ電話システムの中核となるPBXをインストールします。




PBXとしてセットアップするのはAsteriskです。
オープンソースのPBXとしては最も使われているソフトウエアなので、ネットを検索すれば多くの情報を得ることができます。

インストールは他のLinuxソフトウェアと同様にAPTリポジトリからダウンロード・インストールできます。

インストール後は、各コンフィギュレーションファイルに必要な定義を行います。

この文書は個人的なものであり、内容について一切の責任を負いかねます。



Asteriskのインストール

sudo apt-get install asterisk

Asteriskのコンフィギュレーション

言語・ロケールの定義
ローカライズの指定を行います。
留守録(VoiceMail)で日本語のファイル(ディレクトリ)が使われるよう指定します。

ファイルパス:/etc/asterisk/asterisk.conf

設定内容:
[options]
languageprefix = yes
defaultlanguage = ja

SIPの定義
親SIPサーバーや子機との通信パラメーターを定義します。

ファイルパス:/etc/asterisk/pjsip.conf

設定内容:
・ひかりモデムSIPサーバーとの接続定義:
[hikari-trans]
type=transport
protocol=udp
bind=192.168.1.10:5060

[hikari-denwa]
type=registration
transport=hikari-trans
outbound_auth=hikari-trunk
server_uri=sip:192.168.1.1
client_uri=sip:3@192.168.1.1
retry_interval=60

[hikari-trunk]
type=auth
auth_type=userpass
password=<ひかりモデムに登録したパスワード>
username=0003

[hikari-trunk]
type=aor
contact=sip:192.168.1.1

[hikari-trunk]
type=endpoint
transport=my-transport
context=from-hikari
disallow=all
allow=ulaw
outbound_auth=hikari-trunk
aors=hikari-trunk
direct_media=no
from_user=3
from_domain=192.168.1.1
dtmf_mode=inband

[hikari-trunk]
type=identify
endpoint=hikari-trunk
match=192.168.1.1
192.168.1.10はRaspberryPiのひかりモデム側のIPアドレスに合わせてください。
3@192.168.1.1はひかり電話RV-230SEの設定で定義した内線番号@SIPサーバーに合わせてください。
0003はひかり電話RV-230SEの設定で定義したユーザーIDに合わせてください。


・子機共通のトランスポート定義:既存の定義のコメントアウトを外します。
[internal-trans]
type=transport
protocol=udp ;udp,tcp,tls,ws,wss
bind=192.168.0.10:5060
192.168.0.10はRaspberryPiのLAN側のIPアドレスに合わせてください。

・子機の定義:transport以外のendpoint,auth,aorの3つを定義します。
  • 接続する子機(スマホやIP電話機)毎に定義します。
  • 下記は子機(1001)1台を定義しています。
[1001]
type=endpoint
context=from-internal
disallow=all
allow=ulaw
transport=internal-trans
auth=1001
aors=1001
rtp_symmetric = yes
rewrite_contact = yes
direct_media = no
fax_detect=yes

[1001]
type=auth
auth_type=userpass
password=<子機接続認証用の任意のパスワード>
username=1001

[1001]
type=aor
max_contacts=1
remove_existing=yes
1001は子機の内線番号に合わせてください。

ダイヤルプランの定義
発信・着信時の動作を定義します。

ファイルパス:/etc/asterisk/extensions.conf

設定内容:

・定数の定義
[globals]
NTTNUMBER=<自局電話番号>
SPEAKINGCLOCK=3117
ECHOTEST=3333
VOICEMAILMENU=5000
5000は留守電の内線番号で、後述「留守電の定義」の内容に合わせてください。
3117は時刻、3333はエコーテストの任意の内線番号を設定してください。


・ひかり電話(外線)からの着信
  • 全ての子機を一斉に20秒間呼び出します。
  • 何れの子機も受話しない場合、留守電を起動します。
  • FAXを検出した場合、これを受信します。
; Receive from hikari
[from-hikari]
exten => s,1,Dial(PJSIP/1001&PJSIP/1002,20,Tt)
same => n,Answer()
same => n,Wait(1)
same => n,Voicemail(5000)
same => n,Hangup
; Receive fax data
exten => fax,1,Dial(IAX2/iaxmodem)
same => n,Hangup
1001と1002は子機名で、実際の構成に合わせてください。前述”子機の定義”のセクション名に対応します。
iaxmodemは後述"FAXサーバー/IAXmodemとの通信(iax)の定義"のセクション名に対応します。


・内線から発信(内戦、外線、その他機能)
  • 要求先に応じた子機を呼び出します。
  • 国際電話は無視します。
  • 0から始まる番号は外線に対して呼び出します。
  • その他の機能(時刻読上げ、エコーテスト、留守電操作)に対応する番号については、これを行います。
; Receive from internal
[from-internal]
exten => 1001,1,Dial(PJSIP/1001,,Tt)
same => n,Hangup
exten => 1002,1,Dial(PJSIP/1002,,Tt)
same => n,Hangup

; Disable international call
exten => _001,1,Playback(vm-goodbye)
same => n,Hangup

; to outer
exten => _0.,1,Set(CALLERID(num)=${NTTNUMBER})
same => n,Set(CALLERID(name)=${NTTNUMBER})
same => n,Dial(PJSIP/${EXTEN}@hikari-trunk)

; Speaking Clock
exten => ${SPEAKINGCLOCK},1,Answer()
same => n,Wait(1)
same => n,Set(FutureTime=$[${EPOCH} + 5])
same => n,SayUnixTime(${FutureTime},Japan,bdAPIM)
same => n,Playback(jp-desu)
same => n,playback(beep)
same => n,Hangup

; Echo Test
exten => ${ECHOTEST},1,Answer()
same => n,Wait(1)
same => n,Playback(demo-echotest)
same => n,Playback(beep)
same => n,Echo
same => n,Playback(demo-echodone)
same => n,Playback(vm-goodbye)

; VoiceMail Menu
exten => ${VOICEMAILMENU},1,Answer()
same => n,Wait(1)
same => n,VoicemailMain(5000,s)
same => n,Hangup
5000は留守電の内線番号で、後述「留守電の定義」の内容に合わせてください。
ここでは子機は1001と1002ついて定義していますが、実際の運用に合わせてください。


・FAX送信
  • 国際電話は無視します。
  • 0から始まる番号は外線に対して呼び出します。
[fax-out]
; Disable international call
exten => _001,1,Playback(vm-goodbye)
same => n,Hangup
exten => _0.,1,Set(CALLERID(num)=${NTTNUMBER})
same => n,Set(CALLERID(name)=${NTTNUMBER})
same => n,Dial(PJSIP/${EXTEN}@hikari-trunk,300,T)
same => n,Hangup

通話操作/取次転送の定義
ファイルパス:features.conf

設定内容:
  • 通話中に"*1"ボタンを押すと、直後に指定した内線にブラインド(転送先と会話なしに)転送します。
  • 通話中に"#"ボタンを押すと、直後に指定した内線に仲介転送します。
[featuremap]
blindxfer => *1 ; direct transfer
atxfer => # ; transfer

FAXサーバー/IAXmodemとの通信(iax)の定義

ファイルパス:/etc/asterisk/iax.conf

定義内容:

・一般定義
[general]
bindport=4569
iaxcompat=yes
language=jp
bandwidth=medium
disallow=all
allow=ulaw
allow=alaw
allow=slinear
allow=gsm
jitterbuffer=no
maxregexpire=300
autokill=yes
"maxregexpire"はソフトウェアモデムのセットアップのIAXmodemのコンフィギュレーション"refresh"に合わせてください。

・FAX用ソフトウェアモデム(IAXmodem)との通信の定義
[iaxmodem]
type=friend
username=iaxmodem
secret=iaxmodemの認証パスワード
host=dynamic
disallow=all
allow=ulaw
allow=alaw
;allow=slinear
allow=gsm
requirecalltoken=no
context=fax-out
iaxmodemはIAXmodemの認証用ユーザーIDです。secretと同様にソフトウェアモデムのセットアップIAXmodemのコンフィギュレーションに合わせてください。

モジュールロード抑制の定義
使用しない機能のモジュールをロードしないように定義します。
これをしないと、廃止されたモジュールをロードしようとしたり、使用しないプロトコルを使おうとしたりでログにエラーが出力されます。

ファイルパス:/etc/asterisk/modules.conf

設定内容:

下記定義を追加します。
[modules]
・・・
noload => res_config_ldap.so
noload => chan_sip.so
noload => chan_mgcp.so
noload => res_monitor.so
noload => res_adsi.so
noload => app_adsiprog.so
noload => app_url.so
noload => app_nbscat.so
noload => app_getcpeid.so
noload => app_macro.so
noload => app_ices.so
noload => app_image.so
noload => res_pjsip_publish_asterisk.so
noload => chan_skinny.so
noload => cel_sqlite3_custom.so
noload => cdr_sqlite3_custom.so
noload => cel_tds.so
noload => cdr_pgsql.so
noload => cdr_radius.so
noload => cel_radius.so
noload => cdr_tds.so
noload => chan_unistim.so
noload => pbx_dundi.so
noload => res_hep_rtcp.so
noload => res_hep_pjsip.so

留守電の定義
留守電(VoiceMail)の動作を指定します。

ファイルパス:/etc/asterisk/voicemail.conf

設定内容:

下記定義を追加します。
[general]
format=wav49
attach=yes
maxmsg=100
maxsecs=120
maxgreet=60
skipms=3000
maxsilence=10
silencethreshold=128
maxlogons=3
charset=UTF-8
emailsubject=[PBX]: 留守電に新着メッセージが入りました。--- ${VM_NAME}/${VM_MAILBOX} ---
emailbody=自宅の留守番電話(${VM_NAME})からのお知らせです。:\n\n\t新しいメッセージが入りました。\n\t\t着信日時:${VM_DATE}\n\t\t録音時間:${VM_DUR}\n\t\t発信元:${VM_CALLERID}\n\n\tメールボックス(内線:${VM_MAILBOX})には${VM_MSGNUM}件のメッセージがあります。\n\t--- ${VM_NAME}/${VM_MAILBOX} ---
${VM_MSGNUM})\nin mailbox ${VM_MAILBOX} from ${VM_CALLERID}, on ${VM_DATE},\n${IF($["${VM_CIDNUM}" = "${ORIG_VM_CIDNUM}"]?so:(originally sent by ${ORIG_VM_CALLERID} on ${ORIG_VM_DATE})\nso)} you might want to check it when you get a chance. Thanks!\n\n\t\t\t\t--Asterisk\n
emaildateformat=%Y/%m/%d %r
pagerdateformat=%A, %B %d, %Y at %r
mailcmd=/usr/sbin/sendmail -t
sendvoicemail=yes ; Allow the user to compose and send a voicemail while inside

[zonemessages]
eastern=America/New_York|'vm-received' Q 'digits/at' IMp
central=America/Chicago|'vm-received' Q 'digits/at' IMp
central24=America/Chicago|'vm-received' q 'digits/at' H N 'hours'
military=Zulu|'vm-received' q 'digits/at' H N 'hours' 'phonetic/z_p'
european=Europe/Copenhagen|'vm-received' a d b 'digits/at' HM
japan=Japan|Q PHM 'jp-ni' 'vm-received'

[default]
5000 => 1234,Rusuden,<通知先メールアドレス>,,attach=yes|tz=japan|locale=ja_JP.UTF-8
5000は留守電に付ける任意の内線番号で、ダイヤルプランの定義で指定します。
emailsubject、emailbodyは通知メールの件名や本文を自由に定義します。


日本語音声のインストール

留守電の日本語音声メッセージは、Asteriskのインストールに含まれていません。
決められたファイル名、フォーマットであれば、自身で用意して置き換えることが可能です。
asteriskのサイトには日本語のファイルがアップされていますので、今回はこれを使用します。

音声データ入手先
サイトアドレス:http://downloads.asterisk.org/pub/telephony/sounds/
ファイル名:asterisk-core-sounds-ja-gsm-current.tar.gz

解凍して配置
配置先:/usr/share/asterisk/sounds/にjaディレクトリを作成して、解凍したすべてのファイルを配置
フォルダ名:jaは前述「言語・ロケールの定義」で指定した値に対応します。

コマンド
cd usr/share/asterisk/sounds
sudo mkdir ja
cd ja
sudo wget http://downloads.asterisk.org/pub/telephony/sounds/asterisk-core-sounds-ja-gsm-current.tar.gz
sudo tar xvzf asterisk-core-sounds-ja-gsm-current.tar.gz

Asteriskの起動(再起動)

sudo service asterisk restart

Asteriskの起動の確認

sudo service asterisk status
active (running)になっていれば、無事起動しています。

Asteriskの自動起動登録

sudo systemctl enable asterisk

SIPクライアント(子機)のセットアップ
PBXのセットアップが終わると、後はSIPクライアントをセットアップすれば、これを使って通話ができます。

私は、Androidスマートホンと固定電話タイプのVoIP機器を繋ぎました。

当初はスマートホンだけでもいいかなと思っていましたが、AndroidOSがディープスリープするようになって、その間はアプリも完全に無反応になり、着信できない問題が発生しました。
アプリの設定で、ディープスリープを抑制することもできますが、バッテリーの持ちと引き換えになってしまいます。

外で自宅の電話を受ける必要性もあまりないので、スマホでの着信の確実性をあきらめ、自宅に固定電話タイプの機器を設置するのが最善と判断しました。

Android SIPクライアントアプリのセットアップ
無料で使えるSIPクライアントアプリはいくつかあります。わたしはMIZUDROIDを使いました。
他のアプリでも同様に設定できると思います。

・ログイン情報を設定します。


192.168.0.10はRaspberryPiのLAN側のIPアドレスに合わせてください。
1002とPasswordは子機のusername, passwordに合わせてください。


・アプリの活動頻度を設定します。


項目を設定すると、それに合わせた複数の項目が自動的に設定されます。
私は通常、"Auto-adapt"を設定していますが、これだとディープスリープを抑制できないので、着信を取りこぼすことがあります。
必用に応じて、"Always Runninng"に切り替えています。着信の取りこぼしはなくなりますが、バッテリーは消費します。


固定電話タイプのVoIP機器のセットアップ
わたしはPanasonicのKX-123Nを使いました。
他の機器も同様に設定できると思います。

webサーバーを有効([設定]モードで#534をキーイン)にして、PC等のブラウザーから接続(KX-123NのIPアドレス)します。


192.168.0.10はRaspberryPiのLAN側のIPアドレスに合わせてください。
1001とパスワードは子機のユーザ名、パスワードに合わせてください。




■ 目次 ■
  1. 構成
  2. ひかり電話RV-230SEの設定
  3. OSのセットアップ
  4. LANアダプタの接続
  5. ユーティリティのセットアップ
  6. ▶PBXのセットアップ
  7. ソフトウェアモデムのセットアップ
  8. FAXのセットアップ
  9. 自動再起動
  10. ステータスLEDの接続
  11. ケースに収納・設置
  12. トラブルと対応

« PrevNext »

コメント

コメントはありません。

コメントする