SYONテクニカル

AsteriskでVoIPを体験してみよう!!!

サイオンコミュニケーションズ株式会社
山入端寛謹

1. はじめに

ブロードバンドの普及により、YahooBB ( http://bbpromo.yahoo.co.jp ) のIP電話サービスや、最近ではSkype ( http://www.skype.com )といった無料IP電話ツールが広く利用されるようになりました。このサイトを閲覧している方も実際に利用したことがあるのではないでしょうか?
このような個人向けのサービスの他に、PBX(構内交換機)のIP電話化の話題も絶えません。今回は、オープンソースで利用できるPBXシステム”Asterisk ( http://www.asterisk.org )”を紹介します。

また、弊社は創業以来コールセンターに特化したunPBXを販売しておりますが、その観点からもAsteriskがどの程度のCTI機能を備えているかまとめてみました。

2.VoIPとは

VoIP(Voice over IP)は、その名の通りIP(TCP/IP)上で音声を利用すると言う意味で、一般的にIP電話と呼ばれています。

(1)VoIPの長所

■通話料金

VoIPの最大のメリットは、インターネット網を利用し、通話が可能なところです。一般公衆網(電話回線)を利用しないため、一般公衆回線網の通信費(通話量)を抑える事が出来ます。

●VoIPの構成例1(VoIPネットワーク構成のイメージ)

また、VoIPネットワーク内だけでなく、PBX側で一般公衆回線網と接続する事もでき、コスト削減を図ることもできます。以下の図は、弊社が販売予定している製品”TiS-EH/EC”ですが、実際にインド(クライアント)と中国(クライアント)にオペレータを置き、インターネット経由でアメリカ(ホスト)側のVoIP-PBXと接続し、そこからアメリカ”国内”発信をする仕組です。これにより、アウトバウンドや国内の通話料だけで利用できます。

●VoIPの構成例2(VoIP+一般公衆網回線網の構成イメージ)

■対応電話機について

PC上で利用できるソフトフォンを使用することが出来ます。PCの音声入出力端子にヘッドセット型マイクロフォンを使用して利用します。
これにより、従来の「電話機」のようにデスクスペースを取りませんし、フリーのソフトフォンを利用すれば導入コストを抑えることができます。
また、PC以外にも、H.323やSIPプロトコルをサポートしたハードフォンを利用する事も可能です。ハードフォンに関しては、様々な商品が販売されております。

(2)VoIPの短所

VoIPはIP網を使用するため、ネットワーク障害により通話が切断されたり、十分な帯域を確保していないのが原因で、通話が途切れるという可能性があります。また、VoIPを構成する要素が多いため、障害の原因特定に時間がかかる事もあります。一般公衆網を利用した電話システムと比べてトラブルとなる要素が多いのは事実です。

3.SIPとは

VoIPは、単にIP上で音声を利用するという定義にしか過ぎません。実際VoIPといっても様々なプロトコルが存在します。

■VoIPで利用されているシグナリングプロトコル

プロトコル名 団体名
H.323 ITU-T
MGCP IETF
H.248/MEGACO ITU-T/IETF
SIP IETF

SIPは、テキスト形式のプロトコルで、HTTPや、SMTPプロトコルを参考にして作成されました。
最近では、SIP対応の電話機(ハードフォン)やソフトフォンも普及してきており、日本メーカーも少数ではありますが、徐々に対応製品を発表しております。余談ですが、弊社が近日リリース予定のVoIP製品も、 SIPプロトコルを使用しています。

4.Asteriskの紹介

Asterisk ( http://www.asterisk.org ) は、業界初のオープンソースなSIPに準拠したIP-PBXサーバです。PBXハードウェアベンダーの米Digium社 ( http://www.digium.com ) がオフィシャルスポンサーとなり開発が進められています。

(1)ライセンスについて

Asteriskは、GPLライセンスの為、誰でも無料で利用することができます。

(2)対応OS

Linuxをはじめ、FreeBSDやMacOSXも対応しております。

(3)PBX機能

Asteriskは、標準で十分な機能を備えています。

●内線(ユーザ名)の登録
●IVR/ダイヤルプラン
●アウトバウンドシステム
●全通話録音
●コールキューイング

 また、Asteriskの対応ハードウェア(ボード)を利用することにより、外線とも接続することも可能です。

5.インストール

今回は、ディストリビューションとして、Gentoo Linux ( http://www.gentoo.org )を選択しました。他のディストリビューションに比べ最新のパッケージバージョンを扱え、アップグレード(セキュリティ含む)も容易だからです。
Gentoo Linuxは、Portageと呼ばれる強力な独自のパッケージ管理システムを利用し、ソースコンパイルでのパッケージ管理が可能です。また、既にPortageには、asteriskのebuildファイルが存在し、以下のコマンドでインストールする事ができます。

■Gentoo LinuxでのAsteriskのインストール

//最新のportageツリーを取得
#emerge sync[ENTER]
//asteriskをインストール
#emerge asterisk[ENTER]

Gentoo Linuxならこれだけでインストール作業は終了です。コンパイルには時間がかかりますが、パッケージの依存関係もPortageが解決してくれます。この機会に是非Gentooも利用してみてください。
調べてみたところ、多くのディストリビューションでは、既にバイナリパッケージを配布しており、RedHat系のrpmやDebianのdebを利用すればインストールもスムーズに行えますので、そちらを利用するのも良いでしょう。

6.ファイル構成

Gentoo LinuxのPortageを利用してAsteriskをインストールすると、以下のようなディレクトリ構成になります。

●Asteriskのディレクトリ構成

ディレクトリ 備考
/etc/asterisk/ Asteriskで使用する各設定ファイルが格納されています。
/usr/lib/asterisk/ Asterisk関連のライブラリやモジュールが格納されています。
/var/log/asterisk/ Asteriskの各種ログが格納されます。

実際に上記ディレクトリは、/etc/asterisk/asterisk.confで任意に設定可能ですが、特別な理由がない限りデフォルトのままで良いでしょう。

7.内線の登録

実際に以下の内線を登録して見ます。

●登録する内線情報

内線番号 ユーザ名 パスワード
201 CC201 1111
202 CC202 1111
203 CC203 1111

内線の登録は、sip.confで行います。

■/etc/asterisk/sip.conf

;——–全体の設定———
[general]
context=default ;ダイヤルプランのデフォルトコンテキスト名を指定
bindport=5060 ;sipポートの指定
bindaddr=0.0.0.0 ;サーバ本体のIPアドレスの設定
musiconhold=default ;システム保留音の指定
disallow=all ;すべてのCODECを禁止
allow=ulaw ;ulaw(CODEC)を許可
allow=alaw ;alaw(CODEC)を許可
allow=gsm ;gsm(CODEC)を許可
allow=ilbc ;ilbc(CODEC)を許可
dtmfmode=rfc2833 ;dtmfモードの指定
;—————————-
[201];”201″
type=friend ;INBOUND/OUTBOUNDモード
secret=1111 ;ログインパスワード
username=CC201 ; ユーザ名
host=dynamic ;ログインするホスト名の指定。dynamicを指定すると、ホスト名(IP)を問わない。
canreinvite=no
[202];”202″の設定
type=friend
secret=1111
username=CC202
host=dynamic
canreinvite=no
[203];”203″の設定
type=friend
secret=1111
username=CC203
host=dynamic
canreinvite=no

8.基本的なダイヤルプランの設定

内線の登録を行った後、extensions.confでダイヤルプランの設定を行います。
ダイヤルプランは、下記のような書式で設定します。

●ダイヤルプランの書式

exten => 番号,優先順位,コマンド

試しに、以下のような、基本的なダイヤルプランを設定します。

■/etc/asterisk/extensions.conf

[general] ;全体設定
static=yes
writeprotect=yes
autofallthrough=yes
;——————コンテキスト”default”のダイヤルプラン——————;
[default]
;201へのダイヤルプラン
exten => 201,1,Dial(SIP/201,12)
exten => 201,2,Congestion
exten => 201,102,Busy
;202へのダイヤルプラン
exten => 202,1,Dial(SIP/202,12)
exten => 202,2,Congestion
exten => 202,102,Busy
;203へのダイヤルプラン
exten => 203,1,Dial(SIP/203,12)
exten => 203,2,Congestion
exten => 203,102,Busy
;その他ダイヤルへの処理(メッセージ案内)
exten => _.,1,Answer()
exten => _.,2,Wait(2)
exten => _.,3,Playback(pbx-invalid)
exten => _.,3,Congestion
;——————————————————————;

設定だけで解説しても分かりづらいので、ダイヤルプラン”201″の図も交えて解説します。
まず、201をダイヤルすると、優先順位が最も高い”1″のレコードが呼び出されます。

●ダイヤルプラン”201″(1)

exten => 201,1,Dial(SIP/201,12)

ここでDial()関数でSIPの201(内線201)を呼出しており、応答の制限時間は12秒となっています。
201(内線201)が応答すれば通話が可能ですが、制限時間以内に応答しなかった場合には、現在の優先順位に+1(合計2)し、それに対応したレコードを呼び出します。 また、201(内線201)が通話中なため、そもそも呼出自体が出来ない場合は、現在の優先順位に+101され、対応レコードが呼び出されます。

●ダイヤルプラン”201″(2)

exten => 201,2,Congestion

優先順位が2、つまりDial()関数で201を呼出したが、制限時間内に応答しなかった場合に呼び出される部分です。
Congestionコマンドで、発信側が切るのを待ちます。切るまでは切断音が流れます。

●ダイヤルプラン”201″(102)

exten => 201,102,Busy

優先順位が102、つまり201(内線201)が他と通話しており、Dial()関数で201を呼び出せなかった場合の処理です。
Busyコマンドで、ビジー音を流します。

●ダイヤルプラン”201″イメージ

ダイヤルプラン202~203に関しても同じような設定になっていますので、解説は省略します。
以上で基本的な設定は終了です。asteriskの設定を起動し、動作を確認しましょう。

9.Asteriskの起動

実際にasteriskを起動してみます。今回はPortageを利用してasteriskをインストールしたため、起動スクリプトが用意されていましたので、以下のコマンドにて起動出来ました。

■Asteriskの起動

#/etc/init.d/asterisk start[ENTER]

起動後、以下のコマンドを入力し、Asteriskの管理コンソールモードにします。

■Asterisk管理コンソールへの切り替え

#asterisk -vvvcr[ENTER]
== Parsing ‘/etc/asterisk/asterisk.conf’: Found
== Parsing ‘/etc/asterisk/extconfig.conf’: Found
Asterisk 1.0.8, Copyright (C) 1999-2004 Digium.
Written by Mark Spencer

10.SIPクライアントの接続

今回は、sipクライアントとしてソフトフォン”Express Talk” (http://www.nch.com.au/talk )を使用しました。Express Talkはフリー版もあり、基本的なSIPの機能を備えています。
オフィシャルサイトからExpress Talkをダウンロードし、インストールします。

(1)”Express Talk”の設定

設定は至って簡単でメニューの[Talk]-[Settings]をクリックし、以下の2つのタブ欄の項目を設定します。

●Expres Talkの設定(1)

[Lines]タブ
–Full Friendly Display Name:発信通知番号または、通知文字列を入力します。
–Sip Number:sip.confで設定した内線番号を入力します。
–Server:サーバーのIPアドレス、又はホスト名を入力します。
–Password:sip.confで設定した、内線パスワードを入力します。

●Expres Talkの設定(2)

[Network]タブ
Use uPNP to find external IP Address:チェック外す。
Use STUN servers to find external IP Address and Port: チェック外す。
Use static IP address and static mapped ports: チェック外す。

(2)通話

上記設定を、各内線番号に合わせて設定してします。
設定後、試しに内線201から内線202に発信し、通話してみます。

●内線202への発信

先ほど起動したAsterisk管理コンソールでは、通話情報(ログ)がリアルタイムで見ることができます。

■Asterisk管理コンソール:通話情報

——————————-省略————————————-
Connected to Asterisk 1.0.8 currently running on localhost (pid = 7184)
Verbosity is at least 3
– Remote UNIX connection
– Executing Dial(”SIP/201-80cf”, “SIP/202|12″) in new stack
– Called 202
– SIP/202-790d is ringing
– SIP/202-790d is ringing
– SIP/202-790d is ringing
– SIP/202-790d is ringing
– SIP/202-790d is ringing
– SIP/202-790d is ringing
– SIP/202-790d is ringing
– SIP/202-790d is ringing
– SIP/202-790d answered SIP/201-80cf
– Attempting native bridge of SIP/201-80cf and SIP/202-790d
——————————-省略————————————-
localhost*CLI>

11.ダイヤルプランの応用

基本的な設定を終えたところで、ダイヤルプランの応用した利用方法を紹介します。

(1)同時呼出

次の設定をextensions.confに追加します。

■/etc/asterisk/extensions.conf

;200へのダイヤルプラン
exten => 200,1,Dial(SIP/201&SIP/203,12)
exten => 200,2,Congestion
exten => 200,102,Busy

200へダイヤルすると201(内線201)と203(内線203)が同時に呼び出されるプランです。
追加後、Asteriskに設定を反映させます。再起動で読み込ます事も可能ですが、Astariskの管理コンソールに以下のコマンドを入力する事で設定を読み込んでくれます。

■Asterisk管理コンソールからのextensions.confのリロード(再読み込み)

localhost*CLI> extensions reload[ENTER]

(2)全通話録音

入電/着信した通話を自動的に録音ファイルとして指定したディレクトリに保存します。
オペレータのモニタリングスコアとしても使用する事ができ、コールセンターでは広く利用されています。AsteriskでもMonitor()関数で全通話録音が行えるようです。

■/etc/asterisk/extensions.conf

;201へのダイヤルプラン
exten => 201,1,Answer()
exten => 201,2,wait(1)
exten => 201,3,SetVar(CALLFILENAME=/var/spool/asterisk/monitor/201/${TIMESTAMP})
exten => 201,4,Monitor(wav,${TIMESTAMP},m)
exten => 201,5,Dial(SIP/201,30)
exten => 201,6,Congestion
exten => 201,106,Busy

上記では、保存場所(ディレクトリ)を/var/spool/asterisk/monitor/201を指定しています。その後にMonitor()関数にて、録音データを日時(TIMESTAMP)をファイル名としてwave形式で保存する設定になっています。設定反映後、201にダイヤルすると、指定したディレクトリに録音データが作成されます。

■録音データの確認

#ls /var/spool/asterisk/monitor/201/[ENTER]
20051026-070722.wav

作成された録音データを聞いてみると、通話が始まる前の接続音や、通話終了後の切断音までが録音されています。これは、ダイヤルプランを見ても解るとおり、Dial()関数を呼び出す前にMonitor()関数が有効になっている為です。他の方法を考えてみましたが、この方法しか思いつきませんでした。

12.CTIとして使用できるか?

コールセンター向けCTI製品として考えた場合、少なくとも以下の機能を有するシステムでないといけません。

(1)ACD機能

ACD(Auto Call Distribution)とは、複数のオペレータ内線を指定のグループにログインさせ、そのグループに対して入電があった場合に、ログインしている内線のみに順序良く自動配信することを指します。コールセンターでは、業務の作業効率化および業務平準化を図るため、構築には必須な機能といえるでしょう。また、弊社が販売しているTelePCX/TeleContactのACD機能は、待機時間の長いオペレーター内線を優先的に配信する方式を採用しています。
筆者の調べてみた範囲ではありますが、AsteriskではこのACDに該当する機能はありませんでした。

(2)オーバーフロー機能

溢れた入電を、別グループに転送する事が可能です。

(3)ダイヤルイン機能

電話局が提供するサービスで、着信番号を通知する仕組みです。一般的にコールセンターでは、通常契約者回線の番号のほかに電話番号(子番号)を複数取得し、サービス単位として使用します。

(4)モニタリング機能

SV(スーパーバイザ)と呼ばれるセンターのグループ管理者が、お客様とオペレータの会話を第三者として聞く事が出来る機能です。

(5)全通話録音機能

上記設定でも紹介しましたが、入電した全通話を録音する機能です。

(6)SV管理ツールとエージェントツール

主にSV(スーパーバイザ)が使用するツールで、エージェント(オペレータ)と内線番号、グループへの登録を行います。エージェントは発行されたアカウントでログインし、入電を処理します。
その他、エージェント単位やグループ別での入電数や放棄件数を表示し、それを集計レポートとして出力する事が可能です。

Asteriskと弊社が提供するTelePCX/TeleContactの機能を比較してみます。

●Asterisk v.s TelePCX/TeleContact

機能 Asterisk TelePCX/TeleContact
ACD ×
オーバーフロー ×
ダイヤルイン
モニタリング ?
全通話録音 ○(オプション)
SV管理/エージェントツール

13.ハードウェアについて

今回は、紹介しませんでしたが、Asteriskは対応の外線ボードを使用する事により、一般公衆回線網(外線)と接続が可能です。日本の中小規模のコールセンターやオフィスで利用されているINS64対応のボード(BRI)ボードとしては、Eicon社製 ( http://eicon.com ) の”Diva Server”シリーズがAsteriskに対応しています。

14.NATについて

SIPの課題として、第一に取り上げられるのがNAT越えの問題です。SIPやRTPはUDPを利用するため、ルータのNATテーブルの保持時間が、SIPクライアントで設定されている登録要求のインターバルより短いと、着信が出来ない障害が起こります。この場合、SIPクライアントの登録要求のインターバルを、ルータのNATテーブルの保持時間より短く取る必要あります。

15.最後に

Asteriskは、CTIツールとしては不十分ではありますが、オフィス間の交換機としては標準で十分に使用できます。また、オープンソースと言うこともあり、今後はCTIに特化したパッケージや関連アプリケーションが出てくるでしょう。ハードウェアの対応も含め、今後の発展に期待したいと思います。
今回紹介した設定ファイルの内容や各種詳細については、以下のサイトをご覧下さい。

●Asteriskオフィシャルサイト ( http://www.asterisk.org )
●Voip-info.org ( http://www.voip-info.org )
●Digium ( http://www.digium.com )

Copyright 1999-2008 SYON Communications, Co. All rights reserved