Asterisk+Skype

2017年11月18日 (土) 15:49時点におけるSysop (トーク)による版 (「Asterisk+Skype」の保護レベルを変更しました ([編集=管理者のみ許可] (無期限) [移動=管理者のみ許可] (無期限)))


目次

Skype for Asterisk

Digiumから販売されているチャネルドライバで、有償提供されている。
現在ならば、このAsterisk for Skypeを使うのが最も簡単。
Skype for Asterisk



ここから下の情報は古いので参考までに

Asteriskとは別に、Skypeが動作しているWindowsパソコンがあれば比較的簡単に繋ぐことはできます。ただし、そのパソコンのSkypeのアカウントとして発着信することしかできません。

方法その1~PC Phonelineを使う~

(アナログ・バック・トゥ・バック)
PC PhonelineのVTA1000は要するにUSB FXSで他の名前でも色々売られています。
たかはしがテストした限りでは、どうもこのVTA1000として売られているものが調子良いようです。Skype Gatewayとして売られているものもありますが単にバンドルされているソフトの違いだけのようで、後からダウンロードしてSkype対応にすることもできるようです。
FXSなので電話機を使ってSkypeを使えるようにするわけですが、AsteriskのFXOと接続すればAsterisk-Skype間がGatewayできるというわけです。

[Asterisk]--[FXO]=======[VT1000]--[PC]

とまあアナログでバック接続してしまうというわけですね。
この際、当然ですがSkype側ではこのVT1000をオーディオ入出力デバイスとして設定します。Skype対応のアプリケーションを入れるとSkypeがこのアプリケーションによるコントロールを許すかどうかを問い合わせてきますので許可します。この際、VT1000のシリアル番号(裏に貼ってある)を最初の一回だけ入力する必要があります。
さて使い方は簡単。いまAsteriskのZap/4がFXOだとするとSkypeに対してダイアルするには次のように書きます。

exten => _759.,1,Dial(Zap/4/${EXTEN:3},60)
exten => _759.,2,Congestion

この例ではプレフィックスSKY(759)に付けてダイアルするとVT1000を呼び出します。この際ダイアルするのは『Skypeに登録した短縮ダイアルの番号』です。例えばある人を15に設定しておいたのなら

75915

とダイアルするとSkypeの短縮ダイアルを呼び出します。つまり番号とSkype名の関連付けはSkypeの短縮ダイアル機能を使うわけです。
なお発信開始時にはSkypeがポップアップし終了時にはミニマイズされます。
着信はもっと簡単でZapチャネルの着信処理を普通に行うだけです。この際のCIDシグナリングはデフォルトにしておきましょう。jpシグナリングにするとうまくいきません(あたりまえ)。
これでSkypeに対してもAsteriskから発着信できますが、Asteriskサーバ以外にSkype用のマシンを常に起動させておかなくてはなりません。

方法その2~PSGw

(Windows PC内部でのオーディオ・バック接続) 注)サポートとのコンタクトが取りにくいようです。Windows版は購入してもそのままでは動作しないので注意してください!

PSGwは要するにB2BUAでSkypeをインストールしてあるパソコンの上で動作して、SkypeとSIPの間のゲートウェイを行います。FXS/FXOといったハードウェアを必要としません。
が・・・たかはしのところでは、こいつがブルースクリーンを起こすため検証する気がうせましたが、サポートに連絡したらVirtual Audio Cableというのをダウンロードしてインストールしろ、すまんかった!とメールがきました。どうもブルースクリーン落ちはFAだったようですが、だったらFAQにでも書いておけよと。しかもダウンロードURLは大っぴらには公開していないようなので謎です。
買った人は一度ブルースクリーンを見て(!?)メールするとダウンロードURLが送られてきます 。が、それではあんまりなので方法というか・・・

インストール時の注意

PSGwに付属しているloopaudioデバイスをインストールしろ、ということになっていますが、これはインストールしてはいけません。 loopaudioをインストールせずに、ユーザサポートに『ブルースクリーンで落ちるがどうしたらいい?』とメールします。この際落ちるモジュール名はkmixer.sysとかなので、どこで落ちるか聞かれたら、これを答えればいいでしょう。
ユーザサポートからVirtual Audio CableのダウンロードURLが送られてくるので、これをダウンロードしてインストールしてからPSGwを使います。VAC自体も売り物のようです。
もしもloopaudioをインストールしてしまった場合にはloopaudioドライバを削除してからVACをインストールします。

Asteriskとの接続

PSGwはB2BUAなので以下のようなイメージで動作します。

[Asterisk]--SIP--[PSGw]===VAC===[Skype]

まずAsterisk側にPSGw用のSIPアカウントを作成しておきます。

[psgw]
type=friend
username=psgw
secret=pass
context=default
host=dynamic
nat=yes
insecure=very     <--たぶん要る
canreinvite=no
dtmfmode=inband   <--たぶんこの設定
disallow=all
allow=ulaw

PSGwはAsteriskに対してSIPエンティティとしてRegisterします。PSGwの"SIP Parameters"の項目でAsteriskへのRegister設定を行いますがLAN上でならばローカルIPを書けば良いでしょう。

Psgw001.JPG

ここの設定で"Map SIP destination to Skype username"をチェックしておきます。これは後で説明するextensionからSkype名へのマッピングを行うために必要です。

次に"Routing Table"の設定で以下のようにSkypeからSIPへのマッピングだけを定義します。この際"Outgoing caller username"にはAsteriskの着信exten@Asteriskのアドレスを指定します。

Psgw002.JPG

この例ではSkypeへの着信は192.168.0.1のAsteriskのコンテキスト[default](sip.confで定義している)のexten 8000番に着信します。
これで基本の設定は完了です。

ダイアル番号からSkype名へのマッピング

ここまでの設定ですでにお気付きかもしれませんが、番号からSkype名へのマッピングはextensionsの中で行います。例えばskype名が"takao.takahashi"であり、これにダイアルするのに3456という番号を使うのであれば次のように記述します。

exten => 3456,1,Dial(SIP/takao.takahashi@psgw,60)

psgwは上で書いたようにsip.confで設定しているPSGwのSIPピア名です。これに対してSkype名を付けて呼び出すとPSGwはこれをSkypeに引渡してSkypeで発呼します。
他のSkypeユーザを追加したい場合には同様に

exten => 番号,1,Dial(SIP/スカイプ名@psgw...

の形で記述します。つまりextensions.confがそのままSkype用短縮ダイアル(電話帳)として使うことができるというわけです。
要はこの"番号->Skype名"の仕組みをDNS上で構築して、対応するSkype名に番号をふってやれば相互接続が可能となるわけです。

extensionsの書き方アイデア

Skype名に対する番号をextensionsにベタで書いているとわけがわからなくなりますので、例えばプレフィックス759(SKY)をSkypeでの発呼用に使います。まずdefaultなど普通使うextenには以下のように記述します。

;Skype Call
exten => _759.,1,Goto(skypecall,${EXTEN:3},1)

次に[skypecall]のコンテキストを作成します。ここでは以下のように番号とSkype名の対応付けを記述します。

[skypecall]
exten => 3456,1,Dial(SIP/takao.takahashi@psgw,60)
exten => 3456,2,Congestion

exten => i,1,Congestion
exten => t,1,Congestion

こうすることでプレフィックス759に続けてダイアルすることでSkypeに対するコールが行えるわけです。複数の相手先を登録する場合には[skypecall]のコンテキスト内で行うだけです。
注意:PSGwを使う場合にはSkypeのオートアンサーをONにしてはいけません。着信処理はPSGwが行います。

ちなみにこの方法を使えばSkype<->固定電話orIP電話間の転送もできますね