Alexa-remote2でAlexaにログインできない場合の対処法(Alexa-Cookie v3.2.1版)

スマートホーム
スポンサーリンク
このエントリーをはてなブックマークに追加

はじめに

以前の記事「Alexa-remote2でAlexaにログインできなくなった!【対処法】」をお読みの方は、「問題発生」〜「解決策」は読み飛ばして下さい。

問題発生

Alexaをしゃべらせる(Node-red編)」や「Raspberry Piで最強の防犯カメラを作ってみる(動画記録・配信、動体検知・Line通知、顔検知・顔認証、Alexa搭載)[6/6]」でご紹介したように、我が家のスマートホームシステムでは、node-red-contrib-alexa-remote2を使って、ID&Password認証でAlexaにログインして、Alexaをしゃべらせていました。

しかし、Alexa用のログインIDを新しいものに変えたところ、以下のようにログインができなくなってしまった😭 Node-redの画面には「Login unsuccessfull. Please check credentials.」というエラーが出ている。正常時は「Ready」。

原因:Amazon側の仕様変更

ネット上の情報を調査したところ、Amazon側の仕様変更によりユーザ&パスワードが動かなくなったとのこと。米国の「alexa.amazon.com」では、2019年夏頃から動かなくなったよう。。。日本の「alexa.amazon.co.jp」では、私の古いアカウントは使えていたので、アカウントによって、ログインできないアカウントがあるようです。

解決策:ログインをProxy認証に変更

私の調査結果では、node-red-contrib-alexa-remote2のログイン認証を「Email & Password」認証から「Proxy」認証に変更することで、解決できるらしい(後で分かるが、これだけでは解決できなかった)。

Alexa Accountノードの設定変更

Node-redのフロー上にある、Alexa Rutineノードをどれか一つ開きます。次に「Account」欄の鉛筆アイコンをクリックして「Alexa Accountノード」の設定画面を出し、以下のように設定します。
  Auth Method:Proxy
  This IP:※Node-redをインストールしているホストのIPアドレス
  Port:3456 ※デフォルトでOK
  Service Host:alexa.amazon.co.jp
  Page:amazon.co.jp
  Language:ja_JP

デプロイ

Proxy認証に変更したら「デプロイ」ボタンを押して、変更内容をデプロイしましょう。

デプロイが完了すると、Alexa Rutineノードの下に「Open 192.168.0.1:3456 in your browser」と表示されます。

ブラウザでアクセス

画面の指示通り、PCのWebブラウザで「http://192.168.0.1:3456/」にアクセスします。IPアドレスはnode-redホストのものに適宜変更してくださいね。すると、以下のようにAlexaのログイン画面が表示されるので、Amazonのユーザ名とパスワードを入力してログインします。ちなみに、2段階認証にしている人は、確認コードも入力が必要です。

ログイン

ログインが成功すると、以下の画面のようにCookieが取得できた旨が表示されます。

しかし、Node-redの画面に戻ってみると「Unexpected end of JSON input」とのエラーになってしまいます。。。ここからが長かった。。。。

Alexa-Cookie2(v3.2.1)のカスタマイズ

エラー原因を調べているとnode-red-contrib-alexa-remote2のCookie取得は、Alexa-cookie2というモジュールを利用していることが分かりました。

このモジュールのソースコードを読んでいくと、www.amazon.comにログインし、alexa.amazon.comからCookieを取得しているようです。日本語版のAlexaはalexa.amazon.co.jpでサービス提供されているので、alexa.amazon.comにはアカウントが無く、エラーとなっているようです。

そこで、このモジュールをamazon.co.jpに対応するようにカスタマイズして行きます。なお、Alexa-Cookie2のバージョン3.0.3をお使いの場合はこちらの記事を参照ください。この記事では、執筆時(2020年6月27日)の最新版である、3.2.1を対象に記載していきます。

ちなみに、Alexa-cookieのバージョンは以下で確認できます。

alexa-cookie.jsの変更

alexa-cookie.jsに変更を加えていきます。

①alexa-cookie.jsを開く

Node-red起動ユーザのホームディレクトリの「.node-red/node_modules/node-red-contrib-alexa-remote2/node_modules/alexa-cookie2」にalexa-cookie.jsがあるので、これをバックアップ(コピー)して、開きます。

②alexa-cookie.jsの変更

alexa-cookie.jsの247行目辺りにある「_options = __options;」の記載を探し、この下の行に「_options.baseAmazonPage=’amazon.co.jp’;」の行を追加します。

proxy.jsの変更

次に、proxy.jsに変更を加えて行きます。

①proxy.jsを開く

alexa-cookie.jsがあるディレクトリ内の「lib」ディレクトリにproxy.jsがあるのでこれを開きます。

②initialUrlの変更

www.amazon.comとwww.amazon.co.jpは少し仕様が違うようで、140行目あたりにある初期ページのURLを以下のように変更します。

③終了条件の変更

また、Cookie取得を判定する終了条件の変更を行います。proxy.jsの258行目に「/spa/index.html」の記述を追加して、このページが開かれたら終了するようにします。

変更は以上です。変更が完了したら、Node-redを再起動します。

ちなみに、proxy.jsのdiffは以下のようになります。

Cookieの取得

Cookieを取得しなおす前に、ブラウザのCookieを初期化しておきます。Safaiの場合は「Safari」メニュー→「履歴を消去」でOKです。

それではNode-redの画面に戻りCookieを取得しましょう。

①「デプロイ」ボタンのクリック

「デプロイ」ボタンを再度クリックします。

②Alexaにログイン

Webブラウザで「http://192.168.0.1:3456/」にアクセスしてAlexaにログインします。二段階認証が求められる場合には、二段階認証をしましょう。

また「Amazon Alexa Cookie successfully」の画面にならず、Alexaのサイトが表示されてしまった場合には、再度「http://192.168.0.1:3456/」にアクセスしてログインしてみてください。この場合「Amazon Alexa Cookie successfully」の画面は表示されず、白いエラーページとなりますが、Cookieは正常に取得され、ノードが「Ready」になっていると思われます。

③ノードの確認

Node-redの画面に戻って確認しましょう。今度は、ノードの下に「Ready」と表示されてノードが使えるようになりました。試しにちゃんと動作するか確認してみてください。

おわりに

今回はログインエラーが出るようになってしまったnode-red-contrib-alexa-remote2の対処方としてalexa-cookie v3.2.1のソースコードを変更するご紹介しました。

前回の記事作成時に、alexa-cookieの開発者にalexa.amazon.co.jpへの対応を依頼し、baseAmazonPageのパラメータを新しく作ってくれたのですが、初期ページの違いや終了条件の違いを取り込んで貰えなかったので再度依頼してみます。

関連記事

Alexa-remote2でAlexaにログインできなくなった!【対処法】
うちのスマートホームシステムではnode-red-contrib-alexa-remote2を使って、Alexaをしゃべらせていました。しかし、ログインIDを変えたところ「Login unsuccessfull. Please check credentials.」というエラーが。。。このエラーの解決法を見つけましたので、ご紹介します。
Alexaをしゃべらせる(Node-red編)
やりたいことNode-redでnode-red-contrib-amazon-echoやnode-red-contrib-alexa-home-skillのパレットを使うと、Alexaに音声で話しかけることをトリガーにNode-r...
Raspberry Piで最強の防犯カメラを作ってみる(動画記録・配信、動体検知・Line通知、顔検知・顔認証、Alexa搭載)[6/6]
前回は、防犯カメラにAlexaを搭載して,音声コマンドを使って天気予報や時間を確認できるようにしてみました。今回は、いよいよ最終回です。防犯カメラで家族の顔を認証したら「○○さんおかえり!」とAlexaが喋るようにしてみます。
Alexa-localが突然使えなくなった!【対処法】
2019年9月初旬、今まで動いていたAlexa-localが突然動かなくなった!!!node-redの画面を見ると各デバイスの状況が「Discovery」になっている(正常時はOnline)!Alexa側の仕様変更が原因のようですが、対処法を紹介します。
記事が参考になったら、ブログランキングに協力(クリック)して貰えると嬉しいです。
ブログランキング・にほんブログ村へ
スポンサーリンク
naka-kazz

昼間はIT企業に勤めてますが、プライベートでは「育児×家事×IoT」をテーマに家のスマートホーム化に取り組んでいます。Androidアプリも作っているので使って下さい。
E-mail:naka.kazz.d@gmail.com

naka-kazzをフォローする
スマートホーム 開発者向け
naka-kazzをフォローする
育児×家事×IoT

コメント

  1. 通りすがりのOPPI より:

    早々のご対応ありがとうござます。
    ローカルエリア環境でwindows→ラズパイのnode-redに接続するとリダイレクトせず最終的にステータスがno JSONとなり繋がりませんでした。

    外部ネットワークからポートフォワーディング(1880と3456ポートをlocalhostで、node-redの設定もIPからlocalhostで)で同じように繋ぐとステータスはredeyになり喋らすことは可能ですが、クッキーの保存は出来ませんでした。
    また外部で設定完了していればローカルからも喋らすことは可能でした。
    繋がらない人のヒントになればと思います。

    • naka-kazz naka-kazz より:

      ありがとうございます。ローカル環境では試してませんでしたが、Alexaをしゃべらすためには、alexa.amazon.co.jpへの通信が必要ですね。

タイトルとURLをコピーしました