(Qiita:team内に去年書いた記事をコピペしてます)
「AWS re:Invent 2016のKeynote 1にて、テキスト読み上げサービス「Amazon Polly」がリリースされました!」との
ことなので、何かに使えないかと考え・・・
とりあえずアラートをしゃべらしたら便利なんじゃないかと思って早速使ってみました。
Pollyについてはこちら↓
http://dev.classmethod.jp/cloud/aws/reinvent2016-new-service-amazon-polly/
構成
社内にリソースグラフを表示する40インチモニタが設置されているので、
そこからしゃべらせればいいと思ったので、こんな感じの構成で構築。
SQSから全部取って、mp3に変換して再生して、キュー消す
mac上に置いたスクリプトの一部
// 100件ずつ処理する
// sqsから10件ずつしか取得できないのでループして100件取得するようにする
$messageList = array();
for ($i = 0; $i < 10; $i++) {
$start_time = microtime(true);
// キューから10件データ取得
$result = $this->_getSqsMessage();
// 無ければ処理終了
if (!isset($result['Messages'])) {
break;
}
$messageList = array_merge($messageList, $result["Messages"]);
}
// 処理が正常に行えたメッセージのSQS情報を保持
$sqsKeys = array();
// 取れた分全部しゃべらせる
foreach ($messageList as $k => $message) {
$mes = $message['Body'];
p("Speek: ".$mes);
if($mes){
$mes = str_replace('"', "", $mes);
$mes = mb_strimwidth($mes, 0, 140, "・・・以下略");
// Mac通知センターにメッセージ表示
$rs = `osascript -e 'display notification "{$mes}" with title "Polly"'`;
// mp3生成
$rs = `aws polly synthesize-speech --text "{$mes}" --voice-id Mizuki --output-format mp3 speech.mp3`;
// 再生
$rs = `afplay speech.mp3`;
}
$sqsKeys[] = array(
"Id" => $message["MessageId"],
"ReceiptHandle" => $message['ReceiptHandle'],
);
}
// 全部消す(変換失敗とかあってもスルー)
foreach (array_chunk($sqsKeys, 10) as $keys) {
$this->_deleteSqsMessage($keys);
}
あとはslackBotやAPIなどでSQSにメッセージをぶち込めばなんでもしゃべる。
社外からSlackで社内に音声メッセージを強制的に響かせられます!
(休みます!とかw)
@all