Create Done Command
Once you have picked the ticket, a private channel will be created between you (agent) and the user. And you will be able to freely exchange conversations with the user within the private channel.
Upon the completion of a conversation, you could end the live chat ticket from the agent side by simply typing a done command in the private channel.
Please set up this command in the Slack Command Tree you've created in 2.1.
What is your Result?
- Please remember to connect your Slack Channel on Stella before testing for the result.
Sample Tree Structure - Done Command
Getting Hands-on
Create a Tree Node - Done Command
Create a tree node and name it as "Done Command".
In the following section, you will create 3 actions. Please follow the steps of the procedure and put these actions under pre-action of this node with the exact ordering
Create the 1st action for updating the ticket status to done with the following code:
return new Promise(async (resolve, reject) => {
const group = await this.getGroupByExternalId({
adminExternalId: this.messageEvent.from,
groupId: this.messageEvent.to,
type: this.channel.type,
channelId: this.channel._id,
})
this.member.groupObj = group
let assignments = []
const assignment = await this.getAssignment({
assignmentId: group.assignment
})
assignments = [assignment]
if (assignment.parentAssignment) {
const parentAssignment = await this.getAssignment({
assignmentId: assignment.parentAssignment
})
const allAssignments = await this.getAssignmentsByParentAssignmentId({
assignmentId: assignment.parentAssignment
})
assignments = [...allAssignments, parentAssignment]
}
let promises = []
let name
if (this.member.name) {
name = this.member.name
} else if (this.member.firstName && this.member.lastName) {
name = `${this.member.firstName} ${this.member.lastName}`
} else if (this.member.firstName) {
name = this.member.firstName
}
let doneMessage = "Done"
if (name) {
doneMessage = `Done by ${name}`
}
console.log("assignments", assignments)
assignments.forEach((obj) => {
console.log("obj.targets", obj.targets)
const target = this.lodash.find(obj.targets, { channel: this.channel._id })
console.log("target", JSON.stringify(target, null, 2))
const updateMessages = this.lodash.map(target.broadcastGroups, (broadcastGroup) => {
return this.updateMessage({
messageTs: broadcastGroup.messageTs,
text: this.lodash.get(obj, "relayMessage.slack.text", "Done"),
attachments: JSON.stringify([
{
text: doneMessage,
fallback: doneMessage,
color: "#36a64f"
}
]),
channel: this.channel,
externalChannelId: broadcastGroup.id
})
})
promises = [...promises, ...updateMessages]
})
await Promise.all(promises)
resolve({
member: this.member
})
})
- Create the 2nd pre-action for sending the end live chat message to inlet with the following code (you may customize your message wiithin the "text" in "let response"):
return new Promise(async (resolve) => {
const member = await this.getMember({ memberId: this.member.groupObj.member })
let response = {
type: "TEXT",
text: "Thank you for your enquiry! We will close the conversation now, you are welcome to contact us again anytime. Bye!"
}
await this.sendMessageToInlet({
messageEvent: this.messageEvent,
channel: this.channel,
response,
})
resolve()
})
- Create the 3rd pre-action to end the live chat with the following code:
return this.endLiveChat({
messageEvent: this.messageEvent,
channel: this.channel
})
- Create 2 responses under Advanced > Response Object with the following code:
The first response:
{
"type": "TEXT",
"text": "Your DONE command has successfully sent. Thanks!"
}
The second response (this will only be activated once you have completed step 2.4):
{
"type": "BUTTON",
"buttons": [
{
"type": "postback",
"payload": "ARCHIVE",
"title": "Archive Now"
}
],
"text": "Do you want to archive this channel now?"
}
Create a Global Node - Done Command Global
- Create a global node and then create a trigger with two conditions (for details on creating conditions, please click here) with the and operator:
First condition - at bot:
new RegExp(`<@${this.channel.info.botId}`).test(this.messageEvent.data.text)
Second condition - command done:
new RegExp("done", "i").test(this.messageEvent.data.text)
- Toggle Redirect to the tree node you have created for done command.
- Check and see if you can produce the expected outcome.