# Contacts

Customer profiles from WhatsApp plus your team's data: labels, owner, custom fields, statistics, interaction & ticket history, timeline, and notes.

## Where contacts come from

- **WhatsApp**: a contact is created automatically when a customer writes. The WhatsApp name, photo, about, and WhatsApp Business profile are refreshed periodically. The phone number and WhatsApp privacy ID (LID) are stored as identities of the same contact.
- **Manual**: Contacts → **Add contact**. A `0812…` number is read as `62812…`; WhatsApp messages from that number then land on this contact.
- **CSV import** and the **API** (see below).

## Profile

- **Data**: name (the WhatsApp name is kept), number, email, company, job title, address, city, language, **owner** (responsible agent), source, first & last seen.
- **Statistics**: interactions, messages in & out, tickets opened & resolved, average first response & resolution time, last agent, and 12-month activity.
- **Tabs**: Summary · Interactions · Tickets (with status log) · Leads (the contact's leads you can see, requires Pipeline access) · Timeline (profile changes, labels, owner, assignments, notes, tickets, leads) · Notes.
- **Client**: the contact's company/institution from the **Contacts → Clients** master list, chosen on the Edit contact form. See [Clients](https://onix.sassly.ai/en/docs/pipeline#klien).
- **Actions**: Start chat, Create ticket, Create lead, Edit, Merge, Delete.

## Contact labels & custom fields

- **Onix labels** (Manage → Labels & custom fields) are colored, work across all channels, and can be changed by your team. They show in the inbox list and can be added/removed right from the **Contact** tab of the conversation detail panel. The inbox and contact list can be filtered by label.
- Unlike **WhatsApp Business labels**, which are only read from the phone — both show on the profile.

## Custom fields for contacts, interactions, tickets, leads, and clients

Custom fields add the data your business needs. **Create the field first** in **Manage → Labels & custom fields → Custom fields** (choose Contacts, Interactions, Tickets, Leads, or Clients), then fill in its value where it belongs:

| For | Examples | Filled in on | Who can fill it in |
| --- | --- | --- | --- |
| **Contacts** | Birthday, clothing size, customer type | The Edit contact form, CSV import, or the Contact tab of the Interaction detail panel | Contact managers (`contacts.manage`) |
| **Interactions** | Invoice number, order source, order value | Info tab of the Interaction detail panel → **Edit** | Anyone who can reply to the conversation |
| **Tickets** | Courier, replacement tracking number, cost covered by the store | The Create ticket dialog, or the Custom fields panel on the ticket page | The creator when creating; ticket managers afterwards |
| **Leads** | Size, order quantity, lead source | The Create lead dialog, the lead detail, or lead import | Lead managers |
| **Clients** | Tax ID, number of employees, institution type | The client form (Contacts → Clients) | Client managers |

- Field types: **text** (up to 500 characters), **number** (`1.250.000` is recognized), **date**, or **choice**.
- Each field gets a key from its name (e.g. "Invoice number" → `invoice_number`), used in the API and contact CSV import/export. The name and choices can be changed; the type cannot.
- Up to 30 fields per kind of data. Deleting a field hides its values. Ticket field changes are recorded in the ticket log.

## Start a chat

On a contact profile click **Start chat**, pick a WhatsApp number, and write the first message. An open conversation with that contact on the same number is reused; otherwise a new interaction number is created. The reply quota and per-number send limit still apply.

## Merging duplicates

**Merge** → search for the duplicate → select it. WhatsApp numbers/identities, conversations, tickets, notes, timeline, and labels move to the contact you're viewing; empty fields are filled from the duplicate; then the duplicate is deleted.

## CSV import & export

- **Import**: the first row holds column titles — `name`, `phone`, `email`, `company`, `job_title`, `address`, `city`, `language`, `labels` (separate with `;` or `|`), `owner` (a member's email), and custom field names/keys (Indonesian titles work too). Comma or semicolon (Excel) separators are recognized. Contacts are matched by phone, then email: matches are updated (empty cells don't erase data), the rest are created. Missing labels are created automatically. Up to 5,000 rows / 2 MB per file; problem rows are reported with their row number.
- **Export** follows the contact list filters. Cells starting with `=`, `+`, `-`, or `@` get a leading single quote so Excel/Sheets won't run them as formulas.

## Segments & broadcasts

- **Contacts → Segments** saves contact filters, e.g. emails ending with a certain domain, the Reseller label, has chatted with a given number, or birthdays this month from a custom date field. Counts are recalculated every time a segment is used; segments can be downloaded as CSV and used for [Broadcasts](https://onix.sassly.ai/en/docs/broadcast) (Pro & Custom). Segments are available on every plan.
- The **Broadcast** panel on the contact profile shows whether the contact receives broadcasts. Contacts who reply STOP/BERHENTI/UNSUBSCRIBE to a broadcast message are unsubscribed automatically; the status can be changed manually (with contact or broadcast management access). Unsubscribed contacts are always skipped by broadcasts.
- The contact timeline records broadcasts received and subscription changes.

## Deleting a contact

**Delete** permanently removes the contact with all its conversations, messages, media, notes, and timeline — use it for customer data deletion requests (see [Data Deletion](https://onix.sassly.ai/en/legal/penghapusan-data)). Tickets remain as internal case records, without a link to the contact.

## WhatsApp groups

Groups have their own page (**Group page** button in a group conversation's detail panel): name, photo, description, members (matched to contacts by number), and the group's conversations.

## Access

- *View contacts* opens the list & profiles; *Edit … contacts* is needed to add, edit, merge, import/export, delete, and manage labels & fields. Anyone who can view a contact can write notes; only the author can edit them.
- Members with limited channel access only see contacts from the channels they can open (plus manual/imported contacts), and their statistics only count conversations on those numbers.

## Via the API

`GET /contacts`, `POST /contacts`, `GET/PATCH /contacts/{id}`, notes, timeline, labels, `POST /interactions` to start a chat, and `GET /segments` (read segments). Details in the [API documentation](https://onix.sassly.ai/en/docs/api).
