Aplicativo desktop (Electron) para importacao controlada de dados Excel no Bitrix24. O fluxo inclui mapeamento coluna->campo, normalizacao, deduplicacao e distribuicao por usuario com limite de carga.
Este README foi escrito para publicacao sem expor dados confidenciais. Nenhuma credencial, webhook ou informacao sensivel deve ser versionada.
- Entrada: planilha Excel (.xlsx/.xls) com cabecalhos na primeira linha.
- Saida: mesma planilha com coluna de status atualizada (ex: IMPORTADO = SIM/ERRO).
- Entidades suportadas pela UI: lead e deal (com validacao dinamica de campos no Bitrix).
- Operacoes: cria, atualiza ou ignora registros existentes (baseado em telefone/email quando aplicavel).
- Distribuicao: round-robin simples com limite por usuario do departamento.
- UI seleciona arquivo Excel e entidade (lead/deal).
- UI consulta campos da entidade via
crm.{entity}.fields. - UI monta o mapeamento coluna->campo e valida campos customizados.
- Backend le a planilha e cria um mapa de colunas.
- Para cada linha nao marcada como importada:
- Normaliza dados (telefone/CPF/CNPJ quando presentes).
- Busca existente por telefone/email (contato/empresa quando aplicavel).
- Atualiza se houver diferencas, senao ignora.
- Se nao existir, cria novo registro com
ASSIGNED_BY_IDdefinido. - Marca status na coluna configurada.
- Ao final, grava a planilha com status e retorna o relatorio da sessao.
- main.js: janela Electron + IPC (UI -> backend).
- preload.js: exposicao segura da API para o renderer.
- ui/: HTML/CSS/JS com mapeamento, validacao e log de progresso.
- core/:
- runner.js: orquestra leitura, mapeamento, importacao e escrita do Excel.
- importer.js: normalizacao, deduplicacao e decisao create/update/skip.
- distributor.js: round-robin com limite por usuario.
- services/:
- bitrixService.js: cliente REST (webhook) com retry e rate limit.
- excelService.js: I/O de planilha.
- utils/: logger, normalizer, retry, rateLimiter, validator.
crm.{entity}.fields(descoberta de campos)crm.{entity}.list(search por telefone/email)crm.{entity}.add(create)crm.{entity}.update(update)department.get(lista de departamentos)user.get(usuarios por departamento)userfield.get(metadata de campos customizados)
- Node.js LTS.
- Webhook do Bitrix24 com permissao para CRM e usuarios.
npm installnpm run startnpm run cliNo modo CLI, os valores ficam em index.js (arquivo, entidade, usuarios). Ajuste conforme necessario.
npm run pack
npm run distAs configuracoes estao em config.js e variaveis de ambiente via dotenv. Nao versionar dados reais.
Use o arquivo .env.example como base e crie um .env local com valores ficticios.
Exemplo de .env:
BITRIX_WEBHOOK=https://example.bitrix24.com.br/rest/1/xxxxxxxx/
REQUEST_TIMEOUT=20000
MAX_RETRY=3
RATE_LIMIT_DELAY=400
MAX_PER_USER=6
STATUS_COLUMN=IMPORTADO
BITRIX_WEBHOOK: base URL do webhook (sem expor tokens reais).REQUEST_TIMEOUT: timeout de chamadas HTTP (ms).MAX_RETRY: tentativas com backoff.RATE_LIMIT_DELAY: delay por chamada para evitar limite da API.MAX_PER_USER: limite de registros por usuario.STATUS_COLUMN: nome da coluna de status na planilha.
- Para entidades contact/company, busca por
PHONEe depoisEMAIL. - A normalizacao remove nao numericos de telefone/CPF/CNPJ.
- Atualizacao ocorre somente quando existe diferenca entre campos.
- Logger de sessao gera contadores (created/updated/skipped/errors) e detalhes por linha.
- UI recebe eventos de progresso via IPC e exibe log em tempo real.
- Nunca versionar
.envcom valores reais. - Nao incluir dados pessoais em exemplos.
- Evitar logs persistentes com dados sensiveis.
importador-bitrix/
core/
services/
ui/
utils/
.env.example
CHANGELOG.md
config.js
index.js
main.js
preload.js
- A UI suporta lead e deal; outras entidades exigem ajustes.
- A planilha processada usa a primeira aba e a primeira linha como cabecalho.
- A deduplicacao por telefone/email so e aplicada a contact/company.
- O arquivo de origem e sobrescrito com status (nao ha modo dry-run).
- A importacao e sequencial, sem paralelismo por design.
- Releases: https://github.com/OsmarZM/Importador-Bitrix24/releases
- Changelog: CHANGELOG.md (Keep a Changelog)
Defina a licenca que voce deseja ao publicar o repositorio (ex: MIT, Apache-2.0).