Asterisk/trixbox等で利用できるCUIのSIPクライアントをインストールして発信する方法

今回は、GNOMEKDE等のGUIがインストールされていないLinuxAsterisk/trixbox等のIP電話を使って電話をかける方法についてです。
まだ、私も分かっていないことがたくさんありますが、取りあえず発信着信ができる所までです。
ドキュメントがしっかりしているので色々できそうですが、今のところの用途は・・・・・今から考えます。


今回SIPクライアントとして利用するのはCLIベースのソフトフォンで、「pjsip」を利用します。
テスト環境はCentOS5.4で行いました。ソースからコンパイルしますので、CentOSに開発ツールを入れておいて下さい。


まず、ソースコードサイトからDLします。
今回はpjproject-1.5.tar.bz2ダウンロードしてコンパイルしました。



wget http://www.pjsip.org/release/1.5/pjproject-1.5.tar.bz2
tar jxvf pjproject-1.5.tar.bz2
cd pjproject-1.5
./configure
make dep && make clean && make

コンパイルが成功すると、
pjproject-1.5/pjsip-apps/bin/にバイナリファイルが出来上がっています。
単に起動するだけであれば、ファイルパス/pjproject-1.5/pjsip-apps/bin/pjsua-i686-pc-linux-gnuとなります。i686部分はアーキテクチャによって違うと思いますが、適当に置き換えて下さい。
仮に/rootで作業しているのなら、/root/pjproject-1.5/pjsip-apps/bin/pjsua-i686-pc-linux-gnuと言った所でしょうか。
このあたりは、皆さんの環境とルールで適当に行って下さい。

SIPのIDとPWを起動時に渡してやれば一発でレジストしてくれます。
下は、trixboxProに一発接続する例です。


./pjsua-i686-pc-linux-gnu --id=sip:SOFTPHONE001@s123456.trixbox.fonality.com --registrar=sip:SOFTPHONE001@s123456.trixbox.fonality.com --realm=asterisk --username=SOFTPHONE001 --password=パスワード

文法:./pjsua-i686-pc-linux-gnu --id=sip:SIPユーザー名@trixboxサーバー名 --registrar=sip:SIPユーザー名@trixboxサーバー名 --realm=asterisk --username=SIPユーザー名 --password=SIPパスワード

id=SIPアカウント@trixbox となります。
registrar=SIPアカウント@trixbox となります。
確認する場所はtrixboxAdmin panel >> Extensions >> Phones >> SIP Username

realm=trixboxProはasteriskなのでasterisk
username=SIPアカウント
password=sipのパスワード

となります。

Asteriskの場合はこんな感じでしょうか。


./pjsua-i686-pc-linux-gnu --id=sip:100@192.168.0.100 --registrar=sip:asrterisk@192.168.0.100 --realm=Asterisk --username=100 --password=123456


id=ローカルのアドレス
registrar=SIPサーバ(Asterisk)のアドレス
username=Asterisksip.confに設定したユーザ名
password=Asterisksip.confに設定したパスワード
でいけると思います。



内線5020へ発信するのは
m + enter を入れたら

========
(You currently have 0 calls)
Buddy list:
-none-
Choices:
For current dialog.
All 0 buddies in buddy list
Select from buddy list
URL An URL
Empty input (or 'q') to cancel
Make call:
========

と表示されるので、
sip:5020@s123456.trixbox.fonality.com + enter


外線へ発信するには上と同じで、
m + enter を入れて
sip:{プレフィクス}09012345678@s123456.trixbox.fonality.com


着信に応答するには
a + enter

もしかすると

>>> a
Answer with code (100-699) (empty to cancel):

と聞いてくるので200を入れれば応答できるはずです。
SIPのコードはページの一番下に書いておきます。
ここで、他の番号を入れるとちゃんと意図した応答をしてくれます。


保留は
H + enter


終話は
h + enter
です。


詳細はココにドキュメントがあります。
http://www.pjsip.org/pjsua.htm


コールコマンドはこちら
http://www.pjsip.org/pjsua.htm#cmd_call


確かに何かに利用出来そうだけど、明確には思いつかないなぁ。
ちなみに、MacOSX10.6でやってみたけど、PortAudioでエラーがでたり、pjsipのコンパイル時にエラーがでたりして動いてくれない。
PortAudioはバージョンアップで対応できそうだけど、pjsipのコンパイル時のエラーは私の能力ではキャパオーバーで何ともできませんでした。
ココにも同じ悩みを抱える人がいるけど、時間がかかりそうなのでまた今度挑戦してみます。
年末年始にでもやってみるか。
http://lists.pjsip.org/pipermail/pjsip_lists.pjsip.org/2009-November/009380.html
どなたか、分かったら教えて下さい。

あと、余談ですがWindowsでもpjsipは利用できるみたいです。
ウチはやりませんけど。


SIPコード一覧
1xx = 情報応答

* 100 試行中
* 180 呼び出し中
* 181 転送中
* 182 順番待ち
* 183 セッション進行中

2xx = 成功応答

* 200 OK
* 202 受諾:照会に使用

3xx = リダイレクト応答

* 300 複数の転送先
* 301 永久的に移動
* 302 一時的に移動
* 305 プロキシ使用
* 380 ほかのサービス

4xx = リクエスト エラー

* 400 不正なリクエス
* 401 認証が必要:レジストラのみ利用可。プロキシは「プロキシ認証 407」が必要
* 402 支払いが必要(将来使われる可能性あり)
* 403 禁止
* 404 見つかりません:ユーザが見つかりません
* 405 メソッド利用不可
* 406 容認不可
* 407 プロキシ認証が必要
* 408 リクエスタイムアウト:時間内にユーザが見つかりませんでした
* 410 不在:ユーザは過去に存在しましたが、もうここにはいません
* 413 リクエスト本体が大きすぎます
* 414 リクエスURIが大きすぎます
* 415 非対応メディア
* 416 非対応URIスキーム
* 420 不正な拡張:SIPプロトコル拡張がサーバに認識されません
* 421 拡張が必要
* 423 間隔が短すぎます
* 480 一時的に利用不可
* 481 通話 / トランザクションが存在しません
* 482 ループ検出
* 483 最大ホップ数超過
* 484 不完全なアドレス
* 485 あいまい
* 486 話し中
* 487 リクエストが中止
* 488 ここでは容認不可
* 491 リクエスト待機中
* 493 解読不可:S/MIME本文を解読できませんでした

5xx = サーバー エラー

* 500 サーバ内部エラー
* 501 非実装:SIPリクエスト メソッドが実装されていません
* 502 不正なゲートウェイ
* 503 サービス利用不可
* 504 サーバタイムアウト
* 505 バージョン非対応:サーバはこのSIPバージョンに対応していません
* 513 メッセージが大きすぎます

6xx = グローバル エラー

* 600 随所で話し中
* 603 拒否
* 604 どこにも存在しません
* 606 容認不可