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