agiでmonitorをするのが大変だった。

extensionsでmonitorをするには、

exten => s,1,Monitor(wav,${CALLFILENAME},m)

な感じで行えばいい。簡単。

難しかったのが、${CALLFILENAME}に保存ファイル名を指定するんだけど。
発信元番号や着信番号や日付を付けたファイル名にしたいなと。
日付は、${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S )で良いけど。
難航したのは、発信元番号を入れたいなと言うとき。

${CALLERID(dnid)}

で、発信元番号が取得できるんだけど、なぜか番号にスペースが入る。
extenで、スペースは消すとか、そんな文字列処理書けんよ。
もうやだ。AGIで書いてやる。Perlならそんなの、なんなく出来るのに~。

こうして、またまたハマった。4日ほど。

続く

ネットで調べたら。
http://www.voip-info.org/wiki/index.php?page_id=98&comments_page=1
$AGI->exec(Monitor,”wav|/etc/asterisk/savedComand”);
とか
http://www.voip-info.org/wiki/view/PERL-SIPCALLOUT-AGI
$res = $AGI->exec(“Monitor gsm|$d_path/Callfrom-$calleridnum-CallTo-$CalledNumber-at-$CurDate|m”);
とか、って書いてんじゃん。

うんうん。コピペでサクサクッと。

と思いきや、指定しているファイル名で保存されなかったり、保存形式指定してないぞとか。そもそも何も保存されなかったり。

正解は、
https://github.com/goautodial/ce-agi-bin/blob/master/agi-NVA_recording.agi
のソースを見て。

if (( $ast_ver_str{major} = 1 ) && ($ast_ver_str{minor} < 6))
        {
        $AGI->exec("Monitor wav|/var/spool/asterisk/monitor/MIX/$filename");
        }
    else
        {
        $AGI->exec("Monitor","wav,/var/spool/asterisk/monitor/MIX/$filename"); 
        }

なにやら、バージョンで、記述を分けているぞ。

私のAsteriskのバージョンは、ほぼ最新の 13.7.0です

$AGI->exec(“Monitor”,”wav,$monitor_filename,m”);

で、正常に行えた。

オプション指定が変わったようだ。

monitorだけでは無く、dialもいままで間違った設定になっていたようだ。
$AGI->exec(“Dial”, $dialCMD,”tT”);
となっていたけど。$dialCMDだけ有効で、tTは無視されていたようだ。

正解は。
$AGI->exec(“Dial”, “$dialCMD,tT”);

2017/12/01追記
この記事、ぱっと見、意味が分からなかったけど、”(ダブルコーテーション)の位置が違う。
自分で書いたのに、忘れてしまっている。

コメントする

メールアドレスが公開されることはありません。

Time limit is exhausted. Please reload the CAPTCHA.

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください