2010-01-18

AsteriskのAGIコマンドrecord_fileと回線切断時のAGIの処理指定方法

電話を使った音声録音システムを作っていて、録音中に切断して次の動作に移る処理をAGIに盛り込むにあたって、
AsteriskのAGIコマンドの中にあるrecord_fileの細かい動作を調べたのでメモ。

まずはrecord fileについて。

Usage: RECORD FILE     [offset samples] [BEEP] [s=]


record_fileの使い方は
RECORD FILE<ファイル名><録音するフォーマット(.gsmとか)><録音を中断するためのボタン(1...9と#*のDTMFを指定)><最大の録音時間を指定(msecなので注意)、-1で無制限>[(offsetについては分かりませんでした)][trueと書いておけばbeep音を鳴らして開始][音声の無音状態が指定値を超えたら録音を終了]

例:
record_file('recfile', '.gsm', "#", -1, NULL, true, NULL);



実際に録音が始まるタイミングはbeep音がなった瞬間。
beep音が鳴ると、その瞬間に指定した名前のファイル名が作成される。
なので、録音者が録音をしたかったのかどうかはAGI上でrecord_fileが呼ばれる瞬間を期に見ることで判断できる。

なるほどと思ったのは、録音を切断によって終了する場合、NTTドコモのような留守番電話サービスではファイル容量などをみて、短すぎる録音を排除する処理をしているようだ。
確かに留守番電話になって、録音せずに切断するというシーンはよくあるし、なんとなくbeep音がなるまでIVRを聞いてしまって、すぐに切断するといった事もある。
その時の1秒程度のメッセージは録音キャンセルと同義にしたほうが良いと。


それも踏まえて切断される直前と直後に次のような記述をすることで、AGIでの切断時の処理を分けることができるかもって記事を見つけた。
http://asterisk.auaudata.com/1603.html

$result = $agi->record_file('recfile', '.gsm', "#", -1, NULL, true, NULL);
if($result['result']==-1){
//回線切断時の処理
exit;
}


上記のような記述を切断時の動作を付けたいAGIコマンドにすれば良いハズ。
動作確認してないのですが、ちょっとやってみたらできなかった。
たぶん、やっぱりAGI上での回線切断の方が、if文の行よりも早く処理されてしまうからだろう。


もしくは、extensions.conf上でAGIを指定しているので、切断されたAGIが終わった後に動かしたいAGIをextensions.conf上に
exten => 201,1,AGI(first.agi)
exten => 201,n,AGI(second.agi)


とか書けば良さそう。
(追記:やっぱり無理でした。hangupは回線切断なので、完全に通話を切断してしまいます。)



その他にもDeadAGIというものがある。
exten => h,1,DeadAGI(agi-test)
のように、extensions.conf上でAGIを指定する。
するとAGIのプロセスが回線の切断と同時に強制終了されなくなる。
"h"というエクステンションは回線が切断したという意味です。
これはどうやって電話番号指定するのか分からない…わかる方がいたら教えてください。根本的にわかってないので。。



本家voip-infoに書いてあった代替案として、SIGHUPを使えと言っていました。
それぞれ言語での使い方は以下のようになってました。

Perl:
$SIG{HUP} = "IGNORE" (Perl)

PHP (though you must compile with --enable-pcntl to get this function):
pcntl_signal(SIGHUP, SIG_IGN)

Ruby:
trap('SIGHUP','IGNORE')


SIGHUPは回線が切れた時のシグナル。
これを利用して、その後の動作を指定してあげる。
ただし、phpの場合はコンパイル時にオプションを付ける必要があるので注意だそうです。



応援クリックお願いします!!人気blogランキングへ

2010-01-08

一人暮らしあんしん電話がNHKで放送

以前、毎日新聞にも登場した「一人暮らしあんしん電話」ですが、NHKのニュース番組でも紹介されていました。

一人暮らしあんしん電話


裏話のような話になってしまうのですが、設計の打ち合わせやシステム障害が起きた時に、何度も足繁く通った千葉県松戸市のどうたれ内科診療所が映ったときはとても懐かしい気分になりました。

システムの根本的なデザインや、UIがほとんどそのまま使われていて、共同開発者として嬉しい限りです。
現在はおたずねフォンと名前を少し変えて製品化されています。リンク先の画面説明で紹介されている画面を見たときは、本当に驚きました。

研究が終わった後に、共同開発者の堂垂医師が公開していた資料にも、我々の事が記載されていてそれを読んだ時には、この研究に携わることが出来た事が嬉しくて仕方ありませんでした。
本当に恵まれた環境で研究させていただいています。
これから卒業までの数カ月、全力で頑張りたいと思います。


そして…なんと次は2010年1月9日午前7時過ぎから、TBS「サタずば」の番組内で20分ほど一人暮らしあんしん電話の紹介があるそうです!!!
これは是非見なければ!!!


応援クリックお願いします!!人気blogランキングへ

2010-01-03

2010のプラン


2010年明けましておめでとうございます。

2009年は世界恐慌と共に就職活動に始まりましたが無事内定を貰い、1年通じて様々な人と出会い、学ばせて頂く事が出来ました。
2010年もよろしくお願いいたします。

今年は人生最後の?学生生活になります。
4月からはついに社会人です。
期待:不安=3:7くらいの気持ちですが、プレッシャーに負けないように頑張ります。

そこで、2010年のプランをいくつか決めてみました。

◆ホウレンソウをしっかり行う
報告・連絡・相談が最近一切できていません。
完全にtwitterのせいだと思ってます。
今何やってるかを常にダダ漏れ状態にしてるので、それを書くので自己満足してしまっています。
チームで何かをやらなければならないのに、報告を全然しない。
また、大事なメールの返事もなかなかしない。
メールする時間を決めて、報告事項・連絡事項・相談事項について、常に情報を共有できるように頑張ります。


◆技術力の向上
2010年は潜伏期間だと思っています。
今のところ、技術面での実力はエンジニアと呼ぶには全く足りていません。
ただひたすらに学ぶ。
1年後には頭に描いたものをすぐに形にできるくらいの実力になっていたいと思います。


◆人の話を聞く
人付き合いが本当に下手なんです。
2009年は人生最大の過ちを犯してしまいました。
学ぶ姿勢を大事にしながら会話するようにしたいと思います。
自分の知っていることなんてほとんど無い。
何か意見がある時も本当に言うべきかどうか考えながら話す。


◆恩返しをする
同年代や近い年代の人より比較的長く学生をやっているという事もあり、食事を奢ってもらったり、色々なところに連れて行っていただきました。
社会人になってからの給料は、しばらく皆への恩返しに使えればと思っています。
もちろん、家族にも。


◆やってみたいこと
写真の勉強。去年無理やり買ったGRD2をもっと活用してやりたい。
あと、余裕が出来たらデジ一も欲しい。
最近撮った写真が本当に良かった。こんな感動をもっと味わいたい。


地元の中学のグラウンド。毎日陸上部の練習で走ってた場所。


というわけで、今年4月から社会人です!!
今の自分から見てカッコイイと思える人になれるように、これから頑張りたいと思います。


応援クリックお願いします!!人気blogランキングへ