Alexa Reminders API 401 ответ - PullRequest
       28

Alexa Reminders API 401 ответ

0 голосов
/ 22 января 2019

Итак, я использую API Amazon Alexa Reminders, как показано здесь . Вот мой метод отправки запросов в 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}

Согласно Amazon на этой странице , 401 НЕСАНКЦИОНИРОВАННО означает, что токен действителен, но не имеет соответствующих разрешений.

Может быть, некоторые из вас, ребята, имели ту же проблему или могли бы помочь мне решить, как решить мою? Спасибо

Ответы [ 2 ]

0 голосов
/ 11 мая 2019

Проблема заключалась в том, что я использовал старый Alexa SDK. Мне пришлось скачать текущую версию SDK, и есть другой ключ (не accessToken, который я использовал), который можно получить непосредственно из объекта Intent и затем использовать для отправки запросов

0 голосов
/ 10 мая 2019

Получилось, как указано в этом ответе , предоставления разрешения на навык недостаточно, конечный пользователь, использующий этот навык, также должен предоставить разрешение. Спросите пользователя о разрешении через карточку разрешения при обнаружении несанкционированного ответа.

...