@kaikybrofc/omnizap-system 2.2.9 → 2.3.0

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.
Files changed (121) hide show
  1. package/README.md +20 -18
  2. package/app/config/adminIdentity.js +1 -3
  3. package/app/connection/socketController.js +10 -20
  4. package/app/controllers/messageController.js +7 -28
  5. package/app/modules/aiModule/catCommand.js +29 -192
  6. package/app/modules/broadcastModule/noticeCommand.js +28 -97
  7. package/app/modules/gameModule/diceCommand.js +6 -32
  8. package/app/modules/playModule/playCommand.js +57 -258
  9. package/app/modules/quoteModule/quoteCommand.js +2 -4
  10. package/app/modules/rpgPokemonModule/rpgPokemonRepository.js +1 -13
  11. package/app/modules/statsModule/noMessageCommand.js +16 -84
  12. package/app/modules/statsModule/rankingCommand.js +5 -25
  13. package/app/modules/statsModule/rankingCommon.js +1 -9
  14. package/app/modules/stickerModule/convertToWebp.js +4 -27
  15. package/app/modules/stickerModule/stickerCommand.js +13 -24
  16. package/app/modules/stickerModule/stickerTextCommand.js +13 -25
  17. package/app/modules/stickerPackModule/autoPackCollectorService.js +16 -7
  18. package/app/modules/stickerPackModule/domainEventOutboxRepository.js +20 -36
  19. package/app/modules/stickerPackModule/domainEvents.js +2 -11
  20. package/app/modules/stickerPackModule/semanticReclassificationEngine.js +13 -50
  21. package/app/modules/stickerPackModule/semanticReclassificationEngine.test.js +2 -15
  22. package/app/modules/stickerPackModule/semanticThemeClusterService.js +14 -41
  23. package/app/modules/stickerPackModule/stickerAssetClassificationRepository.js +25 -95
  24. package/app/modules/stickerPackModule/stickerAssetRepository.js +12 -31
  25. package/app/modules/stickerPackModule/stickerAssetReprocessQueueRepository.js +13 -18
  26. package/app/modules/stickerPackModule/stickerAutoPackByTagsRuntime.js +284 -709
  27. package/app/modules/stickerPackModule/stickerClassificationBackgroundRuntime.js +27 -106
  28. package/app/modules/stickerPackModule/stickerClassificationService.js +46 -77
  29. package/app/modules/stickerPackModule/stickerDedicatedTaskWorkerRuntime.js +13 -53
  30. package/app/modules/stickerPackModule/stickerDomainEventBus.js +10 -16
  31. package/app/modules/stickerPackModule/stickerDomainEventConsumerRuntime.js +13 -34
  32. package/app/modules/stickerPackModule/stickerMarketplaceDriftService.js +1 -4
  33. package/app/modules/stickerPackModule/stickerObjectStorageService.js +26 -26
  34. package/app/modules/stickerPackModule/stickerPackCommandHandlers.js +32 -187
  35. package/app/modules/stickerPackModule/stickerPackInteractionEventRepository.js +6 -15
  36. package/app/modules/stickerPackModule/stickerPackItemRepository.js +6 -32
  37. package/app/modules/stickerPackModule/stickerPackMarketplaceService.js +12 -36
  38. package/app/modules/stickerPackModule/stickerPackMessageService.js +12 -40
  39. package/app/modules/stickerPackModule/stickerPackRepository.js +23 -66
  40. package/app/modules/stickerPackModule/stickerPackScoreSnapshotRepository.js +9 -21
  41. package/app/modules/stickerPackModule/stickerPackScoreSnapshotRuntime.js +10 -40
  42. package/app/modules/stickerPackModule/stickerPackService.js +50 -115
  43. package/app/modules/stickerPackModule/stickerPackServiceRuntime.js +2 -21
  44. package/app/modules/stickerPackModule/stickerPackUtils.js +13 -3
  45. package/app/modules/stickerPackModule/stickerStorageService.js +16 -65
  46. package/app/modules/stickerPackModule/stickerWorkerPipelineRuntime.js +4 -22
  47. package/app/modules/stickerPackModule/stickerWorkerTaskQueueRepository.js +14 -29
  48. package/app/modules/systemMetricsModule/pingCommand.js +9 -39
  49. package/app/modules/tiktokModule/tiktokCommand.js +17 -109
  50. package/app/modules/userModule/userCommand.js +2 -88
  51. package/app/observability/metrics.js +5 -16
  52. package/app/services/captchaService.js +1 -6
  53. package/app/services/dbWriteQueue.js +3 -18
  54. package/app/services/featureFlagService.js +2 -8
  55. package/app/services/newsBroadcastService.js +0 -1
  56. package/app/services/queueUtils.js +2 -4
  57. package/app/services/whatsappLoginLinkService.js +7 -9
  58. package/app/store/premiumUserStore.js +1 -2
  59. package/app/utils/antiLink/antiLinkModule.js +3 -233
  60. package/app/utils/logger/loggerModule.js +9 -34
  61. package/app/utils/systemMetrics/systemMetricsModule.js +1 -4
  62. package/database/init.js +1 -8
  63. package/docker-compose.yml +27 -27
  64. package/docs/seo/omnizap-seo-playbook-br-2026-02-28.md +220 -0
  65. package/docs/seo/satellite-page-template.md +91 -0
  66. package/docs/seo/satellite-pages-phase1.json +349 -0
  67. package/eslint.config.js +2 -15
  68. package/index.js +8 -36
  69. package/ml/clip_classifier/README.md +4 -6
  70. package/observability/alert-rules.yml +12 -12
  71. package/observability/grafana/provisioning/dashboards/dashboards.yml +1 -1
  72. package/package.json +8 -3
  73. package/public/api-docs/index.html +224 -141
  74. package/public/bot-whatsapp-para-grupo/index.html +306 -0
  75. package/public/bot-whatsapp-sem-programar/index.html +306 -0
  76. package/public/comandos/index.html +428 -0
  77. package/public/como-automatizar-avisos-no-whatsapp/index.html +306 -0
  78. package/public/como-criar-comandos-whatsapp/index.html +306 -0
  79. package/public/como-evitar-spam-no-whatsapp/index.html +306 -0
  80. package/public/como-moderar-grupo-whatsapp/index.html +306 -0
  81. package/public/como-organizar-comunidade-whatsapp/index.html +306 -0
  82. package/public/css/github-project-panel.css +20 -15
  83. package/public/css/stickers-admin.css +55 -39
  84. package/public/css/styles.css +37 -29
  85. package/public/index.html +1060 -1417
  86. package/public/js/apps/apiDocsApp.js +36 -153
  87. package/public/js/apps/createPackApp.js +69 -332
  88. package/public/js/apps/homeApp.js +201 -434
  89. package/public/js/apps/loginApp.js +3 -12
  90. package/public/js/apps/stickersAdminApp.js +190 -181
  91. package/public/js/apps/stickersApp.js +507 -1366
  92. package/public/js/catalog.js +11 -74
  93. package/public/js/github-panel/components/ErrorState.js +1 -8
  94. package/public/js/github-panel/components/GithubProjectPanel.js +2 -9
  95. package/public/js/github-panel/components/SkeletonPanel.js +1 -11
  96. package/public/js/github-panel/components/StatCard.js +1 -7
  97. package/public/js/github-panel/vendor/react.js +1 -9
  98. package/public/js/runtime/react-runtime.js +1 -9
  99. package/public/licenca/index.html +104 -86
  100. package/public/login/index.html +315 -321
  101. package/public/melhor-bot-whatsapp-para-grupos/index.html +306 -0
  102. package/public/sitemap.xml +45 -0
  103. package/public/stickers/admin/index.html +14 -19
  104. package/public/stickers/create/index.html +39 -43
  105. package/public/stickers/index.html +97 -41
  106. package/public/termos-de-uso/index.html +142 -115
  107. package/public/user/index.html +347 -346
  108. package/scripts/cache-bust.mjs +5 -24
  109. package/scripts/generate-seo-satellite-pages.mjs +431 -0
  110. package/scripts/run-prettier-all.mjs +25 -0
  111. package/scripts/sticker-catalog-loadtest.mjs +13 -11
  112. package/scripts/sticker-worker-task.mjs +1 -4
  113. package/scripts/sync-readme-snapshot.mjs +3 -2
  114. package/server/controllers/stickerCatalogController.js +407 -704
  115. package/server/http/httpServer.js +2 -10
  116. package/server/routes/stickerCatalog/catalogHandlers/catalogAdminHttp.js +1 -8
  117. package/server/routes/stickerCatalog/catalogHandlers/catalogAuthHttp.js +1 -9
  118. package/server/routes/stickerCatalog/catalogHandlers/catalogPublicHttp.js +10 -11
  119. package/server/routes/stickerCatalog/catalogHandlers/catalogUploadHttp.js +1 -10
  120. package/server/routes/stickerCatalog/catalogRouter.js +11 -13
  121. package/kaikybrofc-omnizap-system-2.2.9.tgz +0 -0
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
- startStickerClassificationBackground,
31
- stopStickerClassificationBackground,
32
- } from './app/modules/stickerPackModule/stickerClassificationBackgroundRuntime.js';
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.10, "clip_score": 0.80},
102
- {"label": "cartoon", "score": 0.09, "logit": 13.40, "clip_score": 0.10}
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: "Query acima de 500ms detectada"
11
- description: "Uma ou mais queries excederam 500ms nos últimos 5 minutos."
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: "UPSERT lid_map acima de 1000ms"
20
- description: "UPSERTs em lid_map excederam 1000ms nos últimos 5 minutos."
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: "Lock waits elevados no InnoDB"
29
- description: "Taxa de lock waits acima de 5/s nos últimos 5 minutos."
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: "Fila de mensagens alta"
40
- description: "Backlog da fila de mensagens acima de 2000."
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: "Disco acima de 80%"
51
- description: "Uso de disco acima de 80% por 10 minutos."
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: "Memória acima de 80%"
60
- description: "Uso de memória acima de 80% por 10 minutos."
59
+ summary: 'Memória acima de 80%'
60
+ description: 'Uso de memória acima de 80% por 10 minutos.'
@@ -3,7 +3,7 @@ apiVersion: 1
3
3
  providers:
4
4
  - name: omnizap
5
5
  orgId: 1
6
- folder: "OmniZap"
6
+ folder: 'OmniZap'
7
7
  type: file
8
8
  disableDeletion: false
9
9
  updateIntervalSeconds: 30
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kaikybrofc/omnizap-system",
3
- "version": "2.2.9",
3
+ "version": "2.3.0",
4
4
  "description": "Sistema profissional de automação WhatsApp com tecnologia Baileys",
5
5
  "main": "index.js",
6
6
  "publishConfig": {
@@ -31,12 +31,16 @@
31
31
  "worker:sticker:classification": "node ./scripts/sticker-worker-task.mjs --task-type classification_cycle",
32
32
  "worker:sticker:curation": "node ./scripts/sticker-worker-task.mjs --task-type curation_cycle",
33
33
  "worker:sticker:rebuild": "node ./scripts/sticker-worker-task.mjs --task-type rebuild_cycle",
34
+ "seo:generate:satellites": "node ./scripts/generate-seo-satellite-pages.mjs",
35
+ "seo:generate:satellites:phase1": "node ./scripts/generate-seo-satellite-pages.mjs --config docs/seo/satellite-pages-phase1.json --out public",
34
36
  "release": "bash ./scripts/release.sh",
35
37
  "release:minor": "RELEASE_TYPE=minor bash ./scripts/release.sh",
36
38
  "release:major": "RELEASE_TYPE=major bash ./scripts/release.sh",
37
39
  "test": "node --test",
38
40
  "lint": "eslint .",
39
- "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"
40
44
  },
41
45
  "dependencies": {
42
46
  "@hapi/boom": "^10.0.1",
@@ -66,7 +70,8 @@
66
70
  },
67
71
  "devDependencies": {
68
72
  "eslint": "^9.39.2",
69
- "pm2": "^6.0.11"
73
+ "pm2": "^6.0.11",
74
+ "prettier": "^3.8.1"
70
75
  },
71
76
  "engines": {
72
77
  "node": ">=16.0.0"
@@ -1,144 +1,227 @@
1
1
  <!doctype html>
2
2
  <html lang="pt-BR">
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width, initial-scale=1" />
6
- <title>OmniZap API Docs | Sticker Packs</title>
7
- <meta name="description" content="Documentação da API pública de sticker packs do OmniZap System." />
8
- <meta name="keywords" content="omnizap api, documentação api, sticker packs api, whatsapp bot api" />
9
- <meta name="author" content="OmniZap System" />
10
- <meta name="robots" content="index, follow, max-snippet:-1" />
11
- <link rel="canonical" href="https://omnizap.shop/api-docs/" />
12
- <link rel="icon" type="image/jpeg" href="https://iili.io/FC3FABe.jpg" />
13
- <link rel="apple-touch-icon" href="https://iili.io/FC3FABe.jpg" />
14
- <link rel="sitemap" type="application/xml" href="https://omnizap.shop/sitemap.xml" />
15
- <meta property="og:type" content="website" />
16
- <meta property="og:locale" content="pt_BR" />
17
- <meta property="og:site_name" content="OmniZap System" />
18
- <meta property="og:title" content="OmniZap API Docs | Sticker Packs" />
19
- <meta property="og:description" content="Documentação técnica da API pública de sticker packs do OmniZap System." />
20
- <meta property="og:url" content="https://omnizap.shop/api-docs/" />
21
- <meta property="og:image" content="https://iili.io/fSNGag2.png" />
22
- <meta name="twitter:card" content="summary_large_image" />
23
- <meta name="twitter:title" content="OmniZap API Docs" />
24
- <meta name="twitter:description" content="Referência da API pública do OmniZap para sticker packs." />
25
- <meta name="twitter:image" content="https://iili.io/fSNGag2.png" />
26
- <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/all.min.css" rel="stylesheet" />
27
- <style>
28
- body {
29
- margin: 0;
30
- font-family: ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif;
31
- background: #0b1020;
32
- color: #e6edf7;
33
- }
34
- .wrap { width: min(1024px, 92vw); margin: 0 auto; padding: 30px 0; }
35
- h1, h2 { margin: 0 0 10px; }
36
- h1 { font-size: 34px; }
37
- h2 { font-size: 20px; margin-top: 22px; }
38
- .section-title { margin: 22px 0 10px; }
39
- .sub-title { font-size: 18px; margin: 0 0 10px; }
40
- p { color: #9fb0cc; }
41
- .card {
42
- border: 1px solid #2a3b60;
43
- background: #121a2f;
44
- border-radius: 12px;
45
- padding: 16px;
46
- margin-bottom: 12px;
47
- }
48
- .list {
49
- margin: 0;
50
- padding-left: 18px;
51
- color: #c5d4ea;
52
- line-height: 1.7;
53
- }
54
- .status-row {
55
- display: flex;
56
- gap: 10px;
57
- align-items: center;
58
- flex-wrap: wrap;
59
- margin-bottom: 10px;
60
- }
61
- .badge {
62
- display: inline-flex;
63
- align-items: center;
64
- border-radius: 999px;
65
- padding: 6px 10px;
66
- border: 1px solid transparent;
67
- font-size: 12px;
68
- font-weight: 700;
69
- letter-spacing: .2px;
70
- }
71
- .badge-ok {
72
- color: #d8ffea;
73
- background: #103724;
74
- border-color: #1f6a42;
75
- }
76
- .badge-warn {
77
- color: #f5eed6;
78
- background: #34280f;
79
- border-color: #6b5422;
80
- }
81
- .badge-bad {
82
- color: #ffd8de;
83
- background: #3a141d;
84
- border-color: #713041;
85
- }
86
- .status-meta {
87
- color: #9fb0cc;
88
- font-size: 13px;
89
- }
90
- .status-grid {
91
- display: grid;
92
- grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
93
- gap: 8px;
94
- }
95
- .status-item {
96
- border: 1px solid #314669;
97
- border-radius: 10px;
98
- padding: 10px;
99
- background: #0f1729;
100
- display: grid;
101
- gap: 4px;
102
- }
103
- .status-item strong {
104
- font-size: 12px;
105
- color: #9fb0cc;
106
- text-transform: uppercase;
107
- letter-spacing: .3px;
108
- }
109
- .status-item span {
110
- font-size: 14px;
111
- color: #d5f8e1;
112
- }
113
- .status-error {
114
- margin-top: 10px;
115
- color: #ffb4c1;
116
- font-size: 13px;
117
- }
118
- code, pre {
119
- font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
120
- background: #0f1729;
121
- border-radius: 8px;
122
- }
123
- pre {
124
- padding: 12px;
125
- overflow: auto;
126
- border: 1px solid #314669;
127
- color: #d5f8e1;
128
- }
129
- .top a {
130
- color: #38bdf8;
131
- text-decoration: none;
132
- margin-right: 12px;
133
- }
134
- .icon {
135
- margin-right: 8px;
136
- color: #8ec5ff;
137
- }
138
- </style>
139
- </head>
140
- <body>
141
- <div id="api-docs-react-root"></div>
142
- <script type="module" src="/js/apps/apiDocsApp.js?v=20260226-api-docs-plus"></script>
143
- </body>
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <title>OmniZap API Docs | Área de Desenvolvedor da API WhatsApp</title>
7
+ <meta name="description" content="Área de desenvolvedor da API OmniZap para bots e automação WhatsApp: endpoints, casos de uso, exemplos práticos e integração do módulo de stickers." />
8
+ <meta name="keywords" content="omnizap api, api whatsapp, bot whatsapp api, automação whatsapp, documentação api, integração stickers" />
9
+ <meta name="author" content="OmniZap System" />
10
+ <meta name="robots" content="index, follow, max-snippet:-1" />
11
+ <link rel="canonical" href="https://omnizap.shop/api-docs/" />
12
+ <link rel="icon" type="image/jpeg" href="https://iili.io/FC3FABe.jpg" />
13
+ <link rel="apple-touch-icon" href="https://iili.io/FC3FABe.jpg" />
14
+ <link rel="sitemap" type="application/xml" href="https://omnizap.shop/sitemap.xml" />
15
+ <meta property="og:type" content="website" />
16
+ <meta property="og:locale" content="pt_BR" />
17
+ <meta property="og:site_name" content="OmniZap System" />
18
+ <meta property="og:title" content="OmniZap API Docs | Área de Desenvolvedor" />
19
+ <meta property="og:description" content="Documentação técnica da API OmniZap para bots WhatsApp, automações e integração com stickers." />
20
+ <meta property="og:url" content="https://omnizap.shop/api-docs/" />
21
+ <meta property="og:image" content="https://iili.io/fSNGag2.png" />
22
+ <meta name="twitter:card" content="summary_large_image" />
23
+ <meta name="twitter:title" content="OmniZap API Docs | Área de Desenvolvedor" />
24
+ <meta name="twitter:description" content="Referência da API OmniZap para bots WhatsApp, automações e stickers." />
25
+ <meta name="twitter:image" content="https://iili.io/fSNGag2.png" />
26
+ <script type="application/ld+json">
27
+ {
28
+ "@context": "https://schema.org",
29
+ "@type": "SoftwareApplication",
30
+ "name": "OmniZap API",
31
+ "applicationCategory": "DeveloperApplication",
32
+ "operatingSystem": "Linux, Windows, macOS",
33
+ "url": "https://omnizap.shop/api-docs/",
34
+ "description": "API do OmniZap para bots e automação WhatsApp, com endpoints para catálogo de stickers, métricas e integrações técnicas.",
35
+ "offers": {
36
+ "@type": "Offer",
37
+ "price": "0",
38
+ "priceCurrency": "USD"
39
+ }
40
+ }
41
+ </script>
42
+ <script type="application/ld+json">
43
+ {
44
+ "@context": "https://schema.org",
45
+ "@type": "FAQPage",
46
+ "mainEntity": [
47
+ {
48
+ "@type": "Question",
49
+ "name": "Para que serve a API OmniZap?",
50
+ "acceptedAnswer": {
51
+ "@type": "Answer",
52
+ "text": "A API OmniZap permite integrar bots e fluxos de automação WhatsApp, incluindo catálogo de stickers, métricas e rotas para operações técnicas."
53
+ }
54
+ },
55
+ {
56
+ "@type": "Question",
57
+ "name": "Consigo usar os packs de stickers no meu bot?",
58
+ "acceptedAnswer": {
59
+ "@type": "Answer",
60
+ "text": "Sim. Os packs públicos podem ser consultados por API e utilizados em fluxos do seu bot ou integração server-to-server."
61
+ }
62
+ },
63
+ {
64
+ "@type": "Question",
65
+ "name": "A API tem exemplos práticos de integração?",
66
+ "acceptedAnswer": {
67
+ "@type": "Answer",
68
+ "text": "Sim. A página inclui exemplos em cURL, JavaScript e Node.js para acelerar o início da integração."
69
+ }
70
+ },
71
+ {
72
+ "@type": "Question",
73
+ "name": "Onde vejo o catálogo de stickers?",
74
+ "acceptedAnswer": {
75
+ "@type": "Answer",
76
+ "text": "O catálogo está disponível em https://omnizap.shop/stickers/ e funciona como módulo integrado à plataforma OmniZap."
77
+ }
78
+ }
79
+ ]
80
+ }
81
+ </script>
82
+ <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/all.min.css" rel="stylesheet" />
83
+ <style>
84
+ body {
85
+ margin: 0;
86
+ font-family:
87
+ ui-sans-serif,
88
+ system-ui,
89
+ -apple-system,
90
+ Segoe UI,
91
+ Roboto,
92
+ Arial,
93
+ sans-serif;
94
+ background: #0f172a;
95
+ color: #f8fafc;
96
+ }
97
+ .wrap {
98
+ width: min(1024px, 92vw);
99
+ margin: 0 auto;
100
+ padding: 30px 0;
101
+ }
102
+ h1,
103
+ h2 {
104
+ margin: 0 0 10px;
105
+ }
106
+ h1 {
107
+ font-size: 34px;
108
+ }
109
+ h2 {
110
+ font-size: 20px;
111
+ margin-top: 22px;
112
+ }
113
+ .section-title {
114
+ margin: 22px 0 10px;
115
+ }
116
+ .sub-title {
117
+ font-size: 18px;
118
+ margin: 0 0 10px;
119
+ }
120
+ p {
121
+ color: #94a3b8;
122
+ }
123
+ .card {
124
+ border: 1px solid rgba(255, 255, 255, 0.05);
125
+ background: #1e293b;
126
+ border-radius: 12px;
127
+ padding: 16px;
128
+ margin-bottom: 12px;
129
+ }
130
+ .list {
131
+ margin: 0;
132
+ padding-left: 18px;
133
+ color: #c5d4ea;
134
+ line-height: 1.7;
135
+ }
136
+ .status-row {
137
+ display: flex;
138
+ gap: 10px;
139
+ align-items: center;
140
+ flex-wrap: wrap;
141
+ margin-bottom: 10px;
142
+ }
143
+ .badge {
144
+ display: inline-flex;
145
+ align-items: center;
146
+ border-radius: 999px;
147
+ padding: 6px 10px;
148
+ border: 1px solid transparent;
149
+ font-size: 12px;
150
+ font-weight: 700;
151
+ letter-spacing: 0.2px;
152
+ }
153
+ .badge-ok {
154
+ color: #d8ffea;
155
+ background: #103724;
156
+ border-color: #1f6a42;
157
+ }
158
+ .badge-warn {
159
+ color: #f5eed6;
160
+ background: #34280f;
161
+ border-color: #6b5422;
162
+ }
163
+ .badge-bad {
164
+ color: #ffd8de;
165
+ background: #3a141d;
166
+ border-color: #713041;
167
+ }
168
+ .status-meta {
169
+ color: #94a3b8;
170
+ font-size: 13px;
171
+ }
172
+ .status-grid {
173
+ display: grid;
174
+ grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
175
+ gap: 8px;
176
+ }
177
+ .status-item {
178
+ border: 1px solid rgba(255, 255, 255, 0.05);
179
+ border-radius: 10px;
180
+ padding: 10px;
181
+ background: #111827;
182
+ display: grid;
183
+ gap: 4px;
184
+ }
185
+ .status-item strong {
186
+ font-size: 12px;
187
+ color: #94a3b8;
188
+ text-transform: uppercase;
189
+ letter-spacing: 0.3px;
190
+ }
191
+ .status-item span {
192
+ font-size: 14px;
193
+ color: #f8fafc;
194
+ }
195
+ .status-error {
196
+ margin-top: 10px;
197
+ color: #ffb4c1;
198
+ font-size: 13px;
199
+ }
200
+ code,
201
+ pre {
202
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
203
+ background: #111827;
204
+ border-radius: 8px;
205
+ }
206
+ pre {
207
+ padding: 12px;
208
+ overflow: auto;
209
+ border: 1px solid rgba(255, 255, 255, 0.05);
210
+ color: #f8fafc;
211
+ }
212
+ .top a {
213
+ color: #2563eb;
214
+ text-decoration: none;
215
+ margin-right: 12px;
216
+ }
217
+ .icon {
218
+ margin-right: 8px;
219
+ color: #7c3aed;
220
+ }
221
+ </style>
222
+ </head>
223
+ <body>
224
+ <div id="api-docs-react-root"></div>
225
+ <script type="module" src="/js/apps/apiDocsApp.js?v=20260226-api-docs-plus"></script>
226
+ </body>
144
227
  </html>