Alexa skill kit for nodejs、Alexa リマインダーAPIを使って、リマインダースキルを作成しています。
登録したリマインダーを削除するインテント(DeleteIntent)を以下のように実装しました。
Javascript
1//リマインダーを削除 2const DeleteIntentHandler = { 3 canHandle(handlerInput) { 4 return handlerInput.requestEnvelope.request.type === 'IntentRequest' 5 && handlerInput.requestEnvelope.request.intent.name === 'DeleteIntent'; 6 }, 7 // handle の前に async 追加 8 async handle(handlerInput) { 9 10 // リクエストからアクセストークンを取得 11 const requestEnvelope = handlerInput.requestEnvelope; 12 const responseBuilder = handlerInput.responseBuilder; 13 const consentToken = requestEnvelope.context.System.apiAccessToken; 14 15 16 // check for confirmation. if not confirmed, delegate 17 switch (requestEnvelope.request.intent.confirmationStatus) { 18 case 'CONFIRMED': 19 // intent is confirmed, so continue 20 console.log('Alexa confirmed intent, so clear to create reminder'); 21 break; 22 case 'DENIED': 23 // intent was explicitly not confirmed, so skip creating the reminder 24 console.log('Alexa disconfirmed the intent; not creating reminder'); 25 return responseBuilder 26 .speak('わかりました。リマインドしません。') 27 .getResponse(); 28 case 'NONE': 29 default: 30 console.log('delegate back to Alexa to get confirmation'); 31 return responseBuilder 32 .speak('うおおお') 33 .addDelegateDirective() 34 .getResponse(); 35 } 36 if (!consentToken) { 37 return responseBuilder 38 .speak(`アレクサアプリにカードを送信しました。リマインダーの権限を有効にしてください。`) 39 .withAskForPermissionsConsentCard(PERMISSIONS) 40 .getResponse(); 41 } 42 43 try { 44 const client = handlerInput.serviceClientFactory.getReminderManagementServiceClient(); 45 46 // リマインドを削除 47 await client.deleteReminders(); 48 49 } catch (error) { 50 if (error.name !== 'ServiceError') { 51 console.log(`error: ${error.stack}`); 52 const response = responseBuilder.speak(`おっと。エラーが発生しました。`).getResponse(); 53 return response; 54 } 55 throw error; 56 } 57 58 return responseBuilder 59 .speak(`リマインダーを削除しました。`) 60 .getResponse(); 61 }, 62}; 63
すると以下のようなエラーがCloudWatchにログとして残っていました。
2019-09-07T12:38:21.469Z 4e8e9e92-fefe-452a-9d9f-2133cb3f7e23 error: TypeError: client.deleteReminders is not a function at Object.handle (/var/task/index.js:111:26) at GenericHandlerAdapter.<anonymous> (/var/task/node_modules/ask-sdk-runtime/dist/dispatcher/request/handler/GenericHandlerAdapter.js:63:47) at step (/var/task/node_modules/ask-sdk-runtime/dist/dispatcher/request/handler/GenericHandlerAdapter.js:44:23) at Object.next (/var/task/node_modules/ask-sdk-runtime/dist/dispatcher/request/handler/GenericHandlerAdapter.js:25:53) at /var/task/node_modules/ask-sdk-runtime/dist/dispatcher/request/handler/GenericHandlerAdapter.js:19:71 at new Promise (<anonymous>) at __awaiter (/var/task/node_modules/ask-sdk-runtime/dist/dispatcher/request/handler/GenericHandlerAdapter.js:15:12) at GenericHandlerAdapter.execute (/var/task/node_modules/ask-sdk-runtime/dist/dispatcher/request/handler/GenericHandlerAdapter.js:61:16) at GenericRequestDispatcher.<anonymous> (/var/task/node_modules/ask-sdk-runtime/dist/dispatcher/GenericRequestDispatcher.js:173:58) at step (/var/task/node_modules/ask-sdk-runtime/dist/dispatcher/GenericRequestDispatcher.js:44:23)
以下のようにドキュメントを見ると、deleteReminders()はReminderManagementServiceに紐づくメソッドなのですが、
上記のエラーが出る理由は何でしょうか?
class ReminderManagementServiceClient extends BaseServiceClient { deleteReminder(alertToken: string): Promise<void>; getReminder(alertToken: string): Promise<services.reminderManagement.GetReminderResponse>; updateReminder(alertToken: string, reminderRequest: services.reminderManagement.ReminderRequest): Promise<services.reminderManagement.ReminderResponse>; deleteReminders(): Promise<void>; getReminders(): Promise<services.reminderManagement.GetRemindersResponse>; createReminder(reminderRequest: services.reminderManagement.ReminderRequest): Promise<services.reminderManagement.ReminderResponse>; }

あなたの回答
tips
プレビュー