方法:FreeSwitch Skype Gateway

この記事では、着信スカイプコールを企業IP PBX(この場合はアスタリスク)に転送するためのSIP <-> Skypeゲートウェイの作成を検討します。 現在、Skypeはおそらくユーザーの間で最も人気のあるVoIPクライアントであるため、Skypeを介して会社に電話をかける機能は、顧客にとってさらにプラスになるでしょう。



タスクでは、次のソフトウェアが選択されました。



原則として、mod_skypiaxはアスタリスクで動作しますが、FreeSwitchに触れることは興味深く、このモジュールはもともとFreeSwitch用に作成されました。



すべての仕組み



機能図

スキーム全体の重要な要素はmod_skypiaxです。これは、FreeSwitchとSkypeネットワーク間のレイヤーの役割を果たします。 FreeSwitchの用語では、このモジュールはチャネルドライバーまたはエンドポイントであり、たとえば、通常のIP電話と同じです。



Skypeプロトコルは閉じられているため、Skypeネットワークに接続する唯一の方法はネイティブクライアントであり、mod_skypiaxはSkype APIを介して対話します。 起動された各Skypeは、1つの音声チャネル、つまり 30のSkypeを実行している場合、30人が同時に電話をかけることができます。 この記事では、スカイプアカウントを1つだけ使用することについて説明していることに注意してください。スカイプアカウントは、実行中のすべてのSkype'amiで同時に使用されます。



サーバーの負荷を最小限に抑えるには、「偽の」Xvfb Xサーバーとsnd_dummyドライバーを使用します。 ダミードライバーの使用は、原則としてサーバーに実際のサウンドカードがないという事実によっても正当化されます。



FreeSwitchはSIPモジュールmod_sofiaを担当します。これは、図からわかるように、Asterisk PBXへのSIPトランクを提供します。



着信呼び出しアルゴリズムは次のようになります。

  1. ユーザーがskypeアカウントへの呼び出しを開始します。
  2. mod_skypiaxは、skypeクライアントの最初の無料コピーを使用して呼び出しを受け入れます。
  3. mod_sofiaは、mod_skypiaxで切り替えられるAsterisk PBXとのSIP接続を開始します。




ソフトウェアのインストールと構成のプロセスを検討してください。



FreeSwitchとmod_skypiaxのインストール



DebianにはFreeSwitch用の既製のパッケージがないため、2つのインストールオプションがあります。svnからソースを収集するか、リリースソースを収集します。 もちろん、ソースからdebパッケージをコンパイルし、そこからインストールするオプションがあります(理想的には最も正しいソリューションです)が、この場合、ゲートウェイに不要なモジュールの束がビルドされてインストールされます。 したがって、ソースコード、つまりsvnを使用したバリアントを検討します。



最初に、さらにアセンブリするために必要なものをすべて配置します。



さらに、特に指定がない限り、すべてのコマンドとアクションはルートとして実行されます



apt-get -y install build-essential subversion automake autoconf wget libtool \

libncurses5-dev xvfb libx11-dev libasound2-dev xfs xfonts-100dpi xfonts-75dpi xfonts-scalable








Skypeクライアントを起動してmod_skypiaxをビルドするには、XvfbとXサーバーに関連するすべてのものがすぐに必要になるように予約してください



svnからソースツリーをダウンロードします。



cd /usr/src

svn co svn.freeswitch.org/svn/freeswitch/trunk freeswitch

cd freeswitch








/usr/src/freeswitch/modules.conf



を必要に応じて編集します。 私にとってはこのように見えました:

loggers/mod_console

loggers/mod_logfile

loggers/mod_syslog

applications/mod_commands

applications/mod_dptools

applications/mod_fifo

applications/mod_limit

applications/mod_expr

applications/mod_esf

codecs/mod_g723_1

codecs/mod_amr

codecs/mod_g729

codecs/mod_voipcodecs

codecs/mod_ilbc

codecs/mod_speex

dialplans/mod_dialplan_xml

endpoints/mod_sofia

endpoints/mod_skypiax

event_handlers/mod_event_socket

event_handlers/mod_cdr_csv

formats/mod_native_file

formats/mod_sndfile

formats/mod_local_stream

formats/mod_tone_stream

formats/mod_file_string

xml_int/mod_xml_cdr








実際に組み立てとインストール:



cd /usr/src/freeswitch; ./bootstrap.sh ; ./configure

make && make install








デフォルトでは、インストールは/ usr / local / freeswitchディレクトリで行われます。 mod_skypiax configおよびinitスクリプトをコピーして、FreeSwitchを起動します。



cp /usr/src/freeswitch/src/mod/endpoints/mod_skypiax/configs/skypiax.conf.xml \

/usr/local/freeswitch/conf/autoload_configs/

cp /usr/src/freeswitch/debian/freeswitch.init /etc/init.d/freeswitch

sed -i 's/opt/usr\/local/g' /etc/init.d/freeswitch








FreeSwitchが動作するユーザーを取得します。

adduser --disabled-password --quiet --system --home /usr/local/freeswitch \

--gecos "FreeSwitch Voice Platform" --ingroup daemon freeswitch

adduser freeswitch audio

chown -R freeswitch.daemon /usr/local/freeswitch








Skypeをインストールして構成する



完成したdeb-packageは、Skypeの公式Webサイトからダウンロードできます。ダウンロードしてインストールしてみてください。



wget www.skype.com/go/getskype-linux-deb

dpkg -i skype-debian_2.0.0.72-1_i386.deb








元の記事は、Skype for Linuxの新しいベータ版がリリースされる前に書かれました。 私はあえてすべてが新しいバージョンでも機能すると想定しています。



ほとんどの場合、dpkgは、欠落している依存関係を誓い、apt-getでそれらを配置し、Skypeを再度インストールしようとします。



Skypeが動作するユーザーを取得します。



adduser --home /home/skype --ingroup audio --disable-password skype







Skypeが設定を読み取るディレクトリを作成します。



mkdir -p /home/skype/multi/interface01

chown -R skype.audio /home/skype/multi








サーバーでSkypeを起動して、その操作性を確認し、構成します。



/usr/bin/Xvfb :101 -ac &

su skype -c "/bin/echo ' skype_user skype_secret '| DISPLAY=:101 /usr/bin/skype \

--dbpath=/home/skype/multi/interface01 --pipelogin &"






どこで

skype_user-事前登録されたSkypeアカウントの名前

skype_secret-このアカウントのパスワード



プロセスのリストでSkypeを探すだけで、Skypeが起動したことを確認できます。 ここで、何らかの方法でSkypeのグラフィカルインターフェイスにアクセスして、必要な設定を行う必要があります。 これを行うには、VNCサーバーを使用します。



apt-get install x11vnc

x11vnc -display :101








vncを介してサーバーに接続すると、前のステップで起動したSkypeを見ることができます。その設定では、不要なものをすべて削除する必要があります(イベントの無効化、ステータスの自動変更など)。すべてのサウンドデバイスとしてダミードライバーを選択します。



次に、最も重要な設定であるPublic APIに進みましょう。 ここでは、mod_skypiaxがSkypeに接続できるようにする必要があります。 Skype自体では、Skypeに連絡した後にのみ「許可されたプログラム」リストにプログラムを追加できますが、そのような設定を行うためだけに、FreeSwitchとmod_skypiaxを実行することはお勧めできません。 FreeSwitchソースツリーにあり、個別にコンパイルする必要があります。



cd /usr/src/freeswitch/src/mod/endpoints/mod_skypiax/configs

gcc -Wall -ggdb skypiax_auth.c -o skypiax_auth -lX11

./skypiax_auth :101






vnc接続ウィンドウに戻ります-表示されるダイアログボックスで[はい]をクリックし、[この選択を記憶する]チェックボックスをオンにします。



別のプログラムがスカイプを使用したい



これで、Skypeクライアントのセットアップが完了しました。 必要な数のSkypeチャネルの結果の構成を複製するだけです。



cd /home/skype/multi

for i in $(seq 2 N ); do i=$(printf "%02d" $i); cp -a interface01 interface$i; done








Nは、Skypeチャンネルの希望数です。



Skypeを起動するには、次のスクリプトを使用できます。



 #!/ bin / sh
 SKYPE_SYSTEM_USER =スカイプ
 SKYPE_HOME = / home / skype / multi
 SKYPE_USER = skype_user
 SKYPE_PASSWORD = skype_secret
 SKYPE_INSTANCES = N
 XVFB = / usr / bin / Xvfb

 module_reload(){
   rmmod snd-dummy
   modprobe snd-dummy
 }

 skype_start(){
   for i in $(seq 1 $ SKYPE_INSTANCES); する
     i = `printf"%02d "$ i`
     $ XVFB:1 $ i -ac >> / dev / null 2>&1&
    寝る3
     su $ SKYPE_SYSTEM_USER -c "/ bin / echo '$ SKYPE_USER $ SKYPE_PASSWORD' | DISPLAY =:1 $ i / usr / bin / skype \
     --dbpath = $ SKYPE_HOME / interface $ i --pipelogin >> / dev / null 2>&1& "
     echo "Skype $ iが開始しました"
  やった
 }

 skype_stop(){
 kill -TERM `ps -u $ SKYPE_SYSTEM_USER -o pid =` >> / dev / null 2>&1
寝る3
 kill -TERM `ps -C Xvfb -o pid =` >> / dev / null 2>&1
 }
ケース「$ 1」
  開始)
         module_reload
        寝る3
         skype_start
         ;;
  停止) 
         skype_stop
         ;;
  再起動)
         skype_stop
        寝る3
         skype_start
         ;;
   *)
         echo $ "使用法:$ 0 {start | stop | restart}"
         1番出口
エサック 




これで、Skypeのセットアップが完了しました。 FreeSwitchをSkypeに接続することは残っています。



mod_skypiaxの構成



目的のチャネル数に合わせてmod_skypiax構成を編集します。



vi /usr/local/freeswitch/conf/autoload_configs/skypiax.conf.xml







以下に、私の設定の一部を例として示します。

 <構成名= "skypiax.conf"説明= "Skypiax構成">
   <global_settings>
     <param name = "debug" value = "8" />
     <param name = "codec-master" value = "us" />
     <param name = "dialplan" value = "XML" />
     <param name = "context" value = "default" />
     <param name = "codec-prefs" value = "gsm、ulaw" />
     <param name = "codec-rates" value = "8000,16000" />
     <param name = "hold-music" value = "$$ {moh_uri}" />
     <param name = "destination" value = "7777" />
   </ global_settings>
   <!-skypiaxインターフェースごとにここに1つのエントリ->
   <per_interface_settings>
     <interface id = "1" name = "skypiax1">
     <param name = "hold-music" value = "$$ {moh_uri}" />
     <param name = "dialplan" value = "XML" />
     <param name = "context" value = "default" />
     <param name = "X11-display" value = ":101" />
     <param name = "tcp_cli_port" value = "15556" />
     <param name = "tcp_srv_port" value = "15557" />
     <param name = "skype_user" value = "skype_user" />
     <param name = "destination" value = "7777" />
     </ interface>
     <!-ここでは、類推により、必要な数のインターフェースを追加します->
   </ per_interface_settings>
 </構成>




ここに

7777-着信Skypeコールのルーティング先の内線番号。

:101 -Xサーバーの表示(2番目のチャネルの場合:102など)

skype_user -Skype アカウントの名前



FreeSwitchを起動し、mod_skypiaxをロードしようとします。



/etc/init.d/freeswitch start

/usr/local/freeswitch/bin/fs_cli

freeswitch@internal> load mod_skypiax








すべて順調であれば、 sk listコマンドを実行すると、skypiaxインターフェイスのリストを表示できます。



FreeSwitchの開始時にロードするモジュールのリストにmod_skypiaxを追加します。 これを行うには、ファイル/usr/local/freeswitch/conf/autoload_configs/modules.conf.xmlで次の行のコメントを解除する必要があります
  <ロードモジュール= "mod_skypiax" /> 




重要な点は、mod_skypiaxモジュールをロードする前にスカイプクライアントを起動する必要があるということです。 FreeSwitchを開始する前。 また、すでに使用されているSkypeのmod_skypiaxコピーを停止すると、FreeSwitchがクラッシュします。



おそらく覚えているように、Skypeの着信通話は内線7777にルーティングされますが、これはまだ作成する必要があります。 これを行うには、ディレクトリ/ usr / local / freeswitch / conf / dialplan / default で、次の内容のファイル02_skype.xmlを作成します。



 <include> <extension name="skype_incoming"> <condition field="destination_number" expression="^7777$"> <action application="set" data="hangup_after_bridge=true"/> <action application="set" data="effective_caller_id_name=Skype"/> <action application="bridge" data="sofia/gateway/asterisk/5555"/> <action application="hangup"/> </condition> </extension> </include>
      
      





どこで

アスタリスク -コールが行くゲートウェイの名前(アスタリスクに基づくPBX)

5555-このゲートウェイの拡張機能(テストには、Music On Holdを置くことをお勧めします)



構成するために残ります...



FreeSwitchとアスタリスク間のSIPトランク



ディレクトリ/ usr / local / freeswitch / conf / sip_profiles / externalにFreeSwitchがあるサーバーで、次の内容のasterisk.xmlファイルを作成します



 <include> <gateway name="asterisk"> <param name="username" value="freeswitch"/> <param name="realm" value="asterisk.example.tld"/> <param name="password" value="supersecret"/> <param name="register" value="false"/> </gateway> </include>
      
      





どこで

アスタリスク -ゲートウェイ名(前の手順で指定した名前と一致する必要があります);

asterisk.example.tld-アスタリスク付きのホスト名。

freeswitch-ゲートウェイにアクセスするためのユーザー名。

supersecret-パスワード。



アスタリスクのあるサーバーで、次をsip.confに追加します。

[freeswitch]

type=peer

host= 1.1.1.1

username= freeswitch

port=5080

fromdomain=1.1.1.1

secret= supersecret








どこで

1.1.1.1 -FreeSwitchでのサーバーアドレス

freeswitch、supersecret-前の手順を参照

コールの正しいルーティングのコンテキストを指定することを忘れないでください。

sip.confを読み直す必要があります。



rasterisk -x 'sip reload'







現在、 skype_userに電話が来る FreeSwitchはそれをホストの5555拡張にアスタリスクで接続します。



UPD: yitzhakvによると、現在Freeswitch svnトランクにあるskypiaxモジュールは再設計され、skypopenに名前が変更されました。 したがって、ソースを強化するには、コマンドを使用する必要があります svn co svn.freeswitch.org/svn/freeswitch/tags/1.0.4 freeswitch






All Articles