Skip to content

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_button configured 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/intellij directory.
  • [ ] 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.js script 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 IPublisher for 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