Files
windmill_workflow/alexa-api/auth.js
Akira 34107f98a2 feat: Alexa TTS API サーバーを追加
- alexa-api/: Echo デバイスに TTS を送る Node.js API サーバー
  - server.js: alexa-remote2 を使わない直接 Alexa API 実装
    - GET /api/language で CSRF トークン取得
    - GET /api/bootstrap でカスタマー ID 取得
    - POST /api/behaviors/preview で TTS 実行
  - Dockerfile + docker-compose.yml: windmill_windmill-internal ネットワーク接続
  - auth4.js: Amazon Japan OpenID フローで Cookie 取得(WORKING)
- scripts/alexa_speak.ts: Windmill から alexa-api を呼び出すスクリプト

Windmill (u/admin/alexa_speak) → alexa_api:3500/speak → Echo デバイス の
パスで日本語 TTS が動作することを確認済み。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-02 16:34:22 +09:00

71 lines
2.5 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* alexa-api/auth.js
* ローカル PC で実行して Amazon Cookie を取得するスクリプト。
*
* 使い方:
* cd alexa-api
* npm install alexa-cookie2
* node auth.js
*
* → ブラウザで http://localhost:3456 を開く
* → Amazon にログイン
* → コンソールに Cookie が表示される
* → その値を Windmill Variable "u/admin/ALEXA_COOKIE" に登録
*/
const AlexaCookie = require('alexa-cookie2');
const PROXY_PORT = 3456;
console.log('==============================================');
console.log(' Alexa Cookie 取得ツール');
console.log('==============================================');
console.log(`\n認証プロキシを起動中... (port ${PROXY_PORT})`);
console.log('\n【手順】');
console.log(` 1. ブラウザで http://localhost:${PROXY_PORT} を開く`);
console.log(' 2. Amazon アカウントにログインamazon.co.jp');
console.log(' 3. ログイン完了後、このコンソールに Cookie が表示される\n');
AlexaCookie.generateAlexaCookie(
'',
{
amazonPage: 'amazon.co.jp',
acceptLanguage: 'ja-JP',
setupProxy: true,
proxyPort: PROXY_PORT,
proxyOwnIp: '127.0.0.1',
proxyListenBind: '0.0.0.0',
logger: (msg) => {
if (!msg.includes('verbose') && !msg.includes('DEBUG')) {
console.log('[auth]', msg);
}
},
},
(err, cookie) => {
// alexa-cookie2 はブラウザを開くよう促すメッセージも err として渡してくる
if (err) {
const msg = err.message || String(err);
if (msg.includes('Please open')) {
// これは実際のエラーではなく「ブラウザで開いて」という指示
console.log('\n>>> ブラウザで http://localhost:3456/ を開いて Amazon にログインしてください <<<\n');
// プロキシを生かしたまま待機process.exit しない)
return;
}
console.error('\n[ERROR] 認証失敗:', msg);
process.exit(1);
}
console.log('\n==============================================');
console.log(' Cookie 取得成功!');
console.log('==============================================');
console.log('\n以下の値を Windmill Variable に登録してください:');
console.log(' パス: u/admin/ALEXA_COOKIE');
console.log(' Secret: ONチェックを入れる');
console.log('\n--- Cookie ---');
console.log(cookie);
console.log('--- ここまで ---\n');
process.exit(0);
}
);