Alexaをしゃべらせる（Node-red編）

#やりたいこと

※※※この記事は古くなっています。最新の記事「[Alexaをしゃべらせる（remote2 v3.3編）](https://qiita.com/naka-kazz/items/1d792e6b60fbde126f37)」を参照ください。

Node-redで[node-red-contrib-amazon-echo](https://flows.nodered.org/node/node-red-contrib-amazon-echo)や[node-red-contrib-alexa-home-skill](https://alexa-node-red.bm.hardill.me.uk/docs)のパレットを使うと、Alexaに音声で話しかけることをトリガーにNode-redの処理を開始できます。しかし、これらのパレットでは、処理の結果をAlexaを使って音声で回答する（＝しゃべらせる）ことはできません。今回は、Node-redからAlexaをしゃべらせることをやってみます。

#準備：情報収集
Alexaをしゃべらせるためには、以下の３つの情報が必要なので、これらを順に収集します。

　1.Amazonアカウント　※これは持っていると思うので割愛
　2.AmazonEchoのシリアル番号
　3.AlexaAPIを呼び出すためのCookie

##1.AmazonEchoのシリアル番号
AmazonEchoのシリアル番号は、スマホのAlexaアプリから[設定]→[デバイスの設定］→Echoの名前→[その他］と選択していくと表示されます。これをメモしておきます。
![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267609/f736cef6-1e70-2c36-d5c8-1ecfd73bccf3.png)

##2.AlexaAPIを呼び出すためのCookie
AlexaAPIを呼び出すためのCookie情報が必要ですが、この情報を収集するのが多少めんどうです。

###①AlexaのWebサイトにアクセス###
Google Chromeを使ってAmazon AlexaのWebサイト「[https://alexa.amazon.co.jp](https://alexa.amazon.co.jp)」にアクセスし、しゃべらせるAlexaに紐づいているAmazonアカウントでログインします。
![図2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267609/7629f0cc-45e1-e789-49be-4f79db72dfbe.png)

###②開発ツールを開く###
キーボードの「F12」キーを押して開発ツールを開き「Network」のタブを選択します。
![図3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267609/301fb46c-975b-9e8d-0644-d7a8416c087b.png)


###③音楽を再生する###
次に、左側のWebページ内から「ミージック・ビデオ・本」を選択し、PrimeMusicなど、音楽を選択して再生します。当然ながら、音楽を再生するとAmazonEchoから音楽が流れます！
![図4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267609/1598e2a8-5503-bb25-de0d-444a68767265.png)


###④Cookieを取得###
右側の開発ツールの画面内のName欄から「queue-and-play?・・・・」というものを探し、クリックします。
![図5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267609/e13252b3-4e99-1481-f4b9-bd57b776aa0c.png)

右側の画面を下にスクロールしていくと「Request Header」の中に「Cookie:」があるので、この内容をテキストエディタなどにコピーしておきます。
![図6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267609/b51053dd-6d26-7f7d-b3c9-68d65c57476b.png)

#Node-redの設定
ここから、実際にNode-redを使って、Alexaをしゃべらせてみます。

##1.node-red-contrib-alexa-remote2のインストール
Node-redからAlexaをしゃべらせたり、音楽を再生するには[node-red-contrib-alexa-remote2](https://flows.nodered.org/node/node-red-contrib-alexa-remote2)を使います。まずは、node-red-contrib-alexa-remote2をNode-redにインストールしましょう。

###①パレットの追加画面の表示###
Node-redの画面の右上の「三」→パレットの管理→（左メニューの）パレット→ノードを追加の順に選択して、パレットの追加画面を表示させます。
![図7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267609/edcd15f3-6f24-1c5c-0542-03e9d9dd6edc.png)

###②node-red-contrib-alexa-remote2の追加###
次に「ノードを検索」の欄に「alexa remote」と入力して検索します。検索して出てきた「node-red-contrib-alexa-remote2」の「ノードを追加」ボタンをクリックします。
※「remote」と「remote2」がありますが、remoteは古いのでremote2を選びましょう。
![図8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267609/5bbae91b-83cf-52e4-4361-5940ac99faf5.png)

また、警告などでますが、構わずにOKしましょう。

###③追加ノードの確認###
無事にインストールが完了すると、Node-red画面の左側に「media」欄が追加され「Alexa music」「Alexa Speek」「Alexa Command」の３つのノードが追加されるので、確認しましょう。

![図9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267609/941b35f2-a6b1-2e39-662c-4455e4b88ccd.png)

##2.Alexa Speekノードの利用
ここからはAlexa Speekノードを利用して、実際にAlexaをしゃべらせてみたいと思います。

###①Alexa Speekノードの追加###
左側のメニューより「Alexa Speek」ノードをドラッグしてフローに追加します。
![図10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267609/2412f329-3c6d-5581-33b2-206a08f972a1.png)

###②Account設定画面の表示###
追加したAlexa Speekノードをダブルクリックして設定画面を開き、さらにその中のAccount欄の鉛筆アイコンをクリックして、Accountの設定画面を表示させます。

![図11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267609/daa6ef2f-8e8d-80d5-20b6-5cf9a5545a62.png)

###③Accountの設定###
Accountの設定画面に以下のように入力して、更新ボタンを押しましょう。

　・Email：Alexaに紐づいているAmazonアカウントのEmailアドレス
　・Password：Amazonアカウントのパスワード
　・Service Host：alexa.amazon.co.jp
　・Language：ja_JP
　・AmazonPage：amazon.co.jp
　・Cookie：上記確認でテキストエディタにコピーしたもの。

※Cookieは「x-amzn-dat-gui-client-v」から始まる部分を全て貼り付けます。頭の「Cookie:」は不要です。

![図12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267609/0eaf8c54-7c04-4ae7-125d-74b4c51708d4.png)

###④Alexa Speekノードの設定###
Alexa Speekノードの設定画面に以下のように入力して、完了ボタンを押しましょう。

　・Serial or Name：上記でメモしたAmazonEchoのシリアル番号
　・Node Name：なんでもOK ※Node-red上のノードの名前
　・Text：※アレクサにしゃべらせたい言葉
　・Volume：※設定しなくてもOK

※2019年10月現在、Textの部分はアルファベットで入力しないとAlexaはしゃべってくれません。発音は日本語でちゃんと発音してくれるのですが・・・。

![図13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267609/f652f06f-c1a3-9dbe-4733-74db1befc064.png)

###⑤Injectノードの追加###
テストするためにInjectノードを追加して、Alexa Speekノードと接続しましょう。そして、最後に「デプロイ」ボタンを押しましょう。
![図15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267609/eedfcfd4-1247-0355-6b4c-a75b59819e27.png)

###⑥テスト！！###
それでは、Inhectノードの左側のボタンを押してみましょう！！！Alexaはしゃべってくれましたか？
うまくいくとAlexa Speekノードの下に「Success」と表示されます。

#おわりに
今回はNode-redとnode-red-contrib-alexa-remote2を使って、Alexaに任意のテキストをしゃべらせることをやってみました。スマートホームなど、ちょっとしたことをAlexaが音声でおしえてくれたら良いなーと思うことが多いので、この機能を今後使っていこうと思います。