利用者:Takuro
提供: VoIP-Info.jp
俺得な設定
とりあえず、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
これでいいはずだぜ。
興味があったら随時追加していってやる。