创建传输命令
您只需输入传输指令即可将真人对话传输到另一个团队。
如果客户提出的问题不在您的专业范围之内,而需要转移到另一个团队跟进,这将特别有用。
请在您于2.1中创建的Slack指令树中设置此指令。
您的结果是什么?
首先,如果客户要求另一个团队来处理此查询,专员就可以输入 @[bot]transfer 以选择要传输到的团队。
其次,专员选择要传输的团队(例如业务团队)并结束原来的实时聊天。
第三,专员传输的渠道接收到刚被传输的票。
传输的渠道收到的刚被传输的票
示例树结构 - 传输指令
Slack指令示例树结构 - 传输指令
动手试试看
创建一个对话点 - 传输指令
- 创建第一个对话点并名命为「Transfer Command」。 然后,您可以自定义传输团队时显示的信息。于前置动作输入以下代码:
return new Promise(async (resolve, reject) => {
try {
let labelArray = [
{
name: "Business Team",
label: "biz"
},
{
name: "Dev Team",
label: "dev"
},
]
const group = await this.getGroupByExternalId({
adminExternalId: this.messageEvent.from,
groupId: this.messageEvent.to,
type: this.channel.type,
channelId: this.channel._id,
})
if (group.active === false) {
resolve()
} else {
let buttons = this.lodash.map(labelArray, (label) => {
return {
type: "postback",
title: label.name,
payload: {
payload: "SELECT_TRANSFER_GROUP",
value: label.label
}
}
})
await this.sendMessageToOutletGroup({
group,
response: {
type: "BUTTON",
text: "Which team would you like to transfer this ticket to?",
buttons,
},
})
resolve()
}
} catch (e) {
reject(e)
}
})
标签阵列是指可以接收传输票证的频道。您可以于「Name」为每个团队更改按钮名称,这些都可以在Broadcast Group中找到。
您亦可以在「response」下的「text」更改文本。
创建对话点 - 选择团队
创建第二个对话点并命名为「Select Group」。
在以下的部分,您会添加3个执行动作。请按照以下步骤进行操作并按照次序将动作放置于前置动作。
添加第一个前置动作并用以下代码将转移对话的信息发送到入口频道:
return new Promise(async (resolve, reject) => {
try {
const group = await this.getGroupByExternalId({
adminExternalId: this.messageEvent.from,
groupId: this.messageEvent.to,
type: this.channel.type,
channelId: this.channel._id,
})
const member = await this.getMember({ memberId: group.member })
let response
if (/zh/g.test(this.lodash.get(member, "locale", ""))) {
response = {
type: "TEXT",
text: "請稍等,我們正安排另一位專員處理您的查詢。"
}
} else {
response = {
type: "TEXT",
text: "Please wait for a moment, our representative will take over your chat soon."
}
}
await this.sendMessageToInlet({
messageEvent: this.messageEvent,
channel: this.channel,
response,
})
console.log("sending message to inlet")
this.member.group = group
this.member.inletMember = member
resolve({
member: this.member
})
} catch (e) {
reject(e)
}
})
您可以于「response」的「text」自定义消息以配合企业语气和方式。
- 添加第二个前置动作并用以下代码创建传输到新团队的票:
return new Promise(async (resolve, reject) => {
try {
const assignment = await this.getAssignment({ assignmentId: this.member.group.assignment })
console.log("assignment", assignment)
let member = this.member.inletMember
let labelArray = [
{
name: "Business Team",
label: "biz"
},
{
name: "Dev Team",
label: "dev"
}
]
let oldLabel = this.lodash.find(labelArray, { label: assignment.label })
if (!oldLabel) {
oldLabel = {
name: "General",
value: "general"
}
}
let newLabel = this.lodash.find(labelArray, { label: this.messageEvent.data.payload.value })
let relayMessage = assignment.relayMessage
let summary = ""
let relayText
if (/zh/g.test(this.lodash.get(member, "locale", ""))) {
relayText = `${this.member.firstName} ${this.member.lastName} has transferred ${member.firstName} ${member.lastName} to ${newLabel.name}\n${this.moment().format("YYYY-MM-DD")}`
summary = `姓名: ${member.firstName} ${member.lastName}\n此查詢由 ${oldLabel.name} 轉移到 ${newLabel.name}\n請按以下連結開啟對話紀錄:`
} else {
summary = `Name: ${member.firstName} ${member.lastName}\nThis ticket is transferred from ${oldLabel.name} to ${newLabel.name}\nPlease view conversation history at:`
relayText = `${this.member.firstName} ${this.member.lastName} has transferred ${member.firstName} ${member.lastName} to ${newLabel.name}\n${this.moment().format("YYYY-MM-DD")}`
}
relayMessage.slack.text = relayText
console.log("reassigning")
await this.reassignAssignment({
messageEvent: this.messageEvent,
channel: this.channel,
label: this.messageEvent.data.payload.value,
relayMessage,
summary,
})
console.log("reassigned message sent")
resolve()
} catch (e) {
reject(e)
}
})
您可以自定义以下消息配合企业语气和方式:
- summary
- relayText
- 您可以根据在Broadcast Group中的设置来编辑标签
- 添加第三个前置动作并用以下代码传送通知给输入传输指令的专员:
return new Promise(async (resolve, reject) => {
try {
console.log("in send transfer successful to group")
console.log("group", this.member.group)
await this.sendMessageToOutletGroup({
group: this.member.group,
responseUrl: this.messageEvent.response_url,
response: {
type: "ATTACHMENT",
text: this.messageEvent.data.originalMessage.text.replace(/\+/g, " "),
attachments: [
{
text: "Transferred",
fallback: "Transferred",
color: "#36a64f"
}
],
replaceOriginal: true
}
})
resolve()
} catch (e) {
reject(e)
}
})
- 最后, 用以下代码于Advanced > Response Object 添加两个响应:
第一個响應:
{
"type": "TEXT",
"text": "Your Transfer command has successfully sent. Thanks!"
}
第二个响应 (在完成步骤2.4后即会触发):
{
"type": "BUTTON",
"buttons": [
{
"type": "postback",
"payload": "ARCHIVE",
"title": "Archive Now"
}
],
"text": "Do you want to archive this channel now?"
}
添加一个通用对话点 - 传输指令
- 添加一个通用对话点并命名为 「Transfer Command Global」,然后使用 「AND」创建一个具有两个条件的触发点(有关创建条件的详细信息,请点击此处):
Slack传输指令触发点
第一个条件 - at bot:
new RegExp(`<@${this.channel.info.botId}`).test(this.messageEvent.data.text)
第二个条件 - regex transfer:
/transfer/i.test(this.messageEvent.data.text)
- 启用重定向并连接到您为传输制作的树对话点。
重定向至传输指令树对话点
添加一个通用对话点 - 选择团队
- 添加一个通用对话点并命名为 「Select Group Global」,然后使用 「AND」创建一个具有两个条件的触发点(有关创建条件的详细信息,请点击此处):
Slack选择团队触发点
第一个条件 - SELECT_TRANSFER_GROUP
this.lodash.get(this.messageEvent, "data.payload.payload") === "SELECT_TRANSFER_GROUP"
第二个条件 - Type Payload
this.messageEvent.type === "PAYLOAD"
- 启用重定向并连接到您为选择团队制作的树对话点。
重定向至选择团队树对话点
- 检查是否可以获得成功结果。