# CRM对接
# 上报用户信息
七鱼 SDK 允许 App 的用户以匿名方式向客户咨询,但如果 App 希望客服知道咨询的用户的身份信息,可以通过 SDK 提供的 setUserInfo
接口告诉给客服。 该接口包含两个功能:
- 关联用户账户。调用过该接口后,客服即可知道当前用户是谁,并可以调看该用户之前发生过的访问记录。通过该接口,SDK还会把 App 端相同用户 ID 的咨询记录整合在一起。如果调用
setUserInfo
接口前是匿名状态,那么匿名状态下的聊天记录也会被整合到新设置的这个用户下面。
注意,该接口调用的时机应该是在接入方 App 登录的时候,不应该在进入客服界面之前去调用该方法
- 提供用户的详细资料。通过设置参数
YSFUserInfo
的 data 字段, App 能把用户的详细信息告诉给客服,这些信息会显示在客服会话窗口的用户信息栏中。该字段具有很强的可扩展性,具体请见本节后面的描述。
为了区分不同的 App 用户,当 App 端用户注销后,需要先调用 Unicorn.logout()
告诉 SDK,SDK 此时会关闭前一个用户的聊天记录,并重新分配一个新的聊天账号,以和之前的用户区分。
注意,该接口不允许直接从一个账号切换到另外一个账号。该方法是用于 SDK 登录用的,所以希望接入方在 App 登录的时候调用该方法。在 V4.10.0 版本,我们将此方法改为了 Http 请求,所以如果您需要在进入客服界面之前调用该方法,请等待该方法调用成功再去进入客服界面,也就是使用带有 callback 的 setUserInfo 方法
访客信息为一个 Json 数组,该数组中的 item 目前可包含以下字段:
- key:数据项的名称,用于区别不同的数据。
- index:用于排序,显示数据时数据项按index值升序排列;不设定index的数据项将排在后面;index相同或未设定的数据项将按照其在 JSON 中出现的顺序排列。
- label:该项数据显示的名称。
- value:该数据显示的值,类型不做限定,根据实际需要进行设定。
- href:超链接地址。若指定该值,则该项数据将显示为超链接样式,点击后跳转到其值所指定的 URL 地址。
- hidden:是否隐藏该item。目前仅对mobile和email有效。
- isCustomField:是否属于自定义字段。如果是,则尝试匹配自定义字段名称并更新值,目前只支持 文本、数字、时间(13位数字时间戳)、单选、多选(用 ### 分割选中值,其中###前后都有空格)。
现在,以下4个key由七鱼使用,他们的排序和标签名是固定的,不能指定index和label。
- real_name:用户姓名。
- mobile_phone:用户手机号,可以隐藏。
- email:用户的邮箱账号,可以隐藏。
- avatar:用户的头像,可以在客服端显示。访客端的用户头像不会使用该字段。
设置访客信息的示例如下:
YSFUserInfo userInfo = new YSFUserInfo();
// App 的用户 ID
userInfo.userId = "uid";
// 当且仅当开发者在管理后台开启了 authToken 校验功能时,该字段才有效
userInfo.authToken = "auth-token-from-user-server";
// CRM 扩展字段
userInfo.data="[
{"key":"real_name", "value":"土豪"},
{"key":"mobile_phone", "hidden":true, "value":"13800000000"},
{"key":"email", "value":"13800000000@163.com"},
{"key":"avatar", "value": "https://qiyukf.com/def_avatar.png"},
{"index":0, "key":"account", "label":"账号", "value":"zhangsan" , "href":"http://example.domain/user/zhangsan"},
{"index":1, "key":"sex", "label":"性别", "value":"先生"},
{"index":5, "key":"reg_date", "label":"注册日期", "value":"2015-11-16"},
{"index":6, "key":"last_login", "label":"上次登录时间", "value":"2015-12-22 15:38:54"}
]";
Unicorn.setUserInfo(userInfo);
注意: 如果一定要在进入客服之前调用 setUserInfo 方法,那么需要使用带有 callback 的 setUserInfo 接口,并在 onSuccess 中进入客服界面,例如:
YSFUserInfo userInfo = new YSFUserInfo();
// App 的用户 ID
userInfo.userId = "uid";
// 当且仅当开发者在管理后台开启了 authToken 校验功能时,该字段才有效
userInfo.authToken = "auth-token-from-user-server";
// CRM 扩展字段
userInfo.data="[
{"key":"real_name", "value":"土豪"},
{"key":"mobile_phone", "hidden":true, "value":"13800000000"},
{"key":"email", "value":"13800000000@163.com"},
{"key":"avatar", "value": "https://qiyukf.com/def_avatar.png"},
{"index":0, "key":"account", "label":"账号", "value":"zhangsan" , "href":"http://example.domain/user/zhangsan"},
{"index":1, "key":"sex", "label":"性别", "value":"先生"},
{"index":5, "key":"reg_date", "label":"注册日期", "value":"2015-11-16"},
{"index":6, "key":"last_login", "label":"上次登录时间", "value":"2015-12-22 15:38:54"}
]";
Unicorn.setUserInfo(userInfo, new RequestCallback<Void>() {
@Override
public void onSuccess(Void aVoid) {
Unicorn.openServiceActivity(this, "七鱼客服", null);
}
@Override
public void onFailed(int errorCode) {
}
@Override
public void onException(Throwable throwable) {
}
});
上述方法返回错误码说明:
errorCode | 原因 |
---|---|
310 | 登录IP或MAC被禁 |
315 | 内部帐户不允许在该地址登陆 |
403 | 用户被封禁 |
408 | 操作超时 |
414 | 参数错误 |
415 | 网络连接出现问题 |
701 | 设置 UserInfo id 为 null |
702 | 没有退出上一个 user 就直接调用了 setUserInfo |
703 | 使用融合 SDK 没有先登录云信 |
1001 | appkey不存在 |
1002 | deviceId错误 |
1003 | 其他错误 |
1004 | authToken校验错误 |
# 注销用户
如前所述,当关联的用户从 App 注销后,也应当调用 SDK 的注销接口 Unicorn.logout()
。这样,注销之后,客服再给前面用户发送消息,将进入留言,等到该用户下次再在同一台设备上登录后,能够再看到。如果 App 的用户注销后,不调用七鱼的 logout 接口,七鱼不知道用户已经变更,那么客服如果给前面一个用户发起会话,发送消息,当前设备将仍旧能够收到消息,造成混乱。
Unicorn.logout()
接口等效于 Unicorn.setUserInfo(null)
。
注意:目前不支持跨设备的消息漫游,在其他设备上通过 setUserInfo(YSFUserInfo)
设置相同的用户, 这个设备上不能收到留言。