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

- 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.

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.

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:
| Variavel | Descricao |
|---|---|
{{ 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:
| Variavel | Descricao |
|---|---|
{{ 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:
| Variavel | Descricao |
|---|---|
{{ department.name }} | Nome do departamento |
{{ department.sender_name }} | Nome do remetente do departamento |
Variaveis de mensagem (quando acionado por eventos de mensagem):
| Variavel | Descricao |
|---|---|
{{ 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:
| Variavel | Descricao |
|---|---|
{{ 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):
| Propriedade | Descricao |
|---|---|
ticket.id | Identificador unico do ticket |
ticket.subject | Linha de assunto do ticket |
ticket.folder | Pasta atual (INBOX, ASSIGNED, SPAM, etc.) |
ticket.tags | Array de tags |
ticket.status | Objeto com id, code e name |
ticket.priority | Objeto com id e name |
ticket.department | Objeto com id e name |
ticket.owner | Objeto com id, email, firstname, lastname |
ticket.customer | Objeto com id, email, firstname, lastname, name |
ticket.<custom_field_code> | Valor de campo personalizado pelo seu codigo |
Propriedades de ticket disponiveis (escrita):
| Propriedade | Valor Esperado |
|---|---|
ticket.status | Codigo de estado (string) ou ID de estado |
ticket.priority | Nome de prioridade (string) ou ID de prioridade |
ticket.department | Nome de departamento (string) ou ID de departamento |
ticket.owner | Email de utilizador (string) ou ID de utilizador |
ticket.folder | Nome de pasta: "INBOX", "ASSIGNED", "SPAM", "ARCHIVE" |
ticket.tags | Array de strings de tags |
ticket.<custom_field_code> | Valor correspondente ao tipo de campo personalizado |
Funcoes auxiliares:
| Funcao | Retorna |
|---|---|
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):
| Propriedade | Descricao |
|---|---|
message.id | Identificador unico da mensagem |
message.body_text | Conteudo da mensagem (texto simples) |
message.body_html | Conteudo da mensagem (HTML) |
message.createdAt | Timestamp 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.

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;
}
}
}
```