72 lines
21 KiB
Markdown
72 lines
21 KiB
Markdown
# 客服与知识库
|
||
|
||
阅读本文件处理客服会话、客服消息、客服 AI、知识库、飞书配置、客服微号列表等操作。
|
||
|
||
## 客服接口
|
||
|
||
| 目标 | 接口 | 请求字段 | 常用返回字段 |
|
||
| --- | --- | --- | --- |
|
||
| 客服消息-发送 | `POST /api/customer/msg/send` | `chatType`(string, 必填,群group 好友 friend);`sender`(int64, 必填,接收者id);`botId`(int64, 必填,机器人Id);`botType`(int32, 必填,机器人类型);`msgType`(string, 必填,消息类型);`text`(MessageText, 可选,文本消息);`image`(MessageImage, 可选,图片消息);`sticker`(MessageSticker, 可选,表情消息);`video`(MessageVideo, 可选,视频消息);`audio`(MessageAudio, 可选,音频);`file`(MessageFile, 可选,文件);`compositeImage`(MessageCompositeImage, 可选,合成图消息);`miniProgram`(MessageMiniProgram, 可选,小程序消息);`link`(MessageLink, 可选,链接消息);`inviteGroup`(MessageInviteGroup, 可选,入群邀请 inviteGroup);`freeVideo`(MessageFreeVideo, 可选,视频号 freeVideo);`group`(MessageGroup, 可选,群号);`liveBroadcastRoom`(MessageLiveBroadcastRoom, 可选,直播间消息);`dialogue`(Dialogue, 可选,话术库id);`materialGroup`(repeated MaterialGroup, 可选,素材组);... 另有 5 个字段 | `message`(MessageItem,消息);`time`(int64,发送时间);`sender`(string,发送者的wxid, 有可能是botwxid,有可能是好友的wxid);`senderBot`(bool,是否是机器人);`senderAvatar`(string,发送者头像);`name`(string,昵称);`status`(string,状态);`failReason`(string,原因);`msgId`(string,消息id);`wxMsgId`(string,微信的msgId);... |
|
||
| 消息撤回 | `POST /api/customer/msg/retract` | `chatType`(string, 必填,群group 好友 friend);`sender`(int64, 必填,接收者id);`botId`(int64, 必填,机器人Id);`botType`(int32, 必填,机器人类型);`msgId`(string, 必填,微信官方的msgID) | 空对象或无业务数据 |
|
||
| 发送话术库 | `POST /api/customer/msg/send/dialogue` | `chatType`(string, 必填,群group 好友 friend);`sender`(int64, 必填,接收者id);`botId`(int64, 必填,机器人Id);`botType`(int32, 必填,机器人类型);`msgType`(string, 必填,消息类型);`text`(MessageText, 可选,文本消息);`image`(MessageImage, 可选,图片消息);`sticker`(MessageSticker, 可选,表情消息);`video`(MessageVideo, 可选,视频消息);`audio`(MessageAudio, 可选,音频);`file`(MessageFile, 可选,文件);`compositeImage`(MessageCompositeImage, 可选,合成图消息);`miniProgram`(MessageMiniProgram, 可选,小程序消息);`link`(MessageLink, 可选,链接消息);`inviteGroup`(MessageInviteGroup, 可选,入群邀请 inviteGroup);`freeVideo`(MessageFreeVideo, 可选,视频号 freeVideo);`group`(MessageGroup, 可选,群号);`liveBroadcastRoom`(MessageLiveBroadcastRoom, 可选,直播间消息);`dialogue`(Dialogue, 可选,话术库id);`materialGroup`(repeated MaterialGroup, 可选,素材组);... 另有 5 个字段 | `list`(repeated MsgRecordItem,消息) |
|
||
| 消息转发 | `POST /api/customer/msg/forward` | `chatType`(string, 必填,群group 好友 friend);`sender`(int64, 必填,接收者id);`botId`(int64, 必填,机器人Id);`botType`(int32, 必填,机器人类型);`message`(MessageItem, 必填,消息) | `message`(MessageItem,消息);`time`(int64,发送时间);`sender`(string,发送者的wxid, 有可能是botwxid,有可能是好友的wxid);`senderBot`(bool,是否是机器人);`senderAvatar`(string,发送者头像);`name`(string,昵称);`status`(string,状态);`failReason`(string,原因);`msgId`(string,消息id);`wxMsgId`(string,微信的msgId);... |
|
||
| 客服会话-所有的消息对象 | `POST /api/customer/list` | `targetType`(string, 必填,不传默认都有:群group 好友 friend);`botId`(int64, 可选,可不传,用作筛选:机器人Id);`name`(string, 可选,可不传,用作筛选:名称);`msgType`(int64, 必填,0所有 1 已接待已读 2 接待中已读 3 接待中未读 4已接待 5接待中);`offset`(int64, 可选,上一次最后一条的开始时间);`start`(int64, 可选,从第几条开始);`limit`(int64, 可选,不传默认1万条,一次多少条);`customerUserId`(int64, 可选,客服账号id,只有主账号请求有效);`isCollect`(bool, 可选,true 筛选出收藏的客户);`tag`(repeated int64, 可选,标签);`qwTag`(repeated string, 可选,企微标签 第一个主体 后面接标签值) | `list`(repeated MsgItem);`offset`(int64,最后一条消息的时间戳);`last`(bool,是否已结束);`total`(int64,总数) |
|
||
| 客服会话-所有的消息对象中进行搜索 | `POST /api/customer/list/search` | `targetType`(string, 必填,不传默认都有:群group 好友 friend);`targetId`(int64, 可选,可不传,用作筛选:群groupID 好友 friendId);`botId`(int64, 可选,可不传,用作筛选:机器人Id);`name`(string, 可选,可不传,用作筛选:名称);`msgType`(int64, 必填,0所有 1 已接待已读 2 接待中已读 3 接待中未读 4已接待 5接待中);`start`(int64, 必填,从第几条开始);`limit`(int64, 必填,不传默认1万条,一次多少条);`customerUserId`(int64, 可选,客服账号id,只有主账号请求有效);`tag`(repeated int64, 可选,标签);`qwTag`(repeated string, 可选,企微标签 第一个主体 后面接标签值) | `list`(repeated MsgSearchItem);`offset`(int64,最后一条消息的时间戳);`last`(bool,是否已结束);`total`(int64,总数) |
|
||
| 客服会话-某个消息对象的聊天记录 | `POST /api/customer/record/list` | `startTime`(int64, 必填,开始时间);`endTime`(int64, 必填,结束时间);`offset`(int64, 必填,上一次最后一条的开始时间);`limit`(int64, 必填,一次多少条);`nextId`(int64, 必填,下一个id);`ids`(string, 必填,botId_friendId_groupId) | `list`(repeated MsgRecordItem,记录列表);`offset`(int64,最后一条消息的时间戳);`last`(bool,是否已结束);`total`(int64,总数);`nextId`(int64,下一个id) |
|
||
| 客服会话-获取聊天界面的群或者客户的最新一条数据 | `POST /api/customer/latest` | `customerUserId`(int64, 可选,客服账号id,只有主账号请求有效);`idList`(repeated string, 必填,[]botId_friendId_groupId) | `list`(repeated MsgLatestReplyItem) |
|
||
| 客服会话-改变同一条聊天记录的接待状态 | `POST /api/customer/msg/change` | `msgType`(int64, 必填,1 已接待已读 2 接待中已读 3 接待中未读 4已接待 5接待中);`ids`(string, 必填,botId_friendId_groupId) | `msgType`(int64,改变后的状态 1 已接待已读 2 接待中已读 3 接待中未读 4已接待 5接待中) |
|
||
| 客服会话-标记这条消息已读 | `POST /api/customer/msg/read` | `sendTime`(int64, 可选,发送时间);`ids`(string, 必填,botId_friendId_groupId) | 空对象或无业务数据 |
|
||
| 根据senderInfo获取 | `POST /api/customer/sender/info` | `senders`(repeated string, 必填,格式为: sender-bot 或者 sender-friend 或者 sender-group) | `senderList`(repeated SenderInfo,发送者的info) |
|
||
| 客服会话-根据cdn参数下载资源 | `POST /api/customer/download` | `cdnType`(int32, 必填,c2c 2 微信:);`qwCdn`(QwCdn, 可选);`msgType`(string, 可选);`botId`(int64, 可选);`traceId`(string, 可选,聊天记录的traceId);`chatType`(string, 可选,聊天类型) | `link`(string) |
|
||
| 客服会话-客服转接 | `POST /api/customer/switch` | `userId`(int64, 必填,转接给哪一个用户的用户id);`ids`(repeated string, 必填,转接的对象;botId_friendId_groupId) | `fail`(string);`failList`(repeated string) |
|
||
| 客服配置-添加关键词过滤,客户过滤,接收群设置 | `POST /api/customer/config/add` | `userId`(int64, 必填,子账号);`groupRange`(repeated int64, 可选,监听退群进群事件的群范围);`friendFilter`(repeated int64, 可选,需要过滤的客户);`friendRange`(repeated int64, 可选,只接收的客户);`keyWordRule`(repeated keyWordRuleItem, 可选,关键词规则:eg:[{"content":"文本","type":"eq"}]);`tagRange`(repeated string, 可选,只接收拥有这个标签的客户);`allocationUpperLimit`(int64, 可选,接待上限);`isRealRead`(bool, 可选,是否点到企微的未读);`config`(google.protobuf.Value, 可选,个人配置);`filters`(repeated Filter, 可选,条件筛选);`receivedAutoDel`(receiveAutoDelItem, 可选,已接待自动延时或者立即删除);`receiveGroupRange`(map<int64, int64>, 可选,设置客服接待的客户群,以及指定客户群的监听的微号);`receptionTimeRange`(repeated ReceptionTimeRangeItem, 可选,上班时间范围);`defaultReplyList`(repeated DefaultReply, 可选,默认回复) | 空对象或无业务数据 |
|
||
| 客服配置-主账号获取子账号自身的配置 | `POST /api/customer/config/get` | `userId`(int64, 可选) | `id`(int64,id);`accountId`(int64,主账号id);`userId`(int64,子账号id);`groupRange`(repeated int64,可见群);`friendFilter`(repeated int64,需要过滤的客户);`friendRange`(repeated int64,只接收的客户);`keyWordRule`(repeated keyWordRuleItem,关键词规则:eg:[{"content":"文本","type":"eq"}]);`tagRange`(repeated string,只接收拥有这个标签的客户);`allocationUpperLimit`(int64,接待上限);`username`(string,账号);... |
|
||
| 客服配置-子账号获取自身的配置 | `POST /api/customer/config/getByUserId` | `{}` | `id`(int64,id);`accountId`(int64,主账号id);`userId`(int64,子账号id);`groupRange`(repeated int64,可见群);`friendFilter`(repeated int64,需要过滤的客户);`friendRange`(repeated int64,只接收的客户);`keyWordRule`(repeated keyWordRuleItem,关键词规则:eg:[{"content":"文本","type":"eq"}]);`tagRange`(repeated string,只接收拥有这个标签的客户);`allocationUpperLimit`(int64,接待上限);`username`(string,账号);... |
|
||
| 客服配置-子账号设置自己的个人设置 | `POST /api/customer/config/user/set` | `config`(google.protobuf.Value, 可选,个人配置);`isRealRead`(bool, 可选,是否点到企微的未读) | 空对象或无业务数据 |
|
||
| 客服配置-根据id删除相关配置 | `POST /api/customer/config/del` | `id`(int64, 可选) | 空对象或无业务数据 |
|
||
| 客服配置-对客服配置进行更新 | `POST /api/customer/config/update` | `id`(int64, 必填,id);`userId`(int64, 必填,子账号);`groupRange`(repeated int64, 可选,可见群);`friendFilter`(repeated int64, 可选,需要过滤的客户);`friendRange`(repeated int64, 可选,只接收的客户);`keyWordRule`(repeated keyWordRuleItem, 可选,关键词规则:eg:[{"content":"文本","type":"eq"}]);`tagRange`(repeated string, 可选,只接收拥有这个标签的客户);`allocationUpperLimit`(int64, 可选,接待上限);`isRealRead`(bool, 可选,是否点到企微的未读);`config`(google.protobuf.Value, 可选,个人配置);`filters`(repeated Filter, 可选,条件筛选);`receivedAutoDel`(receiveAutoDelItem, 可选,已接待自动延时或者立即删除);`receiveGroupRange`(map<int64, int64>, 可选,设置客服接待的客户群,以及指定客户群的监听的微号);`receptionTimeRange`(repeated ReceptionTimeRangeItem, 可选,上班时间范围);`defaultReplyList`(repeated DefaultReply, 可选,默认回复) | 空对象或无业务数据 |
|
||
| 客服配置-获取客服配置列表 | `POST /api/customer/config/list` | `page`(int64, 可选);`pageSize`(int64, 可选) | `list`(repeated CustomerConfigItem);`total`(int64);`last`(bool);`page`(int64);`pageSize`(int64) |
|
||
| 客服配置-批量更新客服分配上限 | `POST /api/customer/config/batch/allocationUpperLimit` | `list`(repeated HttpCustomerBatchUpdateAllocationUpperLimitItem, 可选) | 空对象或无业务数据 |
|
||
| 客服配置-变更客服的状态 | `POST /api/customer/config/update/status` | `userId`(int64, 必填,暂留字段 给主账号使用);`status`(int64, 必填,0 离线 1 在线) | `status`(int64,0 离线 1 在线) |
|
||
| 客服工具栏-获取工具栏列表 | `POST /api/customer/tool/list` | `page`(int64, 可选);`pageSize`(int64, 可选) | `list`(repeated CustomerToolItem);`total`(int64);`last`(bool);`page`(int64);`pageSize`(int64) |
|
||
| 客服工具栏-工具栏列表新增 | `POST /api/customer/tool/add` | `name`(string, 可选);`link`(string, 可选) | `id`(int64) |
|
||
| 客服工具栏-工具栏列表更新 | `POST /api/customer/tool/update` | `id`(int64, 可选,id);`name`(string, 可选,工具栏名称);`link`(string, 可选,工具链接);`switch`(bool, 可选,是否开启);`sortValue`(int64, 可选,排序值,值越大在越前面) | 空对象或无业务数据 |
|
||
| 客服工具栏-工具栏列表排序 | `POST /api/customer/tool/sort` | `list`(repeated ToolItem, 可选) | 空对象或无业务数据 |
|
||
| 客服工具栏-工具栏列表删除 | `POST /api/customer/tool/del` | `id`(int64, 可选) | 空对象或无业务数据 |
|
||
| 客服工具栏-工具栏开关 | `POST /api/customer/tool/switch` | `id`(int64, 可选);`switch`(bool, 可选) | 空对象或无业务数据 |
|
||
| 客服会话-批量删除接待列表中对象 | `POST /api/customer/msg/del` | `idList`(repeated string, 必填,[]botId_friendId_groupId) | 空对象或无业务数据 |
|
||
| 客服会话-语音消息转文字 | `POST /api/customer/msg/voice/convert` | `ids`(string, 必填,botId_friendId_groupId);`msgId`(string, 必填,消息id) | `text`(string) |
|
||
| 客服会话-查看账号下的客服消息 | `POST /api/customer/info` | `userId`(int64, 可选,可以查询某个客服下的情况,userId为0就是未分配的客户) | `userId`(int64,客服账号id);`total`(int64,总数);`receive`(int64,接待中);`received`(int64,已接待);`nickName`(string,客服名称);`avatar`(string,客服头像);`receiveList`(repeated string,接待中对象);`receivedList`(repeated string,已接待对象);`isOnLine`(bool,是否在线) |
|
||
| 客服会话-统计账号下的客服消息 | `POST /api/customer/info/count` | `{}` | `total`(int64,总数);`allocated`(int64,已分配数);`undistributed`(int64,未分配数);`customerList`(repeated CustomerInfoItem,账号下的客服列表) |
|
||
| 客服会话-设置为收藏 | `POST /api/customer/set/collect` | `isCollect`(bool, 可选,是否收藏);`ids`(string, 必填,botId_friendId_groupId) | 空对象或无业务数据 |
|
||
| 客服会话-客服系统未分配的详情 | `POST /api/customer/info/count/unDistributed` | `{}` | `list`(repeated CustomerUnDistributedItem) |
|
||
| 客服会话-主动接待客户 | `POST /api/customer/friend/receive` | `chatType`(string, 可选,群group 好友 friend);`friendId`(int64, 可选,客户id);`groupId`(int64, 可选,群id);`botId`(int64, 可选,机器人的id);`userId`(int64, 可选,客服id);`isForced`(bool, 可选,是否强制接待 默认为是) | 空对象或无业务数据 |
|
||
| 客服统计-按时间范围查询 | `POST /api/customer/info/statistics` | `startTime`(int64, 可选);`endTime`(int64, 可选) | `list`(repeated StatisticsDataItem) |
|
||
| 客服统计-主动调用统计接口 | `POST /api/customer/info/statisticsByDate` | `dateTime`(int64, 可选) | 空对象或无业务数据 |
|
||
| 账号配置-列表 | `POST /api/customer/config/group/info` | `{}` | `id`(int64,id);`botList`(CustomerConfigGroupBotItem,过滤的微号);`friendList`(repeated int64,需要过滤的客户);`corpList`(repeated string,需要过滤的主体);`whiteListGroup`(repeated int64,白名单群Id);`keyWordRule`(repeated keyWordRuleItem,关键词规则:eg:[{"content":"文本","type":"eq"}]);`groupMemberList`(repeated int64,需要过滤的群成员ids);`friendAndGroupWxids`(repeated string,需要过滤的客户和群成员wxids);`linkFilter`(repeated LinkFilterItem,链接过滤);`miniProgramFilter`(repeated MiniProgramFilterItem,小程序过滤);... |
|
||
| 账号配置-分页加载过滤客户 | `POST /api/customer/config/group/filterFriend` | `page`(int64, 可选);`pageSize`(int64, 可选);`botType`(int32, 可选);`name`(string, 可选) | `friendList`(repeated string,需要过滤的客户);`total`(int64);`last`(bool);`page`(int64);`pageSize`(int64) |
|
||
| 账号配置-设置过滤的企微号 | `POST /api/customer/config/group/add/bot` | `botIds`(repeated int64, 必填,需要过滤的企微id) | 空对象或无业务数据 |
|
||
| 账号配置-设置过滤的客户 | `POST /api/customer/config/group/add/friend` | `friendIds`(repeated int64, 必填,需要过滤的客户id);`friendAndGroupMemberWxids`(repeated string, 必填,需要过滤的客户或者群成员的wxid);`wxFriendAndGroupMemberWxids`(repeated string, 必填,个微-需要过滤的客户或者群成员的wxid) | 空对象或无业务数据 |
|
||
| 账号配置-移除过滤的客户 | `POST /api/customer/config/group/del/friend` | `friendIds`(repeated int64, 必填,需要过滤的客户id);`friendAndGroupMemberWxids`(repeated string, 必填,需要过滤的客户或者群成员的wxid);`wxFriendAndGroupMemberWxids`(repeated string, 必填,个微-需要过滤的客户或者群成员的wxid) | 空对象或无业务数据 |
|
||
| 账号配置-设置放行的企微客户 | `POST /api/customer/config/group/release/qwFriend` | `qwFriendWxids`(repeated string, 必填,需要放行的企微);`isDel`(bool, 必填,是否删除) | 空对象或无业务数据 |
|
||
| 账号配置-更新 | `POST /api/customer/config/group/update` | `id`(int64, 可选,id);`botList`(CustomerConfigGroupBotItem, 可选,过滤的微号);`friendList`(repeated int64, 可选,需要过滤的客户);`corpList`(repeated string, 可选,需要过滤的主体);`keyWordRule`(repeated keyWordRuleItem, 可选,关键词规则:eg:[{"content":"文本","type":"eq"}]);`groupMemberList`(repeated int64, 可选,需要过滤的群成员ids);`friendAndGroupWxids`(repeated string, 可选,需要过滤的客户和群成员wxids);`linkFilter`(repeated LinkFilterItem, 可选,链接过滤);`miniProgramFilter`(repeated MiniProgramFilterItem, 可选,小程序过滤);`freeVideoFilter`(repeated FreeVideoFilterItem, 可选,视频号过滤);`wxFriendAndGroupWxids`(repeated string, 可选,个微需要过滤的客户和群成员wxids);`allocation`(string, 可选,分配模式 auto 自动 manual 手动);`qwFriendWxids`(repeated string, 必填,需要放行的企微) | 空对象或无业务数据 |
|
||
| 客服配置-批量设置工作时间和默认回复 | `POST /api/customer/config/defaultReply/batch` | `userIds`(repeated int64, 必填,userIds);`receptionTimeRange`(repeated ReceptionTimeRangeItem, 可选,上班时间范围);`defaultReplyList`(repeated DefaultReply, 可选,默认回复) | 空对象或无业务数据 |
|
||
| 客服-重新分配接待池 | `POST /api/customer/reallocate` | `userIds`(repeated int64, 必填,按子账号重新分配);`botIds`(repeated int64, 必填,指定微号的客户重新分配) | 空对象或无业务数据 |
|
||
| 客服-ai回复 | `POST /api/customer/ai/reply` | `ids`(string, 必填,botId_friendId_groupId) | `content`(string,回复) |
|
||
| 微号列表 | `POST /api/bot/list`(实测返回 404,查微号请改用 `POST /api/account/bot/list`) | `botType`(int32, 必填,微号类型 1 个微 2 企微);`status`(int64, 可选,在线状态 在线状态 0未接入 1 离线 2 过期 3 在线);`keyword`(string, 可选,搜索的微号名字);`accountId`(int64, 必填,账号id) | `list`(repeated BotInfo,列表) |
|
||
| 海豚私域客服,用于回复海豚私域产品。 海豚私域是一款完善且高效的私域流量管理运营产品,帮助客户更加高效地管理私域客户。是企业微信在私域方面的补充。 | `POST /api/aiReply` | `query`(string, 必填,问题) | `answer`(string,回答) |
|
||
|
||
|
||
## 常用示例
|
||
|
||
> 注意:上方“微号列表 `POST /api/bot/list`”实测返回 404,查微号请改用席位管理 `POST /api/account/bot/list`。
|
||
|
||
```bash
|
||
# 客服会话列表(msgType: 0所有 1已接待已读 2接待中已读 3接待中未读 4已接待 5接待中)
|
||
htsy-cli call /api/customer/list -d '{"msgType":0}'
|
||
# 客服某个会话的聊天记录(ids 格式:botId_friendId_groupId)
|
||
htsy-cli call /api/customer/record/list -d '{"startTime":1,"endTime":9999999999999,"offset":0,"limit":20,"nextId":0,"ids":"1_2_3"}'
|
||
# 微号列表(席位管理;botType: 1 个微 2 企微;sort: 0默认 1过期升序 2过期降序)
|
||
htsy-cli call /api/account/bot/list -d '{"page":1,"pageSize":20,"botType":2,"sort":0}'
|
||
```
|