Crabler
Functions and Installation
О продукте CRABLER
Программный комплекс CRABLER — базовое SaaS-программное обеспечение для разработки мобильных приложений для разных сфер малого, среднего бизнеса, а также управления объектами коммерческой недвижимости. ПО распространяется в виде интернет-сервиса, специальные действия по установке ПО на стороне пользователя не требуются.
В настоящий момент на его базе работают следующие проекты (сборки):
- Crabler бизнес-центр — одноименное приложение для автоматизации работы бизнес-центров, содержит все возможности производных проектов;
- inDoctor — медицинский агрегатор;
- Услуги района — агрегатор бытовых услуг;
- Ферма на районе - доставка фермерских продуктов;
- Вертолет — доставка из местных магазинов;
- CargoMan — агрегатор грузоперевозчиков;
- ProfCosmetic — доставка профессиональной косметики.
Все приложения ООО “Краблер АйТи” - производные (whitelabel) приложения CRABLER адаптированные под конкретный рынок и проект:
— Все приложения IOS https://apps.apple.com/ru/developer/crabler-llc/id1438484747?see-all=i-phonei-pad-apps
— Все приложения Android https://play.google.com/store/apps/developer?id=Crabler+IT,+LLC
Основные области применения продукта:
- Автоматизация работы объектов коммерческой недвижимости
- Маркетинг новых и существующих клиентов
- Автоматизация обработки заказов
- Автоматизация оплат
- Контроль качества поставляемых услуг
- Информирование клиентов
Функциональные характеристики
- Нативные мобильные приложения — IOS / Android
- Личный кабинет — веб-версия для ПК и Смартфона
- Основные функции продукта и его производных сборок:
- Определение гео-локации пользователя в приложении
- Профиль организации по локации, тегам, формату услуг: выезды, онлайн и очные приемы
- Фильтрация организаций по установленным администратором тегам в приложении
- Каталог услуг организации — любое количество услуг, настраиваемые формы заказа
- Каталог товаров — поддержка импорта из файла, мобильная витрина, корзина, доп.опции товаров.
- Чаты — организаций и пользователей
- Прием платежей: карты МИР, VISA, MasterCard, ApplePay, Google Pay
- Интеграция с онлайн-кассами — cloudpayments.ru
- Настраиваемые бизнес-процессы обработки заказов, по этапам и ролям доступа
- Лента постов организации и пользователя
- Подписка на организации и пользователей
- Рассылка push-уведомлений подписчикам
- Публикация веб-страниц в приложении на экране профиля организации
- Управление сотрудниками, подписчиками, контактами, чатами, товарами, процедурами, услугами, заказами, ценами, страницами, постами, договорами
Установка и авторизация
Установка на мобильный телефон IOS/Android
- Для IOS-устройств - откройте приложение AppStore, введите в поиске "Crabler", найдите приложение в списке результатов и нажмите установить. Для Android-устройств - откройте приложение Play Market, введите в поиске "Crabler", найдите приложение в списке результатов и нажмите установить. Или перейдите по прямым ссылкам:
— Android https://play.google.com/store/apps/details?id=com.crabler.android
— IOS https://apps.apple.com/ru/app/crabler/id1438484748
2. После установки откройте приложение, следуйте инструкциям на экране смартфона. Разрешите доступ к гео-локации и отправке push-уведомлений.
3. Перейдите в раздел Мой профиль и нажмите Войти. Введите свой номер мобильного телефона для получения кода. Введите полученный код (при поступлении звонка - введите последние 4 цифры номера, в ином случае запросите код через смс). При первой авторизации приложение запросит дополнительные данные для регистрации - укажите их и нажмите Подтвердить.
Для авторизации под демо-доступом используйте:
— Номер телефона +79995000009
— Код доступа 5566
Авторизация в Личном кабинете администратора
- Перейдите по ссылке https://lk.crabler.com для входа в личный кабинет
- Используйте для авторизации свой логин/пароль из договора
- Для авторизации под демо-доступом используйте:
— Номер телефона +79995000009
— Постоянный код доступа 5566 - Выберите нужный профиль организации, нажмите "Войти" для входе в профиль
Руководство пользователя - ПО Crabler
Личный кабинет — веб-сайт с закрытым доступом для управления мобильным приложением клиента.
Войти в личный кабинет по ссылке https://lk.crabler.com
Для авторизации используйте свой персональный логин и пароль из договора.
Демо-доступ в личный кабинет: логин +79995000009, пароль 5566.
Личный кабинет организации
После авторизации появится перечень доступных профилей для работы:
Выберите ваш профиль или в демо-примере Ресторан Montis, нажмите кнопку Войти. Откроется личный кабинет выбранного профиля.
Разделы Личного кабинета организации
Основные разделы Личного кабинета представлены в боковом меню:
- О сообществе - основная информации об организации, географии работы и графике;
- Чаты — управление чатами и участниками;
- Акции — активация специальных цен для пользователей;
- Страницы — управление публикацией контента в приложении;
- Контакты — управление способами связи в приложении;
- Роли участников — права доступа на отдельные услуги;
- Участники — пользователи в приложении подписанные на организацию;
- Сотрудники — сотрудники организации с определенными доступами;
- Стена / Новости — управление постами и рассылками пуш-уведомлений участникам;
- Заказы — анализ и экспорт заказов организации;
- Услуги — каталог с категориями и параметрами оказания, управление формами заказа услуг;
- Товары — физические и электронные товары для продажи;
- Топ услуг — выделение определенных услуг на главном экране организации;
- Топ товаров — выделение определенных товаров на главном экране организации;
- Места обслуживания — привязка организации к местам (зданиям, бизнес-центрам, районам);
- Справочники — база специальных справочных данных организации;
- Договор с сервисом — условия работы организации в части платежей;
- Договор с клиентом — договор-оферта между организацией и пользователем приложения;
- Профиль — настройка профиля авторизованного пользователя;
Подробная видео-инструкция по личному кабинету ПО Crabler
Содержание личного кабинета объекта недвижимости (на примере бизнес-центра)
- О сообществе - основная информации о месте (бизнес-центре), адресе и графике работы;
- Чаты — управление чатами и участниками;
- Страницы — управление публикацией контента в приложении;
- Контакты — управление способами связи в приложении с администрацией места;
- Роли участников — права доступа на отдельные услуги;
- Участники — пользователи в приложении подписанные на организацию;
- Стена / Новости — управление постами и рассылками пуш-уведомлений участниками;
- Сотрудники — сотрудники места с определенными доступами;
- Локальные места — каталог управления местами внутри основного места;
- Арендаторы — база организация-арендаторов бизнес-центра;
- Справочники — база специальных справочных данных организации;
- Профиль — настройка профиля авторизованного пользователя;
Мобильное приложение Crabler - интерфейс
Видео-уроки производных модулей и проектов
Видео-инструкция по работе приложения - CRABLER (сборка inDoctor)
Видео-инструкция по работе Личного кабинета - Crabler (сборка inDoctor)
Видео-инструкция по обработке заказов в приложении - Crabler (сборка inDoctor)
Полная база видео-уроков в группе VK
https://vk.com/video/@crabler_it
Смотрите все инструкции по ПО
Тарифы на ПО
TechStack
Используемые технологии в платформе Crabler и производных сборках проектов
Backend
* PHP http://www.php.net/
* Yii2 https://www.yiiframework.com/
* PostgreSQL https://www.postgresql.org/
* API SMSЦентр https://smsc.ru/
IOS библиотеки
название |
url |
Swinject |
|
SwinjectStoryboard |
|
LightRoute |
|
Alamofire |
|
AlamofireImage |
|
Eureka |
|
InputMask |
https://github.com/RedMadRobot/input-mask-ios/blob/master/Source/Sample/Podfile |
YandexMapKit |
|
SVProgressHUD |
|
CropViewController |
|
Firebase/Core |
|
Fabric |
|
Crashlytics |
|
HockeySDK |
|
FreshchatSDK |
|
ESPullToRefresh |
|
PopupDialog |
|
Cosmos |
|
PagingMenuController |
Android библиотеки
Название |
Урл |
cat.ereza.customactivityoncrash |
|
com.a65apps.clustering |
https://github.com/65apps/android-clustering-for-yandex-mapkit |
com.afollestad.materialdialogs |
|
com.afollestad.materialdialogs.input |
|
com.airbnb.lottie |
|
com.airbnb.lottiecom.facebook.login |
|
com.alimuzaffar.lib.pin |
|
com.bumptech.glide |
|
com.crashlytics.android |
|
com.facebook |
|
com.facebookcat.ereza.customactivityoncrash |
|
com.flurry.android.analytics.sdk |
http://flurry.github.io/flurry-android-sdk/analytics/index-all.html |
com.freshchat.consumer.sdk |
|
com.getkeepsafe.relinker |
|
com.github.chrisbanes.photoview |
|
com.github.florent37.singledateandtimepicker |
|
com.github.omadahealth.typefaceview |
|
com.mancj.materialsearchbar |
|
com.nowfal.kdroidext |
|
com.pierfrancescosoffritti.androidyoutubeplayer |
https://github.com/PierfrancescoSoffritti/android-youtube-player |
com.rd.pageindicatorview |
|
com.redmadrobot.inputmask |
|
com.rilixtech.widget.countrycodepicker |
|
com.stfalcon.chatkit |
|
com.stfalcon.imageviewer |
|
com.tsongkha.spinnerdatepicker |
|
com.vbytsyuk.ahbottomnavigation |
|
com.yandex.mapkit |
|
com.yandex.metrica |
|
com.yandex.metrica.push |
|
com.yandex.metrica.push.core |
|
com.yandex.runtime |
https://yandex.ru/dev/maps/mapkit/doc/android-ref/lite/com/yandex/runtime/package-summary.html |
de.hdodenhof.circleimageview |
|
id.zelory.compressor |
|
io.fabric.sdk.android |
https://firebase.google.com/docs/reference/android/io/fabric/sdk/android/fabric/package-summary |
io.michaelrocks.libphonenumber.android |
|
me.toptas.fancyshowcase |
|
org.jetbrains.anko |
|
org.matrix.androidsdk |
|
org.matrix.olm |
|
pub.devrel.easypermissions |
https://firebaseopensource.com/projects/googlesamples/easypermissions/ |
User Manual Crabler
Руководство пользователя - ПО Crabler
Личный кабинет — веб-сайт с закрытым доступом для управления мобильным приложением клиента.
Войти в личный кабинет по ссылке https://lk.crabler.com
Для авторизации используйте свой персональный логин и пароль из договора.
Демо-доступ в личный кабинет: логин +79995000009, пароль 5566.
Личный кабинет организации
После авторизации появится перечень доступных профилей для работы:
Выберите ваш профиль или в демо-примере Ресторан Montis, нажмите кнопку Войти. Откроется личный кабинет выбранного профиля.
Разделы Личного кабинета организации
Основные разделы Личного кабинета представлены в боковом меню:
- О сообществе - основная информации об организации, географии работы и графике;
- Чаты — управление чатами и участниками;
- Акции — активация специальных цен для пользователей;
- Страницы — управление публикацией контента в приложении;
- Контакты — управление способами связи в приложении;
- Роли участников — права доступа на отдельные услуги;
- Участники — пользователи в приложении подписанные на организацию;
- Сотрудники — сотрудники организации с определенными доступами;
- Стена / Новости — управление постами и рассылками пуш-уведомлений участникам;
- Заказы — анализ и экспорт заказов организации;
- Услуги — каталог с категориями и параметрами оказания, управление формами заказа услуг;
- Товары — физические и электронные товары для продажи;
- Топ услуг — выделение определенных услуг на главном экране организации;
- Топ товаров — выделение определенных товаров на главном экране организации;
- Места обслуживания — привязка организации к местам (зданиям, бизнес-центрам, районам);
- Справочники — база специальных справочных данных организации;
- Договор с сервисом — условия работы организации в части платежей;
- Договор с клиентом — договор-оферта между организацией и пользователем приложения;
- Профиль — настройка профиля авторизованного пользователя;
Подробная видео-инструкция по личному кабинету ПО Crabler
Содержание личного кабинета объекта недвижимости (на примере бизнес-центра)
- О сообществе - основная информации о месте (бизнес-центре), адресе и графике работы;
- Чаты — управление чатами и участниками;
- Страницы — управление публикацией контента в приложении;
- Контакты — управление способами связи в приложении с администрацией места;
- Роли участников — права доступа на отдельные услуги;
- Участники — пользователи в приложении подписанные на организацию;
- Стена / Новости — управление постами и рассылками пуш-уведомлений участниками;
- Сотрудники — сотрудники места с определенными доступами;
- Локальные места — каталог управления местами внутри основного места;
- Арендаторы — база организация-арендаторов бизнес-центра;
- Справочники — база специальных справочных данных организации;
- Профиль — настройка профиля авторизованного пользователя;
Мобильное приложение Crabler - интерфейс
Видео-уроки производных модулей и проектов
Видео-инструкция по работе приложения - проект inDoctor
Видео-инструкция по работе Личного кабинета - проект inDoctor
Видео-инструкция по обработке заказов в приложении - проект inDoctor
Полная база видео-уроков в группе VK
https://vk.com/video/@crabler_it
Prices
Тарифы на SaaS-платформу Crabler для бизнес-центров (договор услуг)
- 1-3 бизнес-центра — 19.500 рублей / месяц / бизнес-центр
- 4+ бизнес-центра — 17.500 рублей / месяц / бизнес-центр
Выпуск whitelabel-версии приложения IOS/Android — 199.500 рублей единоразово.
Поддержка whitelabel-версии приложения — 7.500 рублей / месяц / платформа.
Комиссия за прием платежей в приложении — 7% от транзакции, включая аренду онлайн-кассы.
Дилерские проекты (франчайзинг ПО)
Стоимость пакета в зависимости от численности города | ||||
Проект / Размер города работы | до 300 тыс. | до 500 тыс. | до 1 млн. | более 1 млн. |
inDoctor | 250 000 | 300 000 | 400 000 | 500 000 |
CargoMan | 250 000 | 300 000 | 400 000 | 500 000 |
Услуги района | 250 000 | 300 000 | 400 000 | 500 000 |
Вертолет | 240 000 | 300 000 | 400 000 | 500 000 |
Ферма на районе | 250 000 | 300 000 | 400 000 | 500 000 |
Crabler - бизнес-центры | 200 000 | 300 000 | 350 000 | 450 000 |
Все цены указаны в рублях и без НДС. Дилерский договор дает эксклюзивное право работы дилера в выбранном городе.
Видео-презентации проектов
inDoctor, медсестра на дом
Услуги района
СargoMan
Ферма на районе
Support
Информация по поддержке, устранению неисправностей в ходе эксплуатации, совершенствовании ПО и персонале
Обращения в службу поддержки ПО и совершенстования
- https://crabler-it.com/support
- по e-mail: support@crabler-it.com
- по телефону: +7 (499) 286-96-40 (рабочее время с 10 до 18, по времени Москвы)
- в чате телеграм из договора бизнес-пользователя
- Адрес офиса поддержки и развития: Россия, Москва, переулок Гамсоновский 2с1
1. БП "Разработка ПО"
Разработка ПО идет спринтами (рабочими циклами по 2 недели каждый).
- В начале спринта (первый рабочий день недели) менеджером продукта проводится формирование беклога исходя из приоритетов развития продукта на текущий квартал, а также заявок от службы поддержки (ошибки, запросы улучшений)
- Задачи группируются на ошибки и фичи в соотношении (20/80)
- Формируется команда текущего спринта из внутренних и внешних участников
- На основании данных анализа беклога команда спринта формирует план спринта и выполняет его оценку в условных единицах (сторипоинты)
- Ежедневно происходят встречи команды спринта (хадлы) для сверки промежуточных результатов спринта
- По результатам завершения спринта
- Выполняется релиз и/или багфикс
- Создается документация для группы поддержки и разработки
- Публикуется описание реализованных задач в открытых клиентских каналах
- Производится публичная презентация нового функционала среди представителей клиентов
- Результат видео-демонстрации публикуется в закрытой клиентской группе
2. БП "Поддержка ПО"
- Запрос принимается поддержкой в рабочее время по всем каналам указанным на странице https://crabler-it.com/support с темой "Ошибка"
- Все заявки обрабатываются в течение 2-х рабочих дней
- Ответ по заявке отправляется на e-mail пользователя
- При обнаружении ошибки - выполняется классификация ошибки
- Критическая — блокирует работу основных сценариев использование (заказы, оплаты, работа приложений) — отправляется с пометкой "блокер" в отдел разработки и устраняется за 1 рабочий день
- Типовая — отправляется с пометкой "normal" в отдел разработки и устраняется за 10 рабочих день
- После исправления ошибки специалист службы поддержки сообщает о результате клиенту
3. БП "Улучшение и развитие ПО"
- Запрос принимается поддержкой в рабочее время по всем каналам указанным на странице https://crabler-it.com/support с темой "Улучшение"
- Все заявки обрабатываются в течение 2-х рабочих дней
- Ответ по заявке отправляется на e-mail пользователя
- Все запросы на улучшения передаются в тикет-систему для рассмотрение менеджером продукта
- Раз в две недели менеджер продукта формирует из новых запросов беклог для будущих спринтов
- По каждому запросу указывается: вес стоимости разработки, вес влияния на цели клиента, статус (в спринт, в беклог, на будущее, отказ)
- В случае взятие заявки в спринт — автору заявки отправляется уведомление.
- Ежемесячно командой продукта производится пересмотр ключевых обращений на улучшение ПО и обновление их статусов
- Менеджер продукта ежемесячно на основании общения с клиентами и пользователям пополняет список заявок на улучшение.
Персонал службы поддержки и совершенствования
- Аккаунт-менеджер (3 единицы) — прием и обработка заявок, составление клиентской документации
- Тестировщик (2 единицы) — проверка ошибки и классификация критичности
- Менеджер продукта (2 единицы) — рассмотрение новых обращений на улучшение функциональности и совершенствования ПО, формирование беклога, приемка спринта
- Ведущий разработчик (2 единицы) - развитие и подержка архитектуры
- Разработчик мобильных приложений (2 единица) - обновление и выкладка приложений
- Разработчик fullstack (2 единицы) — кросс-разработки веб/мобильных систем
Местонахождение сервера — Россия, г. Санкт-Петербург, ул. Цветочная, д. 21, лит. А
Бизнес-процессы организации по работе над ПО
- Аналитика
- По запросам от поддержки клиентов
- По результатам анализа рынка
- По инициативе команды
- Анализ базы транзакций
- Анализ базы организаций
- Анализ базы заказов
- Анализ базы гео-объектов
- Иная аналитика БД
- Построение нового BI-отчета
- Анализ трафика
- Анализ вовлеченности пользователей
- Анализ соцдема пользователей
- Анализ технических параметров пользователей
- Аудит рекламной кампании
- Анализ SEO-трафика
- Анализ партнерского трафика
- A/B тестирование дизайна
- A/B тестирование функциональности
- A/B тестирование предложения
- Анализ и синтез новой функциональности
- Анализ базы данных
- Анализ работы приложений
- Анализ маркетинга
- Разработка ПО
- Новая функциональность
- Поддержка существующей функциональности
- Ошибки и уязвимости
- Анализ требований
- Изучение существующих решений
- Формирование оптимальных требований
- Разработка моделей системы
- Визуализация моделей в фреймворке
- Анализ моделей и требований
- Определение стека
- Написание кода
- Квалификация кода (ревью)
- Оптимизация и доработка кода
- Выкладка в тестовую среду
- Сборка проекта
- Публикация для внутреннего тестирования
- Публикация для внешнего тестирование
- Публикация релиза
- Проверка заявленной обратной совместимости
- Проверка процессов
- Проверка ролей
- Проверка требований
- Проверка сборки приложения
- Проверка серверных компонент
- Проверка данных
- Написание автотестов
- Формирование отчета тестирования
- Повторная проверка
- Подключение нового сервера
- Резервирование данных
- Восстановление данных
- Работа с подрядчиками
- Определение целей и требований к подрядчику
- Поиск подрядчика
- Квалификация подрядчика
- Заключение договора
- Подключение к работе над проектом
- Контроль задач и бюджета
- Отчетность
- Формирование беклога
- Приоритезация беклога
- Планирование спринта
- Ретро спринта
- Ретро релиза
- Демодей
- Проектирование
- Конструирование
- Сборка
- Тестирование
- Администрирование
- Поддержка
- Учет критических (blocker)
- Учет иных дефектов (normal)
- Оформление задачи с дефектом для беклога
- Оформление задачи с дефектом для спринта (blocker)
- Учет дефектов (багов)
- Обработка обращений
- Создание задачи для беклога
- Обновление документации
- Публикация релиза
- Управление конфигурацией
- Маркетинг
- Написание статьи в блог или SMM
- Разработка дизайна кампании
- Разработка видео-ролика продукта
- Проведение e-mail рассылки
- Запуск кампании
- Завершение кампании
- Продажа
- Создание лендинг-страницы продукта
- Создание видео-ролика продукта
- Разработка ценообразования
- Публикация в открытых источниках
- Консультация клиентов
- Выставление счетов
- Подписание договоров
- Бухгалтерская отчетность
- Обмен документами
Бизнес-процессы
- Предназначены для управления заказами.
- Привязаны к услугам. Один процесс может быть привязан к нескольким услугам.
- При создании заказа создается копия бизнес-процесса выбранной услуги, после чего заказ управляется этой копией. Необходимо для обратной совместимости изменяемых процессов и уже запущенных по заказам.
- В созданном заказе процесс всегда находится в определенном состоянии.
- Доступны 4 роли пользователей для управления процессами (роли назначаются администратором провайдера в личном кабинете):
customer
- заказчик,executor
- исполнитель,courier
- курьер,moderator
- модератор
- Могут запускать в тестовом режиме - проходят тестовые транзакции оплаты без фактического списания средств. См. https://developers.cloudpayments.ru/#testirovanie.
- Синтаксис представлен в
json
-формате.
Пример настроенного бизнес-процесса
JSON-файл в котором производится настройка
{
"state0": {
"label": "Создание заказа",
"onStart": {
"bp": {
"step0": {
"next": "step1",
"type": "setData",
"fields": {
"field*": []
}
},
"step1": {
"next": "step2",
"text": "Заказ #{{ order.code }}<br/><br/><strong>Услуга</strong>: {{ order.service.title }}<br/><strong>Доставка</strong>: {{ order.delivery }}<br/><strong>Оплачен</strong>: {{ order.payed }}<br/><strong>Сумма к оплате</strong>: {{ order.sum }}<br/><strong>Выплаченная сумма</strong>: {{ order.sum_payed }}<br/><strong>Общая сумма</strong>: {{ order.sum_total }}<br/><strong>Организация заказчика</strong>: {{ order.customer.title }}<br/><strong>Заказчик</strong>: {{ order.customerUser.title }} {{ order.customerUser.phone_number }}<br/><strong>Провайдер</strong>: {{ order.executor.title }}<br/><strong>Исполнитель</strong>: {{ order.executorUser.title }}<br/><strong>Статус</strong>: {{ order.status.title }}<br/><strong>Дата запланированного завершения</strong>: {{ order.deadline }}<br/><br/>{% for item in order.fieldsData %}<strong>{{ item.field.title }}</strong>: {{ item.valueFormatted }}<br/>{% endfor %}<br/>Детали заказа доступны в <a href=\"https://lk.crabler.com/site/{{ order.executor.communityProvider.id }}/jump\">личном кабинете</a>.",
"type": "email",
"subject": "Новый заказ",
"recipients": [
"zakaz@crabler.com",
"moderator"
]
},
"step2": {
"type": "setState",
"state": "state1"
}
}
}
},
"state1": {
"label": "Оплата заказа",
"actions": [
{
"bp": {
"step0": {
"next": "step1",
"type": "pay"
},
"step1": {
"type": "if",
"conditions": [
[
{
"service.need_moderation": true
},
"step2"
],
[
true,
"step3"
]
]
},
"step2": {
"type": "setState",
"state": "state2"
},
"step3": {
"type": "setState",
"state": "state3"
}
},
"code": "pay",
"allow": [
"customer"
],
"label": "Оплатить"
},
{
"bp": {
"step0": {
"type": "setState",
"state": "stateCancel"
}
},
"code": "cancel",
"allow": [
"customer"
],
"label": "Отменить"
}
]
},
"state2": {
"label": "На модерации",
"actions": [
{
"bp": {
"step0": {
"type": "setState",
"state": "state3"
}
},
"code": "action1",
"allow": [
"moderator"
],
"label": "Модерация пройдена"
},
{
"bp": {
"step0": {
"next": "step1",
"type": "setData",
"fields": {
"executor_user_id": {
"required": true
}
}
},
"step1": {
"body": "Вас назначили исполнителем. Свяжитесь с клиентом и подтвердите выезд.",
"next": "step2",
"type": "push",
"title": "Заказ #{{ order.code }}",
"recipients": [
"executor"
]
},
"step2": {
"type": "setState",
"state": "state4"
}
},
"code": "action2",
"allow": [
"moderator"
],
"label": "Назначить исполнителя"
},
{
"bp": {
"step0": {
"next": "step1",
"type": "setData",
"fields": {
"field1416182395": {
"required": true
}
}
},
"step1": {
"body": "{{ clientData['field1416182395'] }}",
"type": "push",
"title": "Сообщение от {{ order.customerUser.title }} к заказу #{{ order.code }}",
"recipients": [
"moderator"
]
}
},
"code": "action1_chat",
"allow": [
"customer"
],
"label": "Написать сообщение"
},
{
"bp": {
"step0": {
"next": "step1",
"type": "setData",
"fields": {
"field1416182395": {
"required": true
}
}
},
"step1": {
"body": "{{ clientData['field1416182395'] }}",
"type": "push",
"title": "Сообщение от {{ order.moderatorUser.title }} к заказу #{{ order.code }}",
"recipients": [
"customer"
]
}
},
"code": "action2_chat",
"allow": [
"moderator"
],
"label": "Написать сообщение"
},
{
"bp": {
"step0": {
"type": "setState",
"state": "stateCancel"
}
},
"code": "cancel",
"allow": [
"customer"
],
"label": "Отменить"
},
{
"bp": {
"step0": {
"type": "setState",
"state": "stateReject"
}
},
"code": "cancel",
"allow": [
"moderator"
],
"label": "Отклонить"
}
]
},
"state3": {
"label": "Поиск исполнителя",
"actions": [
{
"bp": {
"step0": {
"next": "step1",
"type": "setData",
"fields": {
"executor_user_id": {
"value": "_CURRENT_USER_"
},
"hidden_customer_contact": {
"value": false
}
}
},
"step1": {
"type": "setState",
"state": "state4"
}
},
"code": "action1",
"allow": [
"executor"
],
"label": "Взять в работу"
},
{
"bp": {
"step0": {
"next": "step1",
"type": "setData",
"fields": {
"field1416182395": {
"required": true
}
}
},
"step1": {
"body": "{{ clientData['field1416182395'] }}",
"type": "push",
"title": "Сообщение от {{ order.customerUser.title }} к заказу #{{ order.code }}",
"recipients": [
"moderator"
]
}
},
"code": "action1_chat",
"allow": [
"customer"
],
"label": "Написать сообщение"
},
{
"bp": {
"step0": {
"next": "step1",
"type": "setData",
"fields": {
"field1416182395": {
"required": true
}
}
},
"step1": {
"body": "{{ clientData['field1416182395'] }}",
"type": "push",
"title": "Сообщение от {{ order.moderatorUser.title }} к заказу #{{ order.code }}",
"recipients": [
"customer"
]
}
},
"code": "action2_chat",
"allow": [
"moderator"
],
"label": "Написать сообщение"
},
{
"bp": {
"step0": {
"type": "setState",
"state": "stateCancel"
}
},
"code": "cancel",
"allow": [
"customer"
],
"label": "Отменить"
},
{
"bp": {
"step0": {
"type": "setState",
"state": "stateReject"
}
},
"code": "cancel",
"allow": [
"moderator"
],
"label": "Отклонить"
}
],
"onStart": {
"bp": {
"step0": {
"body": "{{ order.service.title}}, {{ order.fieldDeliveryAddress }} {{ order.fieldDateTimeDelivery }} - {{ order.service.organization.currency.sum }} {{ order.service.organization.currency.short_title }}",
"type": "push",
"title": "Новый заказ #{{ order.code }}",
"recipients": [
"executor"
]
}
}
}
},
"state4": {
"label": "Исполнитель назначен",
"actions": [
{
"bp": {
"step0": {
"body": "Исполнитель {{ order.executor.title }} подтвердил выезд",
"next": "step1",
"type": "push",
"title": "Заказ #{{ order.code }}",
"recipients": [
"customer"
]
},
"step1": {
"type": "setState",
"state": "state5"
}
},
"code": "action1",
"allow": [
"executor"
],
"label": "Подтвердить выезд"
},
{
"bp": {
"step0": {
"next": "step1",
"type": "setData",
"fields": {
"executor_user_id": {
"value": "_NULL_"
}
}
},
"step1": {
"body": "На заказ будет назначен другой исполнитель, ожидайте",
"next": "step2",
"type": "push",
"title": "Заказ #{{ order.code }}",
"recipients": [
"customer"
]
},
"step2": {
"type": "setState",
"state": "state3"
}
},
"code": "action2",
"allow": [
"executor"
],
"label": "Отменить выезд"
},
{
"bp": {
"step0": {
"next": "step1",
"type": "setData",
"fields": {
"executor_user_id": {
"value": "_NULL_"
}
}
},
"step1": {
"body": "На заказ будет назначен другой исполнитель, ожидайте",
"next": "step2",
"type": "push",
"title": "Заказ #{{ order.code }}",
"recipients": [
"customer"
]
},
"step2": {
"type": "setState",
"state": "state3"
}
},
"code": "action2",
"allow": [
"moderator"
],
"label": "Вернуть в поиск"
},
{
"bp": {
"step0": {
"next": "step1",
"type": "setData",
"fields": {
"field1416182395": {
"required": true
}
}
},
"step1": {
"body": "{{ clientData['field1416182395'] }}",
"type": "push",
"title": "Сообщение от {{ order.customerUser.title }} к заказу #{{ order.code }}",
"recipients": [
"executor",
"moderator"
]
}
},
"code": "action1_chat",
"allow": [
"customer"
],
"label": "Написать сообщение"
},
{
"bp": {
"step0": {
"next": "step1",
"type": "setData",
"fields": {
"field1416182395": {
"required": true
}
}
},
"step1": {
"body": "{{ clientData['field1416182395'] }}",
"type": "push",
"title": "Сообщение от {{ order.executorUser.title }} к заказу #{{ order.code }}",
"recipients": [
"customer"
]
}
},
"code": "action2_chat",
"allow": [
"executor"
],
"label": "Написать сообщение"
},
{
"bp": {
"step0": {
"next": "step1",
"type": "setData",
"fields": {
"field1416182395": {
"required": true
}
}
},
"step1": {
"body": "{{ clientData['field1416182395'] }}",
"type": "push",
"title": "Сообщение от {{ order.moderatorUser.title }} к заказу #{{ order.code }}",
"recipients": [
"customer"
]
}
},
"code": "action3_chat",
"allow": [
"moderator"
],
"label": "Написать сообщение"
},
{
"bp": {
"step0": {
"type": "setState",
"state": "stateReject"
}
},
"code": "cancel",
"allow": [
"moderator"
],
"label": "Отклонить"
}
],
"onStart": {
"bp": {
"step0": {
"body": "Исполнитель найден, ожидайте звонка",
"type": "push",
"title": "Заказ #{{ order.code }}",
"recipients": [
"customer"
]
}
}
}
},
"state5": {
"label": "В работе",
"actions": [
{
"bp": {
"step0": {
"type": "setState",
"state": "stateDone"
}
},
"code": "action2",
"allow": [
"executor"
],
"label": "Завершить заказ"
},
{
"bp": {
"step0": {
"next": "step1",
"type": "setData",
"fields": {
"executor_user_id": {
"required": true
}
}
},
"step1": {
"body": "Вас назначили исполнителем. Свяжитесь с клиентом и подтвердите выезд.",
"next": "step2",
"type": "push",
"title": "Заказ #{{ order.code }}",
"recipients": [
"executor"
]
},
"step2": {
"type": "setState",
"state": "state4"
}
},
"code": "action2",
"allow": [
"moderator"
],
"label": "Заменить исполнителя"
},
{
"bp": {
"step0": {
"next": "step1",
"type": "setData",
"fields": {
"field1416182395": {
"required": true
}
}
},
"step1": {
"body": "{{ clientData['field1416182395'] }}",
"type": "push",
"title": "Сообщение от {{ order.customerUser.title }} к заказу #{{ order.code }}",
"recipients": [
"executor",
"moderator"
]
}
},
"code": "action1_chat",
"allow": [
"customer"
],
"label": "Написать сообщение"
},
{
"bp": {
"step0": {
"next": "step1",
"type": "setData",
"fields": {
"field1416182395": {
"required": true
}
}
},
"step1": {
"body": "{{ clientData['field1416182395'] }}",
"type": "push",
"title": "Сообщение от {{ order.executorUser.title }} к заказу #{{ order.code }}",
"recipients": [
"customer"
]
}
},
"code": "action2_chat",
"allow": [
"executor"
],
"label": "Написать сообщение"
},
{
"bp": {
"step0": {
"type": "setState",
"state": "stateReject"
}
},
"code": "cancel",
"allow": [
"moderator"
],
"label": "Отклонить"
}
],
"onStart": {
"bp": {
"step0": {
"type": "setData",
"fields": {
"status_id": {
"value": "ACCEPTED"
}
}
}
}
}
},
"stateDone": {
"label": "Выполнен",
"actions": [
{
"bp": [],
"code": "rate",
"allow": [
"customer",
"executor"
],
"label": "Оценить выезд"
}
],
"onStart": {
"bp": {
"step0": {
"next": "step1",
"type": "setData",
"fields": {
"status_id": {
"value": "DONE"
}
}
},
"step1": {
"body": "Заказ #{{ order.code }} выполнен, пожалуйста, оцените",
"type": "push",
"title": "{{ order.executor.title }}",
"recipients": [
"customer"
]
}
}
}
},
"stateCancel": {
"label": "Отменен",
"onStart": {
"bp": {
"step0": {
"next": "step1",
"type": "setData",
"fields": {
"status_id": {
"value": "REJECTED"
}
}
},
"step1": {
"body": "Заказ #{{ order.code }} отменен",
"type": "push",
"title": "{{ order.executor.title }}",
"recipients": [
"executor"
]
}
}
}
},
"stateReject": {
"label": "Отклонен",
"onStart": {
"bp": {
"step0": {
"next": "step1",
"type": "setData",
"fields": {
"status_id": {
"value": "REJECTED"
}
}
},
"step1": {
"body": "Заказ #{{ order.code }} отклонен",
"type": "push",
"title": "{{ order.executor.title }}",
"recipients": [
"customer"
]
}
}
}
}
}
Структура
{ "state0": { // Состояние (индексация всегда должна начинаться с 0). "label": "Заголовок состояния", "onState": { // Действия, выполняемые при переходе в состояние (каждый раз) "bp": { "step0": { // Индексация шагов всегда должна начинаться с 0 "type": "Тип действия", "next": "step1", // Переход к следующему шагу (необязательный параметр) // Дополнительные параметры шага }, "step1": {}, ... } }, "actions": [ // Действия пользователей { "label": "Заголовок кнопки", "code": "action1", // Код действия в формате `[\w]+` "allow": [ // Доступ к действию для роли / ролей "customer", "executor", "courier", "moderator" ], "bp": [], // Действия, выполняемые после нажатия кнопки пользователем. "visible": { // Условия отображения кнопки (необязательный параметр). "conditions": [] } }, ... ] }, ... }
Типы действий
Действие | Описание |
---|---|
if |
Проверка условия. |
setData |
Установка значений заказа (включая значения доп. полей). |
setState |
Переход к состоянию. |
pay |
Оплата заказчиком:
|
confirmPay |
Подтверждение оплаты заказчика. |
confirmPayWithoutPayment |
Подтверждение оплаты заказчика без фактической оплаты. |
confirmPayExecutorWithoutPayment |
Подтверждение оплаты исполнителя без фактической оплаты. |
voidPay |
Отмена оплаты. |
registerExecutor |
Регистрация исполнителя. |
createEntity |
Создание сущности. |
push |
Отправка push -уведомления. |
sms |
Отправка sms -сообщения. |
email |
Отправка email -сообщения. |
Проверка условия (if
)
{ "type": "if", "conditions": [ // Список условий, выполняемых по порядку, до первого истинного [ [], // Условие в json-формате с поддержкой twig-переменных. См. https://www.yiiframework.com/doc/guide/2.0/ru/db-query-builder#where "step1" // Переход к шагу, если условие истинно ], // Другие условия [ true, // Выполняется всегда, когда неистинны все предыдущие условия "step2" ] ] }
Установка значений заказа (включая значения доп. полей) (setData
)
{ "type": "setData", "fields": { "field*": [], // Вывести все поля заказа и его доп. поля для заполнения со своими настройками обязательности и контекста (необязательный параметр) // Управление конкретными доп. полями "field<Code>": { // Управление конкретным полем (необязательный параметр) "required": false, // Переписывает значение обязательности доп. поля (необязательный параметр) "value": "Значение" // Установка конкретного значения (необязательный параметр) }, // Управление полями заказа "<code>": [] // См. структуру заказа в https://admin.crabler.com/constructor/object/view?id=order } }
Переход к состоянию (setState
)
{ "type": "setState", "state": "stateN" // Указывается состояние, к которому осуществляется переход. }
Оплата заказчиком (pay
)
{ "type": "pay" }
Подтверждение оплаты заказчика (confirmPay
)
{ "type": "confirmPay" }
Подтверждение оплаты заказчика без фактической оплаты (confirmPayWithoutPayment
)
{ "type": "confirmPayWithoutPayment" }
Подтверждение оплаты исполнителя без фактической оплаты (confirmPayExecutorWithoutPayment
)
{ "type": "confirmPayExecutorWithoutPayment" }
Отмена оплаты (voidPay
)
{ "type": "voidPay" }
Регистрация исполнителя (registerExecutor
)
{ "type": "registerExecutor" }
Создание сущности (createEntity
)
{ "type": "createEntity" }
Отправка push
-уведомления (push
)
{ "type": "push", "title": "Заголовок", // Поддерживает twig-переменные "body": "Текст", // Поддерживает twig-переменные "recipients": [ // Получатели (один либо несколько ролей / пользователей) "executor", // Название роли. Если у заказа задан исполнитель, то push-уведомление получает конкретно он иначе push-уведомление получают все исполнители провайдера, имеющих доступ к услуге. Аналогично для других ролей. "<uuid>", // В качестве получателя может быть передан UUID конкретного пользователя. "+70001234567" // В качестве получателя может быть передан номер телефона в свободном формате. Будет осуществлен поиск пользователя в базе по номеру телефона. ] }
Отправка sms
-сообщения (sms
)
{ "type": "sms", "message": "Текст сообщения", // Поддерживает twig-переменные "recipients": [ // Получатели (один либо несколько ролей / пользователей) "executor", // Название роли. Если у заказа задан исполнитель, то push-уведомление получает конкретно он иначе push-уведомление получают все исполнители провайдера, имеющих доступ к услуге. Аналогично для других ролей. "<uuid>", // В качестве получателя может быть передан UUID конкретного пользователя. "+70001234567" // В качестве получателя может быть передан номер телефона в свободном формате. Будет осуществлен поиск пользователя в базе по номеру телефона. ] }
Отправка email
-сообщения (email
)
{ "type": "email", "subject": "Тема письма", // Поддерживает twig-переменные "text": "Текст письма", // Поддерживает twig-переменные "recipients": [ // Получатели (один либо несколько ролей / пользователей) "executor", // Название роли. Если у заказа задан исполнитель, то push-уведомление получает конкретно он иначе push-уведомление получают все исполнители провайдера, имеющих доступ к услуге. Аналогично для других ролей. "<uuid>", // В качестве получателя может быть передан UUID конкретного пользователя. "example@crabler.com" // В качестве получателя может быть передан конкретный email. ] }
Константы для значений полей
Константа | Значение |
---|---|
_NULL_ |
null |
_CURRENT_USER_ |
ID текущего пользователя |
TWIG
-переменные
Переменная | Значение |
---|---|
order |
Текущий заказ. Можно обращаться к вложенным сущностям. |
clientData |
Данные, полученные с клиента через POST . |