SlideShare a Scribd company logo
1 of 23
Asteriskで、モーニングコール
を作ってみた
橋本@横浜
Asteriskって何
• アメリカアラバマ州のDigium, Inc.が中心と
なって開発しているOSSのIP-PBX(交換機)ソ
フトウェア。
• ライセンスは、GPL2。
• 名前は、(*)マークに由来。
• Linux以外にも、BSD系、Solaris, OS X,
Windowsで動く。
特徴
• ボイスメール機能。留守番電話の機能と
して、不在時なにメッセージを記録する
ことが可能。
• 音声会議機能。MeetMeと呼ばれ、電話会
議サービスを動作させることが可能。
• 自動音声応答(IVR)機能。音声による自動
応答を作成し、動作させることが可能。
• 自動着信呼配分(ACD:Automatic Call
Distributor)機能。コールセンターで利用さ
れるような、待ち時間順でつなぐことや
利用可能なプロトコル
• SIP(Session Initiation Protocol)
• H.323
• IAX(Inter-Asterisk eXchange)
• MGCP(Media Gateway Control Protocol)
• Skinny(SCCP/Skinny Call Control Protocol)
• UNISTIM (Nortel UNIStim/Unified Networks IP
Stimulus)
• XMPP(Extensible Messaging and Presence
Protocol)
圧縮コーデック
• ADPCM
• G.711(A-lawと μ-law)
• G.722
• G.723.1 (パススルーのみ)
• G.726(G.726 RFC3551とG.726 AAL2)
• G.729 (G.729A)
• GSM
• iLBC
• SLIN (Signed Linear PCM)
• LPC-10
• Speex(SpeeX)
参考情報
• 基本は、
– Asterisk - VOIP-Info.jp Wiki
– http://www.voip-info.jp/index.php/Asterisk
• その他、
– Asterisk+モーニングコール(Wakeup call)で検索
動機
• 型落ちのiphoneが余ってきた。
– 何かに使えないか。
– 電話に使えない?(元々電話だし)
• 起きるのに、目覚まし時計だけでは、つ
まらない
– ベル以外で起きたい、好きな音楽
– プログラムできない。平日は、6:00、休
日は、8:00起床とか。
• Fusion Smartを契約したよね
– 外線着信を内線iphoneで受けたい
インストール
• 最近のDistributionに、パッケージがある。
– Debian, Ubuntu
– Apt-get, dpkg, apptitudeでインストール。
• ソースからでも、出来ると思う。
– 一番、最初の頃には、やってみたが、最近は
、パッケージが楽。
基本設定
• 以下のファイルを編集
– Sip.conf ; 内線の収容
– Extension.conf ; Asteriskの動作を設定
– Manager.conf ; 基本設定
– Logger.conf ; logの設定
Extension.conf(Fusion Smart用設
定)
• [globals]
• ;Fusion Smart
• MYNUMBER_FUSION=5XXXXXXX ; Fusion Smartの契
約番号
• ;From Fusion
• [fusion-in]
• exten => ${MYNUMBER_FUSION},1,Dial(SIP/210)
• exten => ${MYNUMBER_FUSION},2,Hangup
• ;exten => ${MYNUMBER_FUSION},2,Congestion
• ;exten => ${MYNUMBER_FUSION},102,Busy
Extensions.conf(Fusion Smart用設
定)
• ;To Fusion
• exten =>
_999.,1,Set(CALLERID(num)=${MYNUMBER_F
USION})
• exten =>
_999.,2,Set(CALLERID(name)=${MYNUMBER_
FUSION})
• exten => _999.,n,Dial(SIP/${EXTEN:3}@fusion-
smart)
• exten => _999.,n,Hangup
Extensions.conf(内線電話:iphone)
• ; Local SIP/IAX phones 210
• exten => _210,1,GotoIf($["${USEVOICEMAIL}"="YES"]?use-vm)
• exten => _210,n,Dial(SIP/${EXTEN}&IAX2/${EXTEN},,tT)
• exten => _210,n,Hangup
• exten => _210,n(use-vm),Dial(SIP/${EXTEN}&IAX2/${EXTEN},60,tTwW)
• exten => _210,n,NoOp(${DIALSTATUS})
• exten => _210,n,GotoIf($["${DIALSTATUS}"="BUSY"]?vm-rec)
• exten => _210,n,GotoIf($["${DIALSTATUS}"="NOANSWER"]?vm-rec)
• exten => _210,n,GotoIf($["${DIALSTATUS}"="CHANUNAVAIL"]?vm-rec)
• exten => _210,n,Hangup
• exten => _210,n(vm-rec),Answer()
• exten => _210,n,Wait(1)
• exten => _210,n,Voicemail(${EXTEN})
• exten => _210,n,Hangup
Sip.conf(Fusion Smart用設定)
• [fusion-smart]
• type = friend
• defaultuser = 5XXXXXXX ; Fusion Smartの契約電話番号
• fromuser = 5XXXXXXX ; 同上
• secret = XPXPYPYP ; Fusion Smartのパスワード
• host = smart.0038.net ; Fusion Smartの接続ホスト
• fromdomain = smart.0038.net;Fusion Smartのドメイン
• context = fusion-in
• insecure = port,invite
• canreinvite = no
• disallow = all
• allow = ulaw
• allow = alaw
• dtmfmode = inband
• ;dtmfmode = rfc2833
• ;nat = yes
Sip.conf(iphone内線)
• ; 210 for MobileiPhone
• [210]
• type = friend
• defaultuser = 210
• secret = XPXPXP
• canreinvite = no
• host = dynamic
• dtmfmode = rfc2833
• callgroup = 1
• pickupgroup = 1
• mailbox = 210
Sip.conf(Security系)
• [general]
• maxexpirey = 3600
• defaultexpirey = 3600
• context = default
• port = 5060
• bindaddr = 192.168.30.0/255.255.255.0
• srvlookup = yes
• allowguest = no
• disallow = all
• allow = ulaw
• allow = alaw
• allow = gsm
• language = ja
• localnet = 192.168.30.0/255.255.255.0
• deny=0.0.0.0/0.0.0.0
• permit=192.168.30.4/255.255.255.0
• alwaysauthreject=yes
Manager.conf
• [general]
• enabled = yes ; webでの管理を有効かする
• port = 5038
• bindaddr = 192.168.30.15 ; 自分のipアドレスを指定する。
• [mark]
• secret = XPXPXPXPX ; パスワード
• deny=0.0.0.0/0.0.0.0 ; 接続は、指定ネットワークのみ
• permit=192.168.30.0/255.255.255.0
• ;
• webenabled = yes
• [admin]
• secret = XPXPXP ; パスワード
• read = system,call,log,verbose,command,agent,config
• write = system,call,log,verbose,command,agent,config,originate
Iphone側の設定
• SIPをしゃべるアプリを入れる
– 私は、
– Linphoneを使用
– Iphoneでも、Androidでも動く。Linuxもあるら
しい。
Logger.conf(ログ出力先変更)
• ;messages => notice,warning,error
• ;full => notice,warning,error,debug,verbose
• ;
• ;syslog keyword : This special keyword logs to
syslog facility
• ;
• syslog.local0 => notice,warning,error
モーニングコール
• ディレクトリ(/var/spool/asterisk/outgoing)に、以
下のファイルを格納する
– -------------------------------------------------------
Channel:SIP/201 ; 発信相手
MaxRetries:3 ; 試行回数
RetryTime:10 ; 再発信するまでの時間
WaitTime:10 ; 相手が出るまでの時間
Extension:9999 ; 実行内容
Priority:2 ;
Context: morningcall ; extensions.conf内の実行内容
Extensions.conf(モーニングコール)
• [morningcall]
• exten =>
9999,1,Set(CALLERID(num)=${MYNUMBER_FU
SION})
• exten =>
9999,n,Set(CALLERID(name)=${MYNUMBER_F
USION})
• exten =>
9999,n,MP3Player(/tmp/morningcall.mp3)
• exten => 9999,n,Hangup
Cronへ登録
• /var/spool/asterisk/outgoingへの登録を定期的に行
う。
• Crontab –e
• 30 6 * *1-5 /bin/sh /usr/local/bin/set-out.sh
• /usr/local/bin/set-out.shの内容
#!/bin/bash
ln -sf /music/the_beatles/a_hard_days_night.mp3
/tmp/morningcall.mp3
cp /home/hashimoh/asterisk-morningcall/morningcall-
201.call /var/spool/asterisk/outgoing
今後
• もっと、汎用的にしたい。
– 起床時刻を電話で設定、キャンセル
– 音楽を自由に変更

More Related Content

More from Hashimoto Hisashi (11)

2020 01-11-koedo
2020 01-11-koedo2020 01-11-koedo
2020 01-11-koedo
 
Openwrt
OpenwrtOpenwrt
Openwrt
 
Homebridge
HomebridgeHomebridge
Homebridge
 
Gennymotion
GennymotionGennymotion
Gennymotion
 
Dd wrt
Dd wrtDd wrt
Dd wrt
 
Pogoplug koedo
Pogoplug koedoPogoplug koedo
Pogoplug koedo
 
Wireless bridge
Wireless bridgeWireless bridge
Wireless bridge
 
Rasberrypi 2013-08-17
Rasberrypi 2013-08-17Rasberrypi 2013-08-17
Rasberrypi 2013-08-17
 
Kernel summit2013
Kernel summit2013Kernel summit2013
Kernel summit2013
 
Voyage koedo-2
Voyage koedo-2Voyage koedo-2
Voyage koedo-2
 
Voyage koedo
Voyage koedoVoyage koedo
Voyage koedo
 

Asterisk