# 勿扰模式_v1.0

DoNotDisturb(DND)接口允许用户拒绝所有传入的通知、公告,和呼叫设备。用户可以设备每日重复的计划来开关DoNotDisturb

DND 可以通过以下方式设置:

  • 「小飞在线」app,或者接入「小飞在线 SDK」的应用
  • 通过语音控制,比如:“打开免打扰”、“别打扰我”等等
  • 通过 DND 计划,使用小飞在线app设置定时计划
  • 通过设备本地接口

# Capabilities API

要使用DoNotDisturb接口,需要在设备能力上报接口中显示声明。

{
  "type": "iFLYOS.Interface",
  "interface": "DoNotDisturb",
  "version": "1.0"
}

# 云端DND设置为主

对于DND的设置,以云端的设置为准。当设备与云端的设置不同步时,云端状态将会同步到设备端。以下是一些云和设备不同步的特殊情况:

  • 设备离线后,重新上线:
    • 如果设备中的 DND 设置没有变动,设备必须上报一个ReportDoNotDisturb事件,如果设备状态与云端设置不同,则会下发一个SetDoNotDisturb指令来同步云端状态到设置;
    • 如果设备中的 DND 设置有变动,设备必须上报一个DoNotDisturbChanged事件,云端DND状态将会修改为设备上报的状态;
  • 云端 / 设备 更新状态失败:
    • 当设备接收到SetDoNotDisturb指令后,更新失败时,设备应该上报一个ReportDoNotDisturb事件。如果云端的DND设置和上报的状态不一致时,云端会重新下发一个SetDoNotDisturb指令;
    • 当云端接收到DoNotDisturbChanged事件后,更新设置失败时,云端将返回HTTP 400或者500错误。设备端应该重新发送DoNotDisturbChanged事件。如果云端的DND设置和设备不同,云端将下发SetDoNotDisturb指令(包含云端DND状态);

# SetDoNotDisturb 指令

这个指令用来打开或者关闭设备的DND。

设备应该响应该指令,根据payload中的值来更新本地的DND配置,不管设置成功还是失败,都应该在执行完指令后,上报ReportDoNotDisturb事件(包含当前设备上的DND状态)。当设备收到SetDoNotDisturb指令时,不应该再处理DoNotDisturb接口的其它指令,直到上报完ReportDoNotDisturb事件。

如果设备离线的时候,云端DND设置更新了,则发送到设备端的指令会失败。当设备重新上线的时候,设备会发送一个ReportDoNotDisturb事件,如果设置的DND状态与云端不同,云端会下发SetDoNotDisturb指令,来更新设备端的状态。

{
  "directive": {
    "header": {
      "namespace": "iFLYOS.DoNotDisturb",
      "name": "SetDoNotDisturb",
      "messageId": "xxxx"
    },
    "payload": {
      "enabled": true
  	}
  }
}

Payload 参数

参数 说明 类型
enabled 打开为true;关闭为false boolean

# ReportDoNotDisturb 事件

当设备响应SetDoNotDisturb指令更新DND设置,或者上报DoNotDisturbChanged事件失败时,应该上报该事件。

当云端收到ReportDoNotDisturb事件时,如果与云端DND状态不同时,云端会下发SetDoNotDisturb指令,来同步云端的状态到设备端。

{
  "event": {
    "header": {
      "namespace": "iFLYOS.DoNotDisturb",
      "name": "ReportDoNotDisturb",
      "messageId": "xxxx"
    },
    "payload": {
      "enabled": true
    }
  }
}

Payload 参数

参数 说明 类型
enabled 打开为true;关闭为false boolean

响应

错误 HTTP Status Code 说明
INVALID_REQUEST_EXCEPTION 400 错误的参数/请求
INTERNAL_REQUEST_EXCEPTION 500 服务端内部错误
N/A 200/204 成功

# DoNotDisturbChanged 事件

在设备上修改DND设备后,需要发送该事件到云端。

当设备在本地打开或者关闭DND设置时,设备必须上报DoNotDisturbChanged事件。当服务端返回200或者204时,设备应该更新本地DND配置。如果云端返回错误响应,设备端不应该修改本地的DND配置。设备端在收到事件响应之前,不应该再处理DoNotDisturb接口的其它指令。

如果用户在设备离线时,设置DND,则应该直接在设备上保存并应用设置。当设备重新连上IVS时,设备必须上报带有最新DND状态DoNotDisturbChanged事件。如果返回错误的响应,则设备必须发送ReportDoNotDisturb事件,云端会将状态同步给设备。如果设备离线时,多次更新DND设置,只需要上报最新的状态。

{
  "event": {
    "header": {
      "namespace": "iFLYOS.DoNotDisturb",
      "name": "DoNotDisturbChanged",
      "messageId": "xxxx"
    },
    "payload": {
      "enabled": true
    }
  }
}

Payload 参数

参数 说明 类型
enabled 打开为true;关闭为false boolean

响应

错误 HTTP Status Code 说明
INVALID_REQUEST_EXCEPTION 400 错误的参数/请求
INTERNAL_REQUEST_EXCEPTION 500 服务端内部错误
N/A 200/204 成功