交互流程

交互图

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&timestamp=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&timestamp=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&timestamp=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&timestamp=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&timestamp=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&timestamp=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&timestamp=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&timestamp=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&timestamp=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&timestamp=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&timestamp=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&timestamp=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&timestamp=1646817998&sign=7ab7fb49d9c32ea246504b3af75a9w65210bca87&nonce=1646827998&agent_ids[]=13


发送客户消息已读状态

请求方法

发送客户消息已读状态

POST {接收消息URL}

接收消息URL,请在管理员->设置->渠道管理->接口消息 中设置

请求参数

参数名 类型 必填 说明
session_id 整型 会话ID
message_ids 字符串数组 消息id列表

返回数据

返回 HTTP 状态码 200, 响应体为空即可。

注意:


回复消息通知

请求方法

客服推送消息给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, 响应体为空即可。

注意:


消息内容格式

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&timestamp=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表示未解决)

返回数据

属性名 类型 说明
code 整型 执行结果码,1000代表成功

示例

请求

curl https://demo.udesk.cn/open_api_v1/im/sessions/robot_survey?email=admin@udesk.cn&timestamp=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&timestamp=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&timestamp=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&timestamp=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&timestamp=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&timestamp=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&timestamp=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&timestamp=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&timestamp=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

返回数据

属性名 类型 说明
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&timestamp=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 秒

鉴权

签名方法,参看鉴权方法,但是需要注意以下两点:

请求方法

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&timestamp=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 结构化消息列表页面,需要以下两步:

  1. 首先需要您编写一个 HTMl 页面,并提供该页面的公网地址;
  2. 在 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 结构化消息接口,以完成结构化消息的发送。

设置

  1. 使用管理员登录 Udesk 系统;
  2. 打开【管理中心】-【渠道管理】-【即时通讯】-【结构化消息】;
  3. 将“嵌入链接”设置为您提供的 HTML 页面的公网地址。

示例

假设在【管理中心】中的设置如下:

当客服在 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&timestamp=1484272693&sign=4666293b3dfe91aa97179dc701be7afc

注意,其中的 sign 的计算方法为:

md5("im_sub_session_id=1&customer_id=1&agent_id=1&timestamp=1484272693&708ff6dc-41d5-4med-9ebc-0388zz9d76f1")
#=> 4666293b3dfe91aa97179dc701be7afc

FAQ

我们想使用这个API接口,需要什么条件?

此API接口是高级接口,需要开发量较大,要求较高.必须符合以下条件:

推送到我们指定服务器地址的请求是什么格式的 ?

POST请求,JSON格式.

我请求会话后返回客户不存在?

请求会话前需要请求创 建客户,详见

我们的服务器收不到客服回复的消息,怎么确认Udesk是否推送过来?

建议

为什么回复消息什么时候会返回多条消息?