Asterisk + FUSION IP-PhoneでIP電話サーバーの構築

## 使うもの

- Asterisk（IP-PBX）
  - 要するにIP電話のRoutingやってくれるサーバー
  - CSシステムとかよく使われる

- FUSION IP-Phone SMART
  - IP-PBXと電話回線を繋ぐサービス（050で番号ふってくれる => 外部へ電話かけたり、受信できる）

- FreePBX(X-Lite,Zoiper)
  - iphoneとかMac用のIP電話クライアント

## Asteriskサーバーセットアップ手順

```bash:setup-asteriks.sh
##必要なパッケージ

yum groupinstall "Development Libraries" "Additional Development"
yum install gcc gcc-c++
yum install libxml2 libxml2-devel openssl-devel ncurses-devel sqlite-devel newt-devel
yum install libuuid-devel uuid-devel
yum install subversion
yum install unixODBC unixODBC-devel mysql-connector-odbc
yum install libtool-ltdl libtool-ltdl-devel


## Asteriskインストール

cd /usr/src/
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-11.8.1.tar.gz
tar xvzf asterisk-11.8.1.tar.gz
cd asterisk-11.8.1
./configure
make; make install; make samples
make config
ldconfig

```
### Asteriskに接続する端末登録

- SIP接続 --> sip.conf
- IAX2接続 ---> iax.conf

例

```text:sip.conf
[general]
maxexpirey=3600
defaultexpirey=3600
context=default
bindport=5060
bindaddr=0.0.0.0
srvlookup=yes
disallow=all
allow=ulaw
allow=alaw
allow=gsm
language=ja ;localnet=192.168.0.0/255.255.0.0

allowguest=no
register=>58846059:23X8k75f@smart.0038.net

[201]
type=friend
defaultuser=201
secret=hogehoge
context=default
canreinvite=no
host=dynamic
dtmfmode=rfc2833
callgroup=1
pickupgroup=1

[202]
type=friend
defaultuser=202
secret=hogehoge1
context=default
canreinvite=no
host=dynamic
dtmfmode=rfc2833
callgroup=1
pickupgroup=1

[fusion-smart]
type=friend
username==xxxxxxx
fromuser==xxxxxxx
secret=yyyyyyy
host=smart.0038.net
fromdomain=smart.0038.net
context=default
insecure=prot,invite
canreinvite=no
disallow=all
allow=ulaw
allow=alaw
dtmfmode=inband
nat=yes
```

### ダイヤルプラン登録
- extentions.conf
- ダイヤルプラン: 着信＆発信の呼をどう処理するか決めるもの
- ダイヤルプランはコンテキスト（[]で題名つけたグループ）と呼ばれる複数のセクションに分かれる
- 各コンテキスト内には、エクステンションを定義できる
- エクステンションの構成要素

エクステンション名
プライオリティ
アプリケーション
ex:)201をダイヤルしたらダイヤルされた番号を呼び出す

```
exten => _201,1,Dial(SIP/${EXTEN},30,tTwW)
exten => _201,n,Hangup
```

### ダイヤルプラン参考例

- 自作の時報と内線通話ができる最低限の設定

```text:extensions.conf
[general]
writeprotect=no
priorityjumping=no

[globals]
SPEAKINGCLOCK=317
ECHOTEST=333
SMARTNO=xxxxxxx

[default]
; Speaking Clock(時報)
exten => ${SPEAKINGCLOCK},1,Answer()
exten => ${SPEAKINGCLOCK},n,Wait(1)
exten => ${SPEAKINGCLOCK},n,Set(FutureTime=$[${EPOCH} + 5])
exten => ${SPEAKINGCLOCK},n,SayUnixTime(${FutureTime},Japan,YbdAPHM)
exten => ${SPEAKINGCLOCK},n,Playback(jp-desu)
exten => ${SPEAKINGCLOCK},n,playback(beep)
exten => ${SPEAKINGCLOCK},n,Hangup

; Echo Test(エコーテスト)
exten => ${ECHOTEST},1,Answer
exten => ${ECHOTEST},n,Wait(1)
exten => ${ECHOTEST},n,Playback(demo-echotest)
exten => ${ECHOTEST},n,Playback(beep)
exten => ${ECHOTEST},n,Echo
exten => ${ECHOTEST},n,Playback(demo-echodone)
exten => ${ECHOTEST},n,Playback(vm-goodbye)

; 内線呼出
; Local SIP phones 201-209
exten => _20Z,1,Dial(SIP/${EXTEN},,tT)
exten => _20Z,n,Hangup

exten => ${SMARTNO},1,Dial(SIP/201)
exten => ${SMARTNO},2,Hangup

exten => _9.,1,Dial(SIP/fusion-smart/${EXTEN:1})
```

## Asteriskサーバー起動

```
/etc/init.d/asterisk start
```

## Asterisk CLI

```asterisk -vvvcr``` で接続




```
#CLI終了
asterisk-test1*CLI> quit

#Asterisk再起動
asterisk-test1*CLI> core restart  gracefully

#peer接続状態確認
asterisk-test1*CLI> sip show peers

#sip.conf再読み込み
asterisk-test1*CLI> sip reload

#extensions.conf再読み込み
asterisk-test1*CLI> dialplan reload


#Registの確認
asterisk-test1*CLI> sip show registry
```