アカウントリンクを使用するカスタムスキルをAlexaで作成しています。 OAuth2 phpライブラリを使用して独自の認証サーバーを作成し、スキル構成で認証URLとトークンURLを構成しました。
Alexaモバイルアプリからアカウントをリンクしようとすると、「スキルをリンクできません」というエラーが表示されます。以下は私の仕事の進捗状況です。
私はほぼ同じことについてフォーラムを調べましたが、問題が正確に何であるかを見つけることができませんでした。誰かがこの点で私を助けてくれませんか。
私も同じ問題に直面していました。私の場合のアクセストークンはメッセージの本文で送信されたため、「クライアント認証スキーム」に「リクエスト本文の資格情報」(デフォルトはHttp基本)を選択することで問題は解決しました。サーバーから認証トークンがどのように送信されるかを確認してください。
リダイレクトリンクが現在ある場合:
https://layla.Amazon.com/api/skill/link/xxxxxxxxxxxxxx?code=xxxxxxxxx&state=xxxxx
?
を#
に変更する必要があります
例えば.
https://layla.Amazon.com/api/skill/link/xxxxxxxxxxxxxx#code=xxxxxxxxx&state=xxxxx
私の場合、問題はクライアントシークレットにありました。GoogleDeveloperConsoleで、スキルリダイレクトURIを追加し、Alexaスキル認証付与タイプで指定したクライアントシークレットを再確認します。
これは、AlexaサービスがOAuthエンドポイントに投稿しているのはかなり不透明で文書化されていないため、疑問に思う人に役立つかもしれません。AlexaサービスへのリダイレクトはPOST定義されたOAuthエンドポイントへのリクエスト。投稿本文はJSONではなくx-www-form-urlencoded形式です。したがって、POSTは次のようになります。
POST /authentication/1/oauth HTTP/1.1 url.Values{} grant_type=authorization_code&code=XXXXXXXXXXXXXXXXXXXXXXXXX&redirect_uri=https%253A%252F%252Fpitangui.Amazon.com%252Fapi%252Fskill%252Flink%252FM9BEOG3DM65SQ&client_id=XXXXXXXXXXXXXXXXXXXXXX
エンドポイントがこのデータを解析していないか、簡単にマーシャリングを解除できる形式を期待していない場合は、おそらく406応答で失敗しています。
私の問題は、最後のAccessToken呼び出しにありました。 GETリクエストを使用していると想定していたので、関数でこれに対応するだけでした。実際にはアクセストークンを作成しています。つまり、POSTを使用しています。
投稿を使用してAccessTokenをJSON形式で返すように関数を更新した後、すべて正常に機能します。