AsteriskによるIP-PBXの構築(CentOS4.2編)
インストール・設定 − サービス
ここでは、ボイスメール関係のサービスの概要を示します。
ボイスメールと連携し、端末の電源が入っていない、相手が通話中、応答しない場合等にボイスメールに録音でき、後で用件を聞くことができる機能である。メールボックスの設置に関しては、共通のメールボックスで運用し各ユーザはそこにアクセスしてパスワードで運用する方法と、内線番号毎のメールボックスを用意し、当該内線電話機からは特番をダイヤルすればメールボックスにアクセスでき、メールボックス番号とは異なる内線からアクセスする場合は、前者の方法と同様にボイスメールアクセス特番をダイヤルし、メールボックス番号とパスワードを入力する運用方法がある。メールボックスを内線と非同期で運用したい場合、即ち電話機を共通で運用する場合は前者の方法となる。ここでは、後者の、電話機毎にメールボックスを置く方法を示す。
[ 設 定 ]
- ボイスメール関係の設定は、voicemail.conf で行う。まずは基本的な設定を以下で行う。(赤字:追加、緑字:変更、青字:削除)
[general] ;format=g723sf|wav49|wav ;format=wav49|gsm|wav format=wav49 serveremail=asterisk@mail.aconus.com ;serveremail=asterisk@linux-support.net
attach=no ;maxmsg=100 ;maxmessage=180 ;minmessage=3 ;maxgreet=60 skipms=3000 maxsilence=10 silencethreshold=128 maxlogins=3 saycid=yes cidinternalcontexts=default |
- format
ボイスメールメッセージを保存するとき、オーディオファイル形式を指定する。デフォルトで
"wav49|gsm|wav"
と設定されているが、その全ての形式でデータが保存されるのでディスクの浪費になる。また、録音時にメール通知する機能を使用する場合、設定によりこのファイルを添付することができるが、一番最初に指定されたファイルのみが添付される。従って、いずれか1種類を指定すればよいが、下記理由から
"wav49" を指定すること。
- wav49
この形式はファイルサイズが小さく、音質もそこそこ。".WAV"
という拡張子であり、メールに添付して送ってもどのようなクライアントでも再生できる。
- gsm
この形式のファイルサイズはwav49とほぼ同じくらいで、音質も同等である。しかしながら、メールに添付して送っても特殊な形式なので再生ソフトを用意しなければデフォルトのまま再生できない。
- wav
いわゆるwav形式のファイルで音質は良いが、ファイルサイズが非常に大きい(wav49の10倍程度)ため止めたほうが良い。
- serveremail
メール通知する場合の送信者を指定する。デフォルトのままでもサーバドメインが付加されるが、おやじは明示した。必要に応じてアカウントも変更する。
- attach
メールボックス登録時にメールアドレスを設定しておけば録音時にメール通知されるが、本設定でデフォルトの"yes"の場合、録音したファイルを添付することができる。ただ、録音時間が長いと結構な容量になるので
"no"
とするほうがよい。どうしても必要な場合は、メールボックス登録時のオプションでも指定できるので、ここでは(全体では)添付しないことにし、ユーザ毎に個別設定すればよい。
なお、クライアントがX-Liteならディスプレイ上にメッセージ通知機能があり、録音メッセージがあればカーソルをディスプレイ上のメールマーク上に持って行けば新規滞留メッセージ数がわかるので、メール通知そのものが不要ならメールボックス登録時にE-Mailアドレスは登録しないこと。
- maxmsg
メールボックスあたりの最大メッセージ数を指定する。デフォルトは100個なので、コメントアウトを外し適宜変更する。
- maxmessage
1メッセージの最大時間を秒単位で指定する。デフォルトは180秒なので、コメントアウトを外し適宜変更する。
- minmessage
指定された時間以内のメッセージは録音しない場合の設定。デフォルトは全て録音なので、コメントアウトを外し秒単位で適宜設定する。
- maxgreet
ユーザ定義のグリーティングメッセージの最大時間を秒単位で設定する。デフォルトは0で無制限なので、何らかの値を設定する。
- skipms
ボイスメール再生時の早送り(#ボタン)/巻き戻し(*ボタン)時にスキップする時間をミリセカンド単位で指定する。デフォルトは3000ms(3s)である。
- maxsilence
録音時に指定された時間(秒単位)連続して無音状態が続いた場合に、終了とみなして切断する。デフォルトは0(デフォルトコンフィグ上は10秒)で無制限なので、何らかの値を設定する。
- silencethreshold
上記の maxsilence
で無音切断時間を設定した場合の無音検出するスレシホールド値を設定する。デフォルトは128であり、バックグラウンドノイズが大きい場合は値を大きくしないと無音検出できない。デフォルトで問題があるなら適宜調整する。
- maxlogins
ログイン認証失敗時の許容回数を指定する。デフォルトは3回である。
- saycid
メッセージ再生時に、録音者の電話番号を再生する場合に設定する。デフォルトは "no" なので、再生するなら
"yes" で設定する。
- cidinternalcontexts
上記で電話番号を再生する設定とした場合に、電話番号を読み上げる代わりに「内線からの着信・・」といったメッセージを流す場合に、対象とするコンテキストを指定する。"default"
を設定すれば "vm-from-extension"
が再生されるが、対象の日本語ファイルがないことと、電話番号の読み上げが停止しないので、現状では設定しても意味がないかも?
- 次にメールボックスがないことには始まらないので、これを作成する。Asteriskのメールボックスは、/var/spool/asterisk/default/[メールボック番号]というディレクトリ配下に置かれるが、ここに
"1234"
というサンプルのディレクトリがあるので、これをコピーして必要なメールボックスを作成していく。(バージョン1.0.xにはaddmailboxというスクリプトがあったので、ソースを落としてきて使用するほうが簡単かもしれない。)
以下に、2000というメールボックスを作成する例を示す。ユーザ毎に作成する。
# cd /var/spool/asterisk/default # cp -pr 1234
2000 |
- 続けてメールボックス毎の基本的な設定を以下のとおり行う。E-mailアドレスを登録しておくと、ボイスメールに新しいメッセージが録音されるとEメールで通知される。オプションは、
"|" 区切りでデフォルトから変更するユーザ固有の設定を記述できる。
[メールボック番号] =>
[パスワード],[ユーザ名][,E-mailアドレス][,ページャアドレス][,オプション1|オプション2|・・・]
2000 =>
1234,oyaji,oyaji@mail.aconus.com,,attach=yes|saycid=no|maxmsg=10 2001
=> 1235,hoge1 |
- 最後に運用方法にあわせてダイヤルプランを設定する。
ここでは、以下の運用方法で行うものとした。
- 相手未応答や端末の電源が入っていない場合にガイダンスを流し、発信者が録音可能とする。
- 相手が通話中の場合はガイダンスを流し、発信者が録音可能とする。
- 相手内線番号+特番でガイダンスを流し、発信者が指定内線に録音可能とする。
- 自分の内線電話から特番をダイヤルすることによりボイスメールに接続し、パスワードなしで自分のメールを聴けるようにする。(個人パソコンでの運用)
- 特番をダイヤルすることによりボイスメールに接続し、メールボックス番号+パスワードで自分のメールを聴けるようにする。(複数人でパソコンを共有したり出先で使用したりする運用)
[運用方法a/b]
内線番号のダイヤルプランを拡張して設定する。以下はパターン設定ベースで示すが、個別でも同様である。
; extensions exten =>
_200X,1,Dial(SIP/${EXTEN},30,tT) exten =>
_200X,2,Voicemail(${EXTEN}) exten => _200X,3,Hangup() exten
=> _200X,102,Voicemail(${EXTEN}) exten =>
_200X,103,Hangup() |
- プライオリティ1で2000 -
2009までの内線のDial()関数での呼出設定を行う。呼出タイムアウトは30秒で、発着信転送を許容する。
- 呼出タイムアウトや端末の電源が入っていない場合は、プライオリティ2でVoicemail(ボイスメール番号)関数で録音可能とする。後述するユーザ固有の不在メッセージを流したい場合は、Voicemail(u${EXTEN})とボイスメール番号の前にuを付加すればよい。
- 通話中の場合は、プライオリティ102でVoicemail(ボイスメール番号)関数で録音可能とする。後述するユーザ固有の話中メッセージを流したい場合は、Voicemail(b${EXTEN})とボイスメール番号の前に
"b" を付加すればよい。
- 録音が終了したら、プライオリティ3/103でHangup関数で切断する。
[運用方法c]
内線番号+特番(ここでは"*")でダイヤルプランを設定する。以下はパターン設定ベースで示すが、個別でも同様である。
; Voicemail Recording exten =>
_200X*,1,Answer() exten =>
_200X*,2,Voicemail(${EXTEN:0:4}) exten =>
_200X*,3,Hangup() |
- プライオリティ1で "2000* - 2009*" とダイヤルされたら応答する。
- プライオリティ2でVoicemail()関数で録音可能とする。
このとき、${EXTEN:0:4}で入力されたダイヤルの先頭(0)から4桁(4)をボイスメール番号としてVoicemail()関数を呼ぶ。
[参考]
${foo:offset:length}
ストリング "foo" に対して "offset"
で指定した位置から "length "で指定されたキャラクタが返る
- "offset"がマイナスならストリングの最後からのオフセット値を示す。
- "length "が未指定もしくはマイナスなら"offset"
で指定した位置から残りの全てのキャラクタを返す。
例:
${123456789:1} - 戻り値 23456789
${123456789:-4} - 戻り値 6789
${123456789:0:3} - 戻り値 123
${123456789:2:3} - 戻り値 345
${123456789:-4:3} - 戻り値 678
- 録音が終了したら、プライオリティ3でHangup関数で切断する。
[運用方法d]
自メールボックス接続特番(ここでは"18")のダイヤルプランを設定する。
; Voicemail Playback exten =>
18,1,Goto(vm0,1) exten => vm0,1,Answer() exten =>
vm0,2,VoicemailMain(s${CALLERIDNUM]) exten =>
vm0,3,Hangup() |
- プライオリティ1で "18" とダイヤルされたら応答する。
- プライオリティ2でVoicemailMain()関数で再生可能とする。このとき、${CALLERIDNUM}
で発信者のIDをパラメータで渡す。 "s"
はボイスメール応答時の固定メッセージ「トーンのあとにメッセージを録音し、最後にシャープを押すか電話をお切りください。」をスキップするための設定。
- 録音が終了したら、プライオリティ3でHangup関数で切断する。
[運用方法e]
ボイスメール接続特番(ここでは"19")のダイヤルプランを設定する。
; Voicemail Playback exten =>
19,1,Goto(vm1,1) exten => vm1,1,Answer() exten =>
vm1,2,VoicemailMain() exten =>
vm1,3,Hangup() |
- プライオリティ1で "19" とダイヤルされたら応答する。
- プライオリティ2でVoicemailMain()関数でボイスメールに接続し、端末とのやり取りで録音メッセージを再生させる。
- 録音が終了したら、プライオリティ3でHangup関数で切断する。
[フラグの設定]
Voicemail/VoicemailMain()関数で使用できるフラグを示す。フラグは、ボイスメール応答時のメッセージに関する設定であり、場面に応じて設定する。
No. |
フラグ |
概 要 |
1 |
s |
固定メッセージをスキップして再生しない。 |
2 |
-(なし) |
固定メッセージを再生する。 |
3 |
su |
ユーザ固有の不在メッセージを再生する。 |
4 |
u |
固有の不在メッセージを再生した後、固定メッセージを再生する。 |
5 |
sb |
ユーザ固有の話中メッセージを再生する。 |
6 |
b |
ユーザ固有の話中メッセージを再生した後、固定メッセージを再生する。 |
固定メッセージ:「トーンのあとにメッセージを録音し、最後にシャープを押すか電話をお切りください。」
[ 操作方法 ]
録音に関しては、メッセージを録音して最後にシャープを押すか電話を切るだけなのでほとんど迷うことはないので、ここでは再生系を中心に各操作に関するダイヤル番号の意味を簡単に示しておく。
- 1: メッセージ聴取
- 2: フォルダの変更
- 0: 新規メッセージフォルダ
1: 聴取済みメッセージフォルダ
2: ワークメッセージフォルダ
3:
家族メッセージフォルダ
4: 友人メッセージフォルダ
#: キャンセル
- 3: アドバンスオプション
- 1: 返信
3: 録音メッセージの再生
5: 録音
*: メインメニューに戻る
- 4: 前のメッセージを再生
5: 現在のメッセージを繰り返す
6: 次のメッセージを再生
7:
現在のメッセージを削除
8: 他のメールボックスに転送
9: 他のフォルダに移動
- 0: メールボックスオプション
- 1: 不在時(呼出タイムアウトや電源未投入等)等の応答メッセージの録音
2: 話中時の応答メッセージの録音
3:
ユーザ名の録音
4: パスワードの変更
*: メインメニューに戻る
- *: ヘルプ/再生中は巻き戻し
#: 終了/再生中は早送り
上記ボイスメール連携で録音された音声をWebアクセスして聴取したり、フォルダ管理する機能。本機能は、CGI(perl)で書かれたvmail.cgiで実現されるので、ApacheでCGIが動作できることが前提となる。
◆vmail.cgiのインストールと設定
vmail.cgiは、Asteriskの "make install"ではインストールされないので、下記のように "make webvmail"
でインストールする。
- インストールパスはCentOS4.2用のApacheのドキュメントルート等になっている。なお、vmail.cgiはsuidで動かすことを想定しているが、suEXEC環境下ではsuidはできないため、suidを止め別途対処した。(実際は、chrootしているとsuidできてもオーナ以外アクセスできないファイルがあるのでそう単純ではない。)
また、バーチャルホストで動かしている場合は、それなりの対処が必要である。
本操作でインストールされるのは下記のCGIと表示画面で使用するgifファイルであるが、CGIの場所を移動する場合は、gifファイルへのパスも変更が必要なので注意が必要である。gifファイルへのパスはvmail.cgi中の、"$astpath"の値を変更すればよい。
・/var/www/cgi-bin/vmail.cgi
・/var/www/html/_asterisk/*.gif (animlogo.gif, play.gif)
# cd /usr/src/asterisk # make
webvmail
|
- Asteriskがchroot環境で動作しているので、Apacheから各音声フォルダやファイルアクセスができるようにApacheユーザ(apache)をasteriskグループに追加し、Apacheをreloadしておく。
# usermod -G apache,asterisk apache
# /etc/rc.d/init.d/httpd reload
|
- 各フォルダやファイルのパーミッションが限定されており、上記対策だけではアクセスはできない。Asteriskではボイスメールアクセス時に外部プログラムを起動できるので、この機能を利用してパーミッションを操作することとした。
まずは、下記のような簡単なスクリプトを用意し、実行権を与えておく。
# vi
/usr/bin/webvmail.sh [i]押下。
#!/bin/sh chmod -R
770
/var/spool/asterisk/voicemail/default
[Esc]、[:]、[w]、[q]で保存
#
chmod 755 /usr/bin/webvmail.sh
|
- /etc/asterisk/voicemail.confに以下 (緑字)
を追加し、Asteriskをreloadしておく。また、既存のフォルダやパーミッションを変更するため、一度ボイスメールを起動(ボイスメールアクセス特番をダイヤルするだけでよい。)しておく。
# vi
/etc/asterisk/voicemail.conf [i]押下。
externnotify=/usr/bin/webvmail.sh
[Esc]、[:]、[w]、[q]で保存
#
/etc/init.d/asterisk reload
|
- Webアクセス時にパスワードが丸見えなので、HTTPSでのアクセスを必須にしておいたほうがよい。下記で対処をしておくと安心である。
http://www.aconus.com/~oyaji/tips/apache_tips1.htm
◆Webボイスメールの使用方法
Webボイスメールの使用方法というほどのこともありません。触ってみればすぐにわかることですが、簡単に概要を示します。
- vmail.cgi
にアクセスする。
メールボックス番号(Mailbox)とメールボックスパスワード(Password)を入力し、「Login」ボタンをクリックする。
- デフォルトで新規メッセージのフォルダ(INBOX)が開かれ、メッセージがあれば下記のような表示がなされる。
- [ change to -> ]
フォルダ変更。 アクセスフォルダをプルダウンメニューから選択する。
- [ refresh ]
最新の情報に更新。
- [ delete ]
削除。削除するメッセージにチェックマークを入れ、[ delete ]ボタンをクリックする。
- [ save to
-> ]
保存フォルダの変更。フォルダを変更するメッセージにチェックマークを入れ、プルダウンメニューから移動先フォルダを選択し、[ save
to -> ]ボタンをクリックする。
- [ forward to
-> ]
メッセージ転送。転送するメッセージにチェックマークを入れ、プルダウンメニューから転送先メールボックスを選択し、[ forward
to -> ]ボタンをクリックする。
- [ preferences ]
メッセージファイルの形式の選択。[ preferences ]ボタンをクリックすると、下記の音声ファイル形式の選択画面が表示されるので、対象形式を選択して
[ save settings ]ボタンをクリックする。ここではwav49を設定しているので、[ GSM Compressed
WAV ]を選択する。
- 前項でファイルの右にある[Play]ボタンをクリックすると、下記の画面になるので、[Play]ボタンをクリックするか、関連付けられている再生ソフトの[Play]ボタンをクリックすると再生される。(下記は
RealAudioの例)
ホテル等ではおなじみのモーニングコールが使用できる。ソフトホンではあまり役に立つかどうかわからないが、時計のアラーム代わりにも使用できるのでは?
◆perlモジュールのインストール
wakeup.agi はperl で書かれた AGI スクリプトである。AGI(Asterisk Gateway
Interface)とは、dialplanから呼び出されるマルチ言語のスクリプトインタフェースでperlのほか、Pascal、C、Python、Javaが使える。wakeup.agiを動かすには、いくつかのperlモジュール(
Date::Manip, Date::Calc, Asterisk::AGI )が必要であり、それらを事前にインストールする必要がある。
- まずは、Date::Manip と Date::Calc をインストールする。これは、YaSTでインストールするだけである。
- YaST コントロールセンタを起動し、「ソフトウェア」の「ソフトウェアのインストール/削除」を起動する。
- 「検索」欄に 「perl-Date」 と入力し「検索」をクリックすると、右の欄に
「perl-Date-Calc」と「perl-DateManip」が表示されるので、両方にチェックマークを入れて 「了解」
をクリックしておしまい。
- Asterisk::AGI はこちらのサイトに置いてあるので、下記によりインストールする。
# cd /usr/local/src # wget
http://asterisk.gnuinter.net/files/asterisk-perl-0.08.tar.gz # tar zxfv
asterisk-perl-0.08.tar.gz # cd asterisk-perl-0.08 # perl Makefile.PL # make all #
make install
|
◆wakeup.agiのインストールと設定
wakeup.agi をインストールし、関連の設定を行う。
- wakeup.agi をこちらからダウンロードしてきて、インストールする。
# cd /usr/local/src # wget
http://www.geekthing.com/~robf/asterisk/asterisk-wakeup-0.07.tar.gz # tar
zxfv asterisk-wakeup-0.07.tar.gz # cd asterisk-wakeup-0.07
# make install
# chown -R asterisk:asterisk /var/lib/asterisk/agi-bin
|
- 環境に合わせて wakeup.agi と snooze.agi のパラメータを変更する。
基本的に変更が必要なのは
"$local_context" であり、デフォルトでは "inside" となっているので extensions.conf で内線を設定している context に変更する。通常は
'default' に変更すればよいはずである。
その他、不応答時の呼出のリトライ回数等も変更が可能なので、必要に応じて変更する。
- 続いて、/var/lib/asterisk/agi-bin配下にインストールされたスクリプトでモーニングコール関係のメッセージの日本語化を行う。(赤字:追加、緑字:変更、青字:削除)
スクリプト. |
行 |
変 更 内 容 |
wakeup.agi |
116 |
$agi->exec('SayUnixTime', sprintf("%s||PIM", UnixDate($time, "%s"))); |
146 |
$agi->exec('SayUnixTime', sprintf("%s||PIM", UnixDate(ParseDate($time), "%s"))); |
snooze.agi |
35 |
my $data = $agi->get_data('jp/wakeup-menu2', 30000, 1); |
71 |
$agi->stream_file('jp/auth-thankyou'); |
75 |
$agi->stream_file('jp/goodbye'); |
- 指定時間がきた時に、登録されたモーニングデータを基に端末を呼び出すスクリプトのインストールと定期的にそのスクリプトを起動するための設定をcrontabに行う。
# cd
/usr/local/src/asterisk-wakeup-0.07 # cp run_wakeups
/var/spool/asterisk/wakeups/run_wakeups
# chown -R asterisk:asterisk /var/spool/asterisk/wakeups # echo "* * * * * asterisk /var/spool/asterisk/wakeups/run_wakeups"
>> /etc/crontab
|
- モーニングコール用特番 (15)の登録を、/etc/asterisk/extensions.confに下記内容で行う。
; Morning Call exten => 15,1,Goto(mc,1) exten
=> mc,1,Wait(1) exten => mc,2,Answer() exten =>
mc,3,AGI(wakeup.agi)
|
◆モーニングコールの使用方法
操作してみればすぐにわかる話ですが、操作方法を簡単に示します。
- モーニングコール特番(15)をダイヤルする。
- ガイダンスに合わせて、操作(登録/変更、確認、取消)を選択する。
ダイヤル |
概 要 |
1
|
モーニングコールの登録、変更 |
2
|
登録済みモーニングコールの確認 |
3
|
登録済みモーニングコールの取消 |
- モーニングコールの登録
モーニングコールの登録(変更含む)を以下で行う。
- 12時制で登録する時間(時:分)を4桁で入力する。1桁の場合は、"0"を付加して入力する。午前/午後は次のフェーズで指定する。
・午前7時15分:
0715
・午後10時5分: 1005
- 午前("1"を入力)、午後("2"を入力)を指定する。
- モーニングコールの延長
呼出応答時の操作で再呼出の設定ができる。
ダイヤル |
延長時間 |
1
|
5分後に再呼出 |
2
|
10分後に再呼出 |
3
|
15分後に再呼出 |
4 |
30分後に再呼出 |
インストール・設定 − サービス
Topページへ