Trinion CRM бесплатная CRM система

Эта публикация посвящена собственной разработке компании Trinion-бесплатной CRM-системе, которая была создана как часть комплекса «Тринион Торговля».

Система полностью бесплатная. Сcылки: Сайт системы. Демо системы. Справочник по CRM

Пожалуйста имейте в виду что хотя это корпоративный хаб, система бесплатная и это можно сказать мой pet проект! То есть все сделано и делается на мои деньги и с моим участием. Так что не судите строго.

Описание Trinion CRM

Основные разделы в системе:

  1. Звонки (входящие и исходящие)

  2. Компании (справочник клиентов)

  3. Контакты (справочник контактных лиц клиентов)

  4. Лиды (создание лида, редактирование, фильтры для поиска, возможность создания на основе лида компании и контакта)

  5. Сделки (с возможностью смены этапа, а также формирования счета).

Звонки

Современную CRM-систему сложно себе представить без возможности принимать звонки от клиентов, а также осуществлять исходящие звонки из системы. Также важно фиксировать и записывать каждый звонок. Именно в этом разделе вы видите два справочника звонков – Входящие и Исходящие.

Система интегрируется с телефонией на базе Asterisk.

Лиды

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

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

В списке лидов они отображаются в порядке поступления – сверху самые последние. Но это значение, как и другие параметры вы можете настроить. Также имеются удобные фильтры для поиска лидов, соответствующих нужным вам параметрам.

Порядок действий таков:

  1. Поступает новый лид.

  2. Пользователь CRM обрабатывает лид: совершает звонок, переписывается с потенциальным клиентом, выявляет потребности.

  3. Если лид оказывается целевым, то на основе полученной информации пользователь прямо из списка лидов может создать Компанию и Контакт. Выполняется это по кнопке «Действия», расположенной справа от лида в общем списке.

Компании

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

Контакты

Если вы работаете в сфере B2B, то постоянно сталкиваетесь с такой ситуацией: одна компания имеет несколько контактных лиц. Это могут быть заведующие магазинами, директор, бухгалтер и закупщик и т.д.

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

Сделка

После того, как выполнена квалификация (первичная обработка) лида, и пользователь CRM получил подтверждение того, что лид действительно целевой, т.е. запрос оказался от потенциального покупателя, начинается Сделка.

В Сделке вы можете:

  1. Фиксировать важную информацию.

  2. Менять этап (именно последовательность этапов и есть теми подсказками, которые помогают продавцу двигаться по Сделке в рамках бизнес-процесса).

  3. Создавать на основе Сделки Счет на оплату.

Таким образом, формирование и отправка Счета становятся максимально быстрыми и простыми, а сам Счет остается «привязанным» к Сделке, а потому вы всегда можете убедиться, что Счет был сформирован и изучить его содержание.

@ramil_trinion
27.03.2025 06:05 UTC
Первоисточник

Комментарии

@nvladik
27.03.2025 18:09 UTC
0

Не часто на хабре проскакивают статьи связанные с Drupal.
Хотелось бы отдельно выделить, что CMS Drupal не сильно распространена в странах СНГ. Являясь разработчиком, использующим в основе эту систему, хочу сказать спасибо.

Инструмент спорный, по крайней мере так Вы его представляете, вроде как можно звонить, но сами это не показываете в своем видео, несомненно это хорошо, что есть интеграция хотя бы с какой-то телефонией.

Хотелось бы обратить внимание на качество кода, по моему мнению, оно посредственно, очень много вопросов возникает к так называемому hook_form_alter. Почему не используется hook_form_BASE_FORM_ID_alter ? Последний вызывается для конкретных форм, а не при каждой форме как в Вашем случае.
С установкой ответственного, можно просто вызвать getAccount(), а не id().

Вообще от этих хуков можно было уйти, сделав свои сущности, а не использовать стандартные Node. И формы бы сделали как необходимо, и не пришлось ещё и хук hook_entity_load использовать, прямо в сущности все можно было бы сделать.
Так же это решило бы проблему с заголовками, которые устанавливаете, зачем-то в hook_preprocess_page_title, да он для этого и создан, но с сущностью было бы легче, да и вообще можно было конкретный роутер поменять, сделать там тайтл колбек...

Про Dompdf и вывод pdf вообще отдельная песня...

@ramil_trinion
27.03.2025 20:33 UTC
+1

Ответ от нашего программиста:

Спасибо за конструктивную критику. Да, код безусловно можно улучшить.

Но в большинстве случаев выбор способа решения имел под собой основание. Например hook_form_alter, как правило, использовался для альтера форм ноды, при том, как формы создания новой ноды, так и формы редактирования. Эти формы имеют разные form_id и, соответственно, потребовалось бы писать по два хука hook_form_BASE_FORM_ID_alter с дублирующимся кодом.


По поводу установки ответственного, getAccount() и id(): не совсем понятно, какой фрагмент кода вы предлагаете, таким образом, улучшить. getAccount() возвращает объект Drupal\Core\Session\UserSession, из которого всё равно, нет доступа к полям сущности User. Поэтому, чтобы обращаться к полю Ответственный, мы получаем id пользователя, при помощи id() и дальше загружаем сущность пользователя.

По поводу модуля Phone Number для поля телефона: да, это тоже вариант решения, но в нашей системе этот функционал не нужен, достаточно простого текстового поля.

Ответ от меня (я архитектор, руководитель и заказчик в одном лице):
по поводу

Вообще от этих хуков можно было уйти, сделав свои сущности, а не использовать стандартные Node.

Так как я иду по пути доступному мне, то могу сказать что создавать свои entity я не могу из админки поэтому пользовался чем могу. Да и в целом node нас устраивает пока что.

28.03.2025 07:42 UTC
0

Так как я иду по пути доступному мне, то могу сказать что создавать свои entity я не могу из админки поэтому пользовался чем могу. Да и в целом node нас устраивает пока что.

Свои сущности тоже имеют интерфейсы, посмотри как это делает тот же commerce, дело программиста и времени ^-^. В целом я в Вами согласен, если хватает стандартных средств, которые позволяют быстро и удобно выполнить задачу, зачем изобретать лишнее. Однако, как мне кажется, для Вас было удобнее перевести на свои сущности, у Вас ведь и свои доступы, которые зависят от поля.

Ещё не совсем понял зачем транзакция в утверждении документа, если там не отлавливаете ошибку и не делаете $transaction->rollBack(), официальный мануал.

@nvladik
27.03.2025 18:41 UTC
0

Что ж, новый редактор хабра действительно странный, вроде не промахивался, а вместо новой строки отправил комментарий, что ж, дополним его.
Контроллер который использует exit, очень странно.

Почему для номера телефона не использовали модуль Phone Number (field), в нем заложен очень классный функционал, в том числе по форматированию текста.

В целом складывается впечатление, что очень спешили, прямо очень сильно.
Надеюсь, в будущем у Вас будет более лаконичный код, удачи в развитии Вашего проекта!

@NightBlade74
27.03.2025 20:18 UTC
+1

Ссылка "Сайт системы" битая.

@ramil_trinion
27.03.2025 20:19 UTC
+1

Исправил. Спасибо большое. Держите +

@NightBlade74
28.03.2025 09:03 UTC
+1

А API'шка есть какая-то для интеграций?

@ramil_trinion
28.03.2025 09:35 UTC
0

Есть. В Drupal есть модуль отвечающий за интеграцию по  API. Он в ядре, при необходимости просто включаете его и используете. Документацию почитать можете здесь

В API есть предопределенные методы, или вы можете написать свой.

28.03.2025 09:47 UTC
+1

В Drupal-то есть, но здесь ведь свои сущности/классы, верно? Разбираться реверс-инжинирингом как все устроено как-то не хочется. Да, вопрос чисто теоретический, я на все это сейчас больше с менеджерской позиции смотрю, чем с разработческой. Просто такая штука как CRM никому не нужна как вещь в себе. Интеграция с Avaia есть - это круто, но в компаниях обычно куча всякого софта, который должен работать в связке.

28.03.2025 09:53 UTC
0

В Drupal-то есть, но здесь ведь свои сущности/классы, верно?

Как и везде.

Разбираться реверс-инжинирингом как все устроено как-то не хочется.

И не надо. В админке есть все названия полей и типов материалов. Смотрите и используете.