Low-code no Jestor
O low-code do Jestor permite escrever pequenos scripts em Python que rodam automaticamente quando algo acontece no sistema. Um script pode reagir à gravação de um registro, a um clique em botão, a um webhook enviado por um sistema externo ou a uma rotina executada sem nenhum evento específico.
Esta seção documenta as funções que já estão em produção neste projeto, principalmente a integração com a plataforma de reservas Stays, e os cálculos financeiros por apartamento.
Como o código é executado
Section titled “Como o código é executado”Cada script é empacotado pelo Jestor dentro de uma função serverless (AWS Lambda). Na prática, isso significa:
- Variáveis do registro não ficam no escopo global. Dados como
event,paramsourecordDatasão injetados no momento da execução, então checar'event' in globals()retorna sempreFalse. - Alguns objetos já vêm prontos, sem import:
jestor,Filter,Operators,stopCodeExecution,showMessage,Type, além dejson,re,os,time,base64,hashlibehmac. - Evite bibliotecas fora da biblioteca padrão do Python (e também
traceback). Elas podem fazer o container falhar na inicialização. Por isso os scripts deste projeto usamrequestsapenas quando necessário, e vale verificar essa dependência antes de publicar uma nova função. - Há um tempo máximo de execução. Esperas longas (
time.sleep) ou muitas chamadas em sequência podem estourar o limite e gerar erro 422, como observado em produção.
Tipos de automação
Section titled “Tipos de automação”O tipo define de onde vêm os dados e o que o script pode fazer.
| Tipo | Quando roda | Onde ficam os dados | Exemplos neste projeto |
|---|---|---|---|
| Before Save / Before Update | Antes de gravar o registro, de forma síncrona | event['current_data'], event['before_save'] |
Nenhum |
| After Save / After Update | Depois de gravar, em segundo plano | event['after_save'], jestor.table().update() |
Nenhum |
| Função (botão) | Quando o usuário clica em um botão | Variável recordData |
Sincronização manual de reservas, Resumo mensal de pagamentos |
| Webhook | Quando um sistema externo envia uma requisição | Variável params com action e payload |
Integração Stays, Pré-reserva Stays |
| Rotina | Sem payload de evento, por agendamento ou execução direta | Apenas o SDK (jestor) |
Sincronização semanal, Bloqueios ativos, Cálculo de rendimentos, Limpeza de pagamentos antigos |
Como ler os dados de um webhook
Section titled “Como ler os dados de um webhook”Os scripts de webhook começam verificando a ação recebida e depois trabalham com o payload:
if params["action"] in ("reservation.created", "reservation.modified"): payload = params["payload"] if payload["type"] == "booked": # tratar a reserva confirmada ...Os valores possíveis de type vindos da Stays são reserved (pré-reserva), booked (reserva confirmada), canceled, blocked e maintenance.
Convenções usadas nos scripts
Section titled “Convenções usadas nos scripts”- Slugs de tabela em constantes. Cada script declara no topo as tabelas que usa, como
tab_reserva = "4t52yq48kfmfe5lcnhmgv". Se uma tabela for recriada no Jestor, o slug muda e o script precisa ser atualizado. - Chave primária com prefixo. A chave é sempre
id_seguido do slug da tabela, por exemploid_pfziere4qayrb1ui_4bv4. Tabelas com slug iniciado por_geram chave com dois underlines. - Relacionamentos guardam só o ID. Um campo conectado (N:1) devolve apenas o identificador do registro relacionado. Para ler outros dados dele, faça um
get()na tabela de destino. - ID externo. O identificador da Stays fica no campo
id_externo, e é por ele que os scripts evitam duplicar registros.
Credenciais
Section titled “Credenciais”Páginas desta seção
Section titled “Páginas desta seção”- Referência do SDK: métodos de consulta, gravação, HTTP e interface.
- Integração Stays: hóspedes, taxas e bloqueios a partir de webhooks.
- Pré-reserva Stays: registro de pré-reservas em tabela própria.
- Sincronização semanal: importação das reservas dos próximos 90 dias.
- Sincronização manual de reservas: reimportação por período, disparada por botão.
- Bloqueios ativos: marca os apartamentos com bloqueio vigente.
- Cálculo de rendimentos: totais por canal de venda e despesas por período.
- Resumo mensal de pagamentos: totais de pagamentos por mês e por método.
- Limpeza de pagamentos antigos: remoção em lotes de registros anteriores a uma data.