# Contacts and customer memory

> Use the Contacts directory — add and import contacts, record consent, stop the agent replying to one person, see everything a customer did across channels, and control what the agent remembers about them.

Source: https://docs.amomic.in/console/contact-memory

---

**Contacts** is your customer directory. Each contact holds a person's name, phone, email, tags and per-channel consent, and opening one shows everything that person has done with you — calls, chats, tickets and appointments — plus what your agents remember about them.

Everyone in the workspace can read the directory, open a contact and see its activity and memory. Owners and admins can also add, import, edit and delete contacts, change memory, and switch the agent off for one person.

![The Contacts page: tiles for 50 loaded contacts, 5 opted out of voice, 1 opted out of WhatsApp and 8 opted out of email, a search box, and a table of contacts with phone, source, permissions, tags and date added](https://docs.amomic.in/screens/contacts/directory.light.webp)

*The directory, newest contacts first. Permission badges show only the channels where someone recorded an answer.*

## The directory

The table lists contacts newest first, 50 at a time; **Load more contacts** fetches the next 50.

| Column | What it shows |
|---|---|
| **Contact** | The name (or *Unnamed contact*) and email (or *No email*). **Agent off** means the agent never replies to this person on WhatsApp — see [Stop the agent replying to someone](#stop-the-agent-replying-to-someone). |
| **Phone** | The number, formatted for its country. |
| **Source** | The channel the contact was last seen on: `whatsapp`, `web` or `voice`, or `api` when it last came from your own systems through the [Contacts API](/api/contacts). **CRM only** means the contact has never been seen on a channel — it was added by hand or imported. |
| **Permissions** | Only the channels where someone recorded an answer: green for allowed, red with `: out` for opted out. *Not recorded* when no channel has an answer. See [Consent](#consent-allowed-opted-out-not-recorded). |
| **Tags** | The first three tags, then `+n` for the rest. |
| **Added** | When the contact was created. |

The four tiles count **Loaded contacts** and how many of them have **Opted out of voice**, **Opted out of WhatsApp** and **Opted out of email**. They count the rows loaded on the page, not the whole directory; load more to include more.

**Search name, phone, email, or tag…** filters the rows already loaded, and also matches a contact id. To search further back, load more first.

You can link straight to a contact with `https://console.amomic.in/contacts?contact=<contact_id>`, or open the page pre-searched with `?search=<text>`.

## Add or edit a contact

::: steps

::: step Open the form
Choose **Add contact** in the page header (admins). To change an existing contact, open it and choose **Edit**.
:::

::: step Fill in what you know
A contact needs at least a name, a phone number or an email address. Otherwise the form says *Add at least a name, phone number, or email address.*
:::

::: step Leave consent as Not recorded unless the customer told you
Set **Contact permissions** only for channels where the customer actually gave an answer.
:::

::: step Save
Choose **Add contact** (or **Save changes**). You see *Contact added.* or *Contact updated.*
:::

:::

![The Add contact dialog with Name, Phone pre-filled with +91, Email, Tags, and three Contact permissions menus for Voice, WhatsApp and Email, each set to Not recorded](https://docs.amomic.in/screens/contacts/add.light.webp)

*Phone starts with your workspace's country code. Every permission starts as Not recorded.*

| Field | What it does |
|---|---|
| **Name** | The person's name. |
| **Phone** | Starts with your workspace's dialling code (for example `+91`) already filled in, so you type the rest. Change the code for a customer in another country. A number without a code is read as a number in your workspace's country, and a number that isn't valid there is rejected. |
| **Email** | Stored in lower case, so the same address in different case is the same person. |
| **Tags** | Comma-separated, for example `amc, warranty, hindi`. Tags are what you pick when you build a [campaign audience](/campaigns/audiences#segments-and-tags). |
| **Contact permissions** | One menu per channel — **Voice**, **WhatsApp**, **Email** — with **Not recorded**, **Allowed** or **Opted out**. |

## Consent: Allowed, Opted out, Not recorded

Each channel has three possible answers, and the difference matters:

| State | Badge | Meaning |
|---|---|---|
| **Allowed** | `voice: allowed` | The customer said yes to this channel. |
| **Opted out** | `whatsapp: opted out` | The customer said no. Campaigns on that channel skip this contact. |
| **Not recorded** | `email: not recorded` | Nobody has asked. This is not an opt-out: a contact with nothing recorded can still be included in a campaign. |

As the form puts it: *Only Opted out stops messages going out.* Most contacts are **Not recorded** on most channels, because customers who message you first are never asked. Don't set **Opted out** unless the customer actually refused — it is the one value that removes them from campaigns. See [Audiences](/campaigns/audiences).

A customer who replies STOP on WhatsApp is handled separately and blocks every message on that number. See [Opt-outs](/channels/whatsapp#opt-outs).

## Import a CSV

Admins can bring a list in with **Import CSV**.

::: steps

::: step Prepare the file
Save it as **UTF-8** CSV (a byte-order mark is fine). The first row must have the column headers `name`, `phone` and `email`, in lower case. Any other columns are ignored.
:::

::: step Choose Import CSV and pick the file
The import runs straight away. When it finishes you see *Imported N contacts.*, with *M rows skipped.* underneath when any rows were left out.
:::

:::

What happens to each row:

- A row needs a **phone or an email**. A name on its own is skipped.
- Phone numbers are normalised with your workspace's country, the same as the form. A row with a phone number or email that isn't valid is **skipped** rather than imported with bad data.
- **Tags and consent are not imported.** Every imported contact arrives with no tags and consent **Not recorded** on all channels. Tag them before you use them in a campaign.
- **Rows are not matched against existing contacts.** Every accepted row creates a new contact.

::: warning Importing the same people twice creates duplicates
Importing a file twice gives you two of everybody, and importing a list that overlaps your directory splits a customer's history across two records. There is no merge to clean up afterwards. Remove people you already have from the file before you upload it.
:::

::: note Skipped rows are counted, not listed
The console tells you how many rows were skipped but not which ones. If the count is higher than you expect, check the file for rows with neither a phone nor an email, phone numbers without a country code for customers abroad, and malformed email addresses, then import just the fixed rows.
:::

## Open a contact

Click a row to open the contact. Admins see **Edit** and **Delete** at the top.

![Meera Krishnan's contact: phone and email, tags, permission badges reading voice allowed, WhatsApp allowed and email not recorded, the Who answers switch on, and the start of What the agent knows with two team notes](https://docs.amomic.in/screens/contacts/detail.light.webp)

*A contact holds identity, tags, consent, who answers, memory and activity, top to bottom.*

From top to bottom:

- **Phone** and **email**, as links you can call or write to, and when the contact was **Added**.
- **Tags** (*No tags* if none).
- **Permissions** — a badge for every channel, including *not recorded*.
- **Who answers** — see the next section.
- **What the agent knows** — see [Two kinds of memory](#two-kinds-of-memory).
- **Activity** — see [Activity across channels](#activity-across-channels).

## Stop the agent replying to someone

Some customers should only ever hear from a person — a key dealer, a customer in a dispute, someone who asked not to talk to a bot. **Who answers** handles that for WhatsApp.

![A contact with the Let the agent reply switch off and a warning: The agent will never reply to Arvind Joshi on WhatsApp. Their messages still arrive in your inbox, and your team can still message them. This does not cover web chat or phone calls.](https://docs.amomic.in/screens/contacts/agent-off.light.webp)

*With the agent off, the contact shows Agent off in the directory.*

To switch it off, an admin opens the contact and turns off **Let the agent reply**. The contact then shows **Agent off** in the directory.

What changes:

- The agent **never replies to this person on WhatsApp**, however they write in, until someone switches it back on. The change takes effect within about ten seconds.
- Their messages **still arrive** in the [Inbox](/console/inbox), and your team can still reply — from [Live support](/console/human-handoff) or a [ticket](/console/tickets).
- **Web chat and phone calls are not covered.** The agent answers everyone there.
- It is not consent. It doesn't stop campaigns or messages your team sends; to record that the customer refused a channel, use **Opted out** instead.

For a temporary pause in one conversation, use `/stop` in the chat or the [Smart mode](/console/inbox#when-the-agent-has-stepped-back) quiet period instead. See [Pause with /stop](/channels/whatsapp-pause).

## Two kinds of memory

**What the agent knows** keeps two lists apart, because they mean different things.

![Further down Meera Krishnan's contact: three facts picked up from conversations marked kept or fades in 2 weeks, a last-conversation summary, Forget everything about this contact, and an Activity list with a WhatsApp conversation, an inbound call, a web conversation, an outbound call and a ticket](https://docs.amomic.in/screens/contacts/activity.light.webp)

*Learned facts show where they were picked up and whether they fade. Activity links to each record.*

### From your team

Notes a person chose to add — *“corporate account, bills quarterly”*, *“speak slowly”*. Each note can be up to 200 characters, shows who wrote it and when, and never expires.

Admins type in **Something the agent should always know…** and choose **Add** (or press Enter). Hover a note to:

- **pin** it (*Always tell the agent this*) — a pinned note is kept first when the memory has to be cut down to fit;
- unpin it;
- delete it.

### Picked up from conversations

Facts the agent worked out after a conversation ended, such as the appliance a customer owns or how they prefer to be contacted. Each shows when it was learned and which channel it came from. Most conversations add nothing.

- **kept** — a stable fact or preference.
- **fades in 2 weeks** — something temporary, such as a visit booked for Friday, that should not follow the customer forever.

Admins can hover a fact and delete it (*This isn’t right — delete it*) when the agent got something wrong.

Below the lists, *Last conversation … on …* gives a one-line summary of the customer's most recent conversation while it is recent.

The agent uses all of this quietly so the customer doesn't have to repeat themselves. It is told not to read the memory back or open a conversation with it.

## Cross-channel recall

Memory belongs to the contact, not to one thread. Something learned on WhatsApp can help on a later phone call when the caller's number matches the same contact.

If the platform cannot match the person confidently, it does not guess. A memory attached to the wrong person is worse than none.

## Controls and deletion

Admins can:

- switch off **Remember this contact**, which stops both recall and new learning for that person (*Memory is off for this contact…*);
- add, pin, unpin and delete team notes;
- delete a single learned fact;
- choose **Forget everything about this contact**.

**Forget everything** deletes every team note and every learned fact for good. The conversations stay in the Inbox, and the next time the person gets in touch the agent treats them as a new customer. Use it to answer a customer's request to see or delete what you hold about them.

**Delete** (at the top of the contact) is different: it removes the whole contact record, its tags and its memory. The confirmation reads *Their conversations stay in the inbox, but the contact record and its tags are gone for good.*

## What is never meant to be remembered

The agent is designed to leave out secrets and highly sensitive identifiers such as passwords, one-time codes, card details and government ID numbers. Follow the same rule in team notes.

Memory is never part of campaign audiences, the public [Contacts API](/api/contacts) or anything sent to your systems. It is read only for the customer's current conversation and in this panel.

## Activity across channels

**Activity** lists everything recorded for the contact, newest first. Each row has a summary, then the channel, status and when it happened, and opens the record itself:

| Row | Summary example | Opens |
|---|---|---|
| Conversation | `9 messages` · Whatsapp · open | The conversation in the [Inbox](/console/inbox#link-straight-to-a-conversation). |
| Call | `Inbound call — 3m 12s` · Voice · completed | [Calls](/console/calls), searched for that call. |
| Ticket | The ticket's subject · resolved | The ticket in [Tickets](/console/tickets). |
| Appointment | The service booked · completed | The appointment in [Calendar](/console/appointments). |

How each kind is matched to the contact:

- **Calls** are matched by the contact's phone number, inbound and outbound. A contact with no phone number has no calls listed.
- **Conversations** are web chat and WhatsApp threads linked to the contact. Voice conversations appear as their calls instead, and preview chats from the console are left out.
- **Tickets** and **appointments** linked to the contact.

The list scrolls in place; **Load older activity** fetches more.

::: note Older chats aren't linked
*Chats from before 17 August 2026 aren’t linked to contacts and won’t appear here.* To find an older conversation, search the [Inbox](/console/inbox#search) for the customer's name or a word from the chat.
:::

If part of the history can't be loaded, the panel says *Some activity couldn’t be loaded just now, so this list may be incomplete.* with **Try again**, rather than showing an empty list. A contact with nothing recorded shows *No calls, conversations, tickets or appointments recorded for this contact yet.*

## Where contacts come from

Contacts are created when you add or import them, when a web visitor fills in the widget's lead form, when the agent opens a ticket or books an appointment for someone, and from your own systems through the [Contacts API](/api/contacts). On WhatsApp, a contact is also created after a conversation that taught the agent something worth remembering, using the customer's WhatsApp profile name. Apart from the ones you add by hand, a contact always needs a name plus a phone number or email, so a customer who chats anonymously and never gives their name leaves a conversation but no contact. See [How a person is identified](/concepts/conversations#how-a-person-is-identified).

## Who can do what

| Action | Member | Admin or owner |
|---|---|---|
| Read the directory, open contacts, see consent, memory and activity | Yes | Yes |
| **Add contact**, **Import CSV**, **Edit**, **Delete** | — | Yes |
| **Let the agent reply** | — | Yes |
| Add, pin or delete notes; delete facts; **Remember this contact**; **Forget everything** | — | Yes |

## Troubleshooting

| What you see | Why, and what to do |
|---|---|
| **Build your customer directory** | The workspace has no contacts yet. Add one, import a CSV, or wait for customers to give their details in a conversation. |
| *No contacts match “…”.* | Search only covers loaded rows. Choose **Load more contacts** and search again. |
| *M rows skipped.* after an import | Rows had no phone and no email, or an invalid phone or email. See the note under [Import a CSV](#import-a-csv). |
| The agent still answers a contact with **Agent off** | Only on web chat or a phone call — **Who answers** covers WhatsApp only. On WhatsApp, allow ten seconds after switching it off. |
| A call is missing from **Activity** | Calls are matched on the exact phone number. Check the contact's number, including the country code. |
| A conversation is missing from **Activity** | It is from before 17 August 2026, or the conversation was never linked to this contact. Search the Inbox instead. |

## Related

::: cards

::: card Inbox
[Read conversations](/console/inbox), take over on WhatsApp, and see why the agent stepped back.
:::

::: card Audiences
[Use tags and consent](/campaigns/audiences) to choose who a campaign reaches.
:::

::: card Conversations and contacts
[How one person is recognised](/concepts/conversations) across WhatsApp, web chat and calls.
:::

::: card Contacts API
[Create and update contacts](/api/contacts) from your own systems.
:::

:::
