Contact Management

Contacts are the customer identity layer in RapiDesq. Every person who interacts with your organization — whether they chat, email, submit a form, or are imported from an external system — is represented by a contact record. Contacts aggregate all interactions across every channel into a single, unified profile, giving your agents complete context for every conversation.

Overview

A contact record is the central identity for a customer within your RapiDesq tenant. Rather than treating each conversation or ticket as an isolated event, RapiDesq links them all back to a single contact. This means:

Contact records are automatically created and matched as interactions arrive. RapiDesq uses email address as the primary deduplication key, so when the same person reaches out through different channels using the same email, everything is linked to one contact. For logged-in users on your website, identity authentication provides even stronger matching by verifying the visitor's identity via JWT.

Key concept — Contacts are scoped to your tenant. Email-based deduplication, custom fields, and all contact data are isolated to your organization. No contact data is shared between tenants.

How Contacts Are Created

Contacts enter RapiDesq through several sources. Each contact record tracks its origin, so you always know how a customer first reached you. The contact source is set automatically at creation and preserved for reporting and auditing.

Chat Widget (Anonymous)

When an anonymous visitor starts a chat on your website through the RapiDesq chat widget, a contact record is created once they provide identifying information. This typically happens in one of two ways:

Contacts created this way have source CHAT_WIDGET. Until the visitor provides an email address, they exist as an anonymous session without a linked contact record.

Authenticated Chat Widget

If your website uses identity authentication on the chat widget, the visitor's identity is verified via a JWT generated by your backend. RapiDesq reads the verified claims (email, name, user ID) from the token and either matches an existing contact by email or creates a new one automatically. No pre-chat form is needed because the identity is already known.

Contacts created or matched this way have source AUTHENTICATED_WIDGET. These contacts are marked as identity-verified in the agent's view, providing a higher level of trust. See Identity Authentication for setup details.

Inbound Email

When an email arrives at one of your connected email channels, RapiDesq extracts the sender's email address and display name. If a contact with that email address already exists, the inbound email (and its resulting ticket) is linked to that contact. If no match is found, a new contact is created with source EMAIL.

This means a customer who first chatted with you and later sends an email using the same address will see both interactions on the same contact record — no manual linking required.

Web Form Submissions

When a visitor submits a web form, RapiDesq uses the email field from the submission to match or create a contact. If the email matches an existing contact, the form submission and resulting ticket are linked to that contact. Otherwise, a new contact is created with source WEB_FORM.

Web form field mappings also allow you to populate custom fields on the contact from form data, so information like account number or product type flows directly into the contact profile.

API and Webhook

Contacts can be created programmatically through the RapiDesq API or from external webhook events. This is useful for:

Contacts created via the REST API have source API. Contacts created from inbound webhook events have source WEBHOOK. In both cases, email-based deduplication applies — if the email already exists on a contact, the existing contact is returned rather than creating a duplicate.

Bulk Import

You can import contacts in bulk from a CSV file or from an external CRM. Navigate to Admin > Contacts > Import to upload a file. During import, RapiDesq matches each row by email address. Rows matching an existing contact update that record; rows without a match create new contacts with source IMPORT.

This is the fastest way to populate RapiDesq with your existing customer base when you first set up the platform.

Manual Creation

Agents and admins can create contacts directly in the UI. Navigate to Admin > Contacts and click New Contact. Fill in the contact's name, email, phone, and any custom fields, then save. Manually created contacts have source MANUAL.

This is useful when an agent is on a phone call or receives information through an offline channel and wants to ensure a contact record exists before the customer reaches out digitally.

Source tracking — The contact source is set at creation and does not change, even if the customer later interacts through other channels. This gives you an accurate picture of how contacts originally entered your system for reporting purposes. All subsequent interactions are tracked in the contact's interaction history regardless of channel.

Email-Based Deduplication

Email address is the primary deduplication key for contacts within a tenant. Whenever an interaction arrives that includes an email address — whether from an inbound email, a chat widget pre-chat form, a web form submission, an API call, or an import — RapiDesq checks whether a contact with that email already exists.

This automatic matching is the foundation of the unified contact profile. Consider this scenario:

  1. A customer named Sarah visits your website and starts a chat. The pre-chat form collects her email: sarah@example.com. A contact is created with source CHAT_WIDGET.
  2. Two days later, Sarah sends an email to your support address from sarah@example.com. RapiDesq matches the sender to the existing contact. The email ticket is linked to Sarah's record.
  3. A week later, Sarah submits a web form using the same email. Again, the form submission is linked to her existing contact.

The result is a single contact for Sarah with a complete timeline of all three interactions across three different channels. Her agent can see the full picture without any manual effort.

Best practice — To maximize the effectiveness of automatic deduplication, always collect an email address as early as possible. Configure pre-chat forms on your chat widget and include an email field as required on your web forms. The sooner RapiDesq has an email address, the sooner it can link interactions to the right contact.

Contact Profiles

Every contact has a profile that serves as the central record for that customer. The profile contains:

Field Description
First name / Last name The customer's name, collected from any channel or entered manually.
Email address The primary identifier. Unique within your tenant and used for deduplication. Required for automatic cross-channel matching.
Phone number Optional phone number for the contact.
Source How the contact was originally created: CHAT_WIDGET, AUTHENTICATED_WIDGET, EMAIL, WEB_FORM, API, WEBHOOK, IMPORT, or MANUAL.
Status Current state: ACTIVE, MERGED, or DELETED. See Contact Statuses.
Identity verification Whether the contact has been verified via JWT-based identity authentication on the chat widget.
Custom fields Tenant-defined fields stored as flexible JSONB data. See Custom Fields.
Conversations & tickets All associated conversations and tickets across every channel, displayed as a unified timeline.
Created at Timestamp of when the contact was first created (stored in UTC, displayed in your timezone).
Updated at Timestamp of the most recent change to the contact record.
Deleted at If soft-deleted, the timestamp of deletion. See Contact Statuses.

Agents see the contact profile in the right panel when handling a conversation or ticket. This gives them immediate access to the customer's identity, history, and any custom data your team has captured — without leaving the conversation view.

Tip — Encourage agents to verify and update contact details during interactions. A customer may have changed their phone number or name since their last interaction. Keeping profiles current improves the quality of your customer data and makes future interactions smoother.

Custom Fields

Custom fields extend contact profiles with data specific to your business. They are stored using flexible JSONB storage, which means you can define any number of fields without schema changes. Custom fields appear on the contact profile alongside standard fields, and agents can view and edit them during conversations.

Defining Custom Fields

To create custom fields, navigate to Admin > Contacts > Custom Fields:

  1. Click Add Field.
  2. Choose a field type:
    • Text — Free-form text input for names, identifiers, or descriptions.
    • Number — Numeric values for quantities, scores, or IDs.
    • Dropdown — A predefined list of options for standardized data entry (e.g., subscription tiers, regions).
    • Date — A date picker for renewal dates, contract start dates, or other temporal data.
    • Checkbox — A boolean toggle for yes/no attributes (e.g., VIP status, opted into beta).
    • URL — A clickable web address for linking to external profiles or dashboards.
  3. Enter a display name and optional description for the field.
  4. For dropdown fields, define the list of available options.
  5. Save the field. It immediately becomes available on all contact profiles.

Populating Custom Fields

Custom fields can be populated through several mechanisms:

Example Custom Fields

Here are some commonly used custom fields by business type:

Note — Custom fields are included in contact search and filtering. You can find all contacts in a specific region, with a particular subscription tier, or matching any combination of custom field values. This makes custom fields a powerful tool for segmentation and reporting.

Identity Authentication

Identity authentication lets you verify the identity of visitors who use the chat widget on your website. When a logged-in user on your site opens the chat widget, your backend generates a JWT containing the user's identity (email, name, user ID). RapiDesq verifies the JWT and links the chat session to the verified contact. This eliminates the need for a pre-chat form for known users and provides a stronger guarantee of the visitor's identity.

How It Works

  1. Enable identity authentication on your chat widget configuration in Admin > Chat Widget > Identity Authentication. This generates a shared secret key.
  2. Generate a JWT on your backend when a user is logged in to your website. The JWT payload must include the user's identity claims (email, name, and optionally a user ID). Sign the JWT using the shared secret with the HS256 algorithm.
  3. Pass the JWT to the chat widget when initializing it on the page. The widget sends the token to RapiDesq with each session.
  4. RapiDesq verifies the JWT using the shared secret. If the token is valid, RapiDesq reads the claims and either matches an existing contact by email or creates a new contact with source AUTHENTICATED_WIDGET.
  5. The chat session is linked to the verified contact. The agent sees the contact's full profile and a verification badge indicating the identity is confirmed.

Why It Matters

Configuration details — For step-by-step setup instructions including code examples for JWT generation, see the Chat Widget documentation. The widget configuration page in Admin provides your shared secret and shows the expected JWT format.
Security — Never expose the identity authentication shared secret in client-side code. The JWT must be generated on your backend server. The secret is used to sign tokens and must be kept confidential. If you suspect the secret has been compromised, rotate it immediately in Admin > Chat Widget > Identity Authentication.

Merging Contacts

Despite automatic deduplication, duplicate contacts can still occur. For example, a customer may have chatted anonymously (without providing an email) and later sent an email, resulting in two separate contact records. Contact merging lets you unify these duplicates into a single record.

When to Merge

Common scenarios where merging is needed:

Merge Process

  1. Navigate to the contact you want to keep as the primary record. This is the contact whose name, email, and other profile details will be preserved.
  2. Click Merge Contact in the contact profile actions.
  3. Search for and select the duplicate contact to merge into the primary.
  4. Review the merge preview, which shows exactly what will happen:
    • The primary contact retains its name, email, phone, and other profile fields.
    • All tickets, conversations, and interaction history from the duplicate are transferred to the primary contact.
    • The duplicate contact's status is set to MERGED.
  5. Confirm the merge.

What Happens After a Merge

Warning — Contact merging is permanent and cannot be undone. Always verify that you are merging the correct records before confirming. Double-check that the primary contact is the one you want to keep, as its profile details (name, email, phone) will be preserved while the duplicate's profile details will not carry over.

Contact Statuses

Every contact has a status that reflects its current state in the system:

Status Meaning
ACTIVE The normal operational state. The contact is visible in search results, can receive new interactions, and appears in all standard views and reports. All contacts start in this state when created.
MERGED The contact has been merged into another (primary) record. The merged contact's tickets and conversations have been transferred to the primary. The merged record is preserved for audit purposes and references the primary contact, but it is no longer visible in normal contact lists or search results. New interactions will not be linked to a merged contact.
DELETED The contact has been soft-deleted. The record is retained in the database with a deletedAt timestamp, but it is no longer visible in normal views, search results, or reports. See Soft Deletes and Data Retention below.

Soft Deletes and Data Retention

When you delete a contact, RapiDesq performs a soft delete: the deletedAt timestamp is set, but the record and its associated data are retained in the database. The contact is immediately removed from all normal views, search results, and reports.

This approach supports two important requirements:

After the retention period expires, a scheduled process performs a hard deletion, permanently removing the contact record and associated data from the database. This ensures that data is not retained indefinitely after a deletion request.

Note — Soft-deleted contacts cannot be matched by the deduplication system. If a new interaction arrives with the same email address as a deleted contact, a new contact will be created. This ensures that deletion is respected while still allowing new interactions from the same email address.

Interaction History

The interaction history is one of the most valuable features of the contact profile. It provides a unified, chronological timeline of every conversation and ticket associated with the contact, across all channels.

What the Timeline Shows

Filtering the Timeline

For contacts with many interactions, you can filter the timeline to find what you need:

Using History During Conversations

When an agent is handling a live conversation or working on a ticket, the contact's interaction history is displayed in the right panel. This gives the agent immediate context:

This context helps agents provide faster, more personalized support without asking the customer to repeat information from previous interactions.

Tip — When handling a conversation with a returning customer, take 10 seconds to scan their recent interaction history. Acknowledging their previous issue ("I see you contacted us last week about X — was that resolved?") makes a significant difference in customer satisfaction and demonstrates that your team values their time.

Searching and Filtering Contacts

The contact list in Admin > Contacts provides tools to find and segment your contacts:

The search bar matches against multiple fields simultaneously:

Filters

Use filters to narrow the contact list by specific criteria:

Sorting

Sort the contact list by:

Export

Export your contact list (or a filtered subset) for external reporting, analysis, or compliance purposes. Exported data includes all standard fields and custom fields for each contact in the result set.

Tips & Best Practices

Maximize Deduplication Accuracy

Maintain Data Quality

Make the Most of Custom Fields

Optimize Agent Workflow

The payoff — Clean, well-maintained contact data is the foundation of effective customer support. When every interaction is linked to the right contact, agents have complete context, reporting is accurate, deduplication works reliably, and customers never have to repeat themselves. Investing in contact data quality pays dividends across your entire support operation.