闹钟
摘要
本接口定义设置、管理以及取消定时器/闹钟的指令和事件。本文档覆盖以下两个主题:
- 闹钟模块状态
- 闹钟指令与事件
端的职责
- 之前在设备端设置成功的定时器/闹钟,在网络连接断开之后也能够正常触发;设备端需要能够保存和维护多个定时器/闹钟
- 用NTP(Network Time Protocol)来管理设备端本地的时钟
- 在断电/重启时,能够保存并正确执行之前设置成功的闹钟/定时器
闹钟模块状态
闹钟模块有以下几种状态:
- IDLE
- 在之前设定的闹钟响起之前,闹钟模块应该处于IDLE状态;当一个闹钟被关闭或者闹铃结束之后,闹钟模块应该回到IDLE状态
- FOREGROUND ALERT和BACKGROUND ALERT
- 假定已经设定了设备端闹钟,当闹钟开始响起并且上报了AlertStarted事件到服务端时,闹钟模块应该从IDLE状态进入到FOREGROUND ALERT或者BACKGROUND ALERT状态
- 在闹钟正在响铃时:如果Alerts Channel在前景(意味着Dialog Channel在非活跃状态),则闹钟模块应该在FOREGROUND ALERT状态;如果Alerts Channel在背景(意味着Dialog Channel也在活跃状态),则闹钟模块应该在BACKGROUND ALERT状态
SetAlert指令
设备端在收到SetAlert指令时,应该在本地设置一个闹钟,到设定的时间能够自动触发闹铃。在用户通过语音请求设置闹钟时,或者通过Companion App重新启用先前设置的闹钟时,都有可能使服务端下发该指令。
消息样例
"directive": {
"header": {
"namespace": "ai.dueros.device_interface.alerts",
"name": "SetAlert",
"messageId": "{{STRING}}",
"dialogRequestId": "{{STRING}}"
},
"payload": {
"token": "{{STRING}}",
"type": "{{STRING}}",
"scheduledTime": "{{STRING}}"
}
}
Payload参数说明
- token
- 本闹钟的唯一token
- type
- 闹钟类型
- 取值
- "TIMER": 定时器
- "ALARM": 闹钟
- scheduledTime
- 触发时间,ISO 8601格式
SetAlertSucceeded事件
设备端收到SetAlert指令,闹钟设置成功之后,上报该事件给服务端。
消息样例
"event": {
"header": {
"namespace": "ai.dueros.device_interface.alerts",
"name": "SetAlertSucceeded",
"messageId": "{{STRING}}"
},
"payload": {
"token": "{{STRING}}"
}
}
Payload参数说明
- token
- 所设置的闹钟的token,对应SetAlert指令中的token
SetAlertFailed事件
设备端收到SetAlert指令,但设置闹钟失败时,上报该事件给服务端。
消息样例
"event": {
"header": {
"namespace": "ai.dueros.device_interface.alerts",
"name": "SetAlertFailed",
"messageId": "{{STRING}}"
},
"payload": {
"token": "{{STRING}}"
}
}
Payload参数说明
- token
- 设置失败的闹钟的token,对应SetAlert指令中的token
DeleteAlert指令
该指令用于删除一个闹钟,设备端收到指令之后应该从本地删除token对应的闹钟,如果该闹钟正在闹铃当中,则应该先停止闹铃(并上报AlertStopped事件),再删除闹钟。在用户通过语音请求取消/删除一个闹钟,或通过Companion App取消/删除时,服务端都有可能会下发DeleteAlert指令。
消息样例
"directive": {
"header": {
"namespace": "ai.dueros.device_interface.alerts",
"name": "DeleteAlert",
"messageId": "{{STRING}}",
"dialogRequestId": "{{STRING}}"
},
"payload": {
"token": "{{STRING}}"
}
}
Payload参数说明
- token
- 要删除的闹钟的token
DeleteAlertSucceeded事件
设备端收到DeleteAlert指令,闹钟删除成功之后,上报该事件给服务端。
消息样例
"event": {
"header": {
"namespace": "ai.dueros.device_interface.alerts",
"name": "DeleteAlertSucceeded",
"messageId": "{{STRING}}"
},
"payload": {
"token": "{{STRING}}"
}
}
Payload参数说明
- token
- 所删除的闹钟的token,对应DeleteAlert指令中的token
DeleteAlertFailed事件
设备端收到DeleteAlert指令,但删除闹钟失败时,上报该事件给服务端。
消息样例
"event": {
"header": {
"namespace": "ai.dueros.device_interface.alerts",
"name": "DeleteAlertFailed",
"messageId": "{{STRING}}"
},
"payload": {
"token": "{{STRING}}"
}
}
Payload参数说明
- token
- 删除失败的闹钟的token,对应DeleteAlert指令中的token
AlertStarted事件
到了定点时间,触发了闹钟,闹铃开始响起时上报。
消息样例
"event": {
"header": {
"namespace": "ai.dueros.device_interface.alerts",
"name": "AlertStarted",
"messageId": "{{STRING}}"
},
"payload": {
"token": "{{STRING}}"
}
}
Payload参数说明
- token
- 所触发的闹钟的token
AlertStopped事件
正在闹铃中的闹钟被停止时上报,有以下情况:
- 收到DeleteAlert指令,停止了正在闹铃中的闹钟
- 通过端上按钮或者端上屏幕操作停止了闹铃
- 端在闹钟设定时间点处于断电状态,回到有电状态时已经离设定时间点超过30分钟
消息样例
"event": {
"header": {
"namespace": "ai.dueros.device_interface.alerts",
"name": "AlertStopped",
"messageId": "{STRING}"
},
"payload": {
"token": "{{STRING}}"
}
}
Payload参数说明
- token
- 对应闹钟的token
AlertEnteredForeground事件
闹铃响起时Alert Channel在前景(意味着Dialog Channel在非活跃状态),或者在闹铃播放当中Dialog Channel从活跃状态进入非活跃状态时(意味着Alert Channel从背景变为前景),上报该事件。
消息样例
"event": {
"header": {
"namespace": "ai.dueros.device_interface.alerts",
"name": "AlertEnteredForeground",
"messageId": "{{STRING}}"
},
"payload": {
"token": "{{STRING}}"
}
}
Payload参数说明
- token
- 对应闹钟的token
AlertEnteredBackground事件
闹铃播放当中,用户开始了语音请求,或者服务端下发了Speak指令,Dialog Channel从非活跃状态进入了活跃状态(意味着Alert Channel从前景变味背景),上报该事件。
消息样例
"event": {
"header": {
"namespace": "ai.dueros.device_interface.alerts",
"name": "AlertEnteredBackground",
"messageId": "{{STRING}}"
},
"payload": {
"token": "{{STRING}}"
}
}
Payload参数说明
- token
- 对应闹钟的token
状态上报
消息样例
"clientContext": [
{
"header": {
"namespace": "ai.dueros.device_interface.alerts",
"name": "AlertsState"
},
"payload": {
"allAlerts": [
{
"token": "{{STRING}}",
"type": "{{STRING}}",
"scheduledTime": "{{STRING}}"
},
...
],
"activeAlerts": [
{
"token": "{{STRING}}",
"type": "{{STRING}}",
"scheduledTime": "{{STRING}}"
},
...
]
}
}
]
Payload参数说明
- allAlerts[]
- 设备端上设置的所有闹钟列表
- allAlerts[].token
- 闹钟的token,对应SetAlert指令中的token
- allAlerts[].type
- 闹钟的类型,TIMER或ALARM
- allAlerts[].scheduledTime
- 闹钟的触发时间,ISO 8601格式
- activeAlerts[]
- 设备端上所有活跃的闹钟列表,即正在闹铃中的闹钟列表
- activeAlerts[].token
- 闹钟的token,对应SetAlert指令中的token
- activeAlerts[].type
- 闹钟的类型,TIMER或ALARM
- activeAlerts[].scheduledTime
- 闹钟的触发时间,ISO 8601格式