申请及使用用户信息

技能可以根据用户的基本信息,为用户提供个性化的服务。在使用用户信息时,首先要获得用户的同意,然后去请求用户的信息,最后根据用户的信息为用户提供服务。开放平台支持技能申请使用用户的百度账号信息(包括用户的昵称、邮箱、电话、头像等基础信息)、用户的地理位置信息和用户的打印机服务。目前该功能在小度在家和小度音箱设备上使用。

本文将详细介绍技能如何申请、获取用户信息以及一些注意事项,主要分为以下几部分。

  1. 配置权限
  2. 请求用户授权
  3. 请求用户信息内容
  4. 用户信息使用须知

配置权限

在开放平台上对技能使用的权限进行配置。如下图所示。

注意:如果技能没有在平台上进行权限配置,则无法申请用户授权。

请求用户授权

技能请求用户授权,是为了获取用户的权限,只有用户授权成功,技能才能去申请用户的信息。请求用户授权的过程分为如下几步。

  1. 技能向DuerOS发送授权请求授权指令Permission.AskForPermissionsConsent
  2. DuerOS收到授权请求指令后,向用户发送权限确认信息,如图所示。用户同意授权会选择确认按钮,授权成功后DuerOS会向技能发送Permission.Granted事件,用户不同意授权时,会点击取消按钮,此时DuerOS会向技能发送Permission.Rejected事件

说明:

  1. DuerOS在小度在家设备(有屏设备)上直接展示用户权限请求消息,在小度音箱(无屏设备)上会通过向手机APP发送消息的方式请求用户授权。
  2. 技能只需要在第一次使用用户信息时请求用户授权,后续使用过程不需要用户再次授权。
  3. 如果在授权过程中,DuerOS发出“您正在申请未声明的权限,请到技能开放平台服务配置中配置权限”的信息时,说明技能没有配置权限,请先完成配置权限
  4. 如果用户拒绝授权,技能无法获取用户信息,也不能为用户提供相应的服务,此时技能可以提醒用户不能提供服务。
  5. 在某些特殊情况下(如网络异常等),即使用户同意授权,也可能会出现授权失败的情况,DuerOS会向技能发送Permission.GrantFailed事件
  6. 目前已经支持的权限有用户百度账号权限、用户地理位置信息和打印机服务权限。

请求用户信息

技能请求用户授权,当授权成功时,技能可以向DuerOS发送请求用户信息的消息(包括百度账号权限信息、用户地理位置信息、用户的打印机服务信息)来获取用户信息,DuerOS收到技能的请求后,进行相应的处理,并将处理结果返回给技能。

获取API access token

技能向DuerOS请求用户信息的消息中需要包含apiAccessToken和apiEndPoint信息,用于身份和权限的校验,技能可以从LaunchRequest请求的context结构中获取apiAccessToken和apiEndPoint两个信息。

{
    "version": "2.0",
    "context": {
        "System": {
            "apiEndPoint": "https://xiaodu.baidu.com",
            "apiAccessToken": "sfqJoW..."
        }
    },
    "request": {
        "type": "LaunchRequest",
        "requestId": "d407e869-55f7-4681-b49f-8a41bc196da0",
        "dialogRequestId": "e5c713d0-f5ec-48c6-89bf-a023c38512d7",
        "timestamp": "1499790258"
    }
}

返回消息

技能向DuerOS发送请求用户信息消息后,DuerOS根据消息处理情况,将结果返回给技能。在返回的消息中可能会遇到以下几种情况:

  1. 技能请求用户信息成功,根据用户信息为用户提供相应的服务。
  2. 技能请求用户信息成功,但是用户的信息不完整,技能不能提供服务,比如缺少电话号码,技能可以提醒用户到百度账号中完善这些信息。
  3. 如果返回消息中提示用户没有授权时,明确的告知用户不能提供相应的服务。
  4. 技能每次提供服务时,需要重新申请用户信息,保证服务中使用的是用户最新的数据。

用户信息使用须知

为了保护用户数据,技能在使用用户数据信息必须满足以下条件。如果发现技能违背了下面的原则,DuerOS有权下线技能,并通知开发者对技能进行修改。

  1. 技能必须满足DuerOS隐私政策
  2. 技能只有在提供服务时才能使用用户信息。使用用户信息时,必须告知用户使用范围,在用户同意并且不违背用户隐私和法律的情况下使用。
  3. 技能使用用户信息,包括用户的昵称、邮箱、电话、头像等,都必须通过向DuerOS发送请求消息来获取,不能将用户的信息本地存储。
  4. 技能每次提供服务时,必须使用API接口请求用户最新的信息。

相关文档

获取用户信息协议