Alexa-remote2でAlexaにログインできなくなった!【対処法】

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

注意

この記事はAlexa-cookie(v3.0.3)向けの記事です。最新版(v3.2.1)をお使いの方は、以下を参照下さい。

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

はじめに

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

エラー原因を調べていると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-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の494行目あたりに「host: ‘alexa.amazon.com’」の記載があるので、これを「host: ‘alexa.amazon.co.jp’」に変更します。

proxy.jsの変更

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

①proxy.jsを開く

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

②amazon.comの置換

proxy.js内にある「amazon.com」の記載を全て「amazon.co.jp」に変更します。結構数があるので、エディタの置換機能などを使うと良いと思います。

③alexa..amazon.co.jpの変更

proxy.jsの107行目にある「alexa..amazon.co.jp」(上で変更しているのでco.jpになってる)の記載を「alexa.amazon.co.jp」に変更(余分なドットを取る)します。これに気づくのに半日格闘しました💦

④initialUrlの変更

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

⑤終了条件の変更

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

変更は以上です。念のため、Nod-redを再起動しておきましょう。

参考までに、proxy.jsのdiffも載せておきます。

Cookieの取得

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

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

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

②Alexaにログイン

Webブラウザで「http://192.168.0.1:3456/」にアクセスしてAlexaにログインします。

③ノードの確認

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

おわりに

今回はAmazonの仕様変更によってログインエラーが出るようになってしまったnode-red-contrib-alexa-remote2のとりあえずの対処方をご紹介しました。半日程度はちゃんと動いていますが、何か問題があったら記事を更新したいと思います。

また、この記事で紹介した内容は、alexa-cookieの開発者の方にもGithubで連絡済みなので、日本向けに修正してくれるかもしれません。alexa-cookieの修正が入るまでは手動で対処しましょう〜😃

関連記事

Alexa-remote2でAlexaにログインできない場合の対処法(Alexa-Cookie v3.2.1版)
Node-redからAlexaを喋らせる機能である「node-red-contrib-alexa-remote2」を日本語版Alexaで利用しようとするとCookieの取得でエラーになります。そこで、Cookieを取得するためのAlexa-cookie(v3.2.1)をカスタマイズして日本語に対応させる方法をご紹介します。
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. 62ki より:

    はじめまして。
    大変勉強になる記事をいつもありがとうございます。
    今回、私のalexaも喋らなくなってしまい、上記を参考にnode-redの設定を変更したいと思いましたが、
    alexa-cookie.jsの場所がどうしても見つかりませんでした。
    ~/.node-red/node_modules/の下に node-red-contrib-alexa-remote2 が見当たりません。
    こちらの記事の[リビングに飾れる美しいスマートホームコントローラ]のnode-redインストール手順で設定しています。
    何かお分かりになることがあればお願いいたします。

    • naka-kazz naka-kazz より:

      コメントありがとうございます。node-red-contrib-alexa-remote2の場所ですが、node-redをroot起動しているため、以下にありませんでしょうか?
      /root/.node-red/
      上記に無い場合は、/home/root/.node-redに無いかもご確認ください。

      • 62ki より:

        早速にありがとうございます。
        /home/root/.node-red/node_modulesの中にnode-red-contrib-alexa-remote2を見つける事ができました。
        でもその下に/node_modulesがありませんでした。
        ちなみに/home/root/.node-red/node_modulesの中に/alexa-cookie2/alexa-cookie.jsがあるのですが
        こちらを記事のとうりに設定してもエラーになってしまいました。
        私のraspiの環境(buster lite)がおかしいのかもしれませんね。

        • naka-kazz naka-kazz より:

          どのようなエラーになったか、教えていただければ分かるかもしれません。

          • 62ki より:

            ありがとうございます。
            http://192.168.1.5:3456にアクセスしてログインすると、

            続行するには、cookieを有効にしてください
            Amazon.jpでのお買い物を続けるには、Webブラウザのcookieを有効にしてください。
            ブラウザでcookieを有効にしたら、下にあるボタンをクリックして前のページに戻ってください。

            となってしまいます。
            ブラウザはedgeでcookieは有効になっています。chromeでも同じでした。

          • naka-kazz naka-kazz より:

            なるほど。。。初めてのケースですが、ブラウザを立ち上げwww.amazon.co.jpにアクセスしてログインしておき、
            そのまま新しいタブを開いてhttp://192.168.1.5:3456にアクセスしたらいかがでしょうか?

  2. 62ki より:

    ありがとうございます。
    amazonにログインした状態でも同じ状況でした。
    どうも私のレベルではこの辺が限界ですね。

  3. pacificblue より:

    大変参考になる記事を有難うございます。
    2020年6月21日現在、Alexa-remote2は3.2.0にずいぶん大幅に書き換えられて、’amazon.com’の直書きから ${.options.baseAmazonPage}に修正されています。この修正と同時かどうかわかりませんが、alexa-cookie.jsとproxy.jsの場所も変わっているようです。しかしながらまだamazon.co.jpからのcookie取得は上手くいかないようで、Node-redのAlexa RoutineでUnexpected end of JSON inputのエラーで引っかかっております。

    3.2.0対応の修正箇所をご教示いただけると幸いです。

    • naka-kazz naka-kazz より:

      ご連絡ありがとうございます。Alexa-remote2がバージョンアップしたんですね。alexa-cookeの開発者には連絡してあったので、修正してくれたのかもしれないです。ただ、amazon.co.jpからcookieが取得できないとのこと、次の週末に見てみますので、少々お待ち下さい。

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

    はじめまして、記事大変参考になりました。
    Alexa-remote2 v3.0.3近辺用ですよね?

    私もv3.0.9などで試して駄目で、
    v3.1.0にしたところpacificblueさんが仰っていた${.options.baseAmazonPage}に書き換えられておりましたので、
    v3.0.3に戻してから、記載が無かったのですがalexa-cookie.jsのamazon.comもamazon.co.jpに置換しました。(ここを置換すれば、もしかしたらv3.0.9でもいけるかもですが試してません)
    そしてデプロイの中のフローを再起動をすると繋がりました。
    フローを再起動しないと/spa/index.htmlからリダイレクトせず完了しませんでした。

    なおalexaが手元にない為しゃべったかの確認は取れておりません。

    v3.2.1までバージョンUPしているようですが、この辺のバージョンでの対応方法もpacificblueさんと同じく知りたいと思っております。
    お手数では御座いますがよろしくお願い致します。

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

    度々申し訳ございません。
    オプションのFile Pathを入力して取得できるファイルの中身がnullとの文字列なのでクッキー自体は保存出来てないと思われます。

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