Clienteling Micro-capability¶
Jumpmind Commerce's Clienteling Micro-capability supports the following functions:
- Appointments
- Consultations
- Appointment Availability
Features¶
Appointments¶
Appointments are designed to be a scheduled interaction with a customer where the customer interacts with an associate and consults with them on their needs.
An associate can add notes about a customer that will be shown within a consultation. They can also cancel the appointments.
When a customer arrives for their appointment the associate will be able to go into the consultation to conduct the appointment.
Consultation¶
Consultations are designed to be where an associate is helping and interacting with a customer.
The associate will add items to the consultation as recommendations and give the customer the opportunity to provide feedback about the item.
Once the consultation is completed, the associate can start a transaction and send them to start a transaction.
When a customer has liked items from their consultation those items will then be queued for the customers next transaction where the associate will be prompted to ask the customer if the items should be added to their transaction and be required to scan or dismiss the item.
Appointment Availability¶
Appointment Availability is designed to be a simple management screen to set up appointment availability time slots for a given day of the week and time period.
It is currently only supported to set a single schedule that is active immediately upon setting the schedule.
This schedule is accessible via REST APIs so that other systems may integrate with them and find out what a stores current availability is.
Enablement¶
The Clienteling micro-cap's functionality may be accessed via one of two modes:
- Integrated
- Standalone
The Integrated mode will enable bidirectional access between the Commerce application and the Clienteling module. In Standalone mode, the Clienteling module's "home" page will replace the equivalent page in Commerce, and the latter will be inaccessible to the user altogether.
Enabling Integrated Mode¶
Integrated mode can be enabled by exposing an "Appointments" button on the Commerce home screen.
Checklist¶
- [ ] Add a row to
ctx_buttonconfigured as follows:
| button_group_id | button_id | button_name | button_type | button_value | enabled |
|---|---|---|---|---|---|
| home | Clienteling | key:home:home.clienteling | action | Clienteling | 1 |
Enabling Standalone mode¶
Standalone mode can be run in a development environment and using development-only data using a pre-configured launch configuration compatible with
IntelliJ IDEA. This launch configuration, which will be created by the project's build.gradle file, will be named "\<customer> Clienteling"
(e.g. "ABC Clienteling") if running from a customer's extension layer or "Commerce Clienteling" if running from the reference implementation of
Commerce.
Data scripts exclusively for use during local testing in standalone mode can be stored in the src/main/resources/data/base/intellij directory
of the project housing the standalone launcher class RunClientelingBase.
Checklist¶
- [ ] Create data scripts as needed in the Clienteling module's
src/main/resources/data/base/intellijdirectory. - [ ] Run the auto-generated launch configuration for standalone mode from IntelliJ IDEA and validate the application starts successfully.
Configuration¶
The Clienteling micro-cap's functionality is driven by a combination of database data and Spring context configuration, the latter of which supplies both technical and business rule parameters.
Technical Configuration¶
The following application-*.yml parameters govern technical behavior for the Clienteling module:
| Key | Purpose | Customization Required? |
|---|---|---|
| openpos.micro-caps.configs.ctAppointments.server-url | names the URL of the server hosting Clienteling Appointments services when running in Integrated mode | Y |
| openpos.micro-caps.configs.ctAppointments.remote-entry | names and locates the script invoked to serve the Clienteling Appointments micro-cap when accessed from another application | Y |
| openpos.micro-caps.configs.ctConsultation.server-url | names the URL of the server hosting Clienteling Appointments services when running in Integrated mode | Y |
| openpos.micro-caps.configs.ctConsultation.remote-entry | names and locates the script invoked to serve the Clienteling Appointments micro-cap when accessed from another application | Y |
Checklist¶
- [ ] Configure the URL of the server hosting Clienteling services
- [ ] Configure the host and port at which the
remoteEntry.jsscript serving the Clienteling micro-cap is invokable
Data Model¶
erDiagram
ct_appointment ||--o{ ct_appointment_message : ""
ct_appointment |o--|| ct_consultation : ""
ct_consultation ||--o{ ct_consultation_item : ""
ct_consultation_item ||--o| ct_consultation_retail_line_item : ""
ct_appointment_availability {
string business_unit_id
string availability_type
date start_date
date end_date
time start_time
time end_time
string day_of_week_type
}
ct_appointment {
string business_unit_id
long sequence_number
string appointment_type
date scheduled_start_date
date scheduled_end_date
string status_type
date checkin_date
string scheduled_username
string customer_id
string guest_first_name
string guest_last_name
string guest_contact_phone_number
}
ct_appointment_message {
string business_unit_id
long appointment_sequence_number
long sequence_number
long user_id
string message
string source
}
ct_consultation {
string business_unit_id
long customer_id
long sequence_number
long appointment_sequence_number
date start_date_time
date end_date_time
long user_id
string consultation_needs
date created_date_time
}
ct_consultation_item {
string business_unit_id
long customer_id
long sequence_number
string item_id
int sort_order
string customer_feedback_type
date added_date_time
}
ct_consultation_retail_line_item {
string business_unit_id
long customer_id
long sequence_number
string device_id
string item_id
string business_date
long retail_line_item_sequence_number
}
ct_customer_note {
long customer_id
long sequence_number
long user_id
string note
date added_date
}
APIs¶
All Clienteling services are accessible through REST APIs. To test the APIs swagger-ui is integrated into the Clienteling MicroCap and is accessible through http://localhost:6440/swagger-ui/.
Swagger UI provides a way to test client requests through the browser.
Flows¶
stateDiagram-v2
state Appointments {
appointmentDialog: Appointment Dialog
[*] --> AppointmentsList
AppointmentsList --> appointmentDialog
appointmentDialog --> AppointmentsList: Done
appointmentDialog --> [*]
}
state Appointment {
appointment: Appointment Details
assignAssociateDialog: Assign Associate Dialog
appointmentNotesDialog: Notes Dialog
[*] --> appointment
appointment --> assignAssociateDialog
assignAssociateDialog --> appointment
appointment --> [*]
appointment --> appointmentNotesDialog
appointmentNotesDialog --> appointment
}
[*] --> Appointments: Entry from Point of Sale
[*] --> Appointment: Entry from Point of Sale\nDirectly to Appointment
Appointment --> [*]: Checkout, transition to Point of Sale
Appointments --> Appointment
Appointment --> Appointments: Done
Appointments --> [*]: Done, transition to Point of Sale
Integrations¶
Clienteling integrates with the Point of Sale service to get item and customer information. These integrations are configured through endpoint configurations as REMOTE_ONLY.
Remote Endpoint Configuration¶
openpos:
services:
profiles:
pos:
url: 'http://localhost:6140' # This property should be configured to point to the remote POS system
Checklist¶
- [ ] Configure the URL of the remote POS system to use for Item lookups and customer information.
Publisher¶
Appointments can be published to a topic via IPublisher implementations.
Checklist¶
- [ ] Implement an
IPublisherfor Appointments.
Flow Diagram¶
stateDiagram-v2
[*] --> AppointmentsHomeState: Entry from Point of Sale
AppointmentsHomeState: AppointmentsHomeState (Calendar)
AppointmentsHomeState --> AppointmentDetailsState: AppointmentSelected
AppointmentsHomeState --> AddAppointmentState: AddAppointment
AppointmentDetailsState --> ConsultationDetailsState: CheckIn
assignAssociateDialog: Assign Associate Dialog
appointmentNotesDialog: Notes Dialog
AppointmentDetailsState --> assignAssociateDialog
assignAssociateDialog --> AppointmentDetailsState
AppointmentDetailsState --> appointmentNotesDialog
appointmentNotesDialog --> AppointmentDetailsState
AddAppointmentState --> ConsultationDetailsState: AdHoc
ConsultationDetailsState: ConsultationDetailsState (Fitting)
ConsultationDetailsState --> [*]: Checkout, transition to Point of Sale