1
回編集
差分
→**はじめてのおつかい**
== 俺得な設定 ==
とりあえず、Takuroの俺得設定を連ねる。
スクリプトはすべてGPLv3とします。
//思ったけどこれすっごいgdgd
----
== Fax for Asterisk用シェルスクリプト ==
このサイトの、Fax2Mail.shだと意味不明な文章(uuencodeのせいだと思う)で面倒くさいし、とあるサイトで見つけたFax2Mail.plだとPostfixが嫌がるので、仕方なくこんなスクリプトをゴリゴリ書いた。
<?php
//Setting Value
$basedir='/var/spool/asterisk';
$faxin='faxin';
$faxpdf='faxpdf';
$mailfrom='hoge@example.com';
$mailto='fuga@example.com';
$header .= "Content-Type: multipart/mixed; boundary=\"__PHPRECIPE__\"\r\n";
$header .= "\r\n";
$body = "--__PHPRECIPE__\r\n";
$body .= "Content-Type: text/plain; charset=\"ISO-2022-JP\"\r\n";
$body .= "\r\n";
$body .= $mailbody . "\r\n";
$body .= "--__PHPRECIPE__\r\n";
$data = fopen($pdfname, 'r');
$attachdata = fread($data, filesize($pdfname));
fclose($data);
$attach64 = base64_encode($attachdata);
$body .= "Content-Type: application/pdf; name=\"$filename\"\r\n";
$body .= "Content-Transfer-Encoding: base64\r\n";
$body .= "Content-Disposition: attachment; filename=\"$filename\"\r\n";
$body .= "\r\n";
$body .= chunk_split($attach64) . "\r\n";
$body .= "--__PHPRECIPE__--\r\n";
if (ini_get('safe_mode')) {
$result = mb_send_mail($mailto, $mailsubject, $body, $header);
} else {
$result = mb_send_mail($mailto, $mailsubject, $body, $header,'-f' . $mailreturn);
}
if($result){
unlink($tiffname);
unlink($pdfname);
exit(0);
}else{
exit(1);
}
?>
適当にFax2Mail.plのいいところとFax2Mail.shのいいところを掛けあわせてやった。
== 簡単にFaxoutを実行できやがるスクリプト ==
僕のGistに乗せてあるのでパクってきた
#!/bin/sh
file=faxout.tif
if [ -e $file ]; then
echo "$file Found, Do Send fax."
echo -n "Please input send fax number: "
read faxnum
if expr "$faxnum" : '[0-9]*' > /dev/null ; then
echo 'OK' > /dev/null
else
echo "This is not number. Please try agein."
exit 1
fi
while true; do
echo -n "Send number is ${faxnum} is this correct? [y/N]: "
read confirm
case $confirm in
y) echo "OK,It will Start within 3seconds."
echo "Note: You need Administrator Password"
sudo asterisk -rx "originate SIP/${faxnum}@brastel extension send@fax-tx"
if [ "$?" -eq 0 ]; then
echo 'Send Fax Was Successed.'
echo 'Now Removing faxout.tif'
rm -r faxout.tif
exit 0
else
echo 'Send Fax Was Failed.'
echo 'Please check it'
exit 1
fi
break
;;
*) echo "Aborting."
exit 1
break
;;
esac
done
else
echo "$file not found."
echo "If you have tif file, please rename faxout.tif"
exit 1
fi
@brastelとかは勝手に書き換えてね。faxout.tifと同じディレクトリにおいて試してくだせえ。
== お天気予報 ==
177もどき。僕が書いているサイトでも載せてあるのでまんまぱくる。
jqとOpen J Talk、Meiが必要で、適宜書き換えてくだせえ。
extensions.confは載せてやる。お前のためだけに。
;Weather Service
exten => 177,1,Answer()
exten => 177,n,Playback(queue-callswaiting)
exten => 177,n,System(/usr/local/bin/weathertalk)
exten => 177,n,Playback(weather)
exten => 177,n,Hangup()
↑フレッシュなデータが聞けるぜぇ
#!/bin/sh
date +"%Y年%m月%d日 %I時%M分現在の天気予報をお伝えします。" | open_jtalk -x /var/lib/mecab/dic/open-jtalk/naist-jdic -m /usr/share/hts-voice/mei/mei_normal.htsvoice -ow /tmp/announce.wav
wget 'http://weather.livedoor.com/forecast/webservice/json/v1?city=130010' -O- -q | jq -M -c '.description .text' | sed 's/\"//g' - | sed 's/\\n//g' - | sed 's/ //g' - | sed 's/寒気/かんき/g' - | sed 's/所々/ところどころ/g' - | sed 's/日中/にっちゅう/g' - | cut -c 1-804 | open_jtalk -x /var/lib/mecab/dic/open-jtalk/naist-jdic -m /usr/share/hts-voice/mei/mei_normal.htsvoice -ow /tmp/weather1.wav>/dev/null 2>&1
WORD=`wget 'http://weather.livedoor.com/forecast/webservice/json/v1?city=130010' -O- -q | jq -M -c '.description .text' | sed 's/\"//g' - | sed 's/\\n//g' - | sed 's/ //g' - | sed 's/寒気/かんき/g' - | sed 's/所々/ところどころ/g' - | sed 's/日中/にっちゅう/g' -| wc -c`
if `test $WORD -le 804` ; then
echo 'Noting for Todo'>/dev/null 2>&1
else
wget 'http://weather.livedoor.com/forecast/webservice/json/v1?city=130010' -O- -q | jq -M -c '.description .text' | sed 's/\"//g' - | sed 's/\\n//g' - | sed 's/ //g' - | sed 's/寒気/かんき/g' - | sed 's/所々/ところどころ/g' - | sed 's/日中/にっちゅう/g' - | cut -c 805-1600 | open_jtalk -x /var/lib/mecab/dic/open-jtalk/naist-jdic -m /usr/share/hts-voice/mei/mei_normal.htsvoice -ow /tmp/weather2.wav>/dev/null 2>&1
fi
echo '以上、お伝えしました。ご利用ありがとうございました。' | open_jtalk -x /var/lib/mecab/dic/open-jtalk/naist-jdic -m /usr/share/hts-voice/mei/mei_normal.htsvoice -ow /tmp/end.wav>/dev/null 2>&1
if `test $WORD -le 804` ; then
mv /tmp/weather1.wav /tmp/weather3.wav
else
sox /tmp/weather1.wav /tmp/weather2.wav /tmp/weather3.wav
fi
sox /tmp/announce.wav /tmp/weather3.wav /tmp/weather4.wav
sox /tmp/weather4.wav /tmp/end.wav /tmp/weather5.wav
sox /var/lib/asterisk/sounds/ja/callup.wav /tmp/weather5.wav /tmp/weather6.wav
sox /tmp/weather6.wav -r 8000 /tmp/weather7.wav>/dev/null 2>&1
sox /tmp/weather7.wav /tmp/weather.ul>/dev/null 2>&1
sox /tmp/weather7.wav /tmp/weather.gsm>/dev/null 2>&1
mv /tmp/weather.gsm /var/lib/asterisk/sounds/ja/
mv /tmp/weather.ul /var/lib/asterisk/sounds/ja/weather.ulaw
rm /tmp/announce.wav /tmp/weather3.wav /tmp/weather4.wav /tmp/weather5.wav /tmp/weather6.wav /tmp/weather7.wav /tmp/end.wav
if `test $WORD -le 804` ; then
echo 'Noting to do' >/dev/null 2>&1
else
rm /tmp/weather1.wav /tmp/weather2.wav
fi
== オートコールバック ==
これ食うと凍る(コレクトコール)。
掛けると一旦話し中でぶった切られるけど、5秒後にお電話がかけ直してきやがるやつ。
で、IVRで電話番号入れやがれと言われるので、繋ぎたい内線or外線をDTMFでダイヤルするといいって感じ。
extensions.confは仕方ねぇ、載せてやる。
exten => 108,1,System(nohup /var/lib/asterisk/collect.sh ${CALLERID(number)} &)
exten => 108,n,Busy
exten => collect,1,Set(CNT=1)
exten => collect,2,Ringing
exten => collect,3,Wait(1)
exten => collect,4,Answer
exten => collect,5,Wait(1)
exten => collect,6,Background(vm-enter-num-to-call)
exten => collect,7,WaitExten(5)
exten => collect,8,GotoIf($[${CNT} >= 3]?11:9)
exten => collect,9,Set(CNT=$[${CNT} + 1])
exten => collect,10,Goto(collect,6)
exten => collect,11,Playback(tt-monkeysintro)
exten => collect,12,Hangup
で、collect.sh
#!/bin/bash
sleep 5
FromNum=`echo -n $1 | wc -m`
typeset -i RET="1"
if [ "$1" = "201" ] ; then
typeset -i RET="0"
fi
if [ "$1" = "202" ] ; then
typeset -i RET="0"
fi
if [ "$1" = "203" ] ; then
typeset -i RET="0"
fi
if [ "$1" = "0330000000" ] ; then
typeset -i RET="0"
fi
if [ "$RET" = "1" ] ; then
echo "NOT ACCEPTED NUMBER"
exit 1
fi
if test $FromNum -le 4 ; then
echo "Called to Inline"
echo "Channel: SIP/${1}
CallerID: CollectCall <108>
MaxRetries: 1
RetryTime: 15
WaitTime: 30
Extension: collect
Priority: 1" > /var/spool/asterisk/outgoing/inline.txt
else
echo "Called to Outline"
echo "Channel: SIP/${1}@brastel
CallerID: CollectCall <05068630000>
MaxRetries: 1
RetryTime: 15
WaitTime: 30
Context: default
Extension: collect
Priority: 1" > /var/spool/asterisk/outgoing/outline.txt
fi
これでいいはずだぜ。
興味があったら随時追加していってやる。