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"
}
};