Tips

Linux asterisk 第6回

IVR機能と DTMFトーンによる転送

asteriskのIVR用のサンプル音声ファイルは以下のディレクトリに保存してある。
[root@localhost asterisk]# ls /var/lib/asterisk/sounds/en/

extensions.conf に以下の用にして記述する。

[ivr-menu]
exten => s,1,Answer()
exten => s,n,WaitExten(30)
exten => s,n,Hangup

exten => 201,1,Dial(SIP/4444)


[default]
exten => 12345,1,Goto(ivr-menu,s,1)

そしてSIPクライアントから 12345 に対してコールすると、すぐに通話中になる。
その状態で DTMF 201 を入力すると4444に電話がかかる。

以下はその際のログ


  == Using SIP RTP CoS mark 5
    -- Executing [12345@default:1] Goto("SIP/2001-0000000a", "ivr-menu,s,1") in new stack
    -- Goto (ivr-menu,s,1)
    -- Executing [s@ivr-menu:1] Answer("SIP/2001-0000000a", "") in new stack
    -- Executing [s@ivr-menu:2] WaitExten("SIP/2001-0000000a", "30") in new stack
  == CDR updated on SIP/2001-0000000a
    -- Executing [201@ivr-menu:1] Dial("SIP/2001-0000000a", "SIP/4444") in new stack
  == Using SIP RTP CoS mark 5
    -- Called SIP/4444
    -- SIP/4444-0000000b is ringing
    -- SIP/4444-0000000b answered SIP/2001-0000000a
    -- Locally bridging SIP/2001-0000000a and SIP/4444-0000000b
  == Spawn extension (ivr-menu, 201, 1) exited non-zero on 'SIP/2001-0000000a'

そして以下のようにすると IVRの機能が動作するはずである。

[ivr-menu]
exten => s,1,Answer()
exten => s,n,Playback(vm-enter-num-to-call)
exten => s,n,WaitExten(30)
exten => s,n,Hangup

exten => 201,1,Dial(SIP/4444)

[default]
exten => 12345,1,Goto(ivr-menu,s,1)

だが IVR機能が動作しない
以下のように vm-enter-num-to-call ファイルが無いようなえらーになってしまう。


  == Using SIP RTP CoS mark 5
    -- Executing [12345@default:1] Goto("SIP/2001-0000000e", "ivr-menu,s,1") in new stack
    -- Goto (ivr-menu,s,1)
    -- Executing [s@ivr-menu:1] Answer("SIP/2001-0000000e", "") in new stack
    -- Executing [s@ivr-menu:2] Playback("SIP/2001-0000000e", "vm-enter-num-to-call") in new stack
[Mar 26 17:47:47] WARNING[32190]: file.c:663 ast_openstream_full: File vm-enter-num-to-call does not exist in any format
[Mar 26 17:47:47] WARNING[32190]: file.c:954 ast_streamfile: Unable to open vm-enter-num-to-call (format 0x4 (ulaw)): No such file or directory
[Mar 26 17:47:47] WARNING[32190]: app_playback.c:475 playback_exec: ast_streamfile failed on SIP/2001-0000000e for vm-enter-num-to-call
    -- Executing [s@ivr-menu:3] WaitExten("SIP/2001-0000000e", "30") in new stack

そこでインストールに成功している Xen 上の CentOS 上の asterisk にインストールされている sounds ディレクトリ以下の音声ファイルをコピーしてみる。
以下のコマンドを CentOS上で実行(192.168.10.127 は Fedora上の asteriskである)

Fedora上で作業

[root@asterisk ~]# mkdir ~/asterisk

CentOS上で作業

[root@localhost asterisk]# scp -r /var/lib/asterisk/* 192.168.10.127:~/asterisk

Fedora上の asterisk関係のディレクトリは以下のファイルを見るとわかる。
これをみると astvarlibdir がバイナリ版の asterisk の音声ファイルを置くディレクトリのようだ。

[root@asterisk asterisk]# head -12 asterisk.conf
[directories](!)
astetcdir => /etc/asterisk
astmoddir => /usr/lib64/asterisk/modules
astvarlibdir => /usr/share/asterisk
astdbdir => /var/spool/asterisk
astkeydir => /var/lib/asterisk
astdatadir => /usr/share/asterisk
astagidir => /usr/share/asterisk/agi-bin
astspooldir => /var/spool/asterisk
astrundir => /var/run/asterisk
astlogdir => /var/log/asterisk

なので以下の用にして音声ファイルをコピーする
[root@asterisk asterisk]# cp -r ~/asterisk/sounds/en/ /usr/share/asterisk/sounds/

この状態で SIPクライアントから 12345 宛にコールしてみた。
するとエラーメッセージが変化した。
音声ファイルを置くディレクトリについては間違っていないようだ。
== Using SIP RTP CoS mark 5
— Executing [12345@default:1] Goto(“SIP/2001-0000000e”, “ivr-menu,s,1”) in new stack
— Goto (ivr-menu,s,1)
— Executing [s@ivr-menu:1] Answer(“SIP/2001-0000000e”, “”) in new stack
— Executing [s@ivr-menu:2] Playback(“SIP/2001-0000000e”, “vm-enter-num-to-call”) in new stack
[Mar 26 17:47:47] WARNING[32190]: file.c:663 ast_openstream_full: File vm-enter-num-to-call does not exist in any format
[Mar 26 17:47:47] WARNING[32190]: file.c:954 ast_streamfile: Unable to open vm-enter-num-to-call (format 0x4 (ulaw)): No such file or directory
[Mar 26 17:47:47] WARNING[32190]: app_playback.c:475 playback_exec: ast_streamfile failed on SIP/2001-0000000e for vm-enter-num-to-call
— Executing [s@ivr-menu:3] WaitExten(“SIP/2001-0000000e”, “30”) in new stack

とおもったら単純に SIPクライアントの Windows側でスピーカーをミュートをオンにしていただけだった。
この状態で SIPクライアントから 12345 宛にコールしてみたら IVRの再生が普通に聞こえた。

またSIPクライアント(X-Liteなど)の設定が適切か(この場合は問題なかったが)どうかも疑った方が良い。

Linux認定資格 LPICを取るなら・・

Linux資格 「LPIC Lv1」徹底解説 連載目次

Recent News

Recent Tips

Tag Search