2

我正在尝试使用我的应用程序实现 Alexa 技能的应用程序到应用程序帐户链接。

我已按照此处找到的指南https://developer.amazon.com/en-US/docs/alexa/account-linking/app-to-app-account-linking-starting-from-your-app.html并有达到第六步:开启技能,完成账号绑定。此时,我正在使用 axios 在 AWS lambda 函数中创建最终发布请求。请求格式如下:

const header = {
    "headers": {
        "Content-Type": "application/json",
        "Authorization": "Bearer " + event.amazonAccessToken
    }        
};

const body = {
    "stage": event.skillStage,
    "accountLinkRequest": {
        "redirectUri": event.redirectURI,
        "authCode": event.userAuthorizationCode,
        "type": "AUTH_CODE"
    }
};

并且我将发布请求发送到每个可能的区域端点并使用成功的一个调用,如指南的示例代码所示。

endpoints.forEach((endpoint)=> {
    alexaServicePromises.push(axios.post(endpoint, body, header).catch(function(error) {
        if (error.response) {
            console.log(error.response.data);
            console.log(error.response.status);
            console.log(error.response.headers);
        }
    }));
});

return new Promise((resolve, reject) => {
    var failures = 0;
    alexaServicePromises.forEach((promise) => {
        promise.then((res)=> {
            if (res.status == 201 || res.status == 200) {
                resolve(res.data);
            } else {
                if (++failures == alexaServicePromises.length) {
                    reject(res.data);
                }
            }
        }).catch((err)=> {
            if (++failures == alexaServicePromises.length) {
                reject(err.data);
            }
        })
    })
});

但是,问题在于对每个端点的三个调用中的每一个都返回错误代码 400,并带有消息:“无效的帐户链接凭据”。我完全无法解决这个问题。前面的每个步骤都运行得很好,我正在从第 5 步发送 Amazon 访问令牌,技能阶段是“开发”(技能未发布),redirectUri 是第 4 步中使用的 uri,当时我获得了一个亚马逊授权码来重定向用户返回应用程序,我发送的用户 authCode 是从指示用户登录我们的身份验证服务 (Cognito) 中返回的,并且我在 axios 发布请求中使用的 url 中发送技能 ID。我正在测试的帐户是我的亚马逊开发人员帐户,可以访问该技能(虽然我没有创建该技能),我正在使用在技能的帐户链接和权限选项卡中找到的 Alexa 客户端 ID 和密码。最后,每次我测试时,它都会运行整个过程,给我一个新的授权码,交换一个新的令牌,登录一个新的用户授权码,然后将所有需要的东西发送到这个 lambda 函数。

我还在这里看到了Alexa Account Linking - "Invalid account linking credentials"的帖子,从我上面写的内容来看,我认为我没有犯任何 4 个错误。

我怎样才能解决这个问题?

4

0 回答 0