AWS上にAsteriskサーバ構築して内線電話環境つくってみよう


岩手県立大学ソフトウェア情報学部 Advent Calendar 2014の10日目です。
AsteriskはOSSのIP-PBX(IP回線交換装置)です。
簡単に言うと内線電話環境を作ることができます。

http://www.asterisk.org/

内線で電話をかけあったり、
NTTのひかり電話やアジルフォンと接続し、外線発信もできますし、
FAXを送ることもできます。

大学時代、インターネット上の農業情報をFAXで農家に届けるためのサービスを作っていたのを思い出したので、今回はAsteriskをインストールし、内線電話をかけるところまで作っていこうと思います。

AWS EC2の環境

こんな感じでEC2のインスタンスを用意してください。
インスタンスを立てるところはこの記事ではご紹介しませんので、
ぐぐってみてください。

OS:Amazon Linux
CPU:t2.micro
セキュリティグループでポート番号5060をTCP/UDP両方開けるようにお願いします。

Asteriskのインストール

環境を整える

Asteriskに必要なパッケージ等をインストールしていきます。

$ sudo yum update 
$ sudo yum groupinstall 'Development Tools'
$ sudo yum install -y make gcc ncurses-devel libtermcap-devel kernel-devel zlib-devel libtool

Asteriskのダウロード&解凍

$ wget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-1.8.8.1.tar.gz
$ tar zxvf asterisk-1.8.8.1.tar.gz

Asteriskのインストール

$ cd ./asterisk-1.8.8.1
$ ./configure -disable-xmldoc

こんな感じの画面になれば成功です。
makeしビルドしていきます。

$ make

ビルド成功です。
次にmake installを実行し、Asteriskをインストールします。

$ make install

これでインストール成功です!!

さらに、サンプル設定ファイルをインストールし、設定を完了させます。

$ make samples
$ make config

Asteriskの設定ファイル

Asteriskは交換機なので、電話番号を用意する必要と、
電話がAsteriskにかかってきた際に、どう処理するかを設定することができます。

電話番号(アカウント)を管理する設定ファイルが、sip.confです。
SIPプロトコルで調べるよくわかると思います。

どう処理するかを管理する設定ファイルが、extensions.confです。
自動音声応答などの設定はextensions.confで行います。

ほかにも沢山の設定ファイルが存在しますが、
この2つのファイルを抑えておけば基本的には大丈夫です。

sip.confの設定

一旦バックアップを用意します。

mv /etc/asterisk/sip.conf sip.conf.bak

今回は3つの番号を用意します。

$ sudo vim /etc/asterisk/sip.conf

[general]
context=default
port=5060
bindaddr=0.0.0.0
language=ja

[201]
type=friend
defaultuser=201
secret=pass
host=dynamic
canreinvite=no

[202]
type=friend
defaultuser=202
secret=pass
host=dynamic
canreinvite=no

[203]
type=friend
defaultuser=203
secret=pass
host=dynamic
canreinvite=no

これで完了です。

extensions.confの設定

extensions.confでは「sip.conf」で定義した内線番号ごとのダイヤルプランを定義することができます。
ダイヤルプランとは、電話発信・着信時にAsteriskをどのように動作させるかを定めた計画のことです。

  • 201から202に発信できるダイヤルプラン
  • 203から自動音声応答できるダイヤルプラン

さっそく、この2つを作って行きましょう!

一旦バックアップを用意します。

$ cp /etc/asterisk/extensions.conf extensions.conf.bak

extensions.confは[default]のみ編集していきます。

$ sudo vim /etc/asterisk/extensions.conf 

[default]
;
; By default we include the demo.  In a production system, you
; probably don't want to have the demo there.
;
;include => demo
exten => 201,1,Dial(SIP/201,30,r)
exten => 201,2,Hangup()

exten => 202,1,Dial(SIP/202,30,r)
exten => 202,2,Hangup()

exten => 203,1,Answer()
exten => 203,2,Playback(hello-world)
exten => 203,3,Hangup()

これで設定は完了です。

Asteriskの起動

$ sudo asterisk -vvvr

以下のような出力がされると起動ができています。

Mac用のSipクライアント

X-Liteを使用します

以下からダウンロードできます。
http://counterpath.s3.amazonaws.com/downloads/X-Lite_4.7.1_t-xlite-20140910-all-4710c_74250.dmg

 アカウントを設定

X-lite⇒ preferenceの Account Settingsからアカウントを追加していきます。
以下のように201の情報を登録していきます。

設定が終わり、正常に設定できていると「Available」と緑で表示されます。

iPhone用SIPクライアント

どれが有名なのかすみませんわかりませんでしたが、
今回はこちらを使用していきます。

https://itunes.apple.com/jp/app/media5-fone-sip-voip-softphone/id353988698?mt=8

起動するとこんな感じです。

202の設定をしてください。

通話してみる

macからiphoneへ電話してみます。

202を押してください。



つながると結構うれしいです。

自動音声応答を試してみる

203を押すとHello worldが聞こえてくるはずです。
こちら、私の設定が途中でミスしたのか、Asteriskには電話が来ていることはコンソールに出力されるのですが、どうしても音がきこえませんでした。

まとめ

久しぶりにAsteriskを触ってみて、面白かったです。
会社の内線環境はAsteriskで作ってみようかな〜と思いました。

Qiitaの記事も34件(12月10日現在)あって思ったより、
使っている人いるな〜と思いました。

是非みなさんもAsterisk使ってみてください〜