#Решаемая проблема: Реализовать упрощенный прототип системы сопровождения клиента. Предположим у нас есть отдел по работе с клиентами который принимает телефонные звонки от клиентов с зачастую однотипными проблемами с известным решением. Требуется создать инструмент-помошник для принимающего звонок подсказывающий какую информацию нужно спросить у клиента и какие действия выполнить в зависимости от проблемы.
#Решение: Необходимо сформировать последовательность вопросов в виде направленного графа в котором каждая нода содержит следующие вещи:
- Вопрос, показанный как модальное окно для оператора
- Каждый вопрос должен предусматривать несколько вариантов ответа, но для простоты сделаем так что выбирать можно только один из них.
- В зависимости от выбранного ответа осуществляется переход к следующей ноде и так далее до терминальной ноды.
- Дополнительные поля в которые можно вводить информацию, для простоты ограничимся текстовыми полями
Необходимо написать веб интерфейс для такой вот системы сопровождения клиента. Как это может выглядеть: оператор заходит на страницу в браузере (авторизацию оставим в стороне), видит первый вопрос:
- Окно 1 (корневая нода)
Вопрос который необходимо задать: "По какому поводу звоните?"
Варианты ответа: а) Звонок по поводу проблемы качества b) Вопрос по доставке c) Консультация/Другое
При выборе ответа b) осуществляется переход на следующее окно где: Вопрос: Номера заказа? Ответ: ХХХ (дополнительное поле из пункта 5)
При выборе ответа а) Вопрос: что случилось Ответ: описание проблемы (дополнительное поле)
Аналогично при ответе с)
#Требования к реализации:
- ООП: Поведение каждой ноды должно определяться собственным классом-обработчиком. Т.е. если например требуется совершить действие поиска номера заказа или записи контактных данных или рейтинга - это долно осуществляться методами класса обработчика конкретного типа ноды. Общие для всех нод данные и методы (вопросы, переходы) должны обрабатываться родительским классом.
- Структура связей-переходов между нодами и определение самих нод может быть задана заранее в конфигурационном файле (yml, xml, json на выбор) или таблице в базе данных
- Переходы между вопросами должны быть без перезагрузок страницы
- Допустимо (и целесообразно) использовать javascript фреймворки и библиотеки такие как jquery, jquery ui и подобные
- данные по каждому обращению клиента должны записываться в таблицу-лог, значения кастомных текстовых полей пишутся в этот же лог
- Язык — php
- База данных - mysql
- Неплохо показать умение работать с ajax и json