方法: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

Source: https://habr.com/ru/post/J68399/


All Articles