Webhooks em Quoti Databases¶
Ao adicionar, remover, editar ou fazer qualquer operação em uma tabela do Quoti Databases, uma série de processos internos ocorrem na plataforma. Um deles é a chamada de Webhooks.
Webhooks no Quoti Databases tem as seguintes características:
- Os webhooks são chamados a partir de eventos de operações no banco de dados.
- Podem ter caráter bloqueante. Isso é: pode bloquear uma operação como de escrita, por exemplo.
- Podem modificar o dado que estaria sendo criado ou editado, trazendo a possibilidade de tratar campos, por exemplo.
- Podem ser configurados para serem disparados em condições específicas, como apenas quando uma coluna específica recebe algum valor específico.
Eventos¶
Aqui está uma lista de possíveis eventos que o Quoti pode detectar para chamar um webhook
- Eventos relacionado a criação de registros:
-
beforeCreate- Chamado antes de um registro ser criado -beforeBulkCreate- Chamado antes de ser criado vários registros (em lote) -afterCreate- Chamado após a criação de qualquer registro -afterBulkCreate- Chamado após a criação de vários registros (em lote) - Eventos relacionados a atualização de registros:
-
beforeUpdate- Chamado antes de um registro ser atualizado -beforeBulkUpdate- Chamado antes de vários registros serem atualizados (em lote) -afterUpdate- Chamado depois de um registro ser atualizado -afterBulkUpdate- Chamado depois de vários registros serem atualizados (em lote) - Eventos relacionados a deleção de registros:
-
beforeDestroy- Chamado antes de um registro ser apagado -beforeBulkDestroy- Chamado antes de vários registros serem apagados (em lote) -afterDestroy- Chamado depois de um registro ser apagado -afterBulkDestroy- Chamado depois de vários registros serem apagados (em lote) - Eventos relacionados a listagem de registros:
-
beforeFind- Chamado antes de uma solicitação de listagem de registros
Cadastrando Webhooks¶
A página de gestão de hooks do seu ambiente está disponível em https://quoti.cloud/seuambiente/hooks

Você pode cadastrar um novo webhook através do botão “+ Novo”

- Tipo de hook - Para webhooks de Quoti Databases, você deve selecionar sempre o tipo “table”.
- Nome do recurso - Aqui você deve escolher o nome da sua tabela que acionará os hooks.
- Handler
- Este campo recebe um JSON, que deve conter em seu corpo as propriedades
urletype. Respectivamente, guardam o link que será chamado e o tipo de requisição - Eventos - Este campo pode receber múltiplos eventos, os quais servirão como gatilhos para acionar o webhook.
- Condições - Campo opcional que define condições específicas no qual a plataforma deve considerar para disparar o webhook. Este campo deve receber um JSON no formato documentado neste link.
- Configurações
- Campo opcional que define configurações avançadas de um webhook. O formato esperado é JSON e suas possível propriedades são as seguintes:
-
returnBeforeData- Campo booleano (com valor true ou false) que determina se a plataforma deve incluir a informação de ‘beforeData’ no corpo da chamada do webhook para eventos de atualização. ‘beforeData’ representa os dados na tabela antes da finalização da edição do registro em andamento. -returnAfterData- Campo booleano (com valor true ou false) que determina se a plataforma deve incluir a informação de ‘afterData’ no corpo da chamada do webhook para eventos de atualização. ‘afterData’ representa os dados na tabela após a finalização da edição do registro que acabou de ser feita - neste caso, apenas nos eventos de ‘afterUpdate’ este campo estará com os dados definidos.
Operadores disponíveis¶
| Tipo | Operador | Descrição |
|---|---|---|
| Booleano | all, any, not |
Controlam a lógica de múltiplas condições |
| String/Número | equal, notEqual |
Igualdade ou diferença exata (=== / !==) |
| Numérico | lessThan, lessThanInclusive, greaterThan, greaterThanInclusive |
Comparações numéricas diretas |
| Array | in, notIn, contains, doesNotContain |
Verifica se um valor está em um array (in/notIn) ou se um array contém um valor (contains/doesNotContain) |
Operadores que suportam
valuecomo lista:in,notIn,contains,doesNotContainℹ️ Para detalhes completos sobre sintaxe, operadores e exemplos de uso, consulte a documentação da biblioteca.
Operadores Adicionais¶
Básicos
| Operador | Descrição |
|---|---|
isEmpty |
Verifica se o valor é null ou undefined |
isNotEmpty |
Verifica se o valor não é null e não é undefined |
String
| Operador | Descrição |
|---|---|
contains |
Verifica se uma string contém outra string |
startsWith |
Verifica se uma string começa com outra string |
endsWith |
Verifica se uma string termina com outra string |
matches |
Verifica se uma string corresponde a um padrão regex |
Array
| Operador | Descrição |
|---|---|
containsAny |
Verifica se um array contém qualquer um dos valores especificados |
containsAll |
Verifica se um array contém todos os valores especificados |
hasLength |
Verifica se um array tem exatamente o comprimento especificado |
isEmptyArray |
Verifica se um array está vazio |
isNotEmptyArray |
Verifica se um array não está vazio |
Número
| Operador | Descrição |
|---|---|
isInRange |
Verifica se um número está dentro de um intervalo (inclusive) |
isNumber |
Verifica se um valor é um número |
isPositive |
Verifica se um número é positivo (maior que 0) |
isNegative |
Verifica se um número é negativo (menor que 0) |
Data
| Operador | Descrição |
|---|---|
isAfter |
Verifica se uma data é posterior a outra data |
isBefore |
Verifica se uma data é anterior a outra data |
isSameDay |
Verifica se uma data é o mesmo dia que outra data |
isDateInRange |
Verifica se uma data está dentro de um intervalo |
Tipo
| Operador | Descrição |
|---|---|
isString |
Verifica se um valor é uma string |
isBoolean |
Verifica se um valor é um booleano |
isArray |
Verifica se um valor é um array |
isObject |
Verifica se um valor é um objeto (não null, não array) |
Objeto
| Operador | Descrição |
|---|---|
hasProperty |
Verifica se um objeto tem uma propriedade específica |
hasProperties |
Verifica se um objeto tem todas as propriedades especificadas |
Exemplos de Webhooks¶
Exemplo 1 – Webhook somente para categorias específicas¶
Dispara apenas se o categoryId enviado estiver em uma lista predefinida (ex: manutenção de ATM e validadores):
Configurações:
{
"asyncHook": true,
"returnAfterData": false,
"returnBeforeData": false
}
Condições:
{
"all": [
{
"fact": "requestData",
"path": "$.body.categoryId",
"value": [
100004, 100015, 100016, 100019, 100031,
100032, 100033, 100034, 100035, 100036,
100037, 100038, 100039, 100040, 100041
],
"operator": "in",
"description": "Apenas ticket manutenção de ATM e validadores"
}
]
}
Exemplo 2 – Webhook ignorando chats e CCO¶
Executa o webhook apenas quando o (ticketTypeId) não corresponder a determinados valores específicos:
💡 Como mostrado na imagem abaixo, o conteúdo retornado na chave after deve ser referenciado como dataAfterEvent na condição. Logo, o fact correto a ser utilizado será "dataAfterEvent"

Configurações:
{
"attributes": ["ticketTypeId"],
"returnAfterData": true,
"returnBeforeData": false
}
Condições:
{
"all": [
{
"fact": "dataAfterEvent",
"path": "$.ticketTypeId",
"value": [3, 11],
"operator": "notIn",
"description": "Chamados diferentes de chats e CCO"
}
]
}
Exemplo 3 – Webhook só dispara se status não for nulo¶
Verifica se a propriedade status existe e contém pelo menos 1 item:
Condições:
{
"all": [
{
"fact": "requestData",
"path": "$.body.status.length",
"value": 1,
"operator": "greaterThanInclusive",
"description": "Status diferente de nulo"
}
]
}
Caso de teste¶
Vamos criar um webhook de afterCreate em uma tabela e ver como ele é chamado!


Após a criação, é necessário definir o “Status do webhook” como “Ativo” para que a plataforma o considere.

Agora que temos nosso webhook definido, vamos criar um dado aleatório na tabela relacionada e verificar a chamada de webhook que a plataforma fez.
Aqui está o corpo da chamada HTTP feita pela plataforma:

O conteúdo de toda chamada contém:
- Parâmetro
user- Onde vem uma cópia da instancia do usuário que está fazendo a operação, incluindo grupos e permissões - Parâmetro
resourceType- Contém o valor do campo “Tipo de hook” definido na hora da criação do webhook. No caso de webhooks de Quoti Databases, esse valor sempre será “table”. - Parâmetro
resourceName- Contém o nome da tabela onde o evento se originou. - Parâmetro
event- Contém o nome do evento que está sendo disparado - Parâmetro
data- Objeto que contém os dados que estão sendo criados ou atualizados ou apagados, de acordo com o evento. Caso o hook tenha as configuração. "returnBeforeData” e “returnAfterData” habilitadas, os dados relacionados também serão retornados dentro deste objeto.