미리 알림 등록

9516 단어 알렉사

개요



Alexa 스킬로 리마인더를 등록하는 샘플 스킬입니다.
(알림 정보의 취득이나 삭제는 없습니다)
htps : //에서 ゔぇぺぺr. 아마존. 이 m/쟈/도 cs/s마피/아아-레민으로 rs-오오 rゔぃ에 w. HTML

내용



도서관
$ npm ls --depth=0
├── [email protected]
├── [email protected]
├── [email protected]
└── [email protected]

index.js 전반

const Alexa = require('ask-sdk-core');
const { getRandomMessage, isLaunchRequest, isMatchedIntent } = require('ask-utils');
const { ReminderRequest } = require('ask-sdk-model');

const SetReminderHandler = {
  canHandle(handlerInput) {
    return isLaunchRequest(handlerInput)
      || isMatchedIntent(handlerInput, 'SetReminderIntent')
  },
  async handle(handlerInput) {
    const { serviceClientFactory, responseBuilder } = handlerInput;

    const speechText = '1分後にリマインダーをセットしました。';
    const client = serviceClientFactory.getReminderManagementServiceClient();

    const request = {
      trigger: {
        type: "SCHEDULED_RELATIVE",
        offsetInSeconds: '60'
      },
      alertInfo: {
        spokenInfo: {
          content: [{
            locale: "ja-JP",
            text: "リマインダーのテストです"
          }]
        }
      },
      pushNotification: {
        status: "DISABLED"
      }
    };

    try {
      const response = await client.createReminder(request);
      return responseBuilder
        .speak(speechText)
        .getResponse();
    } catch (error) {
      console.log(error);
      return responseBuilder
        .speak("すいません、エラーが発生しました")
        .getResponse();
    }
  }
};

handlerInput.serviceClientFactory.getReminderManagementServiceClient() 에서 알림을 위한 클라이언트를 가져옵니다.

client#method
요청

client에 구현된 메소드 목록과 request를 참고로 API를 두드린다.

방법 목록
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>;
}

index.js 후반
const skillBuilder = Alexa.SkillBuilders.custom();

exports.handler = skillBuilder
  .addRequestHandlers(
    SetReminderHandler,
    HelpHandler,
    ExitHandler,
    FallbackHandler,
    SessionEndedRequestHandler
  )
  .addErrorHandlers(ErrorHandler)
  .withApiClient(new Alexa.DefaultApiClient())
  .lambda();

.withApiClient(new Alexa.DefaultApiClient())가 중요합니다.
이제 handlerInput 에서 미리 알림 클라이언트를 가져올 수 있습니다.accessToken 도 설정되어 있으므로 편리합니다.



skill.json
  "manifest": {
    "permissions": [
      {
        "name": "alexa::alerts:reminders:skill:readwrite"
      }
    ],
...

스킬의 permission도 추가해야 합니다.

이상이, 기동하면 1분 후에 리마인더가 세트 되는 샘플 앱이 됩니다.

하마리 포인트


  • 실기 이외는 유저에 대한 permission의 허가를 할 수 없기 때문에 안된다
  • 아이폰의 Alexa 앱이나 Alexa Developer Console의 시뮬레이터 또는 ask simulate
  • skillBuilder.withApiClient() 설정 필요
  • apiAccessToken 은 한 번만 사용 가능
  • 하나의 Intent 속에서, 리마인더 일람을 취득해, 하늘이 돌아오면 등록하는 등과 같이, 같은 apiAccessToken 로 2회 두드리면 안되는 것 같습니다.


  • 한마디



    이벤트 구독이라는 기능도 있기 때문에 여기도 걱정됩니다

    좋은 웹페이지 즐겨찾기