CRM — сложный бизнес. То, что некоторые разработчики считают «просто регистрировать все о пользователях», другие — невероятно продвинутые и замысловатые бизнес-приложения, которые не только отслеживают ваше взаимодействие с пользователем, но и улучшают как ваше общение с ним, так и их взаимодействие с вами — без любой из вас знает это явно.
Что такое CRM?
Приложения для управления взаимоотношениями с клиентами часто недооцениваются и недоиспользуются, и слишком часто «включаются» в основу приложения компании. Если вы когда-либо работали в офисе в крупной компании, выполняющей черную работу изо дня в день, скорее всего, у вас есть приложение (древняя Java), работающее перед вами на Windows XP, и если что-то важное о Клиент, с которым вы только что разговаривали, подошел, он будет отмечен в поле для глупых комментариев рядом с его именем в неясном углу экрана, если это так.
CRM — это гораздо больше, чем то, во что вы обычно верите — это не просто полуактуальная и субъективная информация о человеке, с которым вы когда-то имели дело, — это сбор и сопоставление всех знаний о ваших взаимодействиях, а также представление всех параметры, которые статистически помогают вам получить пользу вашего корреспондента.
OroCRM
Хотя сфера CRM в PHP-мире еще не дошла до совершенства, недавний поток событий от Oro вызвал у меня интерес, достаточно сильный, чтобы заставить меня взглянуть. OroCRM — это многоязычная CRM, построенная на PHP 5.4+ с фреймворком Symfony. Это само по себе чудовище, и оно прекрасно настроено для сотрудничества с платформой Oro, каркасом бизнес-приложений, которую вы можете использовать для создания собственных бизнес-приложений custuom, использующих преимущества данных, предоставляемых OroCRM. Это немного для этой части, так что на этот раз мы просто взглянем на OroCRM. Обратите внимание, однако, что установка OroCRM включает в себя базовый экземпляр платформы Oro, на котором она основана.
OroCRM также было объявлено в блоге Symfony2, так что прочитайте его, если вы заинтересованы в его молодости — это было всего четыре месяца назад.
Помимо других функций, OroCRM может похвастаться наличием на рынке сторонних плагинов и расширений, сегментированием их клиентов и импортом данных из различных установленных инструментов, таких как Magento. Давайте посмотрим, как это складывается в локально развернутом демонстрационном приложении.
Установка
Установка OroCRM относительно проста. Шаги хорошо описаны в их Github README , или вы можете следовать нашему подробному руководству по настройке и запуску с Vagrant , так что пройдите через них, если вы хотите следовать своей собственной установке.
демонстрация
Как только мы устанавливаем приложение (демо-приложение также можно попробовать на demo.orocrm.com ), нас приветствует современная приборная панель со случайной информацией о продажах.
Как кто-то, кто создал внутренние CRM, я сосредоточусь на технической стороне больше, чем на фактической стороне бизнеса при рассмотрении этого приложения, но тщательный бизнес-обзор и сравнение с конкурентами на каком-то другом нашем канале не исключены. , Актуальное руководство пользователя смотрите здесь .
Первое, что я заметил, — насколько плавно реагирует тема. Даже на этом экране с богатым графиком изменение размера окна браузера практически не приводило к появлению горизонтальных полос прокрутки и сразу помещало элементы тире один под другим, а не распределяло их по двум столбцам, как это делается по умолчанию в полноэкранном режиме (изображение выше — один столбец). , изображение ниже двойное).
Если вы попробуете нажать «Отправлено» в рамке «Недавние электронные письма», вы увидите там электронное письмо. Электронную почту можно предварительно просмотреть, и щелкнув имя получателя, вы попадете на исчерпывающий экран пользователя:
Как человек, которому приходилось привязывать собственную CRM к обычным почтовым ящикам IMAP с поддержкой настраиваемых заголовков для десяти миллионов электронных писем в месяц, я могу оценить эту функцию — я полностью осознаю, насколько сложно ее хорошо построить. не путая ваших пользователей (прежде всего сотрудников вашей компании).
Также обратите внимание, что все это построено с использованием ajax — здесь не происходит перезагрузки страниц, и это делает весь процесс намного более плавным.
Вы можете легко создать панель мониторинга, группы пользователей и роли и многое другое — просто изучите варианты выше. Но что, если мы хотим расширить это приложение? Что если нам нужно немного подправить?
простирающийся
Приложение OroCRM, являющееся приложением Symfony, также расширяется за счет комплектов — настройка существующих или создание новых — все идет.
Важно отметить, что из-за этой тесной связи с Symfony нужно быть более чем знакомым с Symfony и его работой. Это может быть обескураживающим для некоторых новичков, поскольку Symfony является очень сложной структурой.
Создание нового пакета
Пакеты создаются так же, как в обычных приложениях Symfony. Если вы хотите следовать, вы можете сделать это с помощью консоли Symfony:
php app/console generate:bundle
Консоль запросит ввод различной информации. Я дал ему пространство имен SitePoint/Bundle/TestBundle
. Я использовал предложения по умолчанию для всех остальных входных данных и только сказал «нет» последним двум пунктам: автоматическое обновление ядра и автоматическое обновление маршрутизации. У Oro есть особый способ включения пакетов, и важно ответить «нет» на эти вопросы.
Чтобы включить его, мы создаем файл src/SitePoint/Bundle/TestBundle/Resources/config/oro/bundles.yml
со следующим содержимым:
bundles: - SitePoint\Bundle\TestBundle\SitePointTestBundle
Чтобы посмотреть на установку Oro в режиме dev, откройте ее через URL-адрес app_dev.php
, например:
http://test.app:8000/app_dev.php
Чтобы сделать это, вам нужно убрать проверку блокировки из app_dev.php
, удалить весь блок или настроить его так, чтобы он был более разрешающим:
// This check prevents access to debug front controllers that are deployed by accident to production servers. // Feel free to remove this, extend it, or make something more sophisticated. if (isset($_SERVER['HTTP_CLIENT_IP']) || isset($_SERVER['HTTP_X_FORWARDED_FOR']) || !in_array(@$_SERVER['REMOTE_ADDR'], array('127.0.0.1', 'fe80::1', '::1')) ) { header('HTTP/1.0 403 Forbidden'); exit('You are not allowed to access this file. Check '.basename(__FILE__).' for more information.'); }
После этого очищаем кеш (кеш php app/console cache:clear
). Это займет некоторое время, но после того, как это будет сделано, ваш пакет будет «установлен». Вы можете увидеть его через консоль разработчика, хотя он нигде не будет использоваться.
Добавление нового экрана и опции меню
Основываясь на нашем недавно созданном пакете, давайте предоставим Oro новый параметр меню и представление по умолчанию для указанного параметра.
Пакет, созданный с помощью указанных выше средств, добавит несколько файлов по умолчанию, включая представление по умолчанию и контроллер по умолчанию. Мы немного изменим их и объясним, почему мы делаем то, что делаем.
Шаг 1
Измените контроллер по умолчанию. Дайте файлу src\SitePoint\Bundle\TestBundle\Controller\DefaultController.php
это содержимое вместо того, что оно содержит в настоящее время:
<?php namespace SitePoint\Bundle\TestBundle\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template; class DefaultController extends Controller { /** * @Route("/hello", name="sitepoint_link") * @Template() */ public function indexAction() { return array('name' => "hello link"); } }
Нам нужно добавить операторы использования «Route» и «Template», потому что Symfony в значительной степени полагается на чтение текста аннотации для разрешения зависимостей. Заметьте, как я рассказываю о новом @Route в аннотации? Это «маршрут», который я «использую» выше. То же самое с шаблоном. Если вы используете IDE, такую как PhpStorm, не позволяйте предупреждениям «псевдоним никогда не использовался» сбивать вас с толку — PhpStorm не знает, что аннотации используют их.
В действии мы просто присваиваем переменной случайное значение и передаем ее в шаблон. С этим мы закончили с базовым контроллером.
Шаг 2
Создайте файл src\SitePoint\Bundle\TestBundle\Resources\config\navigation.yml
и предоставьте ему следующее содержимое:
oro_menu_config: items: sitepoint_tab: label: SitePoint Test uri: '#' extras: position: 300 sitepoint_tab_link: label: SitePoint Link 1 route: sitepoint_link extras: routes: ['/^sitepoint_link/'] description: This is a SitePoint link tree: application_menu: children: sitepoint_tab: children: sitepoint_tab_link: ~ oro_titles: sitepoint_link: My link page title
Это создает новый пункт меню. Сначала он определяет новую вкладку с именем «Тест SitePoint» — это будет пункт главного меню среди возможных вариантов меню, которые уже есть. Затем он дает ему дочернюю ссылку, как определено в разделе «дерево» внизу. Ссылка (определенная выше) имеет имя «SitePoint Link 1» и использует маршрут «sitepoint_link» (еще не определен, но также используется в объявлении @Route контроллера).
Шаг 3
Удалите файл routing.yml по умолчанию ( src\SitePoint\Bundle\TestBundle\Resources\config\routing.yml
) и создайте новый src\SitePoint\Bundle\TestBundle\Resources\config\routing.yml
src\SitePoint\Bundle\TestBundle\Resources\config\oro\routing.yml
используя следующую команду: содержание:
sitepoint_link: resource: "@SitePointTestBundle/Controller" type: annotation prefix: /user
Благодаря этому Oro загружает новую конфигурацию маршрута, считывает ее функциональные возможности из аннотации контроллера по умолчанию и добавляет перед ним префикс «пользователя».
Шаг 4
Измените шаблон по умолчанию src\SitePoint\Bundle\TestBundle\Resources\views\Default\index.html.twig
на следующее:
{% extends "OroUIBundle:Default:index.html.twig" %} {% block content %} {{ name }}! {% endblock content %}
Это важно из-за аянской природы Оро. Приложение ожидает, что будет возвращен определенный формат, и, если оно не вернет определенный тип (расширенный из шаблона OroUI по умолчанию), оно будет сбит с толку и сломается.
Шаг 5
Перезагрузите генерацию навигации и очистите кеш:
php app/console oro:navigation:init php app/console cache:clear
Теперь вы должны иметь возможность посетить новую опцию меню в браузере и увидеть «Привет ссылка»:
Возможны и другие настройки , но они выходят за рамки этого поста и, вероятно, будут рассмотрены в последующих статьях, если к ним будет достаточно интереса.
Вывод
Как вы можете видеть, OroCRM — это полнофункциональная, очень надежная и чрезвычайно расширяемая CRM для современной эпохи. Он использует мощные рамки и спортивный современный дизайн.
Тем не менее, он также чрезвычайно перегружен. Тянет в Zend и Symfony оба? Почему? Одни эти фреймворки весят более ста мегабайт каждый с зависимостями. Я чувствую, что они слишком отчаянно пытаются охватить все возможные варианты, а не изобретать велосипед, что, по моему опыту, не является здоровой комбинацией.
Будете ли вы попробовать? Вы используете это в производстве? Дайте нам знать — и если вы создали несколько сложных расширений Oro с открытым исходным кодом, мы будем рады опубликовать ваш рабочий процесс! Свяжитесь с нами !