@kaikybrofc/omnizap-system 2.2.10 → 2.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -13
- package/app/config/adminIdentity.js +1 -3
- package/app/connection/socketController.js +10 -20
- package/app/controllers/messageController.js +7 -28
- package/app/modules/aiModule/catCommand.js +29 -192
- package/app/modules/broadcastModule/noticeCommand.js +28 -97
- package/app/modules/gameModule/diceCommand.js +6 -32
- package/app/modules/playModule/playCommand.js +57 -258
- package/app/modules/quoteModule/quoteCommand.js +2 -4
- package/app/modules/rpgPokemonModule/rpgPokemonRepository.js +1 -13
- package/app/modules/statsModule/noMessageCommand.js +16 -84
- package/app/modules/statsModule/rankingCommand.js +5 -25
- package/app/modules/statsModule/rankingCommon.js +1 -9
- package/app/modules/stickerModule/convertToWebp.js +4 -27
- package/app/modules/stickerModule/stickerCommand.js +13 -24
- package/app/modules/stickerModule/stickerTextCommand.js +13 -25
- package/app/modules/stickerPackModule/autoPackCollectorService.js +16 -7
- package/app/modules/stickerPackModule/domainEventOutboxRepository.js +20 -36
- package/app/modules/stickerPackModule/domainEvents.js +2 -11
- package/app/modules/stickerPackModule/semanticReclassificationEngine.js +13 -50
- package/app/modules/stickerPackModule/semanticReclassificationEngine.test.js +2 -15
- package/app/modules/stickerPackModule/semanticThemeClusterService.js +14 -41
- package/app/modules/stickerPackModule/stickerAssetClassificationRepository.js +25 -95
- package/app/modules/stickerPackModule/stickerAssetRepository.js +12 -31
- package/app/modules/stickerPackModule/stickerAssetReprocessQueueRepository.js +13 -18
- package/app/modules/stickerPackModule/stickerAutoPackByTagsRuntime.js +284 -709
- package/app/modules/stickerPackModule/stickerClassificationBackgroundRuntime.js +27 -106
- package/app/modules/stickerPackModule/stickerClassificationService.js +46 -77
- package/app/modules/stickerPackModule/stickerDedicatedTaskWorkerRuntime.js +13 -53
- package/app/modules/stickerPackModule/stickerDomainEventBus.js +10 -16
- package/app/modules/stickerPackModule/stickerDomainEventConsumerRuntime.js +40 -39
- package/app/modules/stickerPackModule/stickerMarketplaceDriftService.js +1 -4
- package/app/modules/stickerPackModule/stickerObjectStorageService.js +26 -26
- package/app/modules/stickerPackModule/stickerPackCommandHandlers.js +32 -187
- package/app/modules/stickerPackModule/stickerPackInteractionEventRepository.js +6 -15
- package/app/modules/stickerPackModule/stickerPackItemRepository.js +6 -32
- package/app/modules/stickerPackModule/stickerPackMarketplaceService.js +12 -36
- package/app/modules/stickerPackModule/stickerPackMessageService.js +12 -40
- package/app/modules/stickerPackModule/stickerPackRepository.js +23 -66
- package/app/modules/stickerPackModule/stickerPackScoreSnapshotRepository.js +9 -21
- package/app/modules/stickerPackModule/stickerPackScoreSnapshotRuntime.js +10 -40
- package/app/modules/stickerPackModule/stickerPackService.js +50 -115
- package/app/modules/stickerPackModule/stickerPackServiceRuntime.js +2 -21
- package/app/modules/stickerPackModule/stickerPackUtils.js +13 -3
- package/app/modules/stickerPackModule/stickerStorageService.js +16 -65
- package/app/modules/stickerPackModule/stickerWorkerPipelineRuntime.js +4 -22
- package/app/modules/stickerPackModule/stickerWorkerTaskQueueRepository.js +14 -29
- package/app/modules/systemMetricsModule/pingCommand.js +9 -39
- package/app/modules/tiktokModule/tiktokCommand.js +17 -109
- package/app/modules/userModule/userCommand.js +2 -88
- package/app/observability/metrics.js +5 -16
- package/app/services/captchaService.js +1 -6
- package/app/services/dbWriteQueue.js +3 -18
- package/app/services/featureFlagService.js +2 -8
- package/app/services/newsBroadcastService.js +0 -1
- package/app/services/queueUtils.js +2 -4
- package/app/services/whatsappLoginLinkService.js +7 -9
- package/app/store/premiumUserStore.js +1 -2
- package/app/utils/antiLink/antiLinkModule.js +3 -233
- package/app/utils/logger/loggerModule.js +9 -34
- package/app/utils/systemMetrics/systemMetricsModule.js +1 -4
- package/database/index.js +1 -0
- package/database/init.js +1 -8
- package/database/migrations/20260228_0027_web_visit_event.sql +15 -0
- package/docker-compose.yml +27 -27
- package/docs/seo/omnizap-seo-playbook-br-2026-02-28.md +26 -0
- package/docs/seo/satellite-page-template.md +2 -0
- package/docs/seo/satellite-pages-phase1.json +40 -177
- package/eslint.config.js +2 -15
- package/index.js +8 -36
- package/ml/clip_classifier/README.md +4 -6
- package/observability/alert-rules.yml +12 -12
- package/observability/grafana/provisioning/dashboards/dashboards.yml +1 -1
- package/package.json +6 -3
- package/public/api-docs/index.html +220 -193
- package/public/bot-whatsapp-para-grupo/index.html +291 -261
- package/public/bot-whatsapp-sem-programar/index.html +291 -261
- package/public/comandos/index.html +421 -406
- package/public/como-automatizar-avisos-no-whatsapp/index.html +291 -261
- package/public/como-criar-comandos-whatsapp/index.html +291 -261
- package/public/como-evitar-spam-no-whatsapp/index.html +291 -261
- package/public/como-moderar-grupo-whatsapp/index.html +291 -261
- package/public/como-organizar-comunidade-whatsapp/index.html +291 -261
- package/public/css/github-project-panel.css +13 -8
- package/public/css/stickers-admin.css +25 -9
- package/public/css/styles.css +23 -16
- package/public/index.html +1106 -993
- package/public/js/apps/apiDocsApp.js +17 -167
- package/public/js/apps/createPackApp.js +69 -332
- package/public/js/apps/homeApp.js +274 -101
- package/public/js/apps/loginApp.js +3 -12
- package/public/js/apps/stickersAdminApp.js +190 -181
- package/public/js/apps/stickersApp.js +482 -1411
- package/public/js/apps/userApp.js +217 -1
- package/public/js/catalog.js +11 -74
- package/public/js/github-panel/components/ErrorState.js +1 -8
- package/public/js/github-panel/components/GithubProjectPanel.js +2 -9
- package/public/js/github-panel/components/SkeletonPanel.js +1 -11
- package/public/js/github-panel/components/StatCard.js +1 -7
- package/public/js/github-panel/vendor/react.js +1 -9
- package/public/js/runtime/react-runtime.js +1 -9
- package/public/licenca/index.html +200 -86
- package/public/login/index.html +315 -325
- package/public/melhor-bot-whatsapp-para-grupos/index.html +291 -261
- package/public/stickers/admin/index.html +14 -19
- package/public/stickers/create/index.html +39 -44
- package/public/stickers/index.html +96 -107
- package/public/termos-de-uso/index.html +369 -122
- package/public/user/index.html +527 -350
- package/scripts/cache-bust.mjs +5 -24
- package/scripts/generate-seo-satellite-pages.mjs +10 -13
- package/scripts/run-prettier-all.mjs +25 -0
- package/scripts/sticker-catalog-loadtest.mjs +13 -11
- package/scripts/sticker-worker-task.mjs +1 -4
- package/scripts/sync-readme-snapshot.mjs +3 -2
- package/server/auth/googleWebAuth/googleWebAuthService.js +614 -0
- package/server/controllers/stickerCatalogController.js +297 -632
- package/server/http/httpServer.js +2 -10
- package/server/routes/stickerCatalog/catalogHandlers/catalogAdminHttp.js +1 -8
- package/server/routes/stickerCatalog/catalogHandlers/catalogAuthHttp.js +1 -9
- package/server/routes/stickerCatalog/catalogHandlers/catalogPublicHttp.js +10 -11
- package/server/routes/stickerCatalog/catalogHandlers/catalogUploadHttp.js +1 -10
- package/server/routes/stickerCatalog/catalogRouter.js +11 -13
|
@@ -5,6 +5,7 @@ Objetivo: publicar paginas satelite com estrutura consistente (SEO on-page, inte
|
|
|
5
5
|
## Como gerar paginas
|
|
6
6
|
|
|
7
7
|
1. Edite o arquivo de configuracao:
|
|
8
|
+
|
|
8
9
|
- `docs/seo/satellite-pages-phase1.json`
|
|
9
10
|
|
|
10
11
|
2. Rode o gerador:
|
|
@@ -20,6 +21,7 @@ npm run seo:generate:satellites:phase1
|
|
|
20
21
|
```
|
|
21
22
|
|
|
22
23
|
3. Confira os arquivos criados em:
|
|
24
|
+
|
|
23
25
|
- `public/<slug>/index.html`
|
|
24
26
|
|
|
25
27
|
## Campos do template (por pagina)
|
|
@@ -5,41 +5,23 @@
|
|
|
5
5
|
"slug": "bot-whatsapp-para-grupo",
|
|
6
6
|
"title": "Bot para Grupo de WhatsApp | OmniZap pronto para usar",
|
|
7
7
|
"description": "Descubra como usar um bot para grupo de WhatsApp sem configuracao tecnica. Adicione o OmniZap, organize conversas e ative automacoes em minutos.",
|
|
8
|
-
"keywords": [
|
|
9
|
-
"bot para grupo whatsapp",
|
|
10
|
-
"bot whatsapp pronto",
|
|
11
|
-
"automacao para grupos",
|
|
12
|
-
"moderacao grupo whatsapp"
|
|
13
|
-
],
|
|
8
|
+
"keywords": ["bot para grupo whatsapp", "bot whatsapp pronto", "automacao para grupos", "moderacao grupo whatsapp"],
|
|
14
9
|
"h1": "Bot para grupo de WhatsApp: adicione e use em minutos",
|
|
15
10
|
"intro": "Se voce administra grupo no WhatsApp, o principal desafio e manter organizacao sem perder tempo com tarefas repetidas. Com OmniZap, voce adiciona o bot e comeca a automatizar de forma imediata.",
|
|
16
11
|
"intent_label": "Solucao pronta",
|
|
17
12
|
"sections": [
|
|
18
13
|
{
|
|
19
14
|
"title": "O que voce ganha com um bot pronto",
|
|
20
|
-
"paragraphs": [
|
|
21
|
-
|
|
22
|
-
"Em vez de repetir avisos, apagar spam e responder sempre as mesmas perguntas, o grupo passa a operar com regras e fluxos automaticos."
|
|
23
|
-
],
|
|
24
|
-
"bullets": [
|
|
25
|
-
"Respostas automaticas para perguntas frequentes",
|
|
26
|
-
"Avisos recorrentes sem trabalho manual",
|
|
27
|
-
"Grupo mais organizado e profissional"
|
|
28
|
-
]
|
|
15
|
+
"paragraphs": ["Um bot pronto reduz o trabalho manual de quem cuida do grupo todos os dias.", "Em vez de repetir avisos, apagar spam e responder sempre as mesmas perguntas, o grupo passa a operar com regras e fluxos automaticos."],
|
|
16
|
+
"bullets": ["Respostas automaticas para perguntas frequentes", "Avisos recorrentes sem trabalho manual", "Grupo mais organizado e profissional"]
|
|
29
17
|
},
|
|
30
18
|
{
|
|
31
19
|
"title": "Como comecar sem configuracao tecnica",
|
|
32
|
-
"paragraphs": [
|
|
33
|
-
"O processo e simples: abrir o bot, adicionar no grupo e autorizar.",
|
|
34
|
-
"Depois disso, recursos como moderacao e automacao ja podem ser usados sem programar."
|
|
35
|
-
]
|
|
20
|
+
"paragraphs": ["O processo e simples: abrir o bot, adicionar no grupo e autorizar.", "Depois disso, recursos como moderacao e automacao ja podem ser usados sem programar."]
|
|
36
21
|
},
|
|
37
22
|
{
|
|
38
23
|
"title": "Quando usar stickers dentro do bot",
|
|
39
|
-
"paragraphs": [
|
|
40
|
-
"Stickers ajudam no engajamento e fazem parte do ecossistema OmniZap.",
|
|
41
|
-
"Voce pode combinar organizacao do grupo com recursos de interacao para manter a comunidade ativa."
|
|
42
|
-
]
|
|
24
|
+
"paragraphs": ["Stickers ajudam no engajamento e fazem parte do ecossistema OmniZap.", "Voce pode combinar organizacao do grupo com recursos de interacao para manter a comunidade ativa."]
|
|
43
25
|
}
|
|
44
26
|
],
|
|
45
27
|
"faq": [
|
|
@@ -66,40 +48,23 @@
|
|
|
66
48
|
"slug": "como-moderar-grupo-whatsapp",
|
|
67
49
|
"title": "Como moderar grupo no WhatsApp com bot | Guia pratico",
|
|
68
50
|
"description": "Aprenda como moderar grupo no WhatsApp com menos trabalho manual. Use bot pronto para bloquear spam, organizar regras e manter conversa produtiva.",
|
|
69
|
-
"keywords": [
|
|
70
|
-
"como moderar grupo whatsapp",
|
|
71
|
-
"bot para moderar grupo",
|
|
72
|
-
"organizacao de grupo whatsapp"
|
|
73
|
-
],
|
|
51
|
+
"keywords": ["como moderar grupo whatsapp", "bot para moderar grupo", "organizacao de grupo whatsapp"],
|
|
74
52
|
"h1": "Como moderar grupo no WhatsApp sem sobrecarga",
|
|
75
53
|
"intro": "Moderacao manual funciona no inicio, mas quebra quando o grupo cresce. O caminho mais eficiente e automatizar regras basicas com um bot pronto.",
|
|
76
54
|
"intent_label": "Guia de dor",
|
|
77
55
|
"sections": [
|
|
78
56
|
{
|
|
79
57
|
"title": "Problemas comuns em grupos sem moderacao",
|
|
80
|
-
"paragraphs": [
|
|
81
|
-
|
|
82
|
-
"Mensagem fora de contexto, links em excesso e repeticao de conflitos viram padrao."
|
|
83
|
-
],
|
|
84
|
-
"bullets": [
|
|
85
|
-
"Spam de links e divulgacoes",
|
|
86
|
-
"Perguntas repetidas sem resposta padrao",
|
|
87
|
-
"Administrador sobrecarregado"
|
|
88
|
-
]
|
|
58
|
+
"paragraphs": ["Quando nao existe rotina de moderacao, o grupo perde foco rapido.", "Mensagem fora de contexto, links em excesso e repeticao de conflitos viram padrao."],
|
|
59
|
+
"bullets": ["Spam de links e divulgacoes", "Perguntas repetidas sem resposta padrao", "Administrador sobrecarregado"]
|
|
89
60
|
},
|
|
90
61
|
{
|
|
91
62
|
"title": "O que automatizar primeiro",
|
|
92
|
-
"paragraphs": [
|
|
93
|
-
"Comece por regras simples: aviso de boas-vindas, lembrete de regras e bloqueio de comportamento abusivo.",
|
|
94
|
-
"Esses tres pontos ja elevam a qualidade do grupo sem aumentar custo operacional."
|
|
95
|
-
]
|
|
63
|
+
"paragraphs": ["Comece por regras simples: aviso de boas-vindas, lembrete de regras e bloqueio de comportamento abusivo.", "Esses tres pontos ja elevam a qualidade do grupo sem aumentar custo operacional."]
|
|
96
64
|
},
|
|
97
65
|
{
|
|
98
66
|
"title": "Moderacao com previsibilidade",
|
|
99
|
-
"paragraphs": [
|
|
100
|
-
"Com o bot ativo, voce cria padrao de operacao para o grupo.",
|
|
101
|
-
"Isso reduz desgaste da equipe e melhora a experiencia de quem participa."
|
|
102
|
-
]
|
|
67
|
+
"paragraphs": ["Com o bot ativo, voce cria padrao de operacao para o grupo.", "Isso reduz desgaste da equipe e melhora a experiencia de quem participa."]
|
|
103
68
|
}
|
|
104
69
|
],
|
|
105
70
|
"faq": [
|
|
@@ -126,40 +91,23 @@
|
|
|
126
91
|
"slug": "como-evitar-spam-no-whatsapp",
|
|
127
92
|
"title": "Como evitar spam no WhatsApp com bot pronto",
|
|
128
93
|
"description": "Guia rapido para reduzir spam em grupos de WhatsApp com bot pronto. Veja regras essenciais e praticas para manter o grupo limpo e produtivo.",
|
|
129
|
-
"keywords": [
|
|
130
|
-
"como evitar spam whatsapp",
|
|
131
|
-
"bot anti spam whatsapp",
|
|
132
|
-
"moderacao whatsapp"
|
|
133
|
-
],
|
|
94
|
+
"keywords": ["como evitar spam whatsapp", "bot anti spam whatsapp", "moderacao whatsapp"],
|
|
134
95
|
"h1": "Como evitar spam no WhatsApp sem travar seu grupo",
|
|
135
96
|
"intro": "Spam derruba a qualidade das conversas e afasta membros importantes. Com um bot pronto, voce cria barreiras simples para proteger o grupo sem burocracia.",
|
|
136
97
|
"intent_label": "Guia anti-spam",
|
|
137
98
|
"sections": [
|
|
138
99
|
{
|
|
139
100
|
"title": "Por que spam cresce tao rapido",
|
|
140
|
-
"paragraphs": [
|
|
141
|
-
"Grupos ativos atraem divulgacoes, correntes e mensagens repetidas.",
|
|
142
|
-
"Sem automacao, o admin entra em modo reativo e sempre chega tarde."
|
|
143
|
-
]
|
|
101
|
+
"paragraphs": ["Grupos ativos atraem divulgacoes, correntes e mensagens repetidas.", "Sem automacao, o admin entra em modo reativo e sempre chega tarde."]
|
|
144
102
|
},
|
|
145
103
|
{
|
|
146
104
|
"title": "Regras que resolvem no curto prazo",
|
|
147
|
-
"paragraphs": [
|
|
148
|
-
|
|
149
|
-
"Ative respostas automaticas para orientar novos membros sobre comportamento esperado."
|
|
150
|
-
],
|
|
151
|
-
"bullets": [
|
|
152
|
-
"Bloqueio de padroes de spam",
|
|
153
|
-
"Aviso automatico de regras",
|
|
154
|
-
"Acompanhamento continuo sem intervencao manual"
|
|
155
|
-
]
|
|
105
|
+
"paragraphs": ["Defina filtros para links suspeitos e mensagens de repeticao em massa.", "Ative respostas automaticas para orientar novos membros sobre comportamento esperado."],
|
|
106
|
+
"bullets": ["Bloqueio de padroes de spam", "Aviso automatico de regras", "Acompanhamento continuo sem intervencao manual"]
|
|
156
107
|
},
|
|
157
108
|
{
|
|
158
109
|
"title": "Resultado esperado",
|
|
159
|
-
"paragraphs": [
|
|
160
|
-
"Com menos spam, o grupo ganha ritmo e relevancia.",
|
|
161
|
-
"Isso aumenta retenção da comunidade e melhora a confianca no canal."
|
|
162
|
-
]
|
|
110
|
+
"paragraphs": ["Com menos spam, o grupo ganha ritmo e relevancia.", "Isso aumenta retenção da comunidade e melhora a confianca no canal."]
|
|
163
111
|
}
|
|
164
112
|
],
|
|
165
113
|
"faq": [
|
|
@@ -186,40 +134,23 @@
|
|
|
186
134
|
"slug": "como-organizar-comunidade-whatsapp",
|
|
187
135
|
"title": "Como organizar comunidade no WhatsApp com automacao",
|
|
188
136
|
"description": "Veja como organizar comunidade no WhatsApp com bot pronto: regras claras, avisos automaticos e menos ruído nas conversas.",
|
|
189
|
-
"keywords": [
|
|
190
|
-
"organizar comunidade whatsapp",
|
|
191
|
-
"bot para comunidade",
|
|
192
|
-
"automacao whatsapp grupo"
|
|
193
|
-
],
|
|
137
|
+
"keywords": ["organizar comunidade whatsapp", "bot para comunidade", "automacao whatsapp grupo"],
|
|
194
138
|
"h1": "Como organizar comunidade no WhatsApp de forma pratica",
|
|
195
139
|
"intro": "Comunidade forte precisa de rotina. Quando a operacao depende so de humanos, a comunicacao fica inconsistente. A automacao ajuda a manter padrao e previsibilidade.",
|
|
196
140
|
"intent_label": "Guia de organizacao",
|
|
197
141
|
"sections": [
|
|
198
142
|
{
|
|
199
143
|
"title": "Estrutura minima para comunidade",
|
|
200
|
-
"paragraphs": [
|
|
201
|
-
"Toda comunidade precisa de boas-vindas, regras visiveis e canal de avisos.",
|
|
202
|
-
"Com bot pronto, essa estrutura roda de forma continua, mesmo com alto volume de mensagens."
|
|
203
|
-
]
|
|
144
|
+
"paragraphs": ["Toda comunidade precisa de boas-vindas, regras visiveis e canal de avisos.", "Com bot pronto, essa estrutura roda de forma continua, mesmo com alto volume de mensagens."]
|
|
204
145
|
},
|
|
205
146
|
{
|
|
206
147
|
"title": "Automacao que melhora experiencia",
|
|
207
|
-
"paragraphs": [
|
|
208
|
-
|
|
209
|
-
"Use lembretes automaticos para horarios, eventos e combinados da comunidade."
|
|
210
|
-
],
|
|
211
|
-
"bullets": [
|
|
212
|
-
"Menos ruido",
|
|
213
|
-
"Mais clareza",
|
|
214
|
-
"Tempo da equipe preservado"
|
|
215
|
-
]
|
|
148
|
+
"paragraphs": ["Ajuste respostas para perguntas recorrentes e reduza friccao de suporte.", "Use lembretes automaticos para horarios, eventos e combinados da comunidade."],
|
|
149
|
+
"bullets": ["Menos ruido", "Mais clareza", "Tempo da equipe preservado"]
|
|
216
150
|
},
|
|
217
151
|
{
|
|
218
152
|
"title": "Escala sem perder qualidade",
|
|
219
|
-
"paragraphs": [
|
|
220
|
-
"Quando os processos basicos estao automatizados, a comunidade cresce com menos caos.",
|
|
221
|
-
"Isso permite que admins foquem em conteudo, relacionamento e crescimento."
|
|
222
|
-
]
|
|
153
|
+
"paragraphs": ["Quando os processos basicos estao automatizados, a comunidade cresce com menos caos.", "Isso permite que admins foquem em conteudo, relacionamento e crescimento."]
|
|
223
154
|
}
|
|
224
155
|
],
|
|
225
156
|
"faq": [
|
|
@@ -246,40 +177,23 @@
|
|
|
246
177
|
"slug": "como-automatizar-avisos-no-whatsapp",
|
|
247
178
|
"title": "Como automatizar avisos no WhatsApp | Guia rapido",
|
|
248
179
|
"description": "Aprenda como automatizar avisos no WhatsApp para grupos e comunidades. Envie lembretes com consistencia e reduza falhas de comunicacao.",
|
|
249
|
-
"keywords": [
|
|
250
|
-
"automatizar avisos whatsapp",
|
|
251
|
-
"lembrete automatico whatsapp",
|
|
252
|
-
"bot para avisos"
|
|
253
|
-
],
|
|
180
|
+
"keywords": ["automatizar avisos whatsapp", "lembrete automatico whatsapp", "bot para avisos"],
|
|
254
181
|
"h1": "Como automatizar avisos no WhatsApp sem esquecer recados",
|
|
255
182
|
"intro": "Avisos manuais dependem de memoria e disponibilidade. Com automacao, o grupo recebe recados importantes no horario certo, todos os dias.",
|
|
256
183
|
"intent_label": "Guia de automacao",
|
|
257
184
|
"sections": [
|
|
258
185
|
{
|
|
259
186
|
"title": "Quando avisos automaticos fazem diferenca",
|
|
260
|
-
"paragraphs": [
|
|
261
|
-
"Reunioes, eventos, prazos e lembretes recorrentes sao casos classicos.",
|
|
262
|
-
"A automacao evita falha humana e melhora a confianca do grupo na comunicacao."
|
|
263
|
-
]
|
|
187
|
+
"paragraphs": ["Reunioes, eventos, prazos e lembretes recorrentes sao casos classicos.", "A automacao evita falha humana e melhora a confianca do grupo na comunicacao."]
|
|
264
188
|
},
|
|
265
189
|
{
|
|
266
190
|
"title": "Modelo simples para comecar",
|
|
267
|
-
"paragraphs": [
|
|
268
|
-
|
|
269
|
-
"Com bot pronto, esse fluxo roda sem precisar montar infraestrutura propria."
|
|
270
|
-
],
|
|
271
|
-
"bullets": [
|
|
272
|
-
"Recados diarios",
|
|
273
|
-
"Lembretes antes de eventos",
|
|
274
|
-
"Avisos fixos para novos membros"
|
|
275
|
-
]
|
|
191
|
+
"paragraphs": ["Defina os avisos que mais se repetem e padronize mensagem e frequencia.", "Com bot pronto, esse fluxo roda sem precisar montar infraestrutura propria."],
|
|
192
|
+
"bullets": ["Recados diarios", "Lembretes antes de eventos", "Avisos fixos para novos membros"]
|
|
276
193
|
},
|
|
277
194
|
{
|
|
278
195
|
"title": "Ganhos para admins e membros",
|
|
279
|
-
"paragraphs": [
|
|
280
|
-
"Admin ganha tempo para tarefas estrategicas.",
|
|
281
|
-
"Membros recebem informacao no momento certo, com menos retrabalho."
|
|
282
|
-
]
|
|
196
|
+
"paragraphs": ["Admin ganha tempo para tarefas estrategicas.", "Membros recebem informacao no momento certo, com menos retrabalho."]
|
|
283
197
|
}
|
|
284
198
|
],
|
|
285
199
|
"faq": [
|
|
@@ -306,40 +220,23 @@
|
|
|
306
220
|
"slug": "como-criar-comandos-whatsapp",
|
|
307
221
|
"title": "Como criar comandos no WhatsApp com bot pronto",
|
|
308
222
|
"description": "Entenda como criar e usar comandos no WhatsApp para acelerar atendimento e organizacao de grupos com bot pronto para uso.",
|
|
309
|
-
"keywords": [
|
|
310
|
-
"comandos whatsapp",
|
|
311
|
-
"bot com comandos",
|
|
312
|
-
"automacao de respostas whatsapp"
|
|
313
|
-
],
|
|
223
|
+
"keywords": ["comandos whatsapp", "bot com comandos", "automacao de respostas whatsapp"],
|
|
314
224
|
"h1": "Como criar comandos no WhatsApp sem complicar",
|
|
315
225
|
"intro": "Comandos ajudam a transformar tarefas repetidas em respostas rapidas. Em vez de digitar tudo manualmente, voce ativa rotinas com poucas palavras.",
|
|
316
226
|
"intent_label": "Guia de operacao",
|
|
317
227
|
"sections": [
|
|
318
228
|
{
|
|
319
229
|
"title": "Por que comandos economizam tempo",
|
|
320
|
-
"paragraphs": [
|
|
321
|
-
"Em grupos ativos, as mesmas perguntas aparecem muitas vezes.",
|
|
322
|
-
"Com comando pronto, o admin responde com consistencia e reduz desgaste da equipe."
|
|
323
|
-
]
|
|
230
|
+
"paragraphs": ["Em grupos ativos, as mesmas perguntas aparecem muitas vezes.", "Com comando pronto, o admin responde com consistencia e reduz desgaste da equipe."]
|
|
324
231
|
},
|
|
325
232
|
{
|
|
326
233
|
"title": "Boas praticas de comandos",
|
|
327
|
-
"paragraphs": [
|
|
328
|
-
|
|
329
|
-
"Padronize respostas para regras, horarios, links oficiais e orientacoes internas."
|
|
330
|
-
],
|
|
331
|
-
"bullets": [
|
|
332
|
-
"Comando de menu",
|
|
333
|
-
"Comando de regras",
|
|
334
|
-
"Comando de suporte"
|
|
335
|
-
]
|
|
234
|
+
"paragraphs": ["Use nomes curtos e intuitivos.", "Padronize respostas para regras, horarios, links oficiais e orientacoes internas."],
|
|
235
|
+
"bullets": ["Comando de menu", "Comando de regras", "Comando de suporte"]
|
|
336
236
|
},
|
|
337
237
|
{
|
|
338
238
|
"title": "Comandos + moderacao + avisos",
|
|
339
|
-
"paragraphs": [
|
|
340
|
-
"Quando essas tres camadas trabalham juntas, a operacao fica muito mais previsivel.",
|
|
341
|
-
"Esse e o caminho mais rapido para profissionalizar grupos e comunidades."
|
|
342
|
-
]
|
|
239
|
+
"paragraphs": ["Quando essas tres camadas trabalham juntas, a operacao fica muito mais previsivel.", "Esse e o caminho mais rapido para profissionalizar grupos e comunidades."]
|
|
343
240
|
}
|
|
344
241
|
],
|
|
345
242
|
"faq": [
|
|
@@ -366,40 +263,23 @@
|
|
|
366
263
|
"slug": "melhor-bot-whatsapp-para-grupos",
|
|
367
264
|
"title": "Melhor bot para WhatsApp em grupos | Como escolher",
|
|
368
265
|
"description": "Compare criterios para escolher o melhor bot para grupos de WhatsApp. Veja o que avaliar em moderacao, automacao e facilidade de uso.",
|
|
369
|
-
"keywords": [
|
|
370
|
-
"melhor bot whatsapp",
|
|
371
|
-
"bot para grupos",
|
|
372
|
-
"comparativo bot whatsapp"
|
|
373
|
-
],
|
|
266
|
+
"keywords": ["melhor bot whatsapp", "bot para grupos", "comparativo bot whatsapp"],
|
|
374
267
|
"h1": "Melhor bot para grupos de WhatsApp: o que realmente importa",
|
|
375
268
|
"intro": "Escolher bot so por nome de marca costuma gerar retrabalho. O criterio certo e avaliar resultado operacional: menos caos, menos spam e mais organizacao.",
|
|
376
269
|
"intent_label": "Comparativo pratico",
|
|
377
270
|
"sections": [
|
|
378
271
|
{
|
|
379
272
|
"title": "Criterios que importam na pratica",
|
|
380
|
-
"paragraphs": [
|
|
381
|
-
|
|
382
|
-
"Se o bot exigir setup tecnico complexo, a adocao no dia a dia tende a cair."
|
|
383
|
-
],
|
|
384
|
-
"bullets": [
|
|
385
|
-
"Tempo para entrar em operacao",
|
|
386
|
-
"Qualidade da moderacao",
|
|
387
|
-
"Capacidade de escalar com o grupo"
|
|
388
|
-
]
|
|
273
|
+
"paragraphs": ["Facilidade de entrada, moderacao automatica e rotina de avisos sao os pilares mais importantes.", "Se o bot exigir setup tecnico complexo, a adocao no dia a dia tende a cair."],
|
|
274
|
+
"bullets": ["Tempo para entrar em operacao", "Qualidade da moderacao", "Capacidade de escalar com o grupo"]
|
|
389
275
|
},
|
|
390
276
|
{
|
|
391
277
|
"title": "Sinal de escolha certa",
|
|
392
|
-
"paragraphs": [
|
|
393
|
-
"A equipe gasta menos tempo apagando incendio e mais tempo gerando valor para membros.",
|
|
394
|
-
"Quando o grupo fica previsivel, a percepcao de profissionalismo sobe."
|
|
395
|
-
]
|
|
278
|
+
"paragraphs": ["A equipe gasta menos tempo apagando incendio e mais tempo gerando valor para membros.", "Quando o grupo fica previsivel, a percepcao de profissionalismo sobe."]
|
|
396
279
|
},
|
|
397
280
|
{
|
|
398
281
|
"title": "Como testar rapido",
|
|
399
|
-
"paragraphs": [
|
|
400
|
-
"Defina um grupo piloto e acompanhe 7 dias de operacao.",
|
|
401
|
-
"Meça reducao de spam, clareza de comunicacao e tempo economizado por admin."
|
|
402
|
-
]
|
|
282
|
+
"paragraphs": ["Defina um grupo piloto e acompanhe 7 dias de operacao.", "Meça reducao de spam, clareza de comunicacao e tempo economizado por admin."]
|
|
403
283
|
}
|
|
404
284
|
],
|
|
405
285
|
"faq": [
|
|
@@ -426,40 +306,23 @@
|
|
|
426
306
|
"slug": "bot-whatsapp-sem-programar",
|
|
427
307
|
"title": "Bot para WhatsApp sem programar | OmniZap",
|
|
428
308
|
"description": "Use bot para WhatsApp sem programar. Adicione no grupo, ative recursos prontos e automatize moderacao, avisos e organizacao em poucos passos.",
|
|
429
|
-
"keywords": [
|
|
430
|
-
"bot whatsapp sem programar",
|
|
431
|
-
"bot pronto whatsapp",
|
|
432
|
-
"automacao whatsapp sem codigo"
|
|
433
|
-
],
|
|
309
|
+
"keywords": ["bot whatsapp sem programar", "bot pronto whatsapp", "automacao whatsapp sem codigo"],
|
|
434
310
|
"h1": "Bot para WhatsApp sem programar: resultado rapido",
|
|
435
311
|
"intro": "Nem toda equipe tem tempo para setup tecnico. Por isso o modelo sem codigo e o caminho mais rapido para automatizar grupos e comunidades.",
|
|
436
312
|
"intent_label": "Sem codigo",
|
|
437
313
|
"sections": [
|
|
438
314
|
{
|
|
439
315
|
"title": "Por que sem codigo acelera",
|
|
440
|
-
"paragraphs": [
|
|
441
|
-
"Quando o foco e operacao, velocidade vale mais do que arquitetura complexa.",
|
|
442
|
-
"Com bot pronto, voce elimina barreiras tecnicas e entra em producao no mesmo dia."
|
|
443
|
-
]
|
|
316
|
+
"paragraphs": ["Quando o foco e operacao, velocidade vale mais do que arquitetura complexa.", "Com bot pronto, voce elimina barreiras tecnicas e entra em producao no mesmo dia."]
|
|
444
317
|
},
|
|
445
318
|
{
|
|
446
319
|
"title": "Aplicacoes imediatas",
|
|
447
|
-
"paragraphs": [
|
|
448
|
-
|
|
449
|
-
"Esses ganhos aparecem rapido, mesmo em grupos pequenos."
|
|
450
|
-
],
|
|
451
|
-
"bullets": [
|
|
452
|
-
"Operacao em minutos",
|
|
453
|
-
"Menos dependencia tecnica",
|
|
454
|
-
"Escala com baixo atrito"
|
|
455
|
-
]
|
|
320
|
+
"paragraphs": ["Moderar spam, enviar avisos e padronizar respostas sao as tres aplicacoes mais comuns.", "Esses ganhos aparecem rapido, mesmo em grupos pequenos."],
|
|
321
|
+
"bullets": ["Operacao em minutos", "Menos dependencia tecnica", "Escala com baixo atrito"]
|
|
456
322
|
},
|
|
457
323
|
{
|
|
458
324
|
"title": "Evolucao futura",
|
|
459
|
-
"paragraphs": [
|
|
460
|
-
"Se no futuro voce precisar de integracoes avancadas, pode usar a API.",
|
|
461
|
-
"Assim voce comeca simples e evolui sem trocar de ecossistema."
|
|
462
|
-
]
|
|
325
|
+
"paragraphs": ["Se no futuro voce precisar de integracoes avancadas, pode usar a API.", "Assim voce comeca simples e evolui sem trocar de ecossistema."]
|
|
463
326
|
}
|
|
464
327
|
],
|
|
465
328
|
"faq": [
|
package/eslint.config.js
CHANGED
|
@@ -2,17 +2,7 @@ import js from '@eslint/js';
|
|
|
2
2
|
|
|
3
3
|
export default [
|
|
4
4
|
{
|
|
5
|
-
ignores: [
|
|
6
|
-
'node_modules/**',
|
|
7
|
-
'logs/**',
|
|
8
|
-
'temp/**',
|
|
9
|
-
'.eslintcache',
|
|
10
|
-
'*.log',
|
|
11
|
-
'**/*.min.js',
|
|
12
|
-
'coverage/**',
|
|
13
|
-
'dist/**',
|
|
14
|
-
'build/**',
|
|
15
|
-
],
|
|
5
|
+
ignores: ['node_modules/**', 'logs/**', 'temp/**', '.eslintcache', '*.log', '**/*.min.js', 'coverage/**', 'dist/**', 'build/**'],
|
|
16
6
|
},
|
|
17
7
|
js.configs.recommended,
|
|
18
8
|
{
|
|
@@ -38,10 +28,7 @@ export default [
|
|
|
38
28
|
rules: {
|
|
39
29
|
'no-var': 'error',
|
|
40
30
|
'prefer-const': 'warn',
|
|
41
|
-
'no-unused-vars': [
|
|
42
|
-
'warn',
|
|
43
|
-
{ argsIgnorePattern: '^_', varsIgnorePattern: '^_', ignoreRestSiblings: true },
|
|
44
|
-
],
|
|
31
|
+
'no-unused-vars': ['warn', { argsIgnorePattern: '^_', varsIgnorePattern: '^_', ignoreRestSiblings: true }],
|
|
45
32
|
'no-console': 'off',
|
|
46
33
|
},
|
|
47
34
|
},
|
package/index.js
CHANGED
|
@@ -20,33 +20,14 @@ import 'dotenv/config';
|
|
|
20
20
|
import logger from './app/utils/logger/loggerModule.js';
|
|
21
21
|
import { connectToWhatsApp, getActiveSocket } from './app/connection/socketController.js';
|
|
22
22
|
import { backfillLidMapFromMessagesOnce } from './app/services/lidMapService.js';
|
|
23
|
-
import {
|
|
24
|
-
initializeNewsBroadcastService,
|
|
25
|
-
stopNewsBroadcastService,
|
|
26
|
-
} from './app/services/newsBroadcastService.js';
|
|
23
|
+
import { initializeNewsBroadcastService, stopNewsBroadcastService } from './app/services/newsBroadcastService.js';
|
|
27
24
|
import initializeDatabase from './database/init.js';
|
|
28
25
|
import { startHttpServer, stopHttpServer } from './server/index.js';
|
|
29
|
-
import {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
} from './app/modules/stickerPackModule/
|
|
33
|
-
import {
|
|
34
|
-
startStickerAutoPackByTagsBackground,
|
|
35
|
-
stopStickerAutoPackByTagsBackground,
|
|
36
|
-
} from './app/modules/stickerPackModule/stickerAutoPackByTagsRuntime.js';
|
|
37
|
-
import {
|
|
38
|
-
isStickerWorkerPipelineEnabled,
|
|
39
|
-
startStickerWorkerPipeline,
|
|
40
|
-
stopStickerWorkerPipeline,
|
|
41
|
-
} from './app/modules/stickerPackModule/stickerWorkerPipelineRuntime.js';
|
|
42
|
-
import {
|
|
43
|
-
startStickerPackScoreSnapshotRuntime,
|
|
44
|
-
stopStickerPackScoreSnapshotRuntime,
|
|
45
|
-
} from './app/modules/stickerPackModule/stickerPackScoreSnapshotRuntime.js';
|
|
46
|
-
import {
|
|
47
|
-
startStickerDomainEventConsumer,
|
|
48
|
-
stopStickerDomainEventConsumer,
|
|
49
|
-
} from './app/modules/stickerPackModule/stickerDomainEventConsumerRuntime.js';
|
|
26
|
+
import { startStickerClassificationBackground, stopStickerClassificationBackground } from './app/modules/stickerPackModule/stickerClassificationBackgroundRuntime.js';
|
|
27
|
+
import { startStickerAutoPackByTagsBackground, stopStickerAutoPackByTagsBackground } from './app/modules/stickerPackModule/stickerAutoPackByTagsRuntime.js';
|
|
28
|
+
import { isStickerWorkerPipelineEnabled, startStickerWorkerPipeline, stopStickerWorkerPipeline } from './app/modules/stickerPackModule/stickerWorkerPipelineRuntime.js';
|
|
29
|
+
import { startStickerPackScoreSnapshotRuntime, stopStickerPackScoreSnapshotRuntime } from './app/modules/stickerPackModule/stickerPackScoreSnapshotRuntime.js';
|
|
30
|
+
import { startStickerDomainEventConsumer, stopStickerDomainEventConsumer } from './app/modules/stickerPackModule/stickerDomainEventConsumerRuntime.js';
|
|
50
31
|
|
|
51
32
|
/**
|
|
52
33
|
* Timeout máximo para inicialização do banco (criar/verificar DB + tabelas).
|
|
@@ -97,21 +78,12 @@ let backfillPromise = null;
|
|
|
97
78
|
* @returns {boolean}
|
|
98
79
|
*/
|
|
99
80
|
const isTransientUnhandledRejection = (reason) => {
|
|
100
|
-
const message =
|
|
101
|
-
reason instanceof Error
|
|
102
|
-
? String(reason.message || '')
|
|
103
|
-
: typeof reason === 'string'
|
|
104
|
-
? reason
|
|
105
|
-
: String(reason || '');
|
|
81
|
+
const message = reason instanceof Error ? String(reason.message || '') : typeof reason === 'string' ? reason : String(reason || '');
|
|
106
82
|
|
|
107
83
|
const normalized = message.trim().toLowerCase();
|
|
108
84
|
if (!normalized) return false;
|
|
109
85
|
|
|
110
|
-
return (
|
|
111
|
-
normalized.includes('rate-overlimit') ||
|
|
112
|
-
normalized.includes('connection closed') ||
|
|
113
|
-
normalized.includes('timed out')
|
|
114
|
-
);
|
|
86
|
+
return normalized.includes('rate-overlimit') || normalized.includes('connection closed') || normalized.includes('timed out');
|
|
115
87
|
};
|
|
116
88
|
|
|
117
89
|
/**
|
|
@@ -98,23 +98,21 @@ OpenAI:
|
|
|
98
98
|
"category": "anime illustration",
|
|
99
99
|
"confidence": 0.82,
|
|
100
100
|
"top_labels": [
|
|
101
|
-
{"label": "anime illustration", "score": 0.82, "logit": 18.
|
|
102
|
-
{"label": "cartoon", "score": 0.09, "logit": 13.
|
|
101
|
+
{ "label": "anime illustration", "score": 0.82, "logit": 18.1, "clip_score": 0.8 },
|
|
102
|
+
{ "label": "cartoon", "score": 0.09, "logit": 13.4, "clip_score": 0.1 }
|
|
103
103
|
],
|
|
104
104
|
"entropy": 1.42,
|
|
105
105
|
"confidence_margin": 0.73,
|
|
106
106
|
"ambiguous": false,
|
|
107
107
|
"nsfw_score": 0.01,
|
|
108
108
|
"is_nsfw": false,
|
|
109
|
-
"raw_logits": {"anime illustration": 18.1, "cartoon": 13.4},
|
|
109
|
+
"raw_logits": { "anime illustration": 18.1, "cartoon": 13.4 },
|
|
110
110
|
"llm_expansion": {
|
|
111
111
|
"subtags": ["cel shading", "shonen vibe"],
|
|
112
112
|
"style_traits": ["high contrast"],
|
|
113
113
|
"emotions": ["energetic"],
|
|
114
114
|
"pack_suggestions": ["anime-reaction"]
|
|
115
115
|
},
|
|
116
|
-
"similar_images": [
|
|
117
|
-
{"image_hash": "...", "asset_id": "...", "similarity": 0.91}
|
|
118
|
-
]
|
|
116
|
+
"similar_images": [{ "image_hash": "...", "asset_id": "...", "similarity": 0.91 }]
|
|
119
117
|
}
|
|
120
118
|
```
|
|
@@ -7,8 +7,8 @@ groups:
|
|
|
7
7
|
labels:
|
|
8
8
|
severity: warning
|
|
9
9
|
annotations:
|
|
10
|
-
summary:
|
|
11
|
-
description:
|
|
10
|
+
summary: 'Query acima de 500ms detectada'
|
|
11
|
+
description: 'Uma ou mais queries excederam 500ms nos últimos 5 minutos.'
|
|
12
12
|
|
|
13
13
|
- alert: OmniZapLidMapUpsertOver1000ms
|
|
14
14
|
expr: increase(omnizap_db_query_over_ms_total{threshold="1000",table="lid_map"}[5m]) > 0
|
|
@@ -16,8 +16,8 @@ groups:
|
|
|
16
16
|
labels:
|
|
17
17
|
severity: critical
|
|
18
18
|
annotations:
|
|
19
|
-
summary:
|
|
20
|
-
description:
|
|
19
|
+
summary: 'UPSERT lid_map acima de 1000ms'
|
|
20
|
+
description: 'UPSERTs em lid_map excederam 1000ms nos últimos 5 minutos.'
|
|
21
21
|
|
|
22
22
|
- alert: OmniZapMySQLLockWaitsHigh
|
|
23
23
|
expr: rate(mysql_global_status_innodb_row_lock_waits[5m]) > 5
|
|
@@ -25,8 +25,8 @@ groups:
|
|
|
25
25
|
labels:
|
|
26
26
|
severity: warning
|
|
27
27
|
annotations:
|
|
28
|
-
summary:
|
|
29
|
-
description:
|
|
28
|
+
summary: 'Lock waits elevados no InnoDB'
|
|
29
|
+
description: 'Taxa de lock waits acima de 5/s nos últimos 5 minutos.'
|
|
30
30
|
|
|
31
31
|
- name: omnizap-queues
|
|
32
32
|
rules:
|
|
@@ -36,8 +36,8 @@ groups:
|
|
|
36
36
|
labels:
|
|
37
37
|
severity: warning
|
|
38
38
|
annotations:
|
|
39
|
-
summary:
|
|
40
|
-
description:
|
|
39
|
+
summary: 'Fila de mensagens alta'
|
|
40
|
+
description: 'Backlog da fila de mensagens acima de 2000.'
|
|
41
41
|
|
|
42
42
|
- name: omnizap-host
|
|
43
43
|
rules:
|
|
@@ -47,8 +47,8 @@ groups:
|
|
|
47
47
|
labels:
|
|
48
48
|
severity: critical
|
|
49
49
|
annotations:
|
|
50
|
-
summary:
|
|
51
|
-
description:
|
|
50
|
+
summary: 'Disco acima de 80%'
|
|
51
|
+
description: 'Uso de disco acima de 80% por 10 minutos.'
|
|
52
52
|
|
|
53
53
|
- alert: OmniZapMemoryUsageHigh
|
|
54
54
|
expr: (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) > 0.80
|
|
@@ -56,5 +56,5 @@ groups:
|
|
|
56
56
|
labels:
|
|
57
57
|
severity: warning
|
|
58
58
|
annotations:
|
|
59
|
-
summary:
|
|
60
|
-
description:
|
|
59
|
+
summary: 'Memória acima de 80%'
|
|
60
|
+
description: 'Uso de memória acima de 80% por 10 minutos.'
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kaikybrofc/omnizap-system",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.3.1",
|
|
4
4
|
"description": "Sistema profissional de automação WhatsApp com tecnologia Baileys",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"publishConfig": {
|
|
@@ -38,7 +38,9 @@
|
|
|
38
38
|
"release:major": "RELEASE_TYPE=major bash ./scripts/release.sh",
|
|
39
39
|
"test": "node --test",
|
|
40
40
|
"lint": "eslint .",
|
|
41
|
-
"lint:fix": "eslint . --fix"
|
|
41
|
+
"lint:fix": "eslint . --fix",
|
|
42
|
+
"format": "node ./scripts/run-prettier-all.mjs --write",
|
|
43
|
+
"format:check": "node ./scripts/run-prettier-all.mjs --check"
|
|
42
44
|
},
|
|
43
45
|
"dependencies": {
|
|
44
46
|
"@hapi/boom": "^10.0.1",
|
|
@@ -68,7 +70,8 @@
|
|
|
68
70
|
},
|
|
69
71
|
"devDependencies": {
|
|
70
72
|
"eslint": "^9.39.2",
|
|
71
|
-
"pm2": "^6.0.11"
|
|
73
|
+
"pm2": "^6.0.11",
|
|
74
|
+
"prettier": "^3.8.1"
|
|
72
75
|
},
|
|
73
76
|
"engines": {
|
|
74
77
|
"node": ">=16.0.0"
|