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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Alexa

Alexa(アレクサ)は、米アマゾンが開発したクラウドベースのAIアシスタント。Amazon EchoやEcho dotに搭載され、話かけると音楽を再生したり、天気予報やスケジュールなど様々な情報を提供します。

Q&A

1回答

474閲覧

Alexa Reminder API について

yutaroud

総合スコア10

Alexa

Alexa(アレクサ)は、米アマゾンが開発したクラウドベースのAIアシスタント。Amazon EchoやEcho dotに搭載され、話かけると音楽を再生したり、天気予報やスケジュールなど様々な情報を提供します。

0グッド

0クリップ

投稿2018/12/02 09:19

前提・実現したいこと

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

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

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

該当のソースコード

Node.js

1'use strict'; 2 3const Alexa = require('ask-sdk-core'); 4const request = require('request-promise'); 5let skill; 6exports.handler = async function (event, context) { 7 if (!skill) { 8 skill = Alexa.SkillBuilders.custom() 9 .addRequestHandlers( 10 HelloHandler 11 ) 12 .addErrorHandlers(ErrorHandler) 13 .create(); 14 } 15 return skill.invoke(event); 16} 17 18const HelloHandler = { 19 canHandle(handlerInput) { 20 const request = handlerInput.requestEnvelope.request; 21 // checks request type 22 return request.type === 'LaunchRequest'; 23 }, 24 async handle(handlerInput) { 25 const accessToken = handlerInput.requestEnvelope.context.System.apiAccessToken; 26 const date = new Date(); 27 date.setTime(date.getTime() + 1000*60*60*9); 28 const body = { 29 requestTime : (date).toISOString(), 30 trigger: { 31 type : "SCHEDULED_RELATIVE", // トリガーのタイプを示します 32 offsetInSeconds : "7200", // リマインダーが相対時刻を使用して設定されている場合、このフィールドを使用してリマインダーが鳴らされるまでの時間を指定します(秒) 33 }, 34 alertInfo: { 35 spokenInfo: { 36 content: [{ 37 locale: "ja", // 値が指定されるロケール 38 text: "犬の散歩" // 表示および読み上げ用に使用されるテキスト 39 }] 40 } 41 }, 42 pushNotification : { 43 status : "ENABLED" // プッシュ通知を送信するかどうか [default = ENABLED] 44 } 45 }; 46 const headers = { 47 'Authorization': 'Bearer '+ accessToken, 48 'Content-Type': 'application/json', 49 'Content-length': 200 50 }; 51 const options = { 52 url: 'https://api.amazonalexa.com/v1/alerts/reminders', 53 method: 'POST', 54 headers: headers, 55 body: JSON.stringify(body) 56 }; 57 await request(options,callback); 58 return handlerInput.responseBuilder 59 .speak('HelloWorld') 60 .getResponse(); 61 } 62}; 63 64function callback(error, response, body) { 65 if (!error && response.statusCode == 200){ 66 console.log(body); 67 console.log(response); 68 }else{ 69 console.log(body); 70 console.log(response); 71 console.log(error);} 72}

試したこと

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

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

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

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

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

https://github.com/alexa/alexa-cookbook/blob/master/feature-demos/skill-demo-reminders/lambda/custom/index.js

上のリンクはGithubに上がっている,Reminder APIを使ったリマインダーサンプルです。
このコードの18行目にあるように、PERMISSIONSが抜けているのではないでしょうか。
このPERMISSIONSでリマインダーアラートの権限を読み込んでいます。

詳細は、以下のリンクのpermissionsの項を参照ください。
https://developer.amazon.com/ja/docs/smapi/skill-manifest.html#permissions

投稿2019/09/07 10:26

yuta_kg

総合スコア24

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問