Receba novidades do Hedhog no seu e-mail
Novos lançamentos, receitas e breaking changes — sem spam.
Submódulo sac
mailboxes
Endereços de e-mail monitorados por IMAP, que transformam mensagem recebida em chamado sem mexer no MX do domínio.
Caminho de origem: libraries/sac/src/inbound
Arquivo do módulo: inbound.module.ts
Introdução
Uma caixa liga um endereço existente a um canal do SAC por meio de um perfil de integração com o provider `imap`. O IMAP foi escolhido justamente porque não exige mudança de DNS: a caixa continua funcionando no Gmail, no Outlook ou no celular enquanto o sistema a lê.
Um cron enfileira um job de leitura por caixa cujo intervalo venceu; o índice único de job ativo em `(type, source_entity_id)` da fila serve também de trava de concorrência, então uma leitura lenta nunca ganha outra por cima lendo as mesmas mensagens. A leitura persiste a mensagem bruta e sobe os anexos; a interpretação roda em outro job — o que significa que um bug ali nunca perde uma mensagem que já pode ter saído do servidor.
O cursor de leitura é `last_seen_uid` mais `last_uid_validity`. Quando o servidor reatribui os UIDs, o `UIDVALIDITY` muda e o cursor reinicia, porque manter o antigo pularia em silêncio tudo que chegou desde então. Trocar a pasta zera o cursor pelo mesmo motivo: os UIDs do IMAP são por pasta.
A primeira leitura de uma caixa pega apenas as mensagens não lidas, então adotar uma caixa com histórico não abre mil chamados retroativos.
Endpoints HTTP
5 endpoints
Listagem paginada das caixas monitoradas, com canal e perfil.
- Query
- page, pageSize, search
Cadastra uma caixa.
Body
| Field | Type | Required | Notes |
|---|---|---|---|
| address | string (email) | yes | Also used to drop mail this system itself sent (loop guard) |
| channel_id | int | yes | — |
| integration_profile_id | int | yes | Must be a profile with the `imap` provider; the other e-mail providers only send |
| folder | string | no | Defaults to INBOX |
| poll_interval_seconds | int (>= 30) | no | — |
| strip_quoted_reply | boolean | no | Without it every reply brings the whole thread back |
| ignore_auto_submitted | boolean | no | — |
Abre uma conexão IMAP real e confirma que a pasta pode ser aberta — o que o teste do perfil, sempre em INBOX, não cobre.
- Params
- id (int)
Lê a caixa agora, sem esperar o intervalo do cron.
- Params
- id (int)
Para de ler uma caixa. Os chamados já abertos a partir dela permanecem.
- Params
- id (int)