Our data model
Plain's data model differs from other customer service systems in one significant way: there are no tickets, contacts, or conversations.
All interactions with a customer appear in their timeline in a single view. A customer's timeline consists of an ordered list of timeline entries which can be of many types.
Reference: Entry Union
Other entities in our data model:
- Workspace: The main tenancy boundary. All data is segregated at a workspace level.
- Issue type: A list of all issues your customers get in touch about (e.g. "General question" or "Refund request"). Can be configured in settings.
- Issue: A specific instance of an issue type that has a unique identifier. Appears with an open and close entry on the customer's timeline.
- Note: A private note in a customer's timeline only visible to internal users.
- Snippet: A text fragment that can easily be inserted into a conversation with a customer.
- Communication channels: Currently chat and email. These channels need to be configured separately.
- Human user: A "normal" user that typically logs in via the Support App. Our docs usually refer to this as just simply "user". Can be a member of multiple workspaces. Authentication is via our OAuth identity provider.
- Machine user: A user that exclusively uses the API to perform automation. Restricted to a single workspace. Authentication is via API keys.
The customer entity has the following fields:
id(string): Plain's id of the customer.
externalId(string, optional): Your customer’s id in your own systems. If provided, this is what is used to identify customers.
fullName(string): The full name of the customer.
shortName(string, optional): Typically the first name of the customer.
isVerified(boolean): Whether you can confirm the user has access to their email address, for example they have already verified their email on your app or website.
status(enum): See customer life cycle section for details.
assignedToUser(optional): The user the customer is assigned to
assignedAt(string, iso timestamp, optional): When the customer was assigned.
lastIdleAt(string, iso timestamp, optional): When the customer was last idle, i.e. how long they've been in either active or snoozed status.
Reference: Customer Object
Customer life cycle
A customer has a status indicating what is currently happening to them. The statuses are:
- IDLE: The default status of a customer when they don't have any open issues. Any activity on their timeline will move them into
- ACTIVE: The customer is currently either waiting for help or being helped, depending on if they're assigned to a user or not.
- SNOOZED: Indicates that a user is waiting for a customer to get back. Any activity on their timeline will move them into
Reference: Customer Status Enum