0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Alexaに好きな言葉をコマンドラインで話させる 2025年版

Posted at

Alexa に、好きな言葉をコマンドラインから話させる方法です。

Alexa スキル等の開発は必要無く、mac だけで実現可能です。

Webの記事をいくつか調べて行った所、いくつか詰まったポイントがあったので解決方法を記載します。

概要

  1. alexa-cookie-cli を使って、Webで Amazon にログインし、リフレッシュトークンを取得する。
  2. alexa-remote-control のシェルスクリプトを使って、コマンドラインで発話リクエストを送る。

手順としては以上だけです。

そして、注意点としては大きく以下だけ。

alexa-cookie-cli は、amazon.co.jp のエンドポイントに対応していないので、amazon.com でログインする。

つまり、amazon.com で認証してリフレッシュトークンを作って、それを使って alexa.amazon.co.jp にリクエストすればうまくいきます。

手順

1. プロジェクトディレクトリを作る。

mkdir alexa
cd alexa

2. alexa-cookie-cli, alexa-remote-control をダウンロードする。

シェルスクリプトを作ってダウンロードします。

vim setup.sh

setup.sh

#!/usr/bin/env zsh

cd $(dirname $0) || exit

curl https://raw.githubusercontent.com/thorsten-gehrig/alexa-remote-control/refs/heads/master/alexa_remote_control.sh -O
chmod +x alexa_remote_control.sh

curl https://github.com/adn77/alexa-cookie-cli/releases/download/v5.0.1/alexa-cookie-cli-macos-x64 -O
chmod +x alexa-cookie-cli-macos-x64
chmod +x setup.sh
./setup.sh

ダウンロードしたプログラムはマルウェアスキャンを行ってください。

3. リフレッシュトークンを作る

シェルスクリプトを作って実行します。

login-amazon.sh

#!/usr/bin/env zsh

cd $(dirname $0) || exit

# 日本指定だとリフレッシュトークンは取得できない。amazon.com なら取得できる。
./alexa-cookie-cli-macos-x64 \
  --amazonPage amazon.com \
  --baseAmazonPage amazon.com \
  --amazonPageProxyLanguage 'en_US' \
  --acceptLanguage 'en-US' \
  --debug | tee .secret.login-output.log

実行すると、 Error: Please open http://127.0.0.1:8080/ with your browser and login to Amazon.
と表示されるので、ブラウザで http://127.0.0.1:8080/ を開いてログインします。
amazon.co.jp で使っているメールアドレスとパスワードで OK です。

Error: と表示されてびびりますが、プログラムがエラーなわけではなく、
ただロガー出力で上位レベルで表示したいため Error としているだけでした。
びびるのでやめてほしいです。

--debug は入れてしまいましたが、書かなくてOKです。

ログイン完了後に、最後の方に refreshToken: Atnr|.... と表示されれれば成功しています。

amazon.co.jp のエンドポイントで行うと成功しません。

ログは秘密認証情報が含まれるので、取り扱いに注意してください。

save-refresh-token-from-log.sh

さきほどの出力からリフレッシュトークンを抽出します。

今回はファイルにしていますが、秘密認証情報なので可能な限り安全な方法で保存してください。

#!/usr/bin/env zsh

cd $(dirname $0) || exit

grep ' refreshToken: Atnr|' .secret.login-output.log | sed -e 's/ refreshToken: //g' > .secret.refresh-token.txt

4. デバイスリストを取得する

先ほどのリフレッシュトークンを使って、Alexa の APIにリクエストして、所有デバイスの一覧を取得します。

今回は、co.jp のエンドポイントで OK です。

list-devices.sh

#!/usr/bin/env zsh

cd $(dirname $0) || exit

export REFRESH_TOKEN=$(cat .secret.refresh-token.txt)

export TTS_LOCALE='ja-JP'
export AMAZON='amazon.co.jp'
export ALEXA='alexa.amazon.co.jp'

export CURL=$(which curl)
export JQ=$(which jq)

./alexa_remote_control.sh -a

実行すると、所有デバイスが標準出力に出ます。

なお、 /tmp/.alexa.devicelist.json /tmp/.alexa.devicelist.txt にも、それぞれ結果のキャッシュが残ります。

export TMP=$(pwd)

とすれば、キャッシュの保存先をカレントディレクトリにできます。

5. 発話する

alexa-speech.sh

#!/usr/bin/env zsh

cd $(dirname $0) || exit

export REFRESH_TOKEN=$(cat .secret.refresh-token.txt)

export TTS_LOCALE='ja-JP'
export AMAZON='amazon.co.jp'
export ALEXA='alexa.amazon.co.jp'

export CURL=$(which curl)
export JQ=$(which jq)

./alexa_remote_control.sh -d "書斎のEcho Dot" -e speak:"デプロイしました。"

speak: の引数には、SSML を使って声のトーンを変えることもできます。

下記の記事が参考になりました。

Alexa(Amazon Echo)をコマンドラインから自由に喋らせる方法 #Terminal - Qiita

Alexaの喋り方を制御できるSSMLを色々と試してみました | DevelopersIO

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?