.NET Шаблон

Шаблон бэкенда CRM приложения
.NET — Схема, API и AI руководство

Готовая к производству .NET CRM схема бэкенда и Стартовый комплект на Back4app: Контакт, Компания, Сделка, Активность, этапы воронки, ER-диаграмма, словарь данных, JSON-схема, API-площадка и однонажатийный AI агент для развертывания за минуты.

Ключевые выводы

На этой странице вы получите готовую к производству схему CRM, однонажатийный AI-подсказку и пошаговый код .NET — так вы сможете выпустить приложение CRM без создания бэкенда.

  1. Разверните за считанные минутыВставьте подсказку AI Agent и получите работающее приложение с контактами, компаниями, сделками и конвейером.
  2. Безопасно по умолчаниюACL и доступ на основе ролей, чтобы пользователи видели только свои назначенные сделки и данные.
  3. .NET-родной SDKТипизированные объекты, async/await, оффлайн-фиксация и Live Queries для обновлений конвейера.
  4. REST + GraphQLОбе API сгенерированы автоматически; фильтруйте сделки по этапу, перечисляйте активности по relatedTo.
  5. Пять классов_User (встроенный), Компания, Контакт, Сделка (конвейер), Активность (задачи/события).

Что такое шаблон API CRM .NET?

Шаблон CRM Back4app предоставляет SDK Parse .NET с Task и async/await, nullable reference types и типизированным доступом к Сделке, Контакту и Активности. Создавайте C# клиентов или бэкенд-сервисы, которые запрашивают по этапу, назначают сделки пользователям и подписываются на Live Queries. Готово для корпоративного использования без необходимости хостинга собственного API CRM.

Лучше всего для:

Команды продажСоздатели CRMБыстрое прототипированиеПолевые представителиЗапуски MVPКоманды выбирают BaaS для CRM

Обзор

Клиенты и сервисы .NET могут использовать Parse .NET SDK для подключения к бэкенду CRM Back4app. Типизированный ParseObject, асинхронные FindAsync и SaveAsync, и необязательный Live Queries для обновлений пайплайна. Не требуется пользовательский REST клиент.

Схема — _User, Company, Contact, Deal, Activity — такая же, как для других стеков. Используйте ParseObject.GetQuery("Deal").WhereEqualTo("stage", "qualified").FindAsync() и присваивайте сделки ParseUser.CurrentUser; Back4app обеспечивает соблюдение прав.

Основные функции CRM

.NET CRM API с C# и Parse SDK: управление контактами, воронка сделок, асинхронные задачи и встроенная поддержка пользователей и ACL для готовых к предприятию бэкендов.

Управление контактами

Храните и управляйте контактами с именем, электронной почтой, телефоном, компанией и заметками. Идеально подходит для приложений .NET.

Управление компаниями

Отслеживайте компании по имени, веб-сайту, отрасли и адресу. Связано с контактами и сделками.

Конвейер сделок

Конвейер продаж с этапами, суммой, ожидаемой датой закрытия и назначением. Создан для бэкендов .NET.

Отслеживание активности

Записывайте звонки, электронные письма, встречи и заметки, связанные с контактами и сделками. Работает с SDK .NET.

Пользователь и разрешения

Встроенная модель пользователя и указатели для владения и назначения. ACL из коробки для .NET.

Почему стоит создавать ваш .NET CRM бэкенд с Back4app?

Back4app подходит для магазинов .NET, которым нужен надежный, развертываемый CRM бэкенд без управления инфраструктурой.

  • Parse .NET SDK: Используйте официальный Parse SDK с Task и async/await; типизированные ParseObject и запросы сохраняют типобезопасность вашего C# кода для Контакта, Сделки, Активности.
  • Стабильность для предприятий: Разверните ваше .NET приложение на хостируемом бэкенде; Back4app обеспечивает масштабируемость и доступность.
  • Совместимость с существующими инструментами: Интегрируйтесь с шаблонами Entity Framework или используйте SDK отдельно; REST и GraphQL доступны для других клиентов.

Подходит для магазинов .NET, создающих CRM или инструменты продаж с стандартными асинхронными шаблонами.

Основные преимущества

Готовый к производству CRM-бэкенд, чтобы вы могли быстрее разрабатывать и сосредоточиться на своем приложении.

Разрабатывайте быстрее, без кода бэкенда

REST и API GraphQL и готовая схема — подключите свое приложение и вперед.

Безопасно по умолчанию

ACL и разрешения на уровне класса; ограничить по assignedTo и createdBy.

Поток в реальном времени

Live Queries через WebSockets для мгновенных обновлений сделок и активности.

Встроенная аутентификация

Регистрация пользователей, вход в систему и управление сессиями из коробки.

Работает в оффлайне

Локальная привязка сохраняет контакты и сделки доступными в оффлайне и синхронизирует их при повторном подключении.

Развертывание за минуты

Используйте AI Agent для создания и развертывания вашего CRM-приложения из этого шаблона.

Готовы попробовать?

Позвольте AI Agent от Back4app создать бэкенд вашего CRM-приложения, подключить фронтенд .NET и развернуть — все из одного запроса.

Бесплатно для начала — 50 запросов AI Agent в месяц, без необходимости в кредитной карте

Технический стек

Все, что поддерживает этот шаблон CRM-приложения, на одном взгляде.

Фронтенд
.NET
Бэкенд
Back4app
База данных
MongoDB
Аутентификация
Аутентификация и контроль доступа
API
REST и GraphQL
Развертывание
AI-агент / Панель управления

ER диаграмма

Диаграмма «Сущность-связь» для модели данных CRM приложения .NET.

Просмотреть источник диаграммы
Mermaid
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"

Поток интеграции

Последовательность Auth-to-CRUD: как ваше .NET приложение взаимодействует с Back4app — вход в систему, затем запрос контактов и сделок, обновление воронки.

Просмотреть источник диаграммы
Mermaid
sequenceDiagram
  participant User
  participant App as .NET App
  participant Back4app as Back4app Cloud

  User->>App: Login
  App->>Back4app: ParseUser.LogInAsync(username, password)
  Back4app-->>App: Session token
  App-->>User: Logged in

  User->>App: Load contacts and deals
  App->>Back4app: ParseObject.GetQuery("Deal").FindAsync() or GetQuery("Contact").FindAsync()
  Back4app-->>App: IEnumerable<ParseObject>
  App-->>User: Show pipeline

  User->>App: Create deal or contact
  App->>Back4app: deal.SaveAsync() or contact.SaveAsync()
  Back4app-->>App: Deal (ObjectId)
  App-->>User: Updated list

Словарь данных

Полная справка по полям для каждого класса в схеме.

ПолеТипОписаниеОбязательно
objectIdStringAuto-generated unique identifierавто
nameStringFull name of the contact
emailStringEmail address
phoneStringPhone number
companyPointer<Company>Company this contact belongs to
notesStringFree-form notes
createdByPointer<_User>User who created this contact
createdAtDateAuto-generated creation timestampавто
updatedAtDateAuto-generated last-update timestampавто

9 поля в Contact

Безопасность и разрешения

Как владение, ACL и разрешения на уровне классов защищают данные в этой схеме CRM.

ACL на уровне строк

Используйте ACL и указатели (assignedTo, createdBy), чтобы пользователи видели и редактировали только свои назначенные сделки и связанные данные.

Разрешения на уровне классов

CLP ограничивают, какие роли или пользователи могут создавать, читать, обновлять или удалять объекты на уровне класса.

Владение на основе указателей

Deal.assignedTo и Activity.createdBy ссылаются на _User; Cloud Code может обеспечивать видимость и редактирование по ролям.

Схема (JSON)

Сырая определение схемы JSON — скопируйте и используйте в вашем Back4app приложении или импортируйте через API.

JSON
{
  "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
        }
      }
    }
  ]
}

Создайте с помощью AI Agent

Используйте Back4app AI Agent, чтобы создать реальное CRM приложение из этого шаблона: он создаст фронтенд, бэкенд (эту схему, аутентификацию и API) и развернет его — без ручной настройки. Подсказка ниже описывает этот стек CRM, чтобы Агент мог сгенерировать готовое к производству приложение за один раз.

Back4app AI Agent
Готовы к созданию
Создайте приложение CRM на Back4app с этой точной схемой и поведением.

Схема:
1. _Пользователь (используйте встроенный Back4app): имя пользователя (Строка, обязательно), электронная почта (Строка, обязательно), пароль (Строка, обязательно); objectId, createdAt, updatedAt (система).
2. Компания: название (Строка, обязательно), веб-сайт (Строка), отрасль (Строка), адрес (Строка), заметки (Строка), создано (Указатель на _Пользователь); objectId, createdAt, updatedAt (система).
3. Контакт: имя (Строка, обязательно), электронная почта (Строка), телефон (Строка), компания (Указатель на Компанию), заметки (Строка), создано (Указатель на _Пользователь); objectId, createdAt, updatedAt (система).
4. Сделка: название (Строка, обязательно), сумма (Число), стадия (Строка; например, лид, квалифицированный, предложение, переговоры, выиграно, проиграно), контакт (Указатель на Контакт), компания (Указатель на Компанию), ожидаемая дата закрытия (Дата), заметки (Строка), назначено (Указатель на _Пользователь); objectId, createdAt, updatedAt (система).
5. Активность: тип (Строка; например, звонок, электронная почта, встреча, заметка), тема (Строка), описание (Строка), срок (Дата), завершено (Дата), связано с (Указатель на Контакт или Сделку), создано (Указатель на _Пользователь); objectId, createdAt, updatedAt (система).

Безопасность:
- Установите ACL, чтобы только аутентифицированные пользователи могли получать доступ к данным; используйте правила на основе ролей или владельца, где это уместно (например, назначено, создано).
- Используйте разрешения на уровне класса, чтобы только аутентифицированные пользователи могли создавать/читать/обновлять/удалять эти классы.

Аутентификация:
- Регистрация (имя пользователя, электронная почта, пароль) и вход; поддержка выхода/сессии.

Поведение:
- Полный CRUD для Компании, Контакта, Сделки и Активности.
- Список сделок с фильтром по стадии и сортировкой по ожидаемой дате закрытия или updatedAt (вид воронки).
- Список активностей по связанным с (Контакт или Сделка).
- Опционально: обновления в реальном времени Live Queries для Сделки и Активности для обновлений панели управления/воронки.
- Опционально: оффлайн-фиксация для мобильных устройств (Контакты, Сделки, Активности).

Доставка:
- Создайте приложение Back4app с вышеуказанной схемой, ACL и любым необходимым облачным кодом.
- Сгенерируйте фронтенд и подключите его к этому бэкенду; разверните, чтобы приложение работало от начала до конца.

Нажмите кнопку ниже, чтобы открыть Агента с предзаполненной подсказкой этого шаблона.

Развернуть за минуты50 бесплатных запросов / месяцКредитная карта не требуется

API Playground

Попробуйте REST и GraphQL конечные точки для схемы CRM. Ответы из приведенных выше примерных данных — учетная запись Back4app не требуется.

Загрузка песочницы…

Использует ту же схему CRM (Контакт, Компания, Сделка, Активность), что и этот шаблон.

Пошаговая интеграция .NET

Подключитесь к вашему Back4app бэкенду из приложения .NET с использованием SDK Back4app .NET.

  1. Шаг 1: Установите SDK Back4app .NET

    Добавьте SDK Back4app для вашего стека (например, npm, pubspec или менеджер пакетов).

    C#
    dotnet add package Parse
  2. Шаг 2: Инициализируйте Back4app в вашем приложении

    Инициализируйте SDK Back4app при запуске приложения с вашим идентификатором приложения и URL-адресом сервера.

    C#
    // Startup or Program.cs
    ParseClient.Initialize(new ParseClient.Configuration
    {
        ApplicationId = "YOUR_APP_ID",
        Server = "https://parseapi.back4app.com/",
        WindowsKey = "YOUR_WINDOWS_KEY" // or use Key for REST
    });
  3. Шаг 3: Запросите контакты и сделки

    Используйте SDK для получения объектов Контакта и Сделки; фильтруйте сделки по этапу для воронки.

    C#
    public static async Task<IEnumerable<ParseObject>> GetDealsAsync(string stage = "qualified")
    {
        var query = ParseObject.GetQuery("Deal")
            .WhereEqualTo("stage", stage)
            .OrderBy("expectedCloseDate");
        return await query.FindAsync();
    }
    public static async Task<IEnumerable<ParseObject>> GetContactsAsync()
    {
        return await ParseObject.GetQuery("Contact").FindAsync();
    }
  4. Шаг 4: Создайте контакт или сделку

    Создайте новый Контакт или Сделку с обязательными полями и указателями (компания, контакт, назначено), затем сохраните.

    C#
    public static async Task<ParseObject> CreateDealAsync(string title, string stage = "lead", double? amount = null)
    {
        var deal = new ParseObject("Deal");
        deal["title"] = title;
        deal["stage"] = stage;
        if (amount.HasValue) deal["amount"] = amount.Value;
        await deal.SaveAsync();
        return deal;
    }
    public static async Task<ParseObject> CreateContactAsync(string name, string email = null, string phone = null)
    {
        var contact = new ParseObject("Contact");
        contact["name"] = name;
        if (!string.IsNullOrEmpty(email)) contact["email"] = email;
        if (!string.IsNullOrEmpty(phone)) contact["phone"] = phone;
        await contact.SaveAsync();
        return contact;
    }
  5. Шаг 5: Обновите стадию сделки и действия

    Обновите Deal.stage при перемещении в воронке; создайте и перечислите Activity по relatedTo.

    C#
    public static async Task UpdateDealStageAsync(string objectId, string stage)
    {
        var deal = await ParseObject.GetQuery("Deal").GetAsync(objectId);
        deal["stage"] = stage;
        await deal.SaveAsync();
    }
    
    public static async Task DeleteDealAsync(string objectId)
    {
        var deal = await ParseObject.GetQuery("Deal").GetAsync(objectId);
        await deal.DeleteAsync();
    }

Полная модель данных

Скопируйте полную модель CRM для безопасной сериализации типов (например, класс, интерфейс или определение типа).

C#
// Deal.cs — matches Back4app schema
public class Deal
{
    public string? ObjectId { get; set; }
    public string Title { get; set; } = "";
    public double? Amount { get; set; }
    public string Stage { get; set; } = "lead";
    public DateTime? ExpectedCloseDate { get; set; }
    public ParseObject? Contact { get; set; }
    public ParseObject? Company { get; set; }
    public ParseUser? AssignedTo { get; set; }
    public DateTime? CreatedAt { get; set; }
    public DateTime? UpdatedAt { get; set; }

    public static Deal From(ParseObject obj) => new Deal
    {
        ObjectId = obj.ObjectId,
        Title = obj.Get<string>("title") ?? "",
        Amount = obj.Get<double?>("amount"),
        Stage = obj.Get<string>("stage") ?? "lead",
        ExpectedCloseDate = obj.Get<DateTime?>("expectedCloseDate"),
        Contact = obj.Get<ParseObject>("contact"),
        Company = obj.Get<ParseObject>("company"),
        AssignedTo = obj.Get<ParseUser>("assignedTo"),
        CreatedAt = obj.CreatedAt,
        UpdatedAt = obj.UpdatedAt
    };
}

Часто задаваемые вопросы

Распространенные вопросы о шаблоне бэкенда CRM приложения.

Что такое Back4app?
Почему использовать Back4app для CRM приложения .NET?
Как мне запросить сделки по этапу на C#?
Как мне назначить сделки текущему пользователю в .NET?

Доверяют разработчики по всему миру

Присоединяйтесь к сообществу, строящему будущее приложений

G2 Users Love Us Badge

Готовы создать свое CRM-приложение?

Начните свой проект .NET за считанные минуты. Кредитная карта не требуется.

Строить с ИИ-агентом