Building blocks: conversation and messages
In short: four blocks work on the run’s conversation: ticket.update (Update conversation) assigns, sets the status and marks as important or urgent; ticket.label (Put on a label) puts on a label; ticket.forward (Forward by e-mail) sends the customer’s message to an address outside the organisation; message.send (Message to the customer) writes to the customer in the conversation. All four need a run that is about a conversation.
Where to find this
Account > Workflows, open a workflow, Add step, group Do. Who: from the role Organisation admin.
A Message to the customer step in the workflow editor with the Message field, the How choice (A colleague reads and sends it or Send at once), For, Deadline (minutes) and, for each exit, the If choice.
ticket.update: Update conversation
Updates the run’s conversation the way a colleague does: give it to a colleague or a team, set the status, mark it as important or urgent. Every input is optional; whatever you leave out stays as it is.
Input
| Name | Label | Type | Required | Values and explanation |
|---|---|---|---|---|
assignee |
For | User | no | The user id of the colleague who gets the conversation. Left out: whoever has it keeps it. |
team |
Team | SupportGroup | no | The id of an active team of the conversation’s organisation. The team’s work distribution chooses the colleague, unless assignee names one. |
status |
Status | Choice | no | keep (Leave as it is, default), open (Open), answered (Answered), closed (Closed) |
important |
Important | Choice | no | keep (Leave as it is, default), yes (Yes), no (No) |
urgent |
Urgent | Choice | no | keep (Leave as it is, default), yes (Yes), no (No) |
Exits: none; continues with next.
Output fields
| Field | Label | Content |
|---|---|---|
assignee |
For | The user id of the colleague who now has the conversation. |
status |
Status | The status of the conversation after the step, such as Open or Closed. |
Good to know
- The colleague is set first, then the team: giving a conversation to a person empties the team, so the team comes last.
- With a team that distributes in turn, each run takes the next turn, so two runs never pick the same colleague.
- The step fails if the run is not about a conversation, the conversation no longer exists, the team does not (or no longer) belong to the organisation, or the colleague may not handle the organisation’s conversations.
When to use it: to assign per route, to mark a conversation as answered after a workflow wrote to the customer, or to make it urgent. A message from message.send does not change the status; do that with ticket.update.
ticket.label: Put on a label
Puts a label of the account on the run’s conversation. A label that is already there stays.
Input
| Name | Label | Type | Required | Explanation |
|---|---|---|---|---|
label |
Label | Label | yes | The id of a label of the account, as a number. |
Exits: none; continues with next.
Output fields: label (Label), the name of the label.
The step fails if the run is not about a conversation, the conversation no longer exists or the label no longer exists. Without labels in the account you cannot use this block.
Tip: if you sort with agent.choose, use that step’s input labels: then you sort and label in one step.
ticket.forward: Forward by e-mail
Forwards the customer’s message the run started on to an e-mail address outside the organisation (a supplier, another department), with an optional note above it. It is the same built-in message to an external party that a colleague sees on the ticket.
Input
| Name | Label | Type | Required | Explanation |
|---|---|---|---|---|
to |
To | Text | yes | The e-mail address. Must be a valid address. |
note |
Note | LongText | no | A note above the forwarded message. |
mode |
How | Choice | no | propose (default, A colleague checks and sends it): a colleague checks the address and note, can edit the note and sends it; the step waits. execute (Send at once): it goes out straight away under the name of the organisation. |
assignee |
For | User | no | Only with propose: the colleague who checks and sends it. Left out: everyone. |
deadlineMinutes |
Deadline (minutes) | Number | no | Only with propose: minutes until the proposal expires. 7 days by default, at most 30 days. |
Exits: none; the step continues with next, whatever the colleague decided. The field status says what happened. If the sending itself fails, the step fails (catch that with onError).
Output fields
| Field | Label | Content |
|---|---|---|
to |
To | The address it went to. |
status |
Status | Executed (sent), Rejected (rejected) or Expired (expired). |
note |
Note | The note as it was sent. |
edited |
Edited by a person | true if a colleague edited the note. |
executedBy |
Executed by | Who sent it; empty with execute. |
error |
Error | The error, if there was one. |
actionId |
Action | The id of the proposal. |
Good to know
- The step needs the trigger’s message (
trigger.messageId): start the workflow onmessage.understood(ormessage.received). Otherwise the step fails. - A message to an external party is critical. Leave
modeonproposeuntil the organisation trusts the workflow. - The title of the proposal in To do is the step’s
label. So give the step a clear label.
When to use it: to pass a certain kind of question on to a supplier or department with its own mailbox. If you want to continue based on what the colleague decided, use flow.switch or flow.condition on {{<step>.status}}.
message.send: Message to the customer
Writes the customer a message in the run’s conversation, in the conversation’s own channel, through the same sending queue as a colleague’s reply.
Input
| Name | Label | Type | Required | Explanation |
|---|---|---|---|---|
message |
Message | LongText | yes | The text to the customer, in their language. May contain references, such as {{schrijf.text}}. |
mode |
How | Choice | no | propose (default, A colleague reads and sends it): a colleague reads it, can edit it and sends it; the step waits. execute (Send at once): it goes out straight away under the name of the organisation, with its automatic signature. |
assignee |
For | User | no | Only with propose: the colleague who reads and sends it. Left out: everyone. |
deadlineMinutes |
Deadline (minutes) | Number | no | Only with propose: minutes until the proposal expires. 7 days by default, at most 30 days. |
Exits
| Exit | Label | When |
|---|---|---|
sent |
sent | The message has been sent. |
failed |
failed | Sending did not work: the run is not about a conversation, the message is empty, or the channel does not allow it (with WhatsApp after 24 hours without a message from the customer). |
rejected |
rejected | A colleague rejected the proposal. |
expired |
expired | Nobody handled the proposal before the deadline. |
Output fields
| Field | Label | Content |
|---|---|---|
status |
Status | Executed, Failed, Rejected or Expired. |
message |
Message | The text as it was sent or proposed. |
edited |
Edited by a person | true if a colleague edited the text. |
executedBy |
Executed by | Who sent it; empty with execute. |
error |
Error | The error, if there was one. |
actionId |
Action | The id of the proposal. |
Good to know
- If a colleague sends the proposal, it goes out as their own message, with their signature. With
execute, it goes out under the name of the organisation, so there is never a name under it of someone who did not see it. - A message from the editor in HTML goes out as HTML; plain text goes out as paragraphs.
- A message from a workflow is not a reply: it does not change the status or the waiting of the conversation, never marks it as failed if it fails, does not count as a reply and does not become the preview in the list. If the workflow should mark the conversation as answered, add
ticket.updatewithstatusansweredafterwards. - The title of the proposal in To do is the step’s
label. - If another workflow also answers the same message, the colleague who sends it sees that another workflow already wrote to the customer. You can mark a workflow that deliberately writes next to the reply (such as an acknowledgement) as a workflow that may write next to an answer (see Answering customer messages with workflows).
When to use it: for a fixed or composed message that no agent needs to write: an acknowledgement, a reminder after a wait step, a message with data from a connected system. When not to: for the reply to the customer’s question. Use agent.reply for that.
Good to know
- All four blocks work on the conversation the run is about. A run on
schedule.due, or onrecording.transcribedwithout a ticket, has no conversation:message.sendthen goes viafailed, the other three fail. - Proposals from
ticket.forwardandmessage.sendland in To do and on the ticket. - After a proposal from the same step has been sent unchanged 10 times in a row, aishaa offers Do this itself from now on (see Building blocks of a workflow).
