Alexa提醒API 401响应

时间:2019-01-22 00:41:03

标签: amazon alexa

因此,我正在使用here所示的Amazon Alexa Reminders API。 这是我向API发送请求的方法:

public static void sendReminder(String accessToken, String reminderText, long offsetInSec) {
    CloseableHttpClient client = HttpClients.createDefault();
    HttpPost post = new HttpPost("https://api.amazonalexa.com/v1/alerts/reminders");
    post.addHeader("Authorization", "Bearer " + accessToken);
    post.addHeader("Content-Type", "application/json");
    TimeZone tz = TimeZone.getTimeZone("UTC");
    DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'");
    df.setTimeZone(tz);
    String nowAsISO = df.format(new Date());
    String jsonContent = "{ \"requestTime\" : \"" + nowAsISO + "\", \"trigger\": { \"type\" : \"SCHEDULED_RELATIVE\", \"offsetInSeconds\" : \"" + offsetInSec + "\" }, \"alertInfo\": { \"spokenInfo\": { \"content\": [{ \"locale\": \"en-US\", \"text\": \"" + reminderText + "\" }] } }, \"pushNotification\" : { \"status\" : \"ENABLED\" } }";
    HttpEntity entity = null;
    try {
        byte[] bytes = jsonContent.getBytes("UTF-8");
        entity = new ByteArrayEntity(bytes);
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
    post.setEntity(entity);
    try {
        CloseableHttpResponse response = client.execute(post);
        System.out.println(response);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

我这样执行它:

RemindersToolkit.sendReminder(session.getUser().getAccessToken(), "text", 1);

技能也具有提醒权限: Reminders are turned on on the skill's page

但是执行该方法时,我得到以下响应:

HttpResponseProxy{HTTP/1.1 401 Unauthorized [Content-Type: application/json, Connection: keep-alive, Server: Server, Date: Tue, 22 Jan 2019 00:21:21 GMT, Vary: Accept-Encoding,User-Agent, x-amz-rid: 8YMCM10GKVGTT71JQH3N, X-Cache: Error from cloudfront, Via: 1.1 05a90e634e0872685ad69ee9a4e0eba5.cloudfront.net (CloudFront), X-Amz-Cf-Id: J5CtMnkUTv1hd6p-7-tob7mCb-4DM7y_LxhEiMLt5x3qEqmzhwbx_Q==] org.apache.http.client.entity.DecompressingEntity@6df97b55}

根据this page上的Amazon,401 UNAUTHORIZED表示令牌有效,但没有适当的权限。

也许你们中有些人遇到了同样的问题,或者可以帮助我弄清楚如何解决我的问题? 谢谢

2 个答案:

答案 0 :(得分:1)

正如本answer所指出的那样,仅授予技能许可还不够,使用该技能的最终用户也必须授予许可。遇到未经授权的响应时,Ask用户通过许可卡获得许可。

答案 1 :(得分:0)

问题是我正在使用旧的Alexa SDK。 我必须下载SDK的当前版本,并且有一个不同的密钥(不是我使用的accessToken),可以直接从Intent对象获取该密钥,然后将其用于发送请求