Modelo de Backend para App de CRM
React Native — Guia de Schema, API e IA
Um schema de backend de React Native CRM pronto para produção e Starter Kit na Back4app: Contato, Empresa, Negócio, Atividade, estágios do pipeline, diagrama ER, dicionário de dados, schema JSON, playground de API e um prompt de Agente de IA com um clique para implantar em minutos.
Principais Conclusões
Nesta página você obtém um schema de CRM pronto para produção, um prompt de IA com um clique e código React Native passo a passo — para que você possa lançar um app de CRM sem construir o backend.
- Implante em minutos — Cole o prompt do Agente de IA e obtenha um aplicativo em funcionamento com contatos, empresas, negócios e pipeline.
- Seguro por padrão — ACLs e acesso baseado em funções para que os usuários vejam apenas seus negócios e dados atribuídos.
- React Native-nativo SDK — Objetos tipados, async/await, fixação offline e Live Queries para atualizações de pipeline.
- REST + GraphQL — Ambas as APIs geradas automaticamente; filtre negócios por estágio, liste atividades por relacionado a.
- Cinco classes — _Usuário (embutido), Empresa, Contato, Negócio (pipeline), Atividade (tarefas/eventos).
O que é o modelo de backend do aplicativo CRM nativo React?
Este modelo oferece aplicativos nativos React um backend CRM pronto no Back4app com suporte offline-primeiro. Fixe objetos de Contato, Negócio e Atividade localmente para que representantes de campo possam trabalhar sem conectividade; sincronize quando voltar online. Um backend para iOS e Android, com Live Queries para atualizações de pipeline. Perfeito para aplicativos de vendas e serviços de campo que precisam de acesso offline confiável.
Melhor para:
Visão geral
Os aplicativos de CRM Nativo React frequentemente operam em campo com conectividade irregular. Este modelo combina o esquema de CRM do Back4app com o SDK Nativo Parse React: fixe objetos de Contato e Negócio localmente, consulte quando offline e sincronize quando voltar online. Live Queries mantém o pipeline sincronizado entre dispositivos.
As cinco classes (_User, Company, Contact, Deal, Activity) são as mesmas no servidor; o SDK gerencia a sincronização e a resolução de conflitos. Use um backend para iOS e Android e concentre seu código em telas e navegação.
Recursos principais do CRM
React CRM nativo com gerenciamento de contatos, pipeline de negócios e fixação offline-primeiro. ACLs integradas e Live Queries para que os representantes de campo vejam apenas seus negócios e contatos.
Gerenciamento de contatos
Armazene e gerencie contatos com nome, e-mail, telefone, empresa e notas. Ideal para aplicativos React Native.
Gestão de empresas
Rastreie empresas com nome, site, setor e endereço. Links para contatos e negócios.
Pipeline de negócios
Pipeline de vendas com etapas, valor, data de fechamento esperada e atribuição. Construído para backends React Native.
Rastreamento de atividades
Registre chamadas, e-mails, reuniões e notas vinculadas a contatos e negócios. Funciona com o SDK React Native.
Usuário e permissões
Modelo de usuário embutido e referências para propriedade e atribuição. ACLs prontas para uso para React Native.
Por que construir seu backend nativo de CRM React com Back4app?
Back4app oferece um backend pronto e o SDK nativo Parse React para que você possa se concentrar na experiência do usuário do pipeline e offline para representantes de campo.
- •Offline-first e sincronização: Fixe objetos de Contato, Negócio e Atividade para que o aplicativo funcione offline e sincronize quando voltar online—ideal para CRM móvel.
- •Componentes e hooks: Use o SDK com hooks do React; mantenha o estado do pipeline e do contato sincronizados com consultas do Parse e Live Queries.
- •Multiplataforma, um backend: Mesma estrutura e APIs para iOS e Android; um backend para ambas as plataformas.
Ideal para equipes nativas do React construindo aplicativos de CRM ou vendas com Expo ou fluxo de trabalho bare.
Benefícios Principais
Um backend CRM pronto para produção para que você possa enviar mais rápido e focar no seu aplicativo.
Envie Mais Rápido, Sem Código de Backend
APIs REST & GraphQL e um esquema pronto para uso — conecte seu aplicativo e vá.
Seguro por Padrão
ACLs e permissões em nível de classe; restrição por assignedTo e createdBy.
Pipeline em Tempo Real
Live Queries sobre WebSockets para atualizações instantâneas de negócios e atividades.
Autenticação Integrada
Cadastro de usuário, login e gerenciamento de sessão prontos para uso.
Funciona Offline
O pinning local mantém contatos e negócios disponíveis offline e sincroniza quando você se reconecta.
Implante em Minutos
Use o Agente de IA para criar e implantar seu aplicativo CRM a partir deste modelo.
Pronto para experimentar?
Deixe o agente de IA da Back4app criar o backend do seu aplicativo CRM, conectar o frontend React Native e implantar — tudo a partir de um único comando.
Grátis para começar — 50 comandos de Agente de IA/mês, sem necessidade de cartão de crédito
Pilha Técnica
Tudo que alimenta este modelo de aplicativo CRM em um relance.
Diagrama ER
Diagrama de Entidade-Relacionamento para o modelo de dados do aplicativo React Native CRM.
Esquema CRM: _Usuário, Empresa, Contato, Negócio, Atividade com ponteiros para empresa, contato, negócio, atribuído a, relacionado a, criado por.
Ver fonte do diagrama
erDiagram
_User {
String objectId PK
String username
String email
String password
Date createdAt
Date updatedAt
}
Company {
String objectId PK
String name
String website
String industry
String address
String notes
Pointer createdBy FK
Date createdAt
Date updatedAt
}
Contact {
String objectId PK
String name
String email
String phone
Pointer company FK
String notes
Pointer createdBy FK
Date createdAt
Date updatedAt
}
Deal {
String objectId PK
String title
Number amount
String stage
Pointer contact FK
Pointer company FK
Date expectedCloseDate
String notes
Pointer assignedTo FK
Date createdAt
Date updatedAt
}
Activity {
String objectId PK
String type
String subject
String description
Date dueDate
Date completedAt
Pointer relatedTo FK
Pointer createdBy FK
Date createdAt
Date updatedAt
}
Company ||--o{ Contact : "has"
Company ||--o{ Deal : "has"
Contact ||--o{ Deal : "has"
_User ||--o{ Deal : "assignedTo"
_User ||--o{ Activity : "createdBy"
Contact ||--o{ Activity : "relatedTo"
Deal ||--o{ Activity : "relatedTo"
_User ||--o{ Company : "createdBy"
_User ||--o{ Contact : "createdBy"
Fluxo de Integração
Sequência Auth-to-CRUD: como seu aplicativo React Native se comunica com Back4app — login, depois consulta contatos e negócios, atualiza o pipeline.
Ver fonte do diagrama
sequenceDiagram
participant User
participant App as React Native App
participant Back4app as Back4app Cloud
User->>App: Login
App->>Back4app: Parse.User.logIn(username, password)
Back4app-->>App: Session token
App-->>User: Logged in
User->>App: Load contacts and deals
App->>Back4app: new Parse.Query('Deal').find() or Parse.Query('Contact').find()
Back4app-->>App: Array of Deal / Contact
App-->>User: Show pipeline
User->>App: Create deal or contact
App->>Back4app: deal.save() or contact.save()
Back4app-->>App: Deal (objectId)
App-->>User: Updated listDicionário de Dados
Referência completa de campos para cada classe no esquema.
| Campo | Tipo | Descrição | Obrigatório |
|---|---|---|---|
| objectId | String | Auto-generated unique identifier | automático |
| name | String | Full name of the contact | |
| String | Email address | — | |
| phone | String | Phone number | — |
| company | Pointer<Company> | Company this contact belongs to | — |
| notes | String | Free-form notes | — |
| createdBy | Pointer<_User> | User who created this contact | — |
| createdAt | Date | Auto-generated creation timestamp | automático |
| updatedAt | Date | Auto-generated last-update timestamp | automático |
9 campos em Contact
Segurança e Permissões
Como a propriedade, ACLs e permissões em nível de classe protegem os dados neste esquema de CRM.
ACLs em Nível de Linha
Use ACLs e ponteiros (assignedTo, createdBy) para que os usuários vejam e editem apenas seus negócios atribuídos e dados relacionados.
Permissões em Nível de Classe
CLPs restringem quais funções ou usuários podem criar, ler, atualizar ou excluir objetos em nível de classe.
Propriedade Baseada em Ponteiro
Deal.assignedTo e Activity.createdBy vinculam-se a _User; o Cloud Code pode impor visibilidade e edições por função.
Esquema (JSON)
Definição de esquema JSON bruto — copie e use em seu aplicativo Back4app ou importe via API.
{
"classes": [
{
"className": "Contact",
"fields": {
"objectId": {
"type": "String",
"required": false
},
"name": {
"type": "String",
"required": true
},
"email": {
"type": "String",
"required": false
},
"phone": {
"type": "String",
"required": false
},
"company": {
"type": "Pointer",
"targetClass": "Company",
"required": false
},
"notes": {
"type": "String",
"required": false
},
"createdBy": {
"type": "Pointer",
"targetClass": "_User",
"required": false
},
"createdAt": {
"type": "Date",
"required": false
},
"updatedAt": {
"type": "Date",
"required": false
}
}
},
{
"className": "Company",
"fields": {
"objectId": {
"type": "String",
"required": false
},
"name": {
"type": "String",
"required": true
},
"website": {
"type": "String",
"required": false
},
"industry": {
"type": "String",
"required": false
},
"address": {
"type": "String",
"required": false
},
"notes": {
"type": "String",
"required": false
},
"createdBy": {
"type": "Pointer",
"targetClass": "_User",
"required": false
},
"createdAt": {
"type": "Date",
"required": false
},
"updatedAt": {
"type": "Date",
"required": false
}
}
},
{
"className": "Deal",
"fields": {
"objectId": {
"type": "String",
"required": false
},
"title": {
"type": "String",
"required": true
},
"amount": {
"type": "Number",
"required": false
},
"stage": {
"type": "String",
"required": false
},
"contact": {
"type": "Pointer",
"targetClass": "Contact",
"required": false
},
"company": {
"type": "Pointer",
"targetClass": "Company",
"required": false
},
"expectedCloseDate": {
"type": "Date",
"required": false
},
"notes": {
"type": "String",
"required": false
},
"assignedTo": {
"type": "Pointer",
"targetClass": "_User",
"required": false
},
"createdAt": {
"type": "Date",
"required": false
},
"updatedAt": {
"type": "Date",
"required": false
}
}
},
{
"className": "Activity",
"fields": {
"objectId": {
"type": "String",
"required": false
},
"type": {
"type": "String",
"required": false
},
"subject": {
"type": "String",
"required": false
},
"description": {
"type": "String",
"required": false
},
"dueDate": {
"type": "Date",
"required": false
},
"completedAt": {
"type": "Date",
"required": false
},
"relatedTo": {
"type": "Pointer",
"required": false
},
"createdBy": {
"type": "Pointer",
"targetClass": "_User",
"required": false
},
"createdAt": {
"type": "Date",
"required": false
},
"updatedAt": {
"type": "Date",
"required": false
}
}
},
{
"className": "_User",
"fields": {
"objectId": {
"type": "String",
"required": false
},
"username": {
"type": "String",
"required": true
},
"email": {
"type": "String",
"required": true
},
"password": {
"type": "String",
"required": true
},
"createdAt": {
"type": "Date",
"required": false
},
"updatedAt": {
"type": "Date",
"required": false
}
}
}
]
}Construa com o Agente de IA
Use o Agente de IA Back4app para construir um aplicativo CRM real a partir deste modelo: ele criará o frontend, o backend (este esquema, autenticação e APIs) e fará a implantação — sem configuração manual. O prompt abaixo descreve esta pilha de CRM para que o Agente possa gerar um aplicativo pronto para produção de uma só vez.
Crie um aplicativo CRM no Back4app com este esquema e comportamento exatos. Esquema: 1. _Usuário (use Back4app embutido): nome de usuário (String, obrigatório), email (String, obrigatório), senha (String, obrigatório); objectId, createdAt, updatedAt (sistema). 2. Empresa: nome (String, obrigatório), site (String), setor (String), endereço (String), notas (String), criadoPor (Ponteiro para _Usuário); objectId, createdAt, updatedAt (sistema). 3. Contato: nome (String, obrigatório), email (String), telefone (String), empresa (Ponteiro para Empresa), notas (String), criadoPor (Ponteiro para _Usuário); objectId, createdAt, updatedAt (sistema). 4. Negócio: título (String, obrigatório), valor (Número), estágio (String; por exemplo, lead, qualificado, proposta, negociação, ganho, perdido), contato (Ponteiro para Contato), empresa (Ponteiro para Empresa), dataFechamentoEsperada (Data), notas (String), atribuídoA (Ponteiro para _Usuário); objectId, createdAt, updatedAt (sistema). 5. Atividade: tipo (String; por exemplo, chamada, email, reunião, nota), assunto (String), descrição (String), dataVencimento (Data), concluídoEm (Data), relacionadoA (Ponteiro para Contato ou Negócio), criadoPor (Ponteiro para _Usuário); objectId, createdAt, updatedAt (sistema). Segurança: - Defina ACLs para que apenas usuários autenticados possam acessar os dados; use regras baseadas em função ou baseadas em proprietário onde apropriado (por exemplo, atribuídoA, criadoPor). - Use Permissões em Nível de Classe para que apenas usuários autenticados possam criar/ler/atualizar/excluir essas classes. Autenticação: - Cadastro (nome de usuário, email, senha) e login; suporte para logout/sessão. Comportamento: - CRUD completo para Empresa, Contato, Negócio e Atividade. - Liste negócios com filtro por estágio e ordene por dataFechamentoEsperada ou updatedAt (visualização de pipeline). - Liste atividades por relacionadoA (Contato ou Negócio). - Opcional: Live Queries em tempo real para Negócio e Atividade para atualizações de painel/pipeline. - Opcional: fixação offline para mobile (Contatos, Negócios, Atividades). Entregar: - Crie o aplicativo Back4app com o esquema acima, ACLs e qualquer Cloud Code necessário. - Gere o frontend e conecte-o a este backend; implante para que o aplicativo seja executável de ponta a ponta.
Pressione o botão abaixo para abrir o Agente com o prompt deste modelo pré-preenchido.
API Playground
Experimente os endpoints REST e GraphQL para o esquema CRM. Respostas dos dados de exemplo acima — nenhuma conta Back4app necessária.
Usa o mesmo esquema CRM (Contato, Empresa, Negócio, Atividade) que este modelo.
Integração React Native Passo a Passo
Conecte-se ao seu backend Back4app a partir de um app React Native usando o SDK Back4app React Native.
Passo 1: Instale o SDK Back4app React Native
Adicione o SDK Back4app para sua stack (por exemplo, npm, pubspec ou gerenciador de pacotes).
JavaScriptnpm install parse --save # or: yarn add parsePasso 2: Inicialize o Back4app em seu app
Inicialize o SDK do Back4app na inicialização do aplicativo com seu ID de aplicativo e URL do servidor.
JavaScriptimport Parse from 'parse/react-native'; Parse.setAsyncStorage(AsyncStorage); Parse.initialize('YOUR_APP_ID', 'YOUR_JS_KEY'); Parse.serverURL = 'https://parseapi.back4app.com';Etapa 3: Consultar contatos e negócios
Use o SDK para buscar objetos de Contato e Negócio; filtre negócios por estágio para o pipeline.
JavaScriptasync function getDeals(stage = 'qualified') { const query = new Parse.Query('Deal'); query.equalTo('stage', stage); query.ascending('expectedCloseDate'); return await query.find(); } async function getContacts() { const query = new Parse.Query('Contact'); return await query.find(); }Etapa 4: Criar um contato ou negócio
Crie um novo Contato ou Negócio com os campos e apontadores necessários (empresa, contato, atribuído a), e então salve.
JavaScriptasync function createDeal(title, stage = 'lead', amount) { const Deal = Parse.Object.extend('Deal'); const deal = new Deal(); deal.set('title', title); deal.set('stage', stage); if (amount != null) deal.set('amount', amount); await deal.save(); return deal; } async function createContact(name, email, phone) { const Contact = Parse.Object.extend('Contact'); const contact = new Contact(); contact.set('name', name); if (email) contact.set('email', email); if (phone) contact.set('phone', phone); await contact.save(); return contact; }Etapa 5: Atualizar estágio do negócio e atividades
Atualize Deal.stage ao mover no pipeline; crie e liste Atividades por relacionado a.
JavaScriptasync function updateDealStage(objectId, stage) { const query = new Parse.Query('Deal'); const deal = await query.get(objectId); deal.set('stage', stage); await deal.save(); } async function deleteDeal(objectId) { const query = new Parse.Query('Deal'); const deal = await query.get(objectId); await deal.destroy(); }
Integração de Gerenciamento de Estado
Integre o SDK Back4app com a camada de estado do seu aplicativo (por exemplo, contexto, loja ou serviços) para estado de pipeline e contato.
Modelo de Dados Completo
Copie um modelo completo de CRM para serialização segura por tipo (por exemplo, classe, interface ou definição de tipo).
/** @typedef {{ objectId?: string, title: string, amount?: number, stage?: string, expectedCloseDate?: string, contact?: { objectId: string }, company?: { objectId: string }, assignedTo?: { objectId: string }, createdAt?: string, updatedAt?: string }} Deal */
/** @typedef {{ objectId?: string, name: string, email?: string, phone?: string, company?: { objectId: string }, notes?: string, createdAt?: string, updatedAt?: string }} Contact */
function dealFromParse(obj) {
return {
objectId: obj.id,
title: obj.get('title'),
amount: obj.get('amount'),
stage: obj.get('stage'),
expectedCloseDate: obj.get('expectedCloseDate')?.toISOString?.() ?? undefined,
contact: obj.get('contact') ? { objectId: obj.get('contact').id } : undefined,
company: obj.get('company') ? { objectId: obj.get('company').id } : undefined,
assignedTo: obj.get('assignedTo') ? { objectId: obj.get('assignedTo').id } : undefined,
createdAt: obj.get('createdAt')?.toISOString?.() ?? undefined,
updatedAt: obj.get('updatedAt')?.toISOString?.() ?? undefined,
};
}
function contactFromParse(obj) {
return {
objectId: obj.id,
name: obj.get('name'),
email: obj.get('email'),
phone: obj.get('phone'),
company: obj.get('company') ? { objectId: obj.get('company').id } : undefined,
notes: obj.get('notes'),
createdAt: obj.get('createdAt')?.toISOString?.() ?? undefined,
updatedAt: obj.get('updatedAt')?.toISOString?.() ?? undefined,
};
}Offline-First & Armazenamento Local
Use pin() e unpin() para que contatos e negócios estejam disponíveis offline e sincronizem quando voltarem online.
SDKs suportados incluem um armazenamento local. Fixe objetos de Contato, Negócio e Atividade para mantê-los no dispositivo; consulte dados fixados quando estiver offline. Quando o aplicativo voltar online, sincronize com o servidor.
Abaixo: fixe resultados após a busca e desfaça a fixação quando não precisar mais de cópias locais.
// Pin deals after fetch (offline-first)
async function fetchAndPinDeals() {
const query = new Parse.Query('Deal').equalTo('stage', 'qualified').ascending('expectedCloseDate');
const results = await query.find();
await Parse.Object.pinAll(results);
// When offline, read from local datastore:
// const localQuery = new Parse.Query('Deal').fromLocalDatastore();
// const localResults = await localQuery.find();
}
async function unpinAllDeals() {
await Parse.Object.unpinAll('Deal');
}Perguntas Frequentes
Perguntas comuns sobre o modelo de backend do aplicativo CRM.
Pronto para Construir Seu App de CRM?
Comece seu projeto React Native em minutos. Nenhum cartão de crédito necessário.