交互流程
Udesk API 通用说明
文档参考 https://www.udesk.cn/website/doc/apiv2/intro/
名词解释:
urobot、robot:含义相同,代表udesk机器人
创建客户
文档参考: https://www.udesk.cn/website/doc/apiv2/customers/#_10
创建会话(请求分配客服)
POST /im/sessions
请求参数
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
customer_token | 字符串 | 是 | 应用端客户唯一标识 |
assign_type | 字符串 | 否 | 期望的分配类型, 'robot', 'urobot', 'agent', 默认为 'robot' |
agent_id | 整型 | 否 | 指定分配的客服id,如果指定忽略 assign_type 和 group_id |
group_id | 整型 | 否 | 指定分配的客服组id,如果指定忽略 assign_type |
channel | 字符串 | 否 | 自定义渠道 |
robot_role_id | 字符串 | 否 | 客户角色 |
robot_id | 整型 | 否 | udesk机器人id |
scene_id | 整型 | 否 | udesk机器人对应场景id |
customer_token 与创建客户时的 open_api_token 一致 如果 agent_id 和 group_id 都没有指定,且 assign_type 为 'agent',则按系统分配规则分配 robot_role_id 需要先在云问端设置好 assign_type为'urobot'时,robot_id和scene_id必填,且robot_id为Udesk中定义的机器人id,获取方式见获取urobot列表
如果使用这个customer_token的用户在系统中不存在 Udesk会自动创建一个名为API匿名用户(customer_token)的用户 括号中的customer_token即传参中的值
示例
curl 'https://demo.udesk.cn/open_api_v1/im/sessions?email=admin@udesk.cn&sign_version=v2×tamp=1648432914&sign=8a6wfe5dfd404d11a1e7fd5b7410b05ebdd561a4&nonce=1648632914&customer_token=828cw3d9-6a61-4afe-9efe-2c071d0e7cb3&assign_type=robot&agent_id=397' \
-X POST \
-H 'Content-Type: application/json' \
-d '{
"agent_id":"397",
"customer_token":"827wd5r9-7a61-4afe-9efe-2c071d0e9cb2",
"assign_type":"agent"
}'
返回数据
属性名 | 类型 | 说明 |
---|---|---|
code | 整型 | 执行结果码,1000代表成功 |
message | 字符串 | 分配成功时为欢迎语,失败时为错误提示 |
assign_type | 字符串 | 分配类型, 'robot', 'agent', 'urobot' |
assign_info | 对象 | 分配结果信息 |
根据 assign_type 不同 assign_info 的结构不同。
机器人返回
assign_type 为 robot 时, assign_info 的结构如下:
属性名 | 类型 | 说明 |
---|---|---|
robot_name | 字符串 | 机器人姓名 |
robot_avatar | 字符串 | 机器人头像 |
welcome_message | 字符串 | 欢迎语 |
unknow_message | 字符串 | 未知回答语 |
示例
{
"code": 1000,
"message": "请求成功",
"assign_type": "robot",
"assign_info": {
"robot_name": "Udesk客服机器人",
"robot_avatar": "https://rd-dota.udesk.cn/entry/images/agent-avatar-3e6a68e1e1fcb4db653d9e93263f7946.png",
"welcome_message": "<p>您好,我是智能客服机器人,我可以回答您相关的业务问题,有什么问题就问我吧! 很高兴为您服务!</p><p><br/></p>",
"unknow_message": "<p>对不起,我目前只能回答常见的业务相关问题!此问题暂不在我知识范围内,我会继续努力学习的!您也可以换个简单的问法向我提问,或许我就可以回答您了...</p>"
}
}
assign_type 为 'urobot' 时, assign_info 的结构如下:
属性名 | 类型 | 说明 |
---|---|---|
sessionId | 整型 | 会话id |
logId | 整型 | 该条log的id |
leadingWord | 字符串 | 引导语 |
helloWord | 字符串 | 欢迎语 |
robotName | 字符串 | 机器人名称 |
logoUrl | 字符串 | 机器人头像 |
topAsk | 对象 | 常见问题列表 |
示例
请求
curl 'https://test.udesk.cn/open_api_v1/im/sessions?email=admin@udesk.cn×tamp=1494474404&sign=6892f1b794071c260e1b1eac15df588fc919c9e86eb742affaa742ad6c03cb52&nonce=2d931510-d99f-494a-8c67-87feb05e1594&sign_version=v2' \
-X POST \
-H 'Content-Type: application/json' \
-d '{
"customer_token":"test20191018224601",
"assign_type":"urobot",
"scene_id":39,
"robot_id":12362
}'
返回
{
"code": 1000,
"message": "请求成功",
"assign_type": "urobot",
"assign_info": {
"sessionId": 23702,
"logId": 55392,
"robotName": "测试",
"logoUrl": null,
"leadingWord": "你好,很高兴为您服务!",
"helloWord": "你好,很高兴为您服务!"
"topAsk": [
{
"quesitionType": "问题类型1",
"quesitionTypeId": 2,
"optionsList":[
{
"quesition":"问题1",
"quesitionId": 2122
},
{
"quesition": "问题2",
"quesitionId": 3222
}
]
}
]
}
}
请求客服返回
assign_type 为 agent 时, assign_info 的结构如下:
属性名 | 类型 | 说明 |
---|---|---|
im_sub_session_id | 整型 | 会话ID |
count | 整型 | 排队位置 |
queue | 字符串 | 排队队列 |
agent_id | 整型 | 分配的客服id |
agent_name | 字符串 | 分配的客服名称 |
agent_avatar | 字符串 | 客服头像地址 |
survey_options | 对象 | 满意度评价设置 |
示例
请求
curl 'https://test.udesk.cn/open_api_v1/im/sessions?email=admin@udesk.cn×tamp=1494474404&sign=6892f1b794071c260e1b1eac15df588fc919c9e86eb742affaa742ad6c03cb52&nonce=2d931510-d99f-494a-8c67-87feb05e1594&sign_version=v2' \
-X POST \
-H 'Content-Type: application/json' \
-d '{
{
"customer_token":"test20191018224601",
"assign_type":"agent"
}
}'
正确返回
{
"code": 1000,
"message": "请求成功",
"assign_type": "agent",
"assign_info": {
"im_sub_session_id": 1234,
"count": 0,
"agent_id": 3,
"agent_name": "Tom",
"agent_avatar": "",
"survey_options": "见survey_options一节",
}
}
排队返回
{
"code": 2001,
"message": "当前客服正繁忙,您排在第3位。",
"assign_type": "agent",
"assign_info": {
"count": 3,
"queue": "queue:company:1:agent:486"
}
}
分配临界
{
"code": 2001,
"message": "客服分配中!",
"assign_type": "agent",
"assign_info": {
"count": 0,
}
}
客服不在线
{
"code": 2002,
"message": "当前没有客服在线",
"assign_type": "agent",
"assign_info": {
"count": 0,
}
}
survey_options
"survey_options":
"enabled": true, # 是否开放
"name": "满意度评价",
"title": "您对本服务的评价是?", # 给客户显示提示
"desc": "感谢您的支持,为了使我们更好的为您服务,请您为本次服务做一个评价(回复字母即可)", #微信微博API满意度评价引导语
"remark_enabled": true, # 是否可填写评价备注
"remark": "您可填写评价备注", # 评价备注提示
"show_type": String text|expression|star // 满意度种类
text: { // 可选,当show_type 为 text显示
default_option_id:
options: [{
id:
text: 非常满意|满意|一般|不满意|非常不满意 (可以修改的,显示在BI中)
desc: 不可以修改的
tags: "tag1,tag2" //自定义评价标签 如:服务好,专业性强,态度好...
remark_option: hide|required|optional
}]
},
expression: { // 可选,当show_type 为 expression 显示
default_option_id:
options: [{
id:
text: 满意|一般|不满意
tags: "tag1,tag2"
remark_option: hide|required|optional
}]
},
star: { // 可选,当show_type 为 star 显示
default_option_id:
options: [{
id:
text: 满意|一般|不满意
tags: "tag1,tag2"
remark_option: hide|required|optional
}]
},
"options": [ # 兼容模式,评价选项/ id对应 /im_sessions/survey 的 option_id
{
"id": 36,
"text": "超级满意2",
"enabled": true
},
{
"id": 37,
"text": "满意2",
"enabled": true
},
{
"id": 38,
"text": "一般2",
"enabled": true
},
{
"id": 39,
"text": "不满意",
"enabled": true
},
{
"id": 40,
"text": "非常不满意",
"enabled": true
}
],
"methods": [ # 满意度评价方式
{
"id": 7,
"flag": "after_session",
"text": "对话结束后弹出",
"enabled": true
},
{
"id": 74,
"flag": "agent_invite",
"text": "客服主动邀请",
"enabled": true
},
{
"id": 1485,
"flag": "customer_invite",
"text": "客户主动满意度评价(仅支持web和Android/iOS SDK)",
"enabled": true
}
],
"resolved_enabled": true,
"resolved_options": {
"title": "您的问题是否已解决?",
"options": [
{
"option_select": true,
"option_name": "已解决"
},{
"option_select": true,
"option_name": "未解决"
}],
"value": "0" # 选项默认值
}
关闭会话
客户主动关闭指定会话
DELETE /im/sessions/:session_id
请求参数
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
session_id | 整型 | 是 | 会话ID, in URL |
返回数据
属性名 | 类型 | 说明 |
---|---|---|
code | 整型 | 执行结果码,1000代表成功 |
示例
$ curl -XDELETE 'https://demo.udesk.cn/open_api_v1/im/sessions/123?session_id=123&email=admin@udesk.cn&sign_version=v2×tamp=1645198019&sign=925f7a1a4ec944f52d59d33a9e35cb6e2478e589&nonce=1648194019'
删除会话
删除已经关闭的会话
请求方法
DELETE /im/sessions/destroy_session
请求参数(Query String)
参数名 | 必填 | 类型 | 说明 |
---|---|---|---|
start_time | 是 | 字符串 | 示例 2022-05-19 19:50:33 |
end_time | 是 | 字符串 | 示例 2022-05-19 20:50:33 |
customer_id | 否 | 整形 | 若传该参数,则仅删除该客户在对应时间段内的对话记录 若不传该参数,则删除对应时间段内所有的对话记录 |
start_time 和 end_time 查询的是会话的创建时间的创建时间;
返回数据
属性名 | 类型 | 说明 |
---|---|---|
code | 整型 | 执行结果码,1000 代表成功 |
示例
请求
curl -X DELETE 'https://test.udesk.cn/open_api_v1/im/sessions/destroy_session?email=admin@udesk.cn×tamp=1494474404&sign=6892f1b794071c260e1b1eac15df588fc919c9e86eb742affaa742ad6c03cb52&nonce=2d931510-d99f-494a-8c67-87feb05e1594&sign_version=v2&start_time=2022-05-19%2019%3A50%3A33&end_time=2022-05-19%2020%3A50%3A33&customer_id=123123'
返回
{
"code": 1000
}
放弃排队
客户主动关闭放弃指定排队队列
DELETE /im/sessions/close_queue
请求参数
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
customer_token | 字符串 | 是 | 应用端客户唯一标识 |
queue | 字符串 | 是 | 排队队列。选取创建会话,排队时返回的排队队列数据 |
返回数据
属性名 | 类型 | 说明 |
---|---|---|
code | 整型 | 执行结果码,1000代表成功 |
示例
$ curl -XDELETE 'https://test.udesk.cn/open_api_v1/im/sessions/close_queue?customer_token=123qwe&queue=queue:company:1:agent:486&email=admin@test.com&sign=61b00dedbc749691232386fed059898af61b92c×tamp=1526293384'
发送消息预览
API客户发送消息预览给客服(会话的分配类型assign_type需要为agent)
PUT /im/sessions/:session_id/message_preview
注意: 该接口需要单独开通 该接口有独立的频次限制: 每个 session_id 每1秒可以调用3次
请求参数
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
session_id | 整型 | 是 | 会话ID, in URL |
content | 字符串 | 是 | 预览内容文本, 为空字符串时会清除预览, in request body |
清楚消息预览的几种方法: 1. 客服收到来自客户的消息后会自动清除预览内容; 2. 调用本接口同时content传空字符串时, 也会清除对应会话的消息预览。
返回数据
属性名 | 类型 | 说明 |
---|---|---|
code | 整型 | 执行结果码,1000代表成功 |
错误返回
code 值 | message 说明 |
---|---|
2062 | 找不到会话或会话已关闭 |
2065 | 没有开通该接口 |
示例
请求
curl 'https://test.udesk.cn/open_api_v1/im/sessions/1/message_preview?email=admin@udesk.cn×tamp=1494474404&sign=6892f1b794071c260e1b1eac15df588fc919c9e86eb742affaa742ad6c03cb52&nonce=2d931510-d99f-494a-8c67-87feb05e1594&sign_version=v2' \
-X PUT \
-H 'Content-Type: application/json' \
-d '{"content": "测试预览"}'
返回
{
"code": 1000
}
发送消息
API客户发送消息给客服(会话的分配类型assign_type需要为agent)
POST /im/messages
注意: 发送给机器人的消息 type 参数目前只支持 'message' 类型
请求参数
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
customer_token | 字符串 | 是 | 应用端客户唯一标识 |
im_sub_session_id | 整型 | 是 | 1. 会话ID 2. ID为0或空为机器人问题 3. ID为-1为Udesk机器人问题 4. -2为IM工作台留言 5. -3为排队中发送消息 |
message_id | 字符串 | 是 | 消息id/公司消息唯一标识(Udesk机器人可不传) 仅支持字母,数字,"_","-",禁用特殊字符 |
type | 字符串 | 否 | 消息类型, 'message', 'image', 'audio', 'rich', 默认为 'message' |
data | 对象 | 是 | 消息内容 (详情见 消息内容格式) |
robot_id | 整型 | 否 | Udesk机器人id(Udesk机器人必填) |
scene_id | 整型 | 否 | Udesk机器人对应场景id(Udesk机器人必填) |
urobot_session_id | 整型 | 否 | Udesk机器人对应的会话id |
agent_id | 整型 | 否 | 指定分配的客服id 配合im_sub_session_id=-2使用 |
group_id | 整型 | 否 | 指定分配的客服组id 配合im_sub_session_id=-2使用 |
返回数据
属性名 | 类型 | 说明 |
---|---|---|
code | 整型 | 执行结果码,1000代表成功 |
错误返回(assign_type为'robot'时)
code 值 | message 说明 | |
---|---|---|
1 | 9200 | 会话不存在/会话已关闭 |
2 | 2062 | 缺少参数 |
示例
请求
curl 'https://test.udesk.cn/open_api_v1/im/messages?email=admin@udesk.cn×tamp=1494474404&sign=6892f1b794071c260e1b1eac15df588fc919c9e86eb742affaa742ad6c03cb52&nonce=2d931510-d99f-494a-8c67-87feb05e1594&sign_version=v2' \
-X POST \
-H 'Content-Type: application/json' \
-d '{
"customer_token":"1234123123",
"im_sub_session_id":11,
"message_id":"1",
"type":"image",
"data":{
"content": "本公司促销产品走过路过不要错过 <a href=\"https://xxx.com/1.png\">热销.com</a>"
}
}'
返回
{
"code": 1000
}
获取客户离线未读消息
获取指定客户与会话中的客服发送给客户的离线未读消息数量以及详情
GET /im/messages/unread_customer_offline
请求参数
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
im_sub_session_id | 整型 | 是 | 会话ID |
customer_id | 整型 | 是 | 客户ID |
app_id | 整型 | 否 | SDK app_id 需要读取SDK渠道会话时,传递该参数 |
返回数据
属性名 | 类型 | 说明 |
---|---|---|
code | 整型 | 执行结果码,1000代表成功 |
count | 整型 | 未读消息数量 |
unread_messages | 数组 | 消息集合,集合内元素为未读消息详情,详情见 消息内容格式 |
请求示例
curl https://demo.udesk.cn/open_api_v1/im/messages/unread_customer_offline?im_sub_session_id=1419314&customer_id=5855308&email=admin@udesk.cn&sign_version=v2×tamp=1646827326&sign=06f59041bbbec54bd2a0b15b45672c9f43539135&nonce=1646827326
修改客户在线状态
修改客户在线状态
POST /im/customer_online_state
请求参数
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
customer_token | 字符串 | 是 | OpenApi 客户唯一标识 |
state | 整型 | 是 | 离线:0;在线:1 |
返回数据
属性名 | 类型 | 说明 |
---|---|---|
code | 整型 | 执行结果码,1000代表成功 |
请求示例
curl https://demo.udesk.cn/open_api_v1/im/customer_online_state?customer_token=5855308&state=0&email=admin@udesk.cn&sign_version=v2×tamp=1646827326&sign=06f59041bbbec54bd2a0b15b45672c9f43539135&nonce=1646827326
修改客服消息已读状态
修改客服消息已读状态
POST /im/messages/read_messages
请求参数
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
session_id | 整型 | 是 | 会话ID |
message_ids | 字符串数组 | 是 | ['udesk_211679991890796','udesk_211679991890797'] 消息ID数组 |
返回数据
属性名 | 类型 | 说明 |
---|---|---|
code | 整型 | 执行结果码,1000代表成功 |
请求示例
curl https://demo.udesk.cn/open_api_v1/im/messages/read_messages?session_id=1234&message_ids=['123','123456']&email=admin@udesk.cn&sign_version=v2×tamp=1646827326&sign=06f59041bbbec54bd2a0b15b45672c9f43539135&nonce=1646827326
获取客户敏感词配置
获取客户敏感词配置
GET /im/im_sensitive_words
返回数据
属性名 | 类型 | 说明 |
---|---|---|
code | 整型 | 执行结果码,1000代表成功 |
customer_words_string | 字符串 | 已配置的敏感词,逗号分隔 例如:a,b,c,d |
customer_is_open | 整型 | 1 开启 0或空为关闭 |
请求示例
curl https://demo.udesk.cn/open_api_v1/im/im_sensitive_words?email=admin@udesk.cn&sign_version=v2×tamp=1646827326&sign=06f59041bbbec54bd2a0b15b45672c9f43539135&nonce=1646827326
获取客服未读消息
客服未读消息为 客户成功发送给客服,而客服尚未阅读的消息
获取指定会话中客服未读消息数量以及7天内未处理的留言消息数量
GET /im/messages/agent_unread_messages
请求参数
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
agent_ids | 数组 | 是 | 客服ID数组, 数量限制30 |
返回数据
属性名 | 类型 | 说明 |
---|---|---|
code | 整型 | 执行结果码 |
results | 对象数组 | 返回结果集 |
results.agent_id | 整型 | 客服ID |
results.unread_session_message_num | 整型 | 未读消息数 |
results.unsolved_leave_message_num | 整型 | 7天内未处理的留言消息数 |
请求示例
curl https://demo.udesk.cn/open_api_v1/im/messages/agent_unread_messages?email=admin@udesk.cn&sign_version=v2×tamp=1646817998&sign=7ab7fb49d9c32ea246504b3af75a9w65210bca87&nonce=1646827998&agent_ids[]=13
发送客户消息已读状态
请求方法
发送客户消息已读状态
POST {接收消息URL}
接收消息URL,请在管理员->设置->渠道管理->接口消息 中设置
请求参数
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
session_id | 整型 | 是 | 会话ID |
message_ids | 字符串数组 | 是 | 消息id列表 |
返回数据
返回 HTTP 状态码 200, 响应体为空即可。
注意:
- 请在5秒内返回,否则 UDesk 端会认为发送超时;
- 如果在60秒内发生10次超时,则自最后一次超时起的60秒内,Udesk将停止对该地址的调用。
回复消息通知
请求方法
客服推送消息给API客户
POST {接收消息URL}
推送格式为 JSON 接收消息URL,请在管理员->设置->渠道管理->接口消息 中设置
请求参数
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
customer_token | 字符串 | 是 | 应用端客户唯一标识 |
assign_type | 字符串 | 是 | 分配类型, 'robot', 'agent', 'urobot' |
messages | 对象数组 | 是 | 消息 |
根据 assign_type 不同,message 的格式有所不同
当 assign_type 为 'robot' 时, message 的格式如下
messages: 对像数组
type: 消息类型
message_id: 消息id, 字符串
data: 消息内容
question_id: 0为寒暄库,非问答; 非0时,可对问答进行有用无用评价
question_title: 问题内容, 字符串
answer: 问题答案文字, 字符串
gus_list: 问题引导列表
- question_title: 问题内容, 字符串
relate_list: 相关问题列表
- question_title: 问题内容, 字符串
third_url: 相关推荐链接
url: 链接地址, 字符串
{
"customer_token": "axb",
"assign_type": "robot",
"messages": [{
"type": "message",
"message_id": "f862f80d-89aa-4f31-92d9-ccd4fcacffcf",
"data": {
"question_id": 210530,
"question_title": "公司业务是什么",
"answer": "嗨,我们是做云客服的公司!不同开发就可以和微信微博web上的用户进行沟通和管理",
"gus_list": [
{"question_title": "你会什么业务"},
{"question_title": "你们公司有什么业务"}
],
"relate_list": [
{"question_title": "公司在哪里"},
{"question_title": "联系方式是什么"}
],
"third_url": {
"url": "https://www.udesk.cn"
}
}
}
]
}
当 assign_type 为 'urobot' 时, message 的格式如下
messages: 对像
sessionId: 会话id, 字符串
logId: 消息的Id
aid: 答案id
ansContent: 答案内容
ansType: 答案类型 (1表示普通答案,2表示答案和建议列表, 3表示建议列表, 4表示返回寒暄,6表示未知说辞, 8表示敏感词 )
hitQuestion: 问题内容
suggestQuestionList: 建议列表
flowId: 当前流程ID,
flowTitle: 当前流程标题,
flowContent: 当前流程答案,
{
"sessionId": 1835244,
"logId": 3574331,
"aid": 12,
"ansContent": "申诉流程",
"ansType": 1,
"hitQuestion": "账号申诉",
"suggestQuestionList": [
{
"id": 434,
"content": "问题1",
"type": 1
}
]
}
当 assign_type 为 'agent' 时, messages 的格式如下
messages:
type: 消息类型, 'message', 'image', 'audio', 'video', 'file', 'rich(富文本消息)', 'struct(结构会话)', 'survey(满意度评价相关事件)', 'transfer(转接事件)', 'info_transfer(转接事件,属于属性区别)'
message_id: 消息id
agent_id: 客服id
agent_name: 客服名称
agent_avatar: 客服头像
im_sub_session_id: 会话ID
message_created_at: 消息创建时间 "20170711 09:52:11"
data: 与发送消息内容相同
font: 字体, 仅支持message
content: 内容
{
"customer_token": "axb",
"assign_type": "agent",
"messages": [
{
"type": "start_session",
"message_id": "xxxxx",
"agent_id": 1,
"agent_name": "TOM",
"agent_avatar": "https://123.com/1.png",
"im_sub_session_id": 3,
"message_created_at": "20170711 09:52:11",
"data": {
"content": "对话开始"
}
},{
"type": "message",
"message_id": "xxxxx",
"agent_id": 1,
"agent_name": "TOM",
"agent_avatar": "https://123.com/1.png",
"im_sub_session_id": 3,
"message_created_at": "20170711 09:52:12",
"data": {
"font": "字体, 仅支持message",
"content": "您好,有什么可以帮助您?",
}
},
{
"type": "rich",
"message_id": "xxxxx",
"agent_id": 1,
"agent_name": "TOM",
"agent_avatar": "https://123.com/1.png",
"im_sub_session_id": 3,
"message_created_at": "20170711 09:52:13",
"data": {
"content": "本公司促销产品走过路过不要错过 <a href=\"https://xxx.com/1.png\">热销.com</a>",
}
},
{
"type": "close",
"message_id": "xxxxx",
"agent_id": 1,
"agent_name": "TOM",
"agent_avatar": "https://123.com/1.png",
"im_sub_session_id": 3,
"message_created_at": "2018-01-01 00:00:00",
"data": {
"close_type": "normal(正常)|redirect(转接)|force(强制)"
"content": "关闭会话",
"survey_options": "见survey_options一节",
}
}
]
}
返回数据
返回 HTTP 状态码 200, 响应体为空即可。
注意:
- 请在5秒内返回,否则 UDesk 端会认为发送超时;
- 如果在60秒内发生10次超时,则自最后一次超时起的60秒内,Udesk将停止对该地址的调用。
消息内容格式
type 类型及支持列表
类型 | type | 含义 | 发送 | 接收 | 备注 |
---|---|---|---|---|---|
消息 | message | 文本消息 | ✓ | ✓ | |
消息 | image | 图片消息 | ✓ | ✓ | |
消息 | audio | 语言消息 | ✓ | × | 支持amr格式 |
消息 | video | 视频消息 | ✓ | × | 支持mp4格式 |
消息 | file | 文件消息 | ✓ | × | |
消息 | rich | 富文本消息 | ✓ | ✓ | 支持常见的html标签 |
消息 | struct | 结构话消息 | × | × | 暂不支持 |
事件 | start_session | 对话开始 | × | ✓ | 对话开始时推给客户 |
事件 | transfer | 转接事件 | × | ✓ | 客户被转接时推给客户,客户需要修改im_sub_session_id 为新的 |
事件 | info_transfer | 转接事件显示内容 | × | × | 客户被转接时显示给客服的提示内容 |
事件 | close | 会话关闭事件 | ✓ | ✓ | 客户会话被关闭时推给客户 |
事件 | survey | 满意度评价相关事件 | × | × | 只会在客服IM工作台显示 |
事件 | active_guest | 客服主动会话事件 | × | × | 仅支持web访客 |
事件 | info_appoint | 客服分配客户事件 | × | × | 暂不支持 |
事件 | form | 发送表单消息事件 | × | × | 暂不支持 |
事件 | form_received | 接受表单消息事件 | × | × | 暂不支持 |
事件 | info | 询前表单 is_receive: false | × | × | 仅用于客服显示 |
事件 | robot_transfer | 机器人转接对话 | × | × | 仅用于客服显示 |
注: 不支持/暂不支持/仅用于客服显示的消息,不要在客户端显示处理
消息内容详情
根据 type 类型,data 的结构也有所不同:
# 普通消息
type: 'message'
data:
font: 字体格式, 选填, 比如
content: 文本内容 注: 文本内容可以包含 富文本 html 标签
# 图片消息
type: 'image'
data:
content: url
# 语音消息
type: 'audio'
data:
content: url
filename: '足球.mp4' #
filesize: "4.3M"
duration: 200 # 语音时长,可能没有 # 单位为s
type: 'video' # 仅支持mp4
data:
content: url
filename: '足球.mp4' # 文件名称
filesize: "4.3M" # 文件大小
type: 'rich' # 支持
data:
content: <p>您好,小雅客服很高兴为您服务,请问有什么可以帮您?</p>
# type: struct 结构化消息, 现仅支持 web/sdk
# 相关文档 <https://www.udesk.cn/website/doc/apiv1/im/#im_2>
# start_session 会话开始,通常为数组推送,后面有欢迎语 message
type: "start_session",
data:
content: "对话开始"
# transfer 会话被转接,通常为数组推送,后面有转接内容 message 如: '会话转接成功,客服xx为您服务'
type: "transfer",
data:
content: "会话转接"
type: "info_transfer",
data:
content: "客服Jerry213转接会话"
type: "close",
data:
content: "会话关闭"
机器人问答评价
参数
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
customer_token | 字符串 | 是 | 应用端客户唯一标识 |
message_id | 字符串 | 是 | 所评价机器人答案的消息ID |
question_id | 整型 | 是 | 问题ID |
useful | 布尔 | 是 | 问题是否有用 |
返回
属性名 | 类型 | 说明 |
---|---|---|
code | 整型 | 执行结果码,1000代表成功 |
urobot机器人会话评价(urobot使用)
POST /im/sessions/robot_survey
参数
属性名 | 类型 | 必填 | 说明 |
---|---|---|---|
customer_token | 字符串 | 是 | 应用端客户唯一标识 |
im_sub_session_id | 整型 | 是 | 会话ID |
option_id | 整型 | 是 | 评价选项ID (2:满意 3:一般 4:不满意) |
remark | 字符型 | 否 | 评价备注 |
robot_id | 整型 | 是 | udesk机器人id(在系统中 即时通讯->IM机器人 模块获取) |
scene_id | 整型 | 是 | udesk机器人对应场景id |
返回数据
属性名 | 类型 | 说明 |
---|---|---|
code | 整型 | 执行结果码,1000代表成功 |
message | 字符型 | 返回信息 |
示例
请求
curl https://demo.udesk.cn/open_api_v1/im/sessions/robot_survey?email=admin@udesk.cn×tamp=1494474404&sign=6892f1b794071c260e1b1eac15df588fc919c9e86eb742affaa742ad6c03cb52&nonce=2d931510-d99f-494a-8c67-87feb05e1594&sign_version=v2
\
-X POST \
-H 'content-type: application/json' \
-d '{
"customer_token":"1234121123123",
"im_sub_session_id":101,
"option_id":2,
"robot_id":1101,
"scene_id":39,
"remark":"非常满意"
}'
返回
{
"code": 1000,
"message": "感谢您的评价"
}
会话评价(评价客服)
POST /im/sessions/survey
请求参数
参数名 | 必填 | 类型 | 说明 |
---|---|---|---|
im_sub_session_id | 是 | 整型 | 会话id |
option_id | 是 | 整型 | 评价选项id |
remark | 否 | 字符串 | 评价备注 |
resolved_state_v2 | 否 | 整型 | 是否解决选项值 0(选项1表示已解决)1(选项2表示未解决) |
- 注:option_id的取值范围参考创建会话时返回的评价id,具体参考survey_options示例,先确定创建会话时返回的参数show_type种类,id取值范围为当前满意度种类里的options参数中的id
返回数据
属性名 | 类型 | 说明 |
---|---|---|
code | 整型 | 执行结果码,1000代表成功 |
示例
请求
curl https://demo.udesk.cn/open_api_v1/im/sessions/robot_survey?email=admin@udesk.cn×tamp=1494474404&sign=6892f1b794071c260e1b1eac15df588fc919c9e86eb742affaa742ad6c03cb52&nonce=2d931510-d99f-494a-8c67-87feb05e1594&sign_version=v2
\
-X POST \
-H 'content-type: application/json' \
-d '{
"im_sub_session_id":1001001000,
"option_id":"111"
}'
返回
{
"code": 1000,
"message": "感谢您的评价"
}
问题评价(仅限urobot使用)
POST /im/messages/answer_survey
请求参数
属性名 | 类型 | 必填 | 说明 |
---|---|---|---|
customer_token | 字符串 | 是 | 应用端客户唯一标识 |
messgae_id | 整型 | 是 | 问题答案所在的消息id |
im_sub_session_id | 整型 | 是 | 会话id |
option_id | 整型 | 是 | 评价选项id(1表示满意,2表示不满意,默认为满意) |
robot_id | 整型 | 是 | udesk机器人id |
scene_id | 整型 | 是 | udesk机器人对应场景id |
返回数据
属性名 | 类型 | 说明 |
---|---|---|
code | 整型 | 执行结果码,1000代表成功 |
message | 字符型 | 返回信息 |
示例
请求
curl https://demo.udesk.cn/open_api_v1/im/messages/answer_survey?email=admin@udesk.cn×tamp=1494474404&sign=6892f1b794071c260e1b1eac15df588fc919c9e86eb742affaa742ad6c03cb52&nonce=2d931510-d99f-494a-8c67-87feb05e1594&sign_version=v2
\
-X POST \
-H 'content-type: application/json' \
-d '{
"customer_token":"123411111",
"messgae_id":111,
"im_sub_session_id":11,
"option_id":1,
"robot_id":12,
"scene_id":1
}'
返回
{
"code": 1000,
"message": "感谢您的评价"
}
流程问题接口
POST /im/messages/flow
仅限urobot使用
请求参数
属性名 | 类型 | 必填 | 说明 |
---|---|---|---|
customer_token | 字符串 | 是 | 应用端客户唯一标识 |
im_sub_session_id | 整型 | 是 | 会话id |
flow_id | 整型 | 是 | 选中的flow_id |
robot_id | 整型 | 是 | udesk机器人id |
scene_id | 整型 | 是 | udesk机器人对应场景id |
flow_id获取:
当收到推送消息有 messages.flowContent 字段并标签中有 data-type="2"
,即可调用本接口
例:
<p><b data-type="2" class="flow-item" data-id="81" data-robotid="54">流程子项A跳转子项-1</b></p><p>流程子项A跳转子项-2<br></p>
<p><b data-type="1" class="flow-item" data-id="307" data-robotid="54">分类问题A</b></p><p>分类问题B</p>
当点击 流程子项A跳转子项-1 中,可以使用 flow_id=81来调用本接口
返回数据
属性名 | 类型 | 说明 |
---|---|---|
code | 整型 | 执行结果码,1000代表成功 |
推送数据参考urobot回复消息通知接口的返回
示例
请求
curl https://demo.udesk.cn/open_api_v1/im/messages/flow?email=admin@udesk.cn×tamp=1494474404&sign=6892f1b794071c260e1b1eac15df588fc919c9e86eb742affaa742ad6c03cb52&nonce=2d931510-d99f-494a-8c67-87feb05e1594&sign_version=v2
\
-X POST \
-H 'content-type: application/json' \
-d '{
"customer_token":"1234121123123",
"messgae_id":1001,
"im_sub_session_id":17001700,
"option_id":1,
"robot_id":1,
"scene_id":1
}'
返回
{
"code": 1000
}
用户点击行为接口
POST /im/messages/hit
请求参数
属性名 | 类型 | 必填 | 说明 |
---|---|---|---|
customer_token | 字符串 | 是 | 应用端客户唯一标识 |
im_sub_session_id | 整型 | 是 | 会话id |
message_id | 整型 | 是 | 机器人答案的消息id |
robot_id | 整型 | 是 | 机器人id |
question | 整型 | 否 | 问题内容 |
query_type | 整型 | 是 | 点击类型 6:常见问题点击 7:建议列表点击 |
返回数据
属性名 | 类型 | 说明 |
---|---|---|
code | 整型 | 执行结果码,1000代表成功 |
示例
请求
curl https://demo.udesk.cn/open_api_v1/im/messages/hit?email=admin@udesk.cn×tamp=1494474404&sign=6892f1b794071c260e1b1eac15df588fc919c9e86eb742affaa742ad6c03cb52&nonce=2d931510-d99f-494a-8c67-87feb05e1594&sign_version=v2
\
-X POST \
-H 'content-type: application/json' \
-d '{
"customer_token":"111",
"message_id":1,
"im_sub_session_id":10,
"robot_id":1,
"scene_id":1,
"question_id":1,
"query_type":1
}'
返回
{
"code": 1000
}
获取urobot列表
GET /im/urobots
返回数据
属性名 | 类型 | 说明 |
---|---|---|
code | 整型 | 执行结果码,1000代表成功 |
message | 字符型 | 返回结果信息 |
urobot_list | 对象数组 | 机器人列表的详细信息 |
urobot_list
属性名 | 类型 | 说明 |
---|---|---|
id | 整型 | urobot机器人id |
name | 字符型 | 机器人名称 |
logo | 字符串 | 机器人头像 |
scene_list | 对象数组 | 适合的场景信息,包括id(场景id)、name(场景名称) |
created_at | 字符串 | 机器人的创建时间 |
示例
请求
curl https://demo.udesk.cn/open_api_v1/im/urobots?email=admin@udesk.cn×tamp=1494474404&sign=6892f1b794071c260e1b1eac15df588fc919c9e86eb742affaa742ad6c03cb52&nonce=2d931510-d99f-494a-8c67-87feb05e1594&sign_version=v2
返回
{
"code": 1000,
"message": "请求成功",
"urobot_list": [
{
"id": 2,
"name": "默认机器人",
"logo": "",
"scene_list": [
{
"id": 114,
"name": "默认场景"
},
{
"id": 116,
"name": "系统默认场景"
}
],
"created_at": "2018-01-23T10:55:20.000+08:00"
},
{
"id": 3,
"name": "测试",
"logo": "",
"scene_list": [
{
"id": 120,
"name": "系统默认场景"
}
],
"created_at": "2018-02-05T11:25:30.000+08:00"
}
]
}
转人工统计接口(urobot使用)
POST /im/sessions/transfer_survey
请求参数
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
im_sub_session_id | 整型 | 是 | 会话id |
robot_id | 整型 | 是 | 机器人id |
scene_id | 整型 | 是 | 机器人场景id |
返回数据
属性名 | 类型 | 说明 |
---|---|---|
code | 整型 | 状态 |
message | 字符型 | 请求结果 |
示例
请求
curl https://demo.udesk.cn/open_api_v1/im/sessions/transfer_survey?email=admin@udesk.cn×tamp=1494474404&sign=6892f1b794071c260e1b1eac15df588fc919c9e86eb742affaa742ad6c03cb52&nonce=2d931510-d99f-494a-8c67-87feb05e1594&sign_version=v2
\
-X POST \
-H 'content-type: application/json' \
-d '{
"im_sub_session_id":"111",
"robot_id":1,
"scene_id":10
}'
返回
{
"code": 1000,
"message": "success"
}
查询排队状态
GET /im/queue_status
请求参数
参数名 | 必填 | 说明 |
---|---|---|
customer_token | 是 | 应用端客户唯一标识 |
返回数据
属性名 | 类型 | 说明 |
---|---|---|
code | 整型 | 执行结果码,1000代表成功 |
status | 字符串 | 排队状态, '排队中', '未排队', '会话中', '分配中' |
count | 整型 | 排队位置 |
示例
请求
curl https://demo.udesk.cn/open_api_v1/im/queue_status?email=admin@udesk.cn×tamp=1494474404&sign=6892f1b794071c260e1b1eac15df588fc919c9e86eb742affaa742ad6c03cb52&nonce=2d931510-d99f-494a-8c67-87feb05e1594&sign_version=v2
&customer_token=1234121123123
返回
{
"code": 1000,
"status": "未排队",
"count": 0
}
查询客户状态
用于查看客户是否在会话中,支持 customer_token / web_token / sdk_token 查询客户
GET /im/customer_status
请求参数
参数名 | 必填 | 说明 |
---|---|---|
customer_token | 否 | OpenApi 客户唯一标识 |
web_token | 否 | web 客户唯一标识 |
sdk_token | 否 | sdk 客户唯一标识 |
session_key | 否 | web_token 存在时,支持多会话不同的会话状态 |
注: customer_token/web_token/sdk_token必须存在一个,按顺序取第一个有值参数
返回数据
属性名 | 类型 | 说明 |
---|---|---|
code | 整型 | 执行结果码,1000代表成功 |
status_code | 整型 | 0,1,2,3 |
status | 字符串 | '无会话','会话中','排队中','无效客户' |
示例
请求
curl https://demo.udesk.cn/open_api_v1/im/customer_status?email=admin@udesk.cn×tamp=1494474404&sign=6892f1b794071c260e1b1eac15df588fc919c9e86eb742affaa742ad6c03cb52&nonce=2d931510-d99f-494a-8c67-87feb05e1594&sign_version=v2
&customer_token=1234121123123&session_key=179306259
返回
{
"code": 1000,
"status_code": 0,
"status": "无会话"
}
查询客服状态
查看当前所有客服的在线状态
GET /im/agent_status
请求参数
参数名 | 必填 | 说明 |
---|---|---|
group_id | 否 | 如果只查看某个客服组 |
如果没有指定,则返回全部
返回参数
属性名 | 类型 | 说明 |
---|---|---|
code | 整型 | 执行结果码,1000代表成功,11012指定组不存在 |
agents | 数组 | 返回客服数据,详见客服状态详细 |
客服状态详细
属性名 | 类型 | 说明 |
---|---|---|
id | 整型 | |
name | 字符串 | 客服姓名 |
nick | 字符串 | 客服昵称,用于对客户显示,如果为空,显示客服姓名 |
avatar | 字符串 | 客服头像 |
im_status | 字符串 | 在线状态 online/busy/offline (在线/忙碌/离线) |
im_custom_status | 字符串 | 自定义状态,仅在im_status为busy时有效 |
im_session_num | 整型 | 当前接待人数,仅在im_status为online/busy时有效,可能为0,可能有数,但数字无意义 |
im_max_join_num | 整型 | 客服最大接待人数,仅在im_status为online/busy时有效,可能为0,可能有数,但数字无意义 |
示例
请求
curl https://demo.udesk.cn/open_api_v1/im/agent_status?email=admin@udesk.cn×tamp=1494474404&sign=6892f1b794071c260e1b1eac15df588fc919c9e86eb742affaa742ad6c03cb52&nonce=2d931510-d99f-494a-8c67-87feb05e1594&sign_version=v2
&group_id=37540
返回
{
"code": 1000,
"agents": [
{
"id": 43230,
"name": "张雪松",
"im_nick": "张",
"avatar": "",
"profile": "all",
"im_status": "offline",
"im_custom_status": "",
"im_session_num": 1,
"im_max_join_num": 10
},
{
...
},
...
]
}
放弃排队查询
用于取得放弃排队的用户信息
请求
GET /im/im_queues
参数
参数名 | 必填 | 说明 |
---|---|---|
start_time | 是 | 开始时间 |
end_time | 是 | 结束时间 |
page | 否 | 页码,从1开始,默认为1 |
per_page | 否 | 每页数量,默认30,最大100 |
- 注:用其他工具发送请求时请求头里不能设置Content-Type=application/json,否则会报错
返回数据
属性名 | 类型 | 说明 |
---|---|---|
code | 整型 | 执行结果码,1000代表成功 |
shut_queues | 数组 | 客户列表 |
shut_queues元素的数据结构
属性名 | 类型 | 说明 |
---|---|---|
customer_id | 整型 | id |
customer_name | 字符串 | 用户匿称 |
channel | 字符串 | 渠道, web wechat ios android weibo api mchat |
queue_start_time | 字符串 | 开始排队时间 |
queue_seconds | 字符串 | 排队时间 |
queue_name | 字符串 | 排队队列名 |
current_page | 整型 | 当前页数 |
total_pages | 整型 | 总页面 |
count | 整型 | 当页总数 |
示例
请求
curl https://demo.udesk.cn/open_api_v1/im/im_queues?email=admin@udesk.cn×tamp=1494474404&sign=6892f1b794071c260e1b1eac15df588fc919c9e86eb742affaa742ad6c03cb52&nonce=2d931510-d99f-494a-8c67-87feb05e1594&sign_version=v2
&start_time=2019-02-10&end_time=2019-02-15
返回
{
"code": 1000,
"shut_queues": [
{
"id": 123,
"customer_id": 1234,
"channel": "web",
"queue_start_time": "2022-03-25T15:55:20.000+08:00",
"queue_seconds": 27,
"queue_name": "xxx",
"customer_name": {
"id": 12345,
"email": "123.123.123.123@temp.com",
"signature": null,
"notify": null,
"weibo_name": null,
"weixin_openid": null,
"nick_name": "xxx",
"weibo_id": null,
"company_id": 1,
"created_at": "2022-03-25T15:55:03.000+08:00",
"updated_at": "2022-03-25T15:55:04.000+08:00",
"organization": null,
"cellphone": null,
"telephone": null,
"weixin_id": null,
"authentication_token": null,
"description": "IM用户:ip(123.123.123.123)",
"qq": null,
"platform_id": 4,
"ticket_show_filters": {
"show_user": "true",
"show_assignee": "true",
"show_created_at": "true",
"show_priority": "true",
"show_status": "true",
"show_platform": "true"
},
"wechat_status": "offline",
"custom_fields": {
"SelectField_3999": [
"0"
]
},
"leave_msg_expire_at": null,
"customer_import_record_id": null,
"web_token": "1f85c1b8-61b9-44f3-3468-9f5w164d099f",
"sdk_token": null,
"is_anonym": false,
"owner_id": null,
"ip": "123.123.123.123",
"from": "xxxxx",
"weibo_status": null,
"weibo_leave_msg_expire_at": null,
"deleted": false,
"weixin_api_status": null,
"weixin_appid": null,
"weixin_appsecret": null,
"owner_group_id": null,
"source_channel": "web_im",
"weixin_channel_id": null,
"province": "xx",
"city": "xx",
"phone_service_provider": null,
"isp": "xxx",
"last_contact_at": null,
"first_contact_at": null,
"contact_count": null,
"last_contact_at_via_phone": null,
"first_contact_at_via_phone": null,
"contact_count_via_phone": null,
"last_contact_at_via_im": null,
"first_contact_at_via_im": null,
"contact_count_via_im": null,
"latest_device_info": {
"os": "Win7",
"browser": "Chrome99",
"resolution": "1920*1080"
},
"organization_id": null,
"is_blocked": false,
"generated_channel": null,
"weibo_channel_id": null,
"level": "normal",
"open_api_token": null,
"current_ticket_id": null,
"mchat_openid": null
},
"im_web_plugin_id": 16,
"menu_names": "xxx"
}
],
"meta": {
"current_page": 1,
"total_pages": 1,
"count": 1
}
}
发送 IM 结构化消息
该接口用于通过 IM 向客户发送结构化消息 频率限制 1 次/2 秒
鉴权
签名方法,参看鉴权方法,但是需要注意以下两点:
- Query String 的顺序必须是 im_sub_session_id、customer_id、agent_id、timestamp;
- 将共享秘钥替换为“结构话消息 KEY”,您可以在网站后台【管理中心】->【渠道管理】->【即时通讯】->【结构话消息】中找到。
请求方法
POST /im/sessions/struct_messages
请求参数(Query String)
参数名 | 必填 | 说明 |
---|---|---|
im_sub_session_id | 是 | 会话 id |
customer_id | 是 | 客户 id |
agent_id | 是 | 客服 id |
timestamp | 是 | 时间戳 |
注:通过API创建的客户不能用于这个接口
请求参数(Request Body)
参数名 | 必填 | 类型 | 说明 |
---|---|---|---|
jid_resource | 否 | 字符串 | SDK 渠道来源 |
data | 是 | 对象 | 结构话消息 |
data
参数名 | 必填 | 类型 | 说明 |
---|---|---|---|
title | 是 | 字符串 | 标题 |
description | 是 | 字符串 | 描述 |
img_url | 是 | 字符串 | 显示图片的链接 |
buttons | 是 | 数组 | 按钮列表 |
buttons 元素的结构
参数名 | 必填 | 类型 | 说明 |
---|---|---|---|
type | 是 | 字符串 | 按钮类型 |
text | 是 | 字符串 | 按钮标题 |
value | 是 | 字符串 | 按钮值 |
callback_name | 否 | 字符串 | 回调名称,仅在 type 为 sdk_callback 时有效 |
type 的取值范围
取值 | 含义 |
---|---|
link | 链接按钮 |
phone | 电话按钮 |
sdk_callback | 回调按钮(仅 SDK 支持) |
返回数据
属性名 | 类型 | 说明 |
---|---|---|
status | 整型 | 执行结果码,1000 代表成功 |
message | 字符串 | 执行结果说明 |
示例
curl https://demo.udesk.cn/open_api_v1/im/sessions/struct_messages?im_sub_session_id=1&customer_id=1&agent_id=1×tamp=1494814031&sign=129da7df812jdfsa9912jfdadf81 \
-X POST \
-H 'content-type: application/json' \
-d '
{
"data": {
"title": "测试API发送结构化消息",
"description": "该消息来自API",
"img_url": "https://www.udesk.cn/images/index/banner01.jpg",
"buttons": [
{
"type": "link",
"text": "访问",
"value": "https://www.udesk.cn"
},
{
"type": "phone",
"text": "拨打电话",
"value": "010-12345678"
},
{
"type": "sdk_callback",
"callback_name": "sdk_callback",
"text": "回调按钮",
"value": "v1"
}
]
}
}'
返回
{
"status": 1000,
"message": "发送成功"
}
H5离线推送
客户在app 中嵌入我方 H5 IM页面的时候,在客户切到其它页面或是退出app时,需要把离线消息推送给客户
该接口用于通过 IM 向客户发送结构化消息。 仅当开启并配置了H5url生效,H5_PUSH_URL为客户自定义,且需要保障公网可访问
请求方法
POST {H5_PUSH_URL}
请求参数(Request Body)
参数名 | 必填 | 说明 |
---|---|---|
web_token | 是 | 客户唯一标识 |
customer_token | 是 | 客户唯一标识 |
session_key | 否 | 会话标记,客户唯一标识+会话标记唯一代表一个客户 |
messages | 是 | 消息体,数组结构 |
message | 是 | 消息 |
messages 每个元素的结构
参数名 | 必填 | 类型 | 说明 |
---|---|---|---|
message_created_at | 是 | 字符串 | 消息发送时间 |
agent_avatar | 否 | 字符串 | 客服头像,一般为图片的链接 |
im_web_plugin_id | 是 | 字符串 | 网页插件ID |
agent_id | 是 | 字符串 | 客服ID |
agent_name | 是 | 字符串 | 客服名称 |
sender | 是 | 字符串 | 消息发送方 agent客服 customer客户 system系统 |
message_id | 是 | 字符串 | 消息唯一标识 |
im_sub_session_id | 是 | 字符串 | 会话ID,会话的唯一标记 |
type | 是 | 字符串 | 消息类型 create创建会话 close关闭会话 off_push离线消息 |
data | 是 | object | 消息数据 |
data
参数名 | 必填 | 类型 | 说明 |
---|---|---|---|
content | 是 | 字符串 | 消息内容 |
msg_close | 否 | boolean | 消息是否关闭 |
message
参数名 | 必填 | 类型 | 说明 |
---|---|---|---|
message_created_at | 是 | 字符串 | 消息发送时间 |
agent_avatar | 否 | 字符串 | 客服头像,一般为图片的链接 |
im_web_plugin_id | 是 | 字符串 | 网页插件ID |
agent_id | 是 | 字符串 | 客服ID |
agent_name | 是 | 字符串 | 客服名称 |
sender | 是 | 字符串 | 消息发送方 agent客服 customer客户 system系统 |
message_id | 是 | 字符串 | 消息唯一标识 |
im_sub_session_id | 是 | 字符串 | 会话ID,会话的唯一标记 |
type | 是 | 字符串 | 消息类型 create创建会话 close关闭会话 off_push离线消息 |
content | 是 | object | 消息的内容,包含富文本等信息 |
content
参数名 | 必填 | 类型 | 说明 |
---|---|---|---|
type | 否 | 字符串 | 消息类型, message文本消息 image video file等 |
font | 否 | 字符串 | 字体 |
platform | 否 | 字符串 | 平台,web、wechat、weixin、weixin_mini、qywx、facebook、line、what_app、tiktok、rpa、feishu等,后续逐步新增 |
version | number | 字符串 | 版本号 |
seq_num | 否 | 字符串 | 序号 |
auto | 否 | boolean | true、false,是否自动发送的消息 |
data | 是 | object | 消息数据 |
返回数据,取决于H5_PUSH_URL 提供方,Udesk不做限制
属性名 | 类型 | 说明 |
---|---|---|
示例
curl {H5_PUSH_URL} \
-X POST \
-H 'content-type: application/json' \
-d '
{
"web_token": "6acbf1ea60ee2635b30eae579b5a7bed",
"customer_token": "6acbf1ea60ee2635b30eae579b5a7bed",
"messages": [
{
"message_created_at": "2023-11-28 19:46:21",
"im_web_plugin_id": 119681,
"agent_id": 1601824,
"agent_name": "兜小炜",
"data": {
"content": "愿平安顺遂!期待下次与您相遇~",
"msg_close": true
},
"sender": "system",
"message_id": "udesk_12551701171980650",
"im_sub_session_id": 4594173144,
"type": "off_push"
}
],
"message": {
"message_created_at": "2023-11-28 19:46:21",
"im_web_plugin_id": 119681,
"agent_id": 1601824,
"agent_name": "兜小炜",
"sender": "system",
"message_id": "udesk_12551701171980650",
"im_sub_session_id": 4523173134,
"type": "off_push",
"content": {
"type": "message",
"font": "",
"data": {
"content": "愿平安顺遂!期待下次与您相遇~",
"msg_close": true
},
"platform": "web",
"version": 1,
"seq_num": "",
"auto": true
}
}
}'
返回
{
"xxx": "xxx"
}
自定义 IM 结构化消息列表页面
自定义 IM 结构化消息列表页面,是一个由 ️ 您提供的 HTML 页面,其中包含了常用的结构化消息,以便于客服在 Udesk IM 操作台快速选择并发送给客户。
要使用自定义 IM 结构化消息列表页面,需要以下两步:
- 首先需要您编写一个 HTML 页面,并提供该页面的公网地址;
- 在 Udesk 【管理中心】-【结构化消息】中设置好“嵌入链接”。
编写 HTML 页面
Udesk 会在客服需要选择结构化消息时,将您提供的 HTML 页面以 iframe 的方式展现给客服,并将以下参数以 Query String 的方式传递给您的 HTML 页面:
参数名 | 说明 |
---|---|
im_sub_session_id | 会话 id |
customer_id | 客户 id |
agent_id | 客服 id |
jid_resource | SDK 来源 |
timestamp | 时间戳 |
此外,按照鉴权方法计算出的签名,也会作为 sign 参数一起传递。
计算签名时,与鉴权方法稍有不同,与发送 IM 结构化消息接口一致。 您在收到请求后,最好先校验 sign 值是否合法,再决定是否返回 HTML 页面。
同时,在 HTML 页面中,您可以用以上参数调用发送 IM 结构化消息接口,以完成结构化消息的发送。
设置
- 使用管理员登录 Udesk 系统;
- 打开【管理中心】-【渠道管理】-【即时通讯】-【结构化消息】;
- 将“嵌入链接”设置为您提供的 HTML 页面的公网地址。
示例
假设在【管理中心】中的设置如下:
- 嵌入链接:
https://www.demo.com/struct_messages
- KEY:
708ff6dc-41d5-4med-9ebc-0388zz9d76f1
当客服在 IM 工作台聊天界面点击“结构化消息”列表图标时,Udesk 会展示包含类似以下地址的 iframe 页面:
https://www.demo.com/struct_message?im_sub_session_id=1&customer_id=1&agent_id=1&jid_resource=12dsafdaslj129das-12fds912-12dsa×tamp=1484272693&sign=4666293b3dfe91aa97179dc701be7afc
注意,其中的 sign 的计算方法为:
md5("im_sub_session_id=1&customer_id=1&agent_id=1×tamp=1484272693&708ff6dc-41d5-4med-9ebc-0388zz9d76f1")
#=> 4666293b3dfe91aa97179dc701be7afc
FAQ
我们想使用这个API接口,需要什么条件?
此API接口是高级接口,需要开发量较大,要求较高.必须符合以下条件:
- 必须自建即时通讯平台.
- Udesk只负责推送给您的服务器,不负责推送给您的客户.
- 您必须已经拥有即时通讯平台或有自建即时通讯平台的能力,或是使用第三方平台
- 如果您的客户都是 微信/微博 平台,可以认为已经拥有即时通讯平台
- 有很强的后台开发能力,需要进行如下工作
- 维护客户信息,并把用户创建/更新到Udesk平台
- 维护客户的会话
- 维护对话内容,把客服回复客户的对话推送给客户
- [可选] 维护满意度显示及结果
推送到我们指定服务器地址的请求是什么格式的 ?
POST请求,JSON格式.
我请求会话后返回客户不存在?
请求会话前需要请求创 建客户,详见
我们的服务器收不到客服回复的消息,怎么确认Udesk是否推送过来?
建议
- 用nginx/apache 做前置,这样不管后端应用是不是处理正确,都能在前端 上看到日志是否收到请求
- 应用服务器先只把收到的请求 body 打印到日志看下是不是到收请求,再进行业务逻辑开发
为什么回复消息什么时候会返回多条消息?
- 当一些事件和消息有强顺序绑定,如开始会话事件和欢迎语消息.