LoginSignup
2
1

More than 3 years have passed since last update.

Alexa Reminder skillのリマインダー作成時のtriggerについて

Last updated at Posted at 2019-05-04

Alexaで利用可能なリマインダー作成において、JSONで設定可能なtrigger値がわかりませんでした。どこかに記載されているのかな?
色々試してみた結果に基づき、まとめておこうと思います。

triggerで設定できるフィールド

Alexa Skills KitのAlexaリマインダーAPIリファレンスによれば、triggerはSCHEDULED_ABSOLUTEとSCHEDULED_RELATIVEで設定可能な要素が異なるようです。

SCHEDULED_ABSOLUTEの場合

"trigger": {
  "type"
  "scheduledTime"
  "timeZoneId"
  "recurrence": {
    "freq"
    "byDay"
  }
}
フィールド 取りうる値 説明
type SCHDULED_ABSOLUTE, SCHEDULED_RELATIVE 絶対時間で設定する場合、SCHDULED_ABSOLUTEにします。
scheduledTime 有効なISO 8601形式で、TimeZoneはなしのもの。 2019-05-01T00:00:00のような形。最後にZとTimeZoneがついていると、UNSUPPORTED_SCHEDULED_TIME_FORMATとなるようです。ここで設定する年月日は意味がありません。recurrenceの設定値に依存します。
timeZoneId "Asia/Tokyo" とりあえず左記。すべてのリストは、Time zoneの記載の通りのようです。
recurrence.freq DAILY, WEEKLY 毎日、もしくは週単位で設定。個人的には隔週も設定したい。
recurrence.byDay SU, MO, TU, WE, TH, FR, SA recurrence.freqをWEEKLYに設定する場合、何曜日に設定するかを指定します。各曜日のイニシャルをつけるようです。また、ここで複数設定(例えば、"MO", "TU")するとエラーUNSUPPORTED_TRIGGER_RECURRENCEになるようです。

注意事項

scheduledTimeは、タイムゾーンがない時間を設定します。
そのため、Date関数のtoISOString()を使って設定すると、最後にタイムゾーンを示す「Z」が含まれるため、「UNSUPPORTED_SCHEDULED_TIME_FORMAT」エラーが発生します。他のサイトでは、「INVALID_TRIGGER_SCHEDULED_TIME_FORMAT 」となると記載されていました。少し私の環境とエラーメッセージが異なる理由はわかりません。
Alexa Skills Kitでは、「INVALID_TRIGGER_SCHEDULED_TIME_FORMAT」になるような記載がありました。
いずれにせよ、scheduledTimeの時間設定は最後の「Z」は不要そうです。

new Date().toISOString();  // 2019-05-01T00:00:00.000Zとなる。「Z」は不要。

recurrence.byDayは、配列で曜日を設定できますが、現時点では複数設定するとエラーUNSUPPORTED_TRIGGER_RECURRENCEが発生し、設定できません。

サンプルソース

const date = new Date();
date.setTime(date.getTime() + 1000*60*60*9 + 1000*60);  //1分後に設定

const body = {
  requestTime : date.toISOString().substr(0, 23),
  trigger : {
    type : "SCHEDULED_ABSOLUTE",
    scheduledTime : date.toISOString().substr(0, 23),
    timeZoneId : "Asia/Tokyo",
    recurrence : {  //毎週月曜日
      freq : "WEEKLY",
      byDay : ["MO"]
    }
  },
  alertInfo : {
    spokenInfo : {
      content : [{
        locale : "ja-JP",
        text : "時間です"
      }]
    }
  },
  pushNotification : {
    status : "ENABLED"
  }
};

SCHEDULED_RELATIVEの場合

"trigger": {
  "type"
  "offsetInSeconds"
}
フィールド 取りうる値 説明
type SCHDULED_ABSOLUTE, SCHEDULED_RELATIVE 相対時間で設定する場合、SCHDULED_RELATIVEにします。
offsetInSeconds 秒数 リマインダーが鳴らされるまでの時間(秒)を指定します。

サンプルソース


const body = {
  requestTime : date.toISOString().substr(0, 23),
  trigger : {
    type : "SCHEDULED_RELATIVE",
    offsetSeconds : "60"
  },
  alertInfo : {
    spokenInfo : {
      content : [{
        locale : "ja-JP",
        text : "時間です"
      }]
    }
  },
  pushNotification : {
    status : "ENABLED"
  }
};
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1