質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.50%

  • Alexa

    17questions

Alexa Reminder API について

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 373

yutaroud

score 2

 前提・実現したいこと

ALexa Reminder APIを使って、Lambdaからリマインドの登録を行いたい。

 発生している問題・エラーメッセージ

{"code":"UNAUTHORIZED","message":"Request Unauthorized."}

 該当のソースコード

'use strict';

const Alexa = require('ask-sdk-core');
const request = require('request-promise');
let skill;
exports.handler = async function (event, context) {
    if (!skill) {
        skill = Alexa.SkillBuilders.custom()
            .addRequestHandlers(
                HelloHandler
            )
            .addErrorHandlers(ErrorHandler)
            .create();
    }
    return skill.invoke(event);
}

const HelloHandler = {
    canHandle(handlerInput) {
        const request = handlerInput.requestEnvelope.request;
        // checks request type
        return request.type === 'LaunchRequest';
    },
    async handle(handlerInput) {
        const accessToken = handlerInput.requestEnvelope.context.System.apiAccessToken;
        const date = new Date();
        date.setTime(date.getTime() + 1000*60*60*9);
        const body = {
            requestTime : (date).toISOString(),
            trigger: {
                type : "SCHEDULED_RELATIVE",                 // トリガーのタイプを示します
                offsetInSeconds : "7200",                    // リマインダーが相対時刻を使用して設定されている場合、このフィールドを使用してリマインダーが鳴らされるまでの時間を指定します(秒)
            },
            alertInfo: {
                spokenInfo: {
                    content: [{
                        locale: "ja",                     // 値が指定されるロケール
                        text: "犬の散歩"                // 表示および読み上げ用に使用されるテキスト
                    }]
                }
            },
            pushNotification : {
                status : "ENABLED"                          // プッシュ通知を送信するかどうか [default = ENABLED]
            }
        };
        const headers = {
            'Authorization': 'Bearer '+ accessToken,
            'Content-Type': 'application/json',
            'Content-length': 200
        };
        const options = {
            url: 'https://api.amazonalexa.com/v1/alerts/reminders',
            method: 'POST',
            headers: headers,
            body: JSON.stringify(body)
        };
        await request(options,callback);
        return handlerInput.responseBuilder
            .speak('HelloWorld')
            .getResponse();
    }
};

function callback(error, response, body) {
    if (!error && response.statusCode == 200){
        console.log(body);
        console.log(response);
    }else{
    console.log(body);
    console.log(response);
    console.log(error);}
}

 試したこと

ALexaDeveloperConsoleからリマインダーの許可は行いました。
また、実機でも試しており、スキルの許可もちゃんと行っています。

また、POSTだけでなくGETでのリクエストも試しましたが、同様のエラーが出ます。

公式のドキュメントでは、トークンは有効ですが適切な権限がありません。
となっていますが、この適切な権限というのの設定を自分が理解していないような気がします。

もしよろしければ、サンプルコードなどとともにご教示いただけると幸いです。

 補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

同じタグがついた質問を見る

  • Alexa

    17questions