Удельта

Заявка с сайта в CRM: Payload CMS, Activepieces и EspoCRM

Заявку с сайта сначала сохраняют, затем передают в CRM и назначают менеджера. Тогда сбой связи не заставляет клиента заполнять форму заново. Начните с одной учебной заявки: проверьте её номер, поля, права и повторную отправку. Надёжный обмен между Payload, Activepieces и EspoCRM требует отдельной разработки.

Заявка на экране сайта проходит через три связанные карточки и становится карточкой клиента в CRM.

Что подготовить

  • Учебная форма на сайте Payload/Next.js, Activepieces и отдельный EspoCRM без реальных заявок клиентов.
  • Список полей, правило назначения менеджера и срок, за который обращение должно попасть в работу.
  • Разработчик обмена и ответственный сотрудник, который найдёт заявку при ошибке.

Что должно произойти с заявкой #

В консалтинговой фирме восемь сотрудников. Посетитель оставляет вопрос на сайте, менеджер должен увидеть его в CRM — системе работы с клиентами. Первый шаг — согласовать путь одной заявки и проверить его на вымышленных данных.

  • На сайте. Обращение сохранено и получило номер. Клиент видит понятное подтверждение приёма.

  • В CRM. Есть карточка с нужным контактом, темой и текстом. Она связана с исходным номером заявки.

  • У менеджера. Известно, кто отвечает и когда должен связаться с клиентом. При ошибке назначен человек, который завершит передачу.

Сообщение клиенту должно соответствовать сделанному. Если сайт сохранил заявку, напишите «Заявка принята» и покажите номер. Сообщать, что менеджер её уже получил, стоит после передачи. При сбое клиент не должен гадать, нужно ли отправлять форму снова.

Какие части нужно разработать #

Часть работыЧто даёт системаЧто готовит команда
Сайт Payload/Next.jsХранение записей, API и настройка правПроверка формы, защита от лишних запросов и сохранение обращения
Передача после сохраненияЗапуск обработчика измененийОчередь отправки, проверка отправителя, повторы и состояния
ActivepiecesПриём Webhook и шаги обращения к другим системамСвязь полей и обработка ошибок
EspoCRMАккаунты обмена, права и APIПоле исходного номера, защита от дублей и назначение менеджера
Сообщение командеВыбранный канал связиТекст, адресат и следующий шаг менеджера

Payload хранит записи сайта и позволяет запускать обработку после изменений. Activepieces выполняет настроенную цепочку шагов. EspoCRM принимает данные через API — способ обмена между программами. В таблице выше показано, какие части команда готовит для вашего сайта.

В Payload обработчик afterChange запускается после изменения записи. Одного запроса из него недостаточно для надёжной передачи: сеть может оборваться или программа остановиться. Принятая заявка должна оставаться доступной для дальнейшей отправки.

Разработчик сохраняет заявку и запись в очереди отправки вместе, затем отдельный процесс передаёт данные. Для выбранной базы нужно проверить, что сохраняются обе записи либо ни одна. Порядок повторов и проверки отправителя также входит в разработку.

Какие данные передавать и кто их видит #

В примере ниже requestId — номер одной заявки. Сервер сохраняет его и использует при каждом повторе. Почта и имя не заменяют номер: один человек может задать два разных вопроса, которые должны остаться разными обращениями.

schemaVersion обозначает версию набора полей. Сервер проверяет размер сообщения, нужные поля и способ связи до сохранения. Проверка в браузере помогает посетителю заполнить форму, но сервер всё равно должен проверить пришедшие данные сам.

Пример данных заявки. Разработчик связывает эти поля с полями EspoCRM.
{
  "schemaVersion": 1,
  "eventType": "website.request.created",
  "requestId": "demo-web-0001",
  "createdAt": "2026-10-07T09:00:00Z",
  "contact": {"firstName":"Учебный","lastName":"Клиент","email":"demo@example.com"},
  "request": {"topic":"Настройка CRM","message":"Нужна консультация","page":"/services/crm/"}
}
  • Посетитель сайта. Может отправить свою форму, но не читать, менять или удалять прежние обращения.

  • Подключение к CRM. Ключ хранится на сервере или в закрытых настройках Activepieces. Браузер посетителя не должен получать его вместе с кодом формы.

  • Отправитель сообщения. Activepieces должен проверить, что запрос пришёл от вашего сайта. Длинный случайный адрес сам по себе не заменяет проверку отправителя.

В Payload права задаются отдельно для каждой операции. Разработчик также проверяет режим overrideAccess и пользователя при внутренних запросах через Local API. Эти настройки нужно учесть, чтобы внутреннее обращение не обошло нужные ограничения.

Как заполнить карточку в EspoCRM #

В EspoCRM создайте API User — отдельный аккаунт для обмена с ограниченными правами. Для примера используется Lead — карточка нового обращения. Разработчик связывает поля события с нужными полями вашей CRM и проверяет обязательные значения.

Для хранения исходного номера заранее создайте поле cSourceRequestId. Функция ниже подготавливает имя, почту, текст и этот номер. Отправка выполняется отдельным запросом к api/v1; метод POST создаёт карточку, после чего нужно сохранить её номер.

Проверка почты в функции лишь ищет знак @. Перед её вызовом рабочая обработка должна проверить весь набор данных, размер и пустые значения. Менеджера назначают по согласованному правилу; текст вопроса сохраняют как данные, без исполнения HTML.

Функция готовит поля карточки. cSourceRequestId создаётся отдельно; отправка выполняется другим шагом.
function mapToLead(event) {
  if (event.schemaVersion !== 1 || event.eventType !== "website.request.created") {
    throw new Error("Unsupported event");
  }
  if (typeof event.requestId !== "string" || !event.requestId.trim()) {
    throw new Error("Missing requestId");
  }
  const email = event.contact?.email;
  if (typeof email !== "string" || !email.includes("@")) {
    throw new Error("Missing contact email");
  }
  return {
    firstName: String(event.contact.firstName ?? "").trim(),
    lastName: String(event.contact.lastName ?? "").trim(),
    emailAddress: email.trim(),
    description: `${event.request?.topic ?? ""}
${event.request?.message ?? ""}`,
    cSourceRequestId: event.requestId
  };
}

Как повторить отправку без дубля #

Связь может оборваться после того, как EspoCRM создала карточку. Если просто повторить создание, получится дубль. Сначала выясните по исходному номеру, появилась ли запись, и только затем решайте, нужна ли повторная отправка.

Поиск перед созданием не защищает от двух одновременных запросов. На стороне CRM нужна проверка номера и запись как одна неделимая операция либо специально разработанный обработчик повторов. Одного журнала на сайте для этого недостаточно.

  • Неверные поля. Оставьте заявку на исправление. Сохраните причину и назначьте сотрудника.

  • Нет доступа. Проверьте ключ и роль аккаунта обмена. Повтор не исправит отсутствующее разрешение.

  • Временный сбой. Разрешите несколько попыток с паузой. Если неизвестно, создалась ли карточка, сначала найдите её в CRM.

Используйте понятные состояния: ждёт отправки, обрабатывается, передана, ошибка, результат неизвестен. Последнее важно отличать от обычного отказа. Сотрудник должен видеть номер заявки, попытки и найденную карточку, чтобы закончить работу без догадок.

Проверка от формы до карточки

  1. Создайте аккаунт обмена с ограниченными правами и собственное поле cSourceRequestId в учебной CRM.
  2. Отправьте форму, сохраните requestId и найдите принятую заявку на сайте.
  3. Проверьте данные события и карточку CRM: исходный номер и поля должны совпасть.
  4. Повторите событие, затем отправьте две копии одновременно. Проверьте защиту от двойного создания.
  5. Отключите связь до отправки и отдельно воспроизведите потерю ответа после записи. Сотрудник должен различать эти случаи.
  6. Попросите коллегу найти задержанную заявку и завершить разбор по вашей инструкции.

Кто следит за заявками и исправляет ошибки #

В журнале нужны номер заявки, время, этап, результат, число попыток и номер карточки CRM. Контакты доступны только тем, кому они нужны. Ключи доступа не должны попадать в сообщения об ошибках или общедоступные журналы.

Следите за временем ожидания и необработанными ошибками, а не только за работой сервера Activepieces. Если сайт принимает заявки, очередь не должна незаметно расти несколько дней. Ответственный сотрудник должен знать, где найти задержку и как её исправить.

В расходы входят три системы, копии, обновления и обслуживание обмена. После смены обязательного поля или шага повторите обычную отправку, неверные данные, дубль и сбой. Сохраняйте настройки, версии и описание полей; уведомления добавляйте после проверки передачи самой заявки.

Можно включать рабочую форму, когда

  • Посетитель отправляет заявку, но не получает доступ к чужим обращениям.
  • Сохранённая заявка имеет номер и понятное состояние передачи в CRM.
  • Повтор и потеря ответа обработаны без необъяснимых дублей; защита принимающей стороны проверена.
  • Менеджер назначен, ключи закрыты, а задержки и ошибки имеют ответственного.

Источники и связанные материалы #

Материал был полезен?

Сообщить об ошибке или задать вопрос редакции

Сообщение увидит редакция. Не указывайте пароли и личные данные. Текст удаляется через 180 дней.

О материале

Данные и интеграцииСтатьяЗадача: настроитьУровень: практикаActivepiecesEspoCRMPayload CMS + Next.js

Последнее обновление:

Обсуждение

Комментарии проходят подтверждение адреса и проверку редакцией.