Saltar para o conteúdo principal

Regras de workflow

Automatize os seus processos Helpdesk com regras de workflow personalizaveis. As regras de workflow permitem-lhe atualizar automaticamente atributos de tickets, enviar notificacoes e acionar acoes especificas com base em eventos ou condicoes definidos. Esta funcionalidade ajuda a reduzir o trabalho manual, manter consistencia e acelerar os tempos de resposta.

Apos a instalacao, o Helpdesk MX cria automaticamente a regra de workflow padrao "Auto-change status to Waiting for Customer on agent reply".


Informacao geral​

Informacao geralInformacao geral
  • Rule Name: defina um nome descritivo para a regra. Uma nomenclatura clara ajuda a sua equipa a identificar facilmente o que cada regra faz.
  • Active: ative ou desative a regra. Apenas regras ativas sao executadas quando o seu evento e condicoes sao cumpridos.
  • Event: escolha o evento que aciona a regra.
  • Priority / Sort Order: especifique a ordem de processamento da regra. Numeros mais baixos sao executados primeiro. Isto ajuda a controlar quais regras tem precedencia quando multiplas regras se aplicam ao mesmo evento.
  • Stop Further Rules Processing: para a execucao de regras com prioridade mais baixa uma vez que esta regra tenha sido aplicada. Util quando quer que uma regra especifica assuma o controlo total de um evento.

Eventos​

Os eventos definem quando a regra de workflow e avaliada. Os eventos disponiveis incluem:

  • New Ticket - acionado quando um novo ticket e criado.
  • New Customer Reply - acionado quando um cliente envia uma nova resposta.
  • New Staff Reply - acionado quando um agente publica uma resposta.
  • New Third Party Reply - acionado quando um terceiro envia uma mensagem.
  • Ticket Assigned - acionado quando um ticket e atribuido a um utilizador.
  • Ticket Updated - acionado quando os campos do ticket sao atualizados.
  • Cron Every Hour - acionado pelo sistema a cada hora, permitindo acoes baseadas no tempo.

Condicoes​

As condicoes definem quando uma regra de workflow deve ser executada. Pode usar uma ou multiplas condicoes, combina-las com logica ALL/ANY, e ate criar grupos aninhados para filtragem avancada. Deixe esta seccao vazia para fazer a regra executar em cada ocorrencia do evento.

CondicoesCondicoes

Campos disponiveis​

Pode construir condicoes usando os seguintes campos:

  • Subject - verifica palavras ou frases no assunto do ticket.
  • Customer Email - corresponde ao endereco de email do cliente.
  • Customer Name - compara o nome do cliente.
  • Channel - filtra tickets criados a partir de fontes especificas (por exemplo, email, formulario de contacto, API).
  • Department - corresponde ao departamento atualmente atribuido ao ticket.
  • Department (Before Change) - permite comparacao com o departamento antes de um evento de atualizacao.
  • Folder - verifica a que pasta o ticket pertence atualmente.
  • Folder (Before Change) - verifica a pasta antes da ultima alteracao.
  • Owner - corresponde ao agente atribuido.
  • Owner (Before Change) - compara o proprietario antes de uma atualizacao.
  • Priority - verifica a prioridade atual do ticket.
  • Priority (Before Change) - compara a prioridade antes de ser atualizada.
  • Status - verifica o estado atual do ticket.
  • Status (Before Change) - compara o estado anterior.
  • Last Message - permite verificar o conteudo na ultima mensagem.
  • Last Reply By - define quem respondeu por ultimo (cliente, staff ou terceiro).
  • Hours Since Created - tempo decorrido desde que o ticket foi criado.
  • Hours Since Last Reply - tempo desde que a ultima resposta foi feita.
  • Hours Since Updated - tempo desde que o ticket foi modificado pela ultima vez.

Operadores de condicao​

Cada condicao pode usar um dos seguintes operadores para definir como os valores sao comparados:

  • Equals - aciona quando o valor do campo corresponde exatamente ao valor especificado.
  • Not Equals - aciona quando o valor do campo difere do valor especificado.
  • Greater Than - aciona quando o valor e maior que o especificado (principalmente usado com campos numericos ou de tempo).
  • Greater Than or Equals - aciona quando o valor e maior ou igual ao especificado.
  • Less Than - aciona quando o valor e menor que o especificado.
  • Less Than or Equals - aciona quando o valor e menor ou igual ao especificado.
  • Between - aciona quando o valor esta entre dois numeros especificados (util para condicoes baseadas no tempo).
  • Matches Regex - compara valores de campo usando expressoes regulares para correspondencia avancada de padroes.
  • Starts With - aciona se o campo comeca com o texto especificado.
  • Ends With - aciona se o campo termina com o texto especificado.
  • Is Empty - aciona quando o campo nao tem valor.
  • Is Not Empty - aciona quando o campo contem qualquer valor.
  • Contains - aciona quando o campo inclui o texto especificado.
  • Does Not Contain - aciona quando o campo nao inclui o texto especificado.

Acoes​

As acoes definem o que acontece quando todas as condicoes sao cumpridas. Multiplas acoes podem ser combinadas dentro de uma unica regra.

AcoesAcoes

As acoes disponiveis incluem:

  • Set Status - atualizar o estado do ticket.
  • Set Priority - alterar o nivel de prioridade.
  • Set Department - reatribuir o ticket a outro departamento.
  • Set Owner - atribuir a um agente especifico.
  • Change Folder - mover o ticket para uma pasta especifica.
  • Add Tags - adicionar tags para categorizacao.
  • Remove Tags - eliminar tags existentes do ticket.
  • Send Email - enviar notificacoes de email a destinatarios especificados.
  • Run Script - executar codigo JavaScript personalizado para automacao avancada.

Acao Enviar Email​

A acao Send Email permite enviar notificacoes de email automatizadas quando uma regra e acionada. Isto e util para alertar membros da equipa, notificar clientes ou comunicar com partes externas.

Opcoes disponiveis:

  • Send to ticket owner - notificar o agente atribuido.
  • Send to all department users - alertar todos os membros do departamento do ticket.
  • Send to customer - informar o cliente sobre atualizacoes.
  • Send to other addresses - especificar enderecos de email personalizados.
  • Email Subject - definir a linha de assunto do email (suporta variaveis de template Liquid).
  • Email Body - compor o conteudo do email (suporta variaveis de template Liquid).
  • Include attachments - anexar ficheiros da ultima mensagem.

Variaveis de Template​

Pode usar variaveis de template Liquid nos campos Email Subject e Email Body para inserir dinamicamente informacoes de tickets, clientes e mensagens.

Variaveis de ticket:

VariavelDescricao
{{ ticket.code }}Codigo do ticket (por exemplo, T-001)
{{ ticket.subject }}Linha de assunto do ticket
{{ ticket.created_at }}Timestamp de criacao do ticket
{{ ticket.updated_at }}Timestamp da ultima atualizacao
{{ ticket.customer_name }}Nome completo do cliente
{{ ticket.customer_email }}Endereco de email do cliente
{{ ticket.admin_url }}Link direto para o ticket no painel de administracao
{{ ticket.admin_last_message_text }}Corpo da ultima resposta do agente (texto simples)
{{ ticket.admin_last_message_html }}Corpo da ultima resposta do agente (HTML)
{{ ticket.customer_last_message_text }}Corpo da ultima resposta do cliente (texto simples)
{{ ticket.customer_last_message_html }}Corpo da ultima resposta do cliente (HTML)

Variaveis de proprietario/atribuido:

VariavelDescricao
{{ owner.firstname }}Primeiro nome do agente atribuido
{{ owner.lastname }}Ultimo nome do agente atribuido
{{ owner.email }}Email do agente atribuido
{{ owner.fullname }}Nome completo do agente atribuido
{{ owner.is_admin }}Se o proprietario e um administrador

Variaveis de departamento:

VariavelDescricao
{{ department.name }}Nome do departamento
{{ department.sender_name }}Nome do remetente do departamento

Variaveis de mensagem (quando acionado por eventos de mensagem):

VariavelDescricao
{{ message.body_text }}Conteudo da mensagem (texto simples)
{{ message.body_html }}Conteudo da mensagem (HTML)
{{ message.type }}Tipo de mensagem
{{ message.created_at }}Timestamp de criacao da mensagem

Variaveis de data/hora:

VariavelDescricao
{{ now }}Timestamp atual (RFC3339)
{{ date }}Data atual (AAAA-MM-DD)
{{ time }}Hora atual (HH:MM:SS)
{{ year }}Ano atual

Exemplo de template de email:

Subject: Nova resposta no ticket #{{ ticket.code }}

Ola {{ owner.firstname }},

Um cliente respondeu ao ticket "{{ ticket.subject }}".

Cliente: {{ ticket.customer_name }} ({{ ticket.customer_email }})

Ultima mensagem:
{{ ticket.customer_last_message_text }}

Ver ticket: {{ ticket.admin_url }}

Acao Executar Script​

A acao Run Script permite-lhe executar codigo JavaScript personalizado para implementar logica de automacao complexa que vai alem de atribuicoes simples de campos. Os scripts podem ler dados de tickets, tomar decisoes condicionais e atualizar multiplos campos de uma so vez.

Propriedades de ticket disponiveis (leitura):

PropriedadeDescricao
ticket.idIdentificador unico do ticket
ticket.subjectLinha de assunto do ticket
ticket.folderPasta atual (INBOX, ASSIGNED, SPAM, etc.)
ticket.tagsArray de tags
ticket.statusObjeto com id, code e name
ticket.priorityObjeto com id e name
ticket.departmentObjeto com id e name
ticket.ownerObjeto com id, email, firstname, lastname
ticket.customerObjeto com id, email, firstname, lastname, name
ticket.<custom_field_code>Valor de campo personalizado pelo seu codigo

Propriedades de ticket disponiveis (escrita):

PropriedadeValor Esperado
ticket.statusCodigo de estado (string) ou ID de estado
ticket.priorityNome de prioridade (string) ou ID de prioridade
ticket.departmentNome de departamento (string) ou ID de departamento
ticket.ownerEmail de utilizador (string) ou ID de utilizador
ticket.folderNome de pasta: "INBOX", "ASSIGNED", "SPAM", "ARCHIVE"
ticket.tagsArray de strings de tags
ticket.<custom_field_code>Valor correspondente ao tipo de campo personalizado

Funcoes auxiliares:

FuncaoRetorna
getStatuses()Array de todos os estados disponiveis
getPriorities()Array de todas as prioridades disponiveis
getDepartments()Array de todos os departamentos disponiveis
getUsers()Array de todos os utilizadores disponiveis
fetch(url, options)Fazer pedidos HTTP a APIs externas

Contexto de mensagem (disponivel quando a regra e acionada por um evento de mensagem):

PropriedadeDescricao
message.idIdentificador unico da mensagem
message.body_textConteudo da mensagem (texto simples)
message.body_htmlConteudo da mensagem (HTML)
message.createdAtTimestamp de criacao da mensagem

Exemplos de scripts:

// Definir prioridade com base em palavras-chave do assunto
if (ticket.subject.toLowerCase().includes("urgent")) {
ticket.priority = "High";
}
// Encaminhar tickets para departamentos com base no conteudo
if (ticket.subject.includes("billing") || ticket.subject.includes("invoice")) {
ticket.department = "Billing";
} else if (ticket.subject.includes("technical") || ticket.subject.includes("error")) {
ticket.department = "Technical Support";
}
// Tratamento de cliente VIP
if (ticket.customer && ticket.customer.email.endsWith("@enterprise.com")) {
ticket.priority = "High";
ticket.tags = ["vip", "enterprise"];
}
// Definir valor de campo personalizado
ticket.order_id = "12345";
ticket.vip_customer = true;
ticket.order_amount = 99.99;
// Buscar dados de cliente de API externa e atualizar ticket
var response = fetch("https://api.example.com/customers/" + ticket.customer.email, {
headers: { "Authorization": "Bearer YOUR_API_KEY" }
});

if (response.ok && response.json) {
ticket.customer_tier = response.json.tier;
if (response.json.tier === "enterprise") {
ticket.priority = "High";
ticket.department = "Enterprise Support";
}
}

Notas importantes:

  • Os scripts tem um timeout de 10 segundos para prevenir loops infinitos.
  • Valores de campo invalidos (estado, prioridade inexistentes, etc.) sao ignorados graciosamente.
  • Erros de script nao afetam outras regras ou causam falha do sistema.
  • Os campos personalizados sao referenciados pelo seu codigo, nao nome.

Notificacoes​

Pode enviar notificacoes de email automatizadas quando a regra e executada para manter todas as partes informadas.

NotificacoesNotificacoes

As opcoes de notificacao incluem:

  • Send email to ticket owner - notificar o agente atribuido.
  • Send email to all department users - alertar todos os membros do departamento.
  • Send email to customer - informar o cliente sobre alteracoes.
  • Send email to other addresses - enviar para destinatarios externos.
  • Email Subject - especificar a linha de assunto.
  • Email Body - compor o conteudo do email.
  • Attach files previously attached to the last message - incluir anexos anteriores para contexto.

Exemplos de regras de workflow​

Alterar estado na resposta do cliente
Quando um cliente responde, o sistema altera automaticamente o estado do ticket para Waiting for Agent.

Tipo: Workflow Rule
Is Active: Sim
Event: New Customer Reply
Conditions: Status Not Equals Closed
Actions: Set Status -> Waiting for Agent
Nova resposta de Terceiro
Quando um terceiro envia uma mensagem, o sistema define o estado para Waiting for Agent e adiciona uma tag `third_party`.

Tipo: Workflow Rule
Is Active: Sim
Event: New Third Party Reply
Conditions: Nenhuma
Actions:
Set Status -> Waiting for Agent
Add Tags -> third_party
Ticket atribuido ao staff
Quando um ticket e atribuido a um membro do staff, move-se automaticamente para a pasta Assigned e envia uma notificacao de email.

Tipo: Workflow Rule
Is Active: Sim
Event: Ticket Assigned
Conditions: Nenhuma
Actions:
Change Folder -> Assigned
Send email to ticket owner
Fechar ticket apos 72 horas sem resposta
Se nenhuma resposta for recebida em 72 horas, o ticket fecha automaticamente.

Tipo: Workflow Rule
Is Active: Sim
Event: Cron Every Hour
Conditions:
Status Equals Waiting for Customer
Hours Since Last Reply Greater Than 72
Actions: Set Status -> Closed
Script: Encaminhar e priorizar com base no dominio de email do cliente
Encaminha clientes enterprise para suporte dedicado e define prioridade alta.

Tipo: Workflow Rule
Is Active: Sim
Event: New Ticket
Conditions: Nenhuma
Actions: Run Script

```javascript
if (ticket.customer && ticket.customer.email) {
var domain = ticket.customer.email.split("@")[1];

if (domain === "enterprise.com" || domain === "bigcorp.com") {
ticket.priority = "High";
ticket.department = "Enterprise Support";
ticket.tags = ["enterprise", "priority"];
}
}
```
Script: Auto-categorizar tickets por palavras-chave do assunto
Categoriza automaticamente tickets e define campos personalizados com base no conteudo do assunto.

Tipo: Workflow Rule
Is Active: Sim
Event: New Ticket
Conditions: Nenhuma
Actions: Run Script

```javascript
var subject = ticket.subject.toLowerCase();

if (subject.includes("refund") || subject.includes("return")) {
ticket.department = "Billing";
ticket.category = "refund_request";
} else if (subject.includes("password") || subject.includes("login")) {
ticket.department = "Technical Support";
ticket.category = "account_access";
} else if (subject.includes("order") || subject.includes("shipping")) {
ticket.department = "Orders";
ticket.category = "order_inquiry";
}
```
Script: Escalar com base na analise de conteudo da mensagem
Deteta palavras-chave urgentes em mensagens e auto-escala tickets.

Tipo: Workflow Rule
Is Active: Sim
Event: New Customer Reply
Conditions: Nenhuma
Actions: Run Script

```javascript
if (message && message.body_text) {
var body = message.body_text.toLowerCase();
var urgentKeywords = ["asap", "urgent", "critical", "down", "outage", "emergency"];

for (var i = 0; i < urgentKeywords.length; i++) {
if (body.includes(urgentKeywords[i])) {
ticket.priority = "High";
ticket.tags = ticket.tags.concat(["escalated"]);
break;
}
}
}
```