Slack を使って Alexa と対話する


こんにちは!ソフトウェア開発部の古川です。
前回の投稿から部署が変わりました!

暫く前にはなりますが、弊社開発部の居室に、Amazon Echo が設置されました。

みんな集中モードに入ると、居室が静かになったりすることもあるので、
そんな時に、少し BGM でも流して雰囲気を変えられたらなぁという感じで導入されたようです。

しかし、Alexa に声をかけても返事貰えなかったり、
既定のコマンドしか反応してくれなかったりして、
中々アクティブに話しかけられなかったりしますよね。

弊社開発部では社内コミュニケーションツールに Slack も使っています。
https://slack.com/intl/ja-jp/

Slack でのテキスト入力は日常的なので、
Slack から Alexa に命令したいなぁと思い、個人的に作ってみたので、
弊社の環境にも取り入れて試してみました!

このエントリについて

詳しいシステム構成やソースコード等の情報は、qiita のエントリや、github にあります。
もし技術詳細に興味がある方は、qiita のエントリを参照してください。

Slack のメッセージと RaspberryPi の音声を相互変換する

このブログエントリでは、実際に Alexa と対話してみた結果や、外部仕様に関する情報を記載します。

実現したいこと

  • Slack のメッセージを音声変換して、Alexaに話しかけたい
  • Alexa の発話内容を、テキストに変換して Slack に通知したい

ネットを検索すると、結構行われてたりしますね!

機器を構成する

音声の入出力を行う終端端末には、 RaspberryPi を使用。

RaspberryPi からの音声は、PC用のイヤホン端子接続のスピーカーを、
Alexa からの音声集音には、USBマイクを利用しています。
https://www.amazon.co.jp/dp/B01KZPF1U8/ref=pe_2107282_266464282_TE_dp_1

システムの大まかな構成

こんな感じになっています。

Slack から AWS サービスを利用して RaspberryPi へ通知、
RaspberryPi からは、Azure を利用して、テキスト→音声変換。

クラウドサービスは、AWS で統一しようとしていましたが、Azure を利用しているのは、
作成当時、AWS に、日本語の音声→テキスト変換が無かったからなのですが、
今現在もまだ AWS では、日本語の音声→テキスト変換はできないようですね。

システムを構成する

qiita のエントリを参考に、各種連携サービスのセットアップを行います。

AWS 各種リソースの導入/設定

各種 AWS リソースをセットアップします。
RaspberryPi に設定する接続情報を発行し、控えておきます。
また、Slack のエンドポイント情報を控えておきます。

Azure 各種リソースの導入/設定

音声→テキスト変換を行うために、Azure を利用します。
各種 Azure リソースをセットアップします。
RaspberryPi に設定する接続情報を発行し、控えておきます。

RaspberryPi の設置

AWS で発行した接続情報をコンフィグに設定します。
音声のやり取りができるように、Amazon Echo の近くに設置します。
電源をONすれば、プログラムが立ち上がるようになっています。

Slack の Outgoing Webhook を設定

Slack からのメッセージを転送するために設定します。

こんな感じで設定しています。

  • 特定のチャンネルでやり取りする
  • 特定のメッセージにだけ反応して通知する(※「Alexa 今何時?」等)
  • 通知先の AWS の接続情報を入力
  • 名前やアイコンを適宜入力

Slack の Incoming Webhook を設定

Slack へ外部からメッセージを受信するために設定します。

こんな感じで設定しました。

  • 特定のチャンネルでやり取りする
  • 名前やアイコンを適宜入力

やってみた

話しかける

まずは、いろいろ話しかけてみます。

おぉ Alexa が、認識してくれました!(全く伝えられませんが)
思ったより正確に認識しています。

サカナクションも再生できます。

既定のコマンドも認識してくれます。

ひらがなの方がテキスト→音声変換の動作が無難だったので、ひらがなばかりで試しています。

耳を傾ける

Alexa の発話内容も拾ってみます。

思ったより正確で驚きました!

正確ではないけどなんとなく読めますね。

発生内容によっては、全く意味がわからないことも。
誰かが首をひねっていました。

時間を指定して話しかける

Slack の設定で、「Reminder:」が入っていたのに気づきましたか?
Slack の /remind 機能を使って、メッセージのスケジュール投稿を拾うようにしました。

Slack に返事は返してもらえませんでしたが、Alexa との一日も始まります。

Amazon Echo 自体にもスケジュール機能はありますが、
音楽のスケジュール再生は再生されたままになったりするので、
Slack のスケジュール投稿で、「再生して」「再生終了して」という指示もできそうですね。

終わりに

Alexa と会話したい方は、ソフトウェア開発部までお越しください!

#稼働時期はきぶんや状況次第
#今はアクティベーションが解除されています
#普段は真面目に仕事してます