メイン

IP電話 アーカイブ

2007年12月19日

IP-PBX を勉強してみようか

先日日本出張した折に、日本での仕事仲間とお互いの近況など含めていろいろ情報交換したのだけど、お互いが最近興味を持っているキーワードの1つとして「IP-PBX」が話題に上がった。まあお互い決して暇な身とは言えないかもしれないけど合間を見ていろいろ勉強していこうではないかと話は盛り上がる。氏は翌日には IP 電話関係の書籍を数冊買い込んだ模様。僕も日本を経つ前に八重洲ブックセンターに立ち寄って2冊ほど書籍を購入。

それら本を参考にしながら、とりあえずの勉強課題として、導入が容易そうな Linux ベースの IP-PBX を構築してみようかなと思う。まずは Red Hat 9 Linux ベースのマシンを用意し、そのマシンでオープンソースの IP 電話システム Asterisk を稼動させてみたい。そうは言っても、最近めっきり Linux に触る機会が無かったので、この機会にディストリビューション CD-ROM 付きの参考書を購入。あと本棚の片隅に以前に購入しておいた IP 電話関連の書籍を見つけたので引っ張り出して手元に置いておく。参考書は一通り揃ったので次はマシンの調達だな。

2007年12月20日

IP-PBX 用にパソコンを調達する

IP-PBX として使うマシンを用意しなければならいのだが、現在手元に余っているマシンは無い。少し前までは、今となっては旧型だけとパーツを吟味して組み上げたので Windows XP もサクサク動く P3 デュアル CPU デスクトップマシンが遊んでいたのだけど、扱いやすく組み直して子供部屋に設置してしまった。子供達も自発的に電源を入れて使うことはまだ無いが、いまさら返せとも言えないし。かといって新しいマシンを買うほどのお金も無い。というわけで、タダあるいはタダに近い安値で調達を試みる。

もっとも重要なマシン本体は友人の好意に甘えて eMachines 製 T1801 デスクトップマシン (Celeron 800MHz/RAM 128MB/HDD 20GB、NIC 増設済み) の贈呈を受ける。Linux をインストールして使うには充分なスペックだ。感謝である。モニタは 15 インチ CRT ディスプレイが余っているのだけど、もはや置き場が無い。ちょうど eBay に出品されていた Dell 製 15 インチフラットパネルモニタ 1504FP の中古品を $85 + 送料 $18 = 合計 $103 で落札。この値段なら無名メーカー製激安新品よりもまだ安いだろう。キーボードはネットで購入すると送料の方が高くついてしまうので、最寄のショップ Micro Center で GearHead 製 107-Key Keyboard を $6.99 + Tax で買ってくる。X-Window などのウィンドウ環境をインストールするかまだ分からないけど、もしマウスが必要なら Microsoft Optical Mouse が余っているのでそれを使えば良い。

という感じでマシン1セットが調達できてしまった。まあフラットモニタの調達にお金を使ったけど、ちゃんとしたモニタは今回の用途以外にも使い回しが利くのであながち悪い買い物じゃないだろう。次はこのマシンに Red Hat Linux 9 をインストールする。

DSCF2580.jpg DSCF2585.jpg DSCF2588.jpg

2007年12月23日

Asterisk をインストールする

開発元のサーバから Asterisk のソースを取得し、ビルドしてインストールする。

ほとんどの手順は参考書「Asterisk でつくる IP 電話システム」に書かれている通りである。

1) ソースの取得

参考書では CSV サーバ(cvs.digium.com)からソースファイルをダウンロードするように書かれているが、CVSサーバが存在しないため調べてみると、SVNリポジトリに変更になっている模様。ブランチの最新版は v.1.4 らしいが、参考書と同じ操作ができるように v.1.0.7 をダウンロードする。ダウンロードするのは asterisk、libpri、zaptel の合計3つ。

# cd /usr/src
# svn checkout http://svn.digium.com/svn/asterisk/tags/1.0,7 asterisk
# svn checkout http://svn.digium.com/svn/libpri/tags/1.0,7 libpri
# svn checkout http://svn.digium.com/svn/zaptel/tags/1.0,7 zaptel

2) zaptel のインストール

zaptel は Zapata Telephony のことで、asterisk では電話回線を扱う部分で使用されているらしい。電話回線インタフェース(TDM400Pなど)を持っていない場合でも、Asterisk が動作タイミングを得るためにインストールしなければならない。カードを使用しない場合は ztdummy と呼ばれるダミーモジュールをロードする必要がある。カードが無い場合は ztdummy は USB からタイミング信号を取るので、Linux の USB ドライバが正しく動作していることを確認すること。

# cd /usr/src/zaptel

Makefile を編集: MODULES= 行でコメントアウトされている ztdummy を有効にする。その後ビルドしてインストール。

# make clean
# make install
# make config

/etc/init.d/zaptel スクリプトを編集する:

MODULES="... ztdummy"   末尾にztdummy追加
RMODULES="ztdummy ..."  先頭にztdummy追加

zaptel スクリプトを有効にする:

# /sbin/chkconfig --add zaptel
※ chkconfig - updates and queries runlevel informaton for system services

zaptel 設定ファイルを編集する:

# cd /etc
# mv zaptel.conf zaptel.conf.bak	現在のファイルをバックアップ
# vi zaptel.conf
loadzone=us     インタフェースカードが米国インジケーショントーンでロードされる
defaultzone=us  デフォルトでこのゾーン用のツーンを使用する
               (共に日本の場合はjpと指定する)

デーモンを起動する:

# /etc/init.d/zaptel start
Loading zaptel framework:               [  OK  ]
Waiting for zap to come online ...OK
Loading zaptel hardware modules: Specify address with base=0xNNNNN
Registered Tormenta2 PCI
Wildcard USB FXS Interface driver registered
wcusb ztdummy
Running ztcfg:                          [  OK  ]

3) libpri のインストール

# cd /usr/src/libpri
# make clean
# make install

Asterisk は mpg123 を使って保留音を鳴らすが、Red Hat Linux 9 では mpg123 が別のプログラムに置き換えられているのでインストールし直す必要がある。

# rm -f /usr/local/bin/mpg123    もし /usr/local/bin に mpg123 があれば削除する
# cd /usr/src/asterisk
# make mpg123 install
# chmod u+s /usr/local/bin/mpg123

3) asterisk のインストール

インストール済みの旧バージョンの Asterisk を新バージョンにアップデートする場合には、古いモジュールが残っていると起動に失敗するので全て削除しておく:

# rm -f /usr/lib/asterisk/modules/*
# cd /usr/src/asterisk
# make clean
# make install

設定ファイルはサンプルをそのまま利用する:

# make samples

以上で Asterisk のビルド&インストールは完了。

2007年12月24日

Asterisk の起動環境を設定する

Asterisk の起動環境を設定する。

前回同じく、ほとんどの手順は参考書「Asterisk でつくる IP 電話システム」に書かれている通りである。

1) 起動ユーザの作成

ルート権限で起動するのは望ましくないので、ユーザ "asterisk" から起動されるように設定する:

# adduser - u 5000 asterisk -s /sbin/nologin -d /var/lib/asterisk
# mkdir /var/run/asterisk
# chown -R asterisk:asterisk /var/lib/asterisk
# chown -R asterisk:asterisk /var/log/asterisk
# chown -R asterisk:asterisk /var/run/asterisk
# chown -R asterisk:asterisk /var/spool/asterisk
# chown -R asterisk:asterisk /dev/zap
# chmod -R u=rwX,g=rX,o= /var/lib/asterisk
# chmod -R u=rwX,g=rX,o= /var/log/asterisk
# chmod -R u=rwX,g=rX,o= /var/run/asterisk
# chmod -R u=rwX,g=rX,o= /var/spool/asterisk

メモ: adduser のオプションの意味: -u uid -s shell -d home_dir

参考: 各ディレクトリの役割を知ろう(ルートディレクトリ編) - @IT
http://www.atmarkit.co.jp/flinux/rensai/theory02/theory02a.html
var - プリントやメール、ネットニュースのスプール、キャッシュといった作業用エリア、ログファイルなど、変化していく(variable)ファイルを配置するディレクトリです。/tmpと違って、リブートしても削除されません。

zaptel を再インストールすると /dev/zap 下のドライバのオーナが root に戻るので、再び設定し直す必要があることに注意。

ISDN 及びサウンド関係のデバイスファイルも念のため設定しておく:

# chown asterisk /dev/capi20
# chown asterisk /dev/dsp

コンソールドライバがtty9を掴むので変更しておく:

# chown asterisk /dev/tty9

2) 起動スクリプトの設定

起動スクリプトをディストリビューションに応じてコピーする:

# cp redhat/asterisk /etc/init.d/asterisk

/etc/init.d/asterisk を以下のように修正する:

#!/bin/bash
#
# chkconfig: 2345 99 15
# description: Open source PBX 
# processname: asterisk
 
# source function library
. /etc/rc.d/init.d/functions
 
RETVAL=0
OPTIONS="-U asterisk -G asterisk"	(1行追加)
 
case "$1" in
  start)
	echo -n "Starting Asterisk PBX: "
#	/sbin/modprobe ixj		(コメントアウト)
	daemon /usr/sbin/asterisk $OPTIONS	($OPTIONS追加)
	RETVAL=$?
	echo
	[ $RETVAL -eq 0 ] && touch /var/lock/subsys/asterisk
	;;
  stop)
	echo -n "Shutting Asterisk PBX: "
	killproc asterisk
#	/sbin/rmmod -r ixj		(コメントアウト)
	RETVAL=$?
 
	echo
	[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/asterisk
	;;
  restart|reload)
	$0 stop
	$0 start
	RETVAL=$?
	;;
  status)
	status asterisk
	RETVAL=$?
	;;
  *)
	echo "Usage: asterisk {start|stop|status|restart|reload}"
	exit 1
esac
 
exit $RETVAL

起動スクリプトに実行権限を与える:

# chmod 755 asterisk

/etc/asterisk/asterisk.conf を以下のように修正する:

[directories]
astetcdir => /etc/asterisk
astmoddir => /usr/lib/asterisk/modules
astvarlibdir => /var/lib/asterisk
astagidir => /var/lib/asterisk/agi-bin
astspooldir => /var/spool/asterisk
astrundir => /var/run/asterisk		(変更前は /var/run)
astlogdir => /var/log/asterisk

Asterisk を起動してみる:

# /etc/init.d/asterisk start
Starting Asterisk PBX:     [  OK  ]
# ps -el
PID TTY TIME CMD
3057 ?	00:00:00 asterisk
3064 ?	00:00:00 mpg123
3066 ?	00:00:00 mpg123
# /etc/init.d/asterisk stop
Shutting Asterisk PBX:   [  OK  ]

3) モジュールの調整

/etc/asterisk/modules.conf を編集して不要なモジュールがロードされないようにする:

;
; Asterisk configuration file
;
; Module Loader configuration file
;
 
[modules]
autoload=yes
;
; If you want, load the GTK console right away.  
; Don't load the KDE console since
; it's not as sophisticated right now.
;
noload => pbx_gtkconsole.so
noload => pbx_kdeconsole.so
;
noload => chan_mgcp.so
;
; Intercom application is obsoleted by
; chan_oss.  Don't load it.
;
noload => app_intercom.so
;
; Explicitly load the chan_modem.so early on to be sure
; it loads before any of the chan_modem_* 's afte rit
;
noload => chan_modem.so
noload => chan_modem_aopen.so
noload => chan_modem_bestdata.so
noload => chan_modem_i4l.so
;
noload => chan_skinny.so
;
load => res_musiconhold.so
;
; Load either OSS or ALSA, not both
; By default, load OSS only (automatically) and do not load ALSA
;
noload => chan_alsa.so
noload => chan_oss.so
;
; Module names listed in "global" section will have symbols globally
; exported to modules loaded after them.
;
[global]
;chan_modem.so=yes

以上で Asterisk の起動環境の設定は完了。

2007年12月25日

Asterisk の動作設定をする

PBX としての Asterisk の動作設定を行う。

前回同じく、ほとんどの手順は参考書「Asterisk でつくる IP 電話システム」に書かれている通りである。

Asterisk の設定ファイルは /etc/asterisk に格納されている。インストール時にサンプルファイルが作成されるので、必要なファイルのみ変更すれば良い。今回変更するのは sip.conf と extensions.conf の2ファイルのみ。sip.conf は SIP 対応のハード/ソフト電話を使う場合に設定するファイルで、今回は SIP ソフトフォンを試す予定なので設定が必要。extensions.conf は Asterisk の中核とも言える設定ファイルで、PBX のダイヤルプランを定めるため環境に合わせた設定が必要である。

まずは、念のためにサンプルファイルをバックアップしておく:

# cd /etc/asterisk
# mv sip.conf sip.conf.bak
# mv extensions.conf extensions.conf.bak

参考書に従って、sip.conf ファイルを以下の通り作成する。この設定では 2001 番と 2002 番の2つのSIP端末を定義している。

[general]
context=default
bindport=5060
bindaddr=0.0.0.0
srvlookup=yes
disallow=all
allow=ulaw
allow=alaw
allow=gsm
allow=ilbc
dtmfmode=inband
 
[2001]
type=friend
username=2001
secret=12345
host=dynamic
canreinvite=no
dtmfmode=rfc2833
 
[2002]
type=friend
username=2002
secret=67980
host=dynamic
canreinvite=no
dtmfmode=inband

同じく参考書に従って、extensions.conf ファイルを以下の通り作成する:

[general]
static=yes
writeprotect=yes
autofallthrough=yes
 
[default]
exten => 2001,1,Dial(SIP/2001,30)
exten => 2001,2,Hangup
 
exten => 2002,1,Dial(SIP/2002,30)
exten => 2002,2,Hangup
 
exten => 2003,1,Dial(Zap/1,30)
exten => 2003,2,Hangup

asterisk を再起動して新しい設定を適用すれば準備完了。

# /etc/init.d/asterisk restart

これで Asterisk が IP-PBX として動作するようになったはずなので、次は実際に通話してみよう。

補足: 参考書では zapata.conf ファイルも設定しているが今回は必要ない。zapata.conf ファイルは、Zapata Telephony ドライバ経由でアナログ電話回線等を扱うための設定ファイルである。参考書では TDM400P+FXS でアナログ電話機を接続するケースを想定して以下のファイルを作成している。

[channels]
signalling=fxo_ks
echocancel=yes
echotraining=400
callerid=2003
callwaiting=yes
threewaycalling=yes
transfer=yes
group=1
context=default
channel=>1
 
signalling=fxo_ks
echocancel=yes
echotraining=400
callerid=asreceived
busydetect=yes
busycount=4
group=2
context=incoming
channel=>4

僕の環境ではアナログ電話機は接続しないのだが、当初は参考書通りに上記ファイルを作成した。設定ファイルがあっても実機が無ければ無視されるだけだろうと甘く考えていたのだけど、実際には Asterisk が起動に失敗するという大問題になり、結局設定ファイルをサンプルに戻すことで解決。

Asterisk ではシステムエラー等のログは /var/log/asterisk に吐き出される。内容を見てみると、実機無しで zapata.conf ファイルを設定すると「Unable to open channel 1」というエラーが発生する。ちなみに zapata.conf ファイルが存在しないと「Unable to load config zapata.conf」というエラーが発生して同じく Asterisk の起動に失敗する。Zapata Telephony ドライバを使う機器を用いない場合も設定ファイルは存在しなければならないようだ。

2007年12月26日

SIP ソフトフォンをセットアップする

Asterisk による PBX を経由した通話テストをしてみたい。

それには Windows マシンにインストールした SIP ソフトフォンを使う。というか、手元にはアナログフォンを接続するためのテレフォニーデバイスもネットワークに直結できる IP 電話機も持っていないので選択肢はソフトフォンしか無いということ。SIP ソフトフォンにはフリーで使える SJLabs 製の SJphone を使用する。SJ Labs のサイトへアクセスし、Free downloads ページから最新の Windows 版 SJphone をダウンロードする。現時点の最新版は v.1.65.377a らしい。

SJphone for PC (stable):
SJphone for MS Windows XPsp2, v.1.65.377a, 20.03.07 (NEW!)
http://www.sjphone.org/softphone/SJphone-1.65.2637.exe

ダウンロードした EXE ファイルをダブルクリックするとインストールが始まる。

sjphone01.jpg sjphone02.jpg

インストールが完了すると SJphone が自動起動される。Norton Internet Security 等のセキュリティソフトをインストールしていると、SJphone が WAN 側にアクセスしに行くので警告が表示されるかもしれない。SJphone が起動されると初回のみオーディオ設定のために Auto Wizard が表示されるので、画面の指示に従ってオーディオ設定を行う。

sjphone03.jpg sjphone07.jpg

Auto Wizard が終了すると SJphone のメイン画面にアクセスできるようになる。

sjphone10.jpg

SJphone の設定を続ける前に Linux マシンに戻って Asterisk の CLI 画面を表示しておこう。CLI 画面には端末からアクセスがあったときの処理ログなどが表示されるので確認に便利である。

# /etc/sbin/asterisk -vvvcr

Asterisk の PBX 経由で通話できるように SJphone に Profile を作成する:

1. Menuをクリックして[Options...]を選択する。
すると[Options]ダイアログボックスが表示される。
sjphone11.jpg

2. [Profiles]タブをクリックし、[New...]ボタンをクリックする。
すると[Create New Profile]ダイアログボックスが表示される。
sjphone12.jpg

3. [Profile name]に[Asterisk]、[File name]に[Asterisk.ini]と入力し、[Profile type]で[Calls through SIP Proxy]を選択して[OK]ボタンをクリックする。
すると[Profile Options]ダイアログボックスが表示される。
sjphone13.jpg

4. [SIP Proxy]タブをクリックし、[Domain/Realm]に Asterisk をインストールしたマシンの IP アドレスを入力する。
sjphone15.jpg

5. [OK]ボタンをクリックする。
すると[Service: Asterisk]ダイアログボックスが表示される。
sjphone16.jpg

6. PBX 側で sip.conf ファイルで設定したアカウント情報を入力する、
[Account]に[2001]、[Password]に[12345]と入力して[OK]をクリックする。

正しく設定できていれば SJphone の画面は以下のように表示される(左: Simple Mode、右: Advanced Mode)。

sjphone17.jpg sjphone18.jpg

端末のレジスト要求を受けて、Asterisk の CLI には以下のメッセージが表示されるはず。

-- Remote UNIX connection
-- Registered SIP '2001' at 192.168.2.3 port 5060 expires 120
localhsot*CLI>

SIP クライアント(ソフトフォン)が IP-PBX に正常にレジストされて通話の準備が整った。

2007年12月27日

Asterisk と SJphone でエコーテストを行う

実際に通話テストしたいところだが、テストには通話相手が必要だ。別のパソコンにも SIP ソフトフォンをインストールすれば良いのだろうけど、なにぶん一人で作業しているので片方のパソコンで「もしもし~」、もう1台のパソコンで「はいはい~」なんて駆けずり回っいる光景はまるでコントかも。というよりも、煩雑すぎてテストにならいような。というわけで、参考書で紹介されていたエコーテストを試してみることにする。

/etc/asterisk/extensions.conf にエコーテスト用の記述を追加する:

exten => 1001,1,Answer()
exten => 1001,2,Wait(1)
exten => 1001,3,Playback(demo-echotest)
exten => 1001,4,Playback(beep)
exten => 1001,5,Echo
exten => 1001,6,Playback(demo-echodone)
exten => 1001,7,Playback(vm-goodbye)
exten => 1001,8,Hangup

Asterisk を再起動して設定を有効にした後、ソフトフォンから 1001 にダイヤルすると、アナウンスが流れた後にエコーテスト状態になる。喋った内容が少し遅れて聞こえれば OK だ。Asterisk CLI が実行されていればセッションのログが画面に表示される。ウチの IP-PBX は無事に動き始めたようだ。

2007年12月29日

PDA に SIP ソフトフォンをインストールする (1)

Asterisk を使って IP-PBX を構築しているというのに、電話端末は SIP ソフトフォン(SJphone)をインストールしたパソコン1台だけでは話にならない。通話相手も無くエコーテストばかりしているわけにもいかないので、手持ちの Wi-Fi 対応 PDA である HP 製の iPAQ hx2945b(Windows Mobile 5.0)に SIP ソフトフォンをインストールしてみたい。

1) ダウンロード

SJ Labs のサイトの Free Downloads ページから SJphone CE をダウンロードする。現時点の最新版は v.1.60.303c の模様。同時にマニュアルもダウンロードしておく。

SJphone CE .exe for Pocket PC 2003SE, v.1.60.303c, 10.26.05
http://www.sjphone.org/softphone/SJphone-PPC2003SE-303c.exe

SJphone User Guide for Pocket PC 2003 (.pdf, 0.6M)
http://www.sjphone.org/doc/SJphone%20Guide%20PPC2003.pdf

2) インストール

マニュアルを見ながら ActiveSync を使ってインストール。

1. PDA をパソコンに接続し、パソコン上でインストーラを起動する。
すると[SJ Labs End-User License]ダイアログボックスが表示される。
sjphone_ce01.jpg

2. [Accept]ボタンをクリックして先へ進む。
するとインストールを確認するメッセージが表示される。
sjphone_ce02.jpg

3. [はい]ボタンをクリックして先へ進む。
するとインストール先フォルダを尋ねるダイアログボックスが表示される。
sjphone_ce03.jpg

4. インストール先フォルダを指定して[OK]ボタンをクリックする。
今回はインストール先フォルダはデフォルトのまま。
するとディレクトリを作成するか確認するメッセージが表示される。
sjphone_ce04.jpg

5. [はい]ボタンをクリックして先へ進む。
するとインストールが始まり進捗状況が表示される。
sjphone_ce05.jpg
アプリケーションが PDA に転送されると以下のメッセージが表示される。
sjphone_ce06.jpg

6. [OK]ボタンをクリックするとインストーラが終了する。
PDA の画面には以下のメッセージが表示される。

3) 設定

次は PDA 側を設定する:
1. Start メニューから[Programs]フォルダを開き、SJphoneを起動する。
2. Audio Wizard が表示されるので、画面に従ってオーディオ設定を行う。
3. Audio Wizard が終了すると SJphone のメイン画面が表示される。
4. [Menu]-[Options...]メニューを選択する。
5. [Profiles]タブをクリックする。
6. [New...]ボタンをクリックする。
7. [Profile name]に[Asterisk]、[File name]に[Asterisk.ini]と入力し、[Profile type]で[Call through SIP Proxy]を選択して[OK]ボタンをクリックする。
8. [SIP Proxy]タブをクリックする。
9. ウチの環境に合わせて[Proxy domain]に[192.168.2.6]:[5060]、[User domain]に[192.168.2.6]と入力し、残りのオプションはデフォルトのまま[OK]ボタンをクリックする。すると[Service: Asterisk]画面が表示される。
10. Asterisk で設定してあるアカウント情報に従って、[Account]に[2002]、[Password]に[67980]と入力して[OK]ボタンをクリックする。
11. [OK]ボタンをクリックして設定を終了すると PDA の SIP ソフトフォンが Asterisk にレジストされる。

1229041323.jpg

Linux マシン上で Asterisk CLI を実行していれば以下のメッセージが表示される。

-- Registered SIP '2002' at 192.168.2.5 port 5060 expires 120
localhost*CLI>

以上で設定は完了。いざテスト。

Asterisk 側は 1001 番にダイアルするとエコーテストが実行できるように設定してあるので、早速 PDA の SJphone からダイヤルしてみるもののPBX からのアナウンスが途切れ途切れに聞こえて、アナウンスが終わる前に SJphone がハングアップする(キー操作が何も利かない)という現象が発生。唯一利く[X]ボタンで SJphone のメイン画面を閉じてみるが、タスクマネージャで見てみるとまだプログラムはいまだ実行中で強制終了を試みるが終了できない。なかなか困った症状。気になることは、インストールした SJphone は Pocket PC 2003SE 版は Windows Mobile 5.0 ペースの PDA に合っているのかどうか、この PDA には DirextX がインストールされていないことが Audio Wizard 実行時に指摘されたが問題無いか、という2点ぐらい。もしかすると他の原因かもしれないが、細かくチェックしていく必要がありそう。

といった課題を残して今日は時間切れ。

2007年12月30日

PDA に SIP ソフトフォンをインストールする (2)

「PDA にインストールした SIP ソフトフォンが通話中にハングアップする」という昨日の不具合の解決を試みる。結果を先に言えばいまだ解決していない。以下は思考と試行の記録メモ。備忘録として。昨日不具合の原因として考えたことは、1) 適切なバージョンの DirectX のインストールが必要なのではないか、2) インストールした SJphone のバージョンが不適切なのではないか、の2点。まず DirectX について調べてみる。

1) DirectX 問題?

Windows Mobile に不慣れなので DirectX のインストールの有無を確かめる方法が分からない。困ったときのネット頼りで検索してみるが手順等を示したページは見つからず。かつ、Windows Mobile 用 DirectX ランタイムを配布しているページも見つからず。いろいろ探しているうちに MSDN 内に以下の記述を見つける。

Windows Mobile DirectX and Direct3D
http://msdn2.microsoft.com/en-us/library/ms172504.aspx

The .NET Compact Framework provides two namespaces for developing managed DirectX and Direct3D applications for devices:
*Microsoft.WindowsMobile.DirectX
*Microsoft.WindowsMobile.DirectX.Direct3D
Both namespaces are in the Microsoft.WindowsMobile.DirectX assembly in Microsoft.WindowsMobile.DirextX.dll.

これを読む限りでは DirectX は .NET Compact Framework に標準で含まれているように思える。もしそうならば、Windows Mobile 用の DirectX のランタイム配布版が見つからないのも納得できる。しかし、SJphone で DirectX が検出されなかったのは納得いかない。単に SJphone の不具合なのか。

上の文章を何度か読み直しているうちに .NET Compact Framework のバージョンに問題は無いか?という疑問が生じる。現時点の安定した Windows CE 用 .NET Framework は .NET Compact Framework 2.0。既に .NET Compact Framework 3.0 も存在するものの実績は少ないだろう。この PDA で稼動している Windows Mobile 5.0 には .NET Compact Framework 2.0 がインストールされているのだろうか。Settings でインストール済みソフトを見てみるが SJphone 以外のソフトはリストされていない。既に OS に含まれているのか、それも調べる術を知らないのは Windows Mobile 初心者の悲しいところ。急がば回れだな。

1. .NET Compact Framework 2.0 再頒布可能パッケージをダウンロード。僕の PDA は英語 Windows なので英語版を選択(日本語 Windows なら日本語版を選択するべきだろう)。

.NET Compact Framework 2.0 Redistributable(英語版)
http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=9655156b-356b-4a2c-857c-e62f50ae9a55

2. PDA をクレイドルにアタッチ。

3. ダウンロードした NETCFSetupv2.msi を実行。
以下のメッセージが表示されてインストールが続行できず。既に OS に含まれていたようだ。
netfw00.jpg

4. MSのサイトを見ていたら .NET Compact Framework 2.0 SP2 を見つけたのでダウンロード。
.NET Compact Framework 2.0 Service Pack 2 Redistributable(英語版)
http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=aea55f2f-07b5-4a8c-8a44-b4e1b196d5c0

5. インストールを試みると正常にインストールが行われる。
netfw01.jpg
ActiveSync 経由でファイルが転送された後、PDA上で .CAB ファイルのインストールが開始される。インストールが終了すると再起動を促されるので[OK]ボタンをクリックして再起動する。

6. 再起動後に SJphone を起動して Audio Wizard を実行するが、やはり DirectX は検出されず。Asterisk でエコーテストを試みるが通話中にハングアップする現象は変わらない。

2) SJphone のバージョン問題?

SJ Labs の Free Downloads ページを見ていると、Stable(安定)版の SJphone は Pocket PC 2003 及び 2003SE 用しか無いが、Trial softphones (unstable) のページに行ってみると Windows Mobile 5.0 用と思しきアーカイブがダウンロード可能になっている。試していた SJphone のバージョンが誤っていたのかもしれないな。

SJphone-wm5.0-320b.exe
http://www.sjphone.org/preview/SJphone-1.60-WindowsCE(preview)/SJphone-wm5.0-320b.exe

現在インストールされている SJphone for Windows CE (Pocket PC 2003) をアンインストールし、ダウンロードした SJphone for Windows CE (Windows Mobile 5.0) をインストール。インストールされている .NET Compact Framework は 2.0 SP2 である。

1. SJphone を起動するとAudio Wizard が実行される:
DirectX が検出されないのは以前と変わらず。ホントに DirectX がインストールされていないのか確かめる方法がわからない。

2. Audio Wizard の途中で以下のメッセージが表示される。

If your device has a microphone Automatic Gain Control feature, disable it and set the microphone level to 0.5:07. Usually this features is controlled on Settings -> System -> Audio.

インストール後に確認したら既に Disable になっていたので問題なし。

3. 設定を終えると PDA の動作が非常に緩慢になる。バックグラウンドで凄く重い処理が動いているような感じ。しばらく経つと普通の速さになったが、あの遅さはなんだったんだろうか。Asterisk へ 1001(エコーテスト)をダイアルしてみるが、症状は変わらず。アナウンスの途中でハングアップして画面の再描画も止まっている。

とりあえず Windows Mobile 5.0 用の安定版がリリースされるまで保留。

2008年01月01日

IP電話機を借りてきた

所詮は自己勉強用なので SIP ソフトフォンで充分なのだけど、できることなら IP 電話機も繋いでみたい。ネットで中古品を探してみても有名メーカー製多機能ビジネスフォン IP 電話機で $100 ぐらいする。テスト目的でずっと使うものでもない品物にそこまでの費用はかけられないよな。で、友人知人に聞いて回ったところ、余っている IP 電話機を貸してくれるとの申し出あり。ありがたや。

その IP 電話機は NEC 製の Dterm IP(品番 ITR-16D-3)という端末。アメリカ市場はもちろん、日本でも売られている製品のようでヤフオクで1万円未満で中古品が見つかる。我が家では PoE(Power over Ethernet)で電力供給する環境が無いので、外付け電源として AC アダプタも一緒に借りておく。仕様上は SIP プロトコルをサポートしていると謳われているらしいけど、Asterisk と接続できるかどうかは保証の限りではないとのこと。ネットで説明書などを探してざっと目を通してみると、確かに「SIP + NEC独自拡張」プロトコルと書かれているな。まあダメ元で Asterisk との接続を試みてみよう。

DSCF2772.jpg DSCF2777.jpg DSCF2783.jpg

2008年01月03日

NEC 製 DtermIP 電話機を Asterisk で使えるか?

借りてきた IP 電話機 の Asterisk への接続を試す。

結論から言うと接続は無理っぽい。この電話機は NEC の IP テレフォニーソリューションの一端を担う製品で、汎用的な IP 電話機とは仕様が異なる。NEC が公開している情報によれば、サポートしているプロトコルは「Protims over IP、NEC Extended SIP」ということで、SIP がベースになっているようだが NEC 独自の拡張が行われている模様。もはや SIP 互換じゃないんだから Asterisk への接続は無理だよなというのが、まあ短絡的な僕の結論。

実際にこの IP 電話機を LAN に接続して電源を供給してみると、まず画面には Initializing... と表示される。数秒待つと画面表示は DHCP Connecting... に変わる。これは IP アドレスを DHCP 経由で取得するように設定してあるため。そして IP アドレスが取得できると、今度は DRS(1st) Connecting... と表示され、暫らく待つと DRS Connect Time Out と表示されて止まる。

DRS とは聞きなれない言葉だが、NEC の資料によると Dterm Registration Software の略称らしく、それは「IP ネットワーク上における IPELC (IP Enabled Line Circuit) と DtermIP 端末との接続を総合的に管理するもの」とある。それ以上の詳しい資料はネット上では見つからなかったが、勝手に推測すると LAN にぶら下がった IP 電話機を一元的に管理するサーバが DRS なのだろう。DtermIP の設定マニュアルを見ると、これまで SIP ソフトフォンで見かけたような IP-PBX に接続するための「プロキシドメイン」や「ポート」に該当する設定が見つからない。ユーザが LAN に端末を接続するだけで、細かい設定制御は DRS がある程度自動で行ってくれるのではないか。もしそうだとすると、これは Asterisk を使った IP-PBX には無いコンセプトのように思える。

試しに DRS をスキップできないかと思い、DRS の IP アドレスを 0.0.0.0 に設定してみたりもしたが、そうすると今度は DNS Connecting... というメッセージが表示されて DNS から DRS の IP アドレスを引きに行くようになった。その場合も DRS は存在しないので DRS Connect Time Out と表示されて止まる。DRS なるものが存在しなければ DtermIP は役に立たないように思える。言い換えるならば DtermIP は単独で IP 電話機として機能するというよりも、DRS を経由してぶら下がる複数台の DtermIP を総じて見て「IP 電話機網」として扱うようになっているのではないか。そして DRS と IP-PBX 間が純粋な SIP に近い(あるいは SIP もどきな)プロトコルで接続されているのではないか。DRS はゲートウェイとして機能しているのか。などなど勝手な想像。

ネット上で IP 電話関係技術者の掲示板などを検索してみると、DtermIP と Asterks の互換性に関する質問の書き込みが幾つか見つかるが、残念ながらどれも的確なレスは付けられていない。カタログにも正式には SIP サポートと書かれていないので、これ以上やっても時間の無駄かもしれないな。というわけで DtermIP を Asterisk に接続する試みは一旦終了。せっかく借りたのに残念だけど。

2008年01月05日

Asterisk - 間違い番号にはアナウンスを流す

通常は存在しない番号にダイアルしても電話は掛からない。SIP ソフトフォンの SJphone では以下のメッセージが表示される。実機が無いので確認のしようが無いのだけど、IP 電話機やアナログ電話機だと何も起こらずに単にダンマリになるのかもしれない。番号が誤っていたときにはアナウンスが流れてから話中音を鳴らすと親切だろう。

sjphone_404.jpg

Asterisk でこれを行うには、以下の行を /etc/asterisk/extensions.conf に追加する。

exten => _.,1,Answer()
exten => _.,2,Wait(1)
exten => _.,3,Playback(pbx-invalid)
exten => _.,4,Congestion

参考: Asterisk でつくる IP 電話システム

2008年01月06日

Asterisk - 転送機能を有効にする

参考書によると Dial コマンドにパラメータを付加することで電話の転送が可能になるとのこと。具体的には以下のように、着信側での転送の許可を示す小文字 t と、発信側での転送の許可を示す大文字の T を Dial コマンドのパラメータとして追加するとある。

exten => 2001,1,Dial(SIP/2001,30,tT)

実際に試してみたのだけど僕の環境では SIP ソフトフォンしか無いせいか、転送機能が有効になっているのかどうか判定できず。SIP ソフトフォン SJphone には Forward 機能も Transfer 機能も搭載されていて、Asterisk の設定とは無関係にどちらの機能も使えてしまう。ここでの「転送機能」とは、非インテリジェント端末を使う場合に「通話中に # を押してから転送先の内線番号をダイヤルすれば通話が転送できる」といったものらしい。こういった機能を試すにはソフトフォンでは無く IP 電話機が手元にあるといいのだけどな。

参考: Asterisk でつくる IP 電話システム

2008年01月07日

Asterisk - ボイスメールを設定する

内線電話に対してボイスメール(留守番電話)を設定する。

1) メールボックスとパスワードの設定

まずは /etc/asterisk/voicemail.conf に以下のエントリを追加する:

[default]
2001 => 12345,Buzz Dreamhound

ここで書式は「内線番号 => メールボックスパスワード,メールボックス名」。パスワードは端末から入力するので数字でなければならない。サンプルの設定ファイルには予め様々な設定がコメントとして記述されているので、書式が分からなくても想像しながら眺めてみるだけでも勉強になる。

次に /etc/asterisk/extensions.conf を以下のように変更する:

exten => 2001,1,Dial(SIP/2001,30,Tt)
exten => 2001,2,VoiceMail(2001)
exten => 2001,102,VoiceMail(2001)

ダイアルした結果が話中か応答なしならば VoiceMail() を起動して、2001 番のメールボックスにメッセージを録音する。

2) 端末へのメッセージ通知

メッセージがある時には端末に通知する。
そのためには /etc/asterisk/sip.conf を以下のように変更する:

[2001]
type=friend
username=2001
secret=12345
host=dynamic
canreinvite=no
dtmfmode=rfc2833
mailbox=2001

mailbox=2001 と指定することで、メールボックス 2001 にメッセージがあると端末に対して SIP メッセージで通知が行われる。端末側でどのように示されるか(ランプが点滅するとかインジケータに表示されるとか)は端末の機能による。

3) メッセージの再生設定

ここではメッセージの再生は端末から特番にダイヤルすることで行う。
そのためには /etc/asterisk/extensions.conf に以下のエントリを追加する。

exten => 2999,1,Answer
exten => 2999,2,Wait(1)
exten => 2999,3,VoiceMailMain(s${CALLERIDNUM})
exten => 2999,4,Wait(1)
exten => 2999,5,Hangup

2999番にダイアルすると VoiceMailMain が起動される。その時のユーザ名は発信元の内線番号${CALLERIDNUM} が使われる。頭の s はパスワードを要求しないの意味。従ってダイアルすればすぐに録音されているメッセージの再生が始まる。実践的な使用ではその端末を使えば誰でもメッセージを聞けてしまうので、パスワードを有効にするのが一般的だろう。

4) テスト

2002番から2001番をダイアルして2001番側では受話せずに放置すると、数回の呼び出し音でボイスメールに自動的に切り替わる。メッセージを残して通話を切ると、2001番側の SIP ソフトフォンにはメッセージ1件有りを示すメッセージ "There are messages waiting: 1/0" が表示される。そして 2999番へダイアルすることでメッセージを聞くことが出来れば OK である。

sjphone.jpg

参考: Asterisk でつくる IP 電話システム

2008年01月08日

Asterisk - 音声会議室を使ってみる

複数人が同時に通話できる音声会議室を作ってみる。コンファレンスコールのようなものか。

/etc/asterisk/meetme.conf に以下のエントリを追加する:

[rooms]
conf => 1001,1234

形式は「conf => 会議室番号,パスワード」である。パスワードを指定しないと(区切り文字のカンマを含めて)、パスワード無しのオープンな会議室になる。

/etc/asterisk/extensions.conf に以下のエントリを追加する:

exten => 7000,1,Answer
exten => 7000,2,Wait(1)
exten => 7000,3,MeetMe(1001|pM)
exten => 7000,4,Hangup

この設定では 7000 番という内線番号を定義し、音声会議室のアプリケーション(MeetMe)を実行する。MeetMe(1001|pM) の 1001 が会議室番号を示し、それに続く p は「ユーザが # を押して会議を抜けることができる」の意味、M はユーザが一人しかいない場合は音楽を流すの意味である。新しい参加者が入ってくるとチャイムが鳴って通話できるようになる。

ちなみに参考書によれば MeetMe(1001|dpM) と指定すると、会議室番号が自動的に作成されるとのこと。内線番号をダイアルし、既に作成されている会議室番号をダイアルするとそこに入ることができ、会議室が作成されていない場合には新たに会議室番号が作成されるらしい。それに関しては僕は実際には試していない。

参考: Asterisk でつくる IP 電話システム

2008年01月12日

IP 電話機を買ってみた

先日知り合いから借用した NEC 製 IP 電話 DtermIP が Asterisk で使えなかったのは 以前のエントリ に書いた通り。以来、Asterisk 互換を明確に謳った廉価な IP 電話機をネットショップやオークションで物色していたのだけど、フロリダ州の IT サービス会社から新品送料込みで $45+ という品物が売られていたので買ってみた。迅速な発送で本日無事に到着。

その IP 電話機は GrandstreamGXP2000 という製品。廉価な割に通常の IP ビジネス電話でサポートしている機能はほぼ搭載している感じ。Asterisk 用の設定手順もメーカーのウェブサイトから PDF ドキュメントとして提供されているので、Asterisk と連携して使えるのは間違いなさそうだ。

DSCF3056.jpg DSCF3059.jpg DSCF3061.jpg

2008年01月14日

IP 電話機を Asterisk につなぐ

先日購入した IP 電話機 を Asterisk に繋いでみる。

まずは電話機増設のための Asterisk 側の設定。細かい手順は省くが設定したのは以下の内容。

1. sip.conf に内線番号 2003 番を追加。
2. voicemail.conf にボイスメールボックス 2003 番を追加。
3. extensions.conf に 2003 番のコーリングプランを追加。

次に端末側の設定。

1. 開梱して受話器と本体を付属カールコードで繋ぎ、本体に付属 AC アダプタを接続する。
本体の赤色 LED が点灯し、LCD パネルに 1900-01-01 という日付が表示される。
DSCF3071.jpg

2. 本体にLANケーブルを接続する。
本日日付とDHCPで割り当てられたIPアドレスが表示される(後で分かったことだが、本体はデフォルトで nasa の ntp サーバに時刻照会するように設定されていた)。
DSCF3073.jpg

3. 説明書を見ながら設定作業。まずは同じLANに接続されているパソコンでブラウザを起動してIP電話機のIPアドレスを入力する。
するとパスワード入力画面が表示される。
gxp2000_01.jpg

4. デフォルトパスワード admin を入力して [Login] ボタンをクリックする。
すると設定画面が表示される。
gxp2000_02.jpg

5. [BASIC SETTING] ページで以下を設定して [Update] ボタンをクリックする。
Time Zone: GMT-8.00 (US Pacific Time, Los Angeles

6. [ACCOUNT 1] ページで以下を設定して [Update] ボタンをクリックする。
Account Name: Asterisk
SIP Server: 192.168.2.6
SIP User ID: 2003
Authenticate Password: 98765
gxp2000_03.jpg

7. [Reboot] ボタンをクリックする。

これで端末側の基本設定は完了。CLI を実行していれば、端末がリブートされて Asterisk にレジストされれば以下のメッセージが表示される。

-- Registered SIP '2003' at 192.168.2.8 port 5060 expires 3600
-- Saved useragent "Grandstream GXP2000 1.0.1.9" for peer 2003
localhost*CLI>

実際にダイアルして通話テストしてみる。IP 電話機から SIP ソフトフォンへ、そしてその逆へダイアルして通話問題なし。ボイスメールも無事に機能する。Asterisk と端末の互換性はバッチリだ。メーカー提供の資料では更に細かい Asterisk のコーリングプラン設定が記載されているが、まあとりあえず通話できたのだから細かい部分は放置しておこう。やっぱりソフトフォンと違って電話機だと「電話しているなぁ」という実感があっていいね。

DSCF3074.jpg DSCF3075.jpg DSCF3076.jpg

2008年01月16日

Asterisk - 代理応答を使ってみる

代理応答とは、不在の人のデスクの電話が鳴っているときに、その電話を自分の電話機で取る機能。設定は簡単で、代理応答可能に設定したいチャンネルのセクションにエントリを追加すれば良い。僕の環境には SIP フォンしか無いので /etc/asterisk/sip.conf に以下のエントリを追加するだけ:

[2001]
callgroup=1
pickupgroup=1
 
[2002]
callgroup=1
pickupgroup=1
 
[2003]
callgroup=1
pickupgroup=1

これで同じグループ内(上の設定ではグループ1)の電話が鳴っているときには、同じグループに属する電話で代理応答ができるようになる。実際の操作では受話器を取って *8 を押すことで代理応答ができる。このボタンはデフォルトで設定されており、/etc/asterisk/features.conf に以下のように設定テンプレートが記述されているので、必要ならば有効にして変更も可能:

;pickupexten = *8

ちなみに参考書によれば pickupgroup のみを追加すれば良いと書かれていたが、僕の環境では callgroup も追加しなければ代理応答が有効にならなかったのでそのようにした。いいのか悪いのか良く分からない。要調査。

参考: Asterisk でつくる IP 電話システム

2008年01月17日

Asterisk - コールパーキングを使ってみる

コールパーキングとは、いわゆる保留機能。通話中に特定の番号に電話すると、相手は保留状態になって音楽が鳴り、自分には再接続のための番号が通知されて一旦電話は切れる。通知された番号に任意の電話からダイアルすると保留中の相手に接続される。接続しないまま(相手を保留状態にしたまま)一定時間を経過すると自動的に自分の電話がダイアルされて相手と繋がるという機能もある。

/etc/asterisk/features.conf に以下のエントリを追加する。ちなみに、僕の環境ではこれらエントリは予め設定ファイルに追加されていたので編集の必要な無かった:

parkext => 700
parkpos => 701-720
context => parkedcalls
parkingtime => 45

そして /etc/asterisk/extensions.conf のパーキングを行うセクションに以下のエントリを追加する:

include => parkedcalls

これでコールパーキングが使えるようになる。実際の操作では、相手と通話中に電話機の機能を使って 700 番へ通話を転送する。相手側は音楽が鳴って保留状態になり、自分の電話には自動音声で番号が通知されて一旦電話が切れる。以後その番号へ再びダイアルすれば保留中の相手と電話できる。あるいは45秒を超えて保留したままにしているとコールバックされる。

僕の環境では自動音声による番号通知が上手く動作しない。サウンドの再生時にエラーが起きているようで、CLI を実行していると以下のエラーが表示される:

-- Playing 'digits/7' (language 'en')
Jan 4 11:16:51 WARNING[8843]: chan_sip.c:6711 handle_response: Notify answer on an owned channel?
Jan 4 11:16:51 WARNING[8843]: file.c:550 ast_readaudio_callback: Failed to write frame
-- Added extension '701' priority 1 to parkedcalls

保留番号のアナウンスが聞こえないので使い物にならない。まあテストでは他の使用者が居ないので常に保留番号 701 番が割り当てられるので動作確認はできるけど。extensions.conf のエントリを追加した位置が悪いのか見直しが必要だな。とりあえずコールパーキングが動いたと確認できたところまでで今日は終了。

参考: Asterisk でつくる IP 電話システム

2008年02月04日

Asterisk 用 FXO ボードを購入する

勉強用に立ち上げた Asterisk による IP-PBX だけど、僅か数台という限られたパソコンや電話機を接続して、狭い家の中で内線電話遊びをしているだけでは面白くない。できることなら外線を接続して着信や発信もしてみたいな、ということで、Asterisk 互換の FXO カードを買ってみた。購入先は X100P.com という香港の Asterisk 互換カード製造メーカー。オンラインで注文し、約8日間を経て Delivery Confirmation 付きの航空郵便で本日配達された。価格$29.95 + 送料 $8 の合計 $37.95 なり。パッケージの中身は基板、PCI 小プロファイル(取り付け版)、短い電話線、パッキングリストのみ。インストール方法などは同社のウェブサイトに掲載されている模様。時間を作って我が家の IP-PBX にインストールしてみよう。

DSCF3679.jpg DSCF3682.jpg DSCF3690.jpg

2008年02月05日

Asterisk に FXO ボードをセットアップする

先日購入した X100P FXO ボード を Asterisk マシンにインストールしよう。

1. マシンの筐体を開けて空き PCI スロットに FXO カードを挿入する。
僕のマシンは PCI スロットが2個あって、うち1個は NIC が使っていて1個が空き。その空きスロットに FXO カードを装着する。FXO ボード上には設定が必要なジャンパや DIP スイッチは無し。

2. 筐体を閉じて Linux をブートする。

3. Linux がブートされたらdmesg を見て FXO カードが認識されているか調べる。
僕のマシンでは以下のメッセージが表示されて FXO カードを正しく認識:

wcfxo: DAA mode is 'FCC'
Found a Wildcard FXO: Wildcard X100P
usb.c: registered new driver wcusb
Wildcard USB FXS Interface driver registered
Registered tone zone 0 (United States / North America)

4. /etc/zaptek.cof の編集
以下の行を追加する。僕の場合はアメリカだからこのような設定になるが、日本だと2行目と3行目は jp と指定するらしい:

fxsks=1
defaultzone=us
loadzone=us

5. /etc/asterisk/zapata.conf の編集
以下の行を追加する。参考書では FDM400P FXO カード(4チャンネル)を使っているが、僕は単チャンネルの X100P FXO カードなので 、channel オプションのみを参考書から変更(4から1に変更):

signalling=fxs_ks
echocancel=yes
echotraining=400
busydetect=yes
busycount=4
group=2
context=incoming
channel=>1

6. ダイヤルプランを設定する前に FXO カードの動作を確認しておく。

# ztcfg -vv
Zaptel Configuration
======================
Channel map:
Channel 01: FXS Kewlstart (Default) (Slaves: 01)
1 channels configured.
#

"1 channels configured." と表示されれば FXO カードは正常に設定されている。

次は実際に FXO カードを使って通話するためにダイアルプランを設定しよう。

参考: Asterisk でつくる IP 電話システム

2008年02月06日

Asterisk で外線着信を受ける

X100P FXO ボードのセットアップの続き。今日はダイアルプランを設定する。やりたいことは FXO にアナログ電話線(PSTN - Public Switched Telephone Network)を繋いで外線着信を受けること。そのためには extensions.conf に [incoming] セクションを追加する必要がある。

/etc/asterisk/extensions.conf を編集:

[incoming]
exten => s,1,Dial(SIP/2001&SIP/2003)
exten => s,2,Answer
exten => s,3,Wait(1)
exten => s,4,Voicemail(2001)
exten => s,102,Hangup
exten => t,1,Hangup
exten => h,1,Hangup

この設定では外線着信があると内線 2001 番と 2003 番の SIP フォンのベルが鳴る。電話を取ればそのまま外線と通話でき、電話を取らないままならば内線 2001 番のボイスメールにメッセージを残せる。これはほぼ参考書のまま。外線着信の初チャレンジなので特に難しい設定はしないでおく。僕の環境では 2001 番は Windows パソコン上の SIP ソフトフォン「SJphone」、2003 番は IP 電話機がレジストされているので、着信があれば両方のベルが鳴るはず。

我が家は外線電話を2ライン契約しているので、1ラインを FXO に差し替えて、もう1ラインから FXO に差し替えたラインの番号をダイアルしてみる。緊張の瞬間である。呼び出し音1回目は何も起こらず「あれ?」と思ったが、2回目から SJphone のベル音と IP 電話機の電子音が鳴り響く。思わずニンマリと顔もほころぶ。IP 電話機の受話器を取ってみると、ダイアルした側の電話機を通した音が聞こえる。一人で二つの受話器を持っているのでちゃんとしたテストにはならないが、一応通話はできているようだ。

その時の CLI ターミナルの表示内容は以下の通り。日本語部分は僕が書き添えた説明である:

FXO カードに電話線を差し込むと以下のメッセージが表示された:
Feb  2 22:31:42 NOTICE[2009]: chan_zap.c:5648 handle_init_event: Alarm cleared on channel 1
localhost*CLI>
以下外線着信の流れ:
    -- Starting simple switch on 'Zap/1-1'
Feb  2 22:33:39 NOTICE[2009]: chan_zap.c:5374 ss_thread: Got event 2 (RIng/Answered)...
    -- Executing Dial("Zap/1-1", "SIP/2001&SIP/2003") in new stack
    -- Called 2001
    -- Called 2003
    -- SIP/2003-8eb3 is ringing
    -- SIP/2001-2e0c is ringing
    -- SIP/2003-8eb3 answered Zap/1-1
 == Spawn extension (incoming, s, 1) exited non-zero on 'Zap/1-1'
    -- Executing Hangup("Zap/1-1", "") in new stack
 == Spawn extension (incoming, h, 1) exited non-zero on 'Zap/1-1'
    -- Hangup 'Zap/1-1'
localhost*CLI>

ますます電話交換機っぽくなって面白くなってきたな。

参考: Asterisk でつくる IP 電話システム