Contacts
Org-wide contact book for widget visitors, outbound, and CRM sync
Contacts is your organization's shared contact book under Operate → Contacts. One person record can link widget conversations, outbound campaign callees, and future CRM sync — available on all subscription plans when billing is active.
What is a Contact?
A Contact represents a person in your organization:
| Field | Purpose |
|---|---|
| Phone / email / external ID | Match keys — at least one is required when creating manually |
| Name & company | Display and search |
| Status | lead, customer, unqualified, or do not contact |
| Notes | Free-form operator notes |
Taliiq deduplicates on phone → email → external ID. Uploads and API writes merge into an existing row when a key matches; empty fields are never invented.
Dashboard workflow
Open Operate → Contacts to browse, search, and filter by status.
Click New Contact to add someone manually, or import via an Outbound campaign CSV (see below).
Open a row to edit profile fields or change status.
From an outbound campaign (draft or scheduled), use Add from Contacts to pull people from the book into the dial list.
Statuses
| Status | Typical use |
|---|---|
| Lead | New or unqualified interest |
| Customer | Active or paying relationship |
| Unqualified | Not a fit — kept for history |
| Do not contact | Opt-out or compliance hold |
Outbound and CSV import
When you upload a contact CSV on an outbound campaign:
- Without Zero Data Retention: each row upserts into the Contact book and links the campaign callee to that Contact. A source event records
outbound_upload. - With Zero Data Retention (ZDR): campaign rows import as before, but no new Contact writes occur. Existing book entries stay visible read-only.
Campaign detail shows a View contact link when a callee is linked to the book.
Zero Data Retention
When Zero Data Retention is enabled, Contact writes are blocked (create, update, delete, CSV upsert, inbound CRM sync). The hub stays available for read and search on existing records. Outbound dial from Contacts still works — session logs use existing ZDR scrub rules and do not write new Contact PII to Observe.
CRM sync (webhook destination)
Connect a Contact sync webhook under Manage → Integrations to push Contact changes to an external system and accept inbound upserts from your CRM or automation tool (Zapier-shaped).
Open Manage → Integrations and connect Contact sync webhook.
Optional: set a Push webhook URL (HTTPS). Taliiq POSTs a contact.upsert payload when a Contact is created or updated (skipped when ZDR blocks writes).
Copy the auto-generated Inbound webhook secret. Send CRM records to POST /api/contacts/sync/inbound/ with header Authorization: Bearer <secret>.
Include at least one of phone_e164, email, or external_id. Optional Idempotency-Key header prevents duplicate rows on retries.
Open Operate → Contacts, confirm the synced person appears with source CRM sync.
Inbound payload (example)
{
"external_id": "crm-12345",
"phone_e164": "+201001234567",
"email": "name@example.com",
"first_name": "Sara",
"last_name": "Hassan",
"company": "Acme",
"status": "lead"
}Under ZDR, inbound sync returns 403 — no new Contact rows are created.
Dial from Contacts
From a Contact detail page, use Call to place a one-off outbound call through a registered SIP trunk. Pick a voice-capable, active, non-draft agent (trunk default is prefilled when eligible).
Ensure the Contact has a phone number and is not marked Do not contact.
Open the Contact and click Call. Choose an outbound trunk and an eligible assistant.
The attempt appears in Contact history (pending, then Observe) and in Logs. Under ZDR, customer phone fields in Observe stay scrubbed.
Sources and history
Each Contact keeps durable source events (widget, collect form, CRM sync, outbound dial, and more). Interaction history (calls/chats) comes from Observe ClickHouse and follows org retention — it can expire even while the Contact row remains.
Collect Contact (agent tool)
Agents can capture details during a conversation with the Collect Contact built-in tool:
- Chat — inline form in the widget or Agent Console; submit upserts a Contact
- Voice — agent gathers the same fields by speech and confirms email/phone
- Callback intent — when the visitor explicitly asks for a call, owners/admins get a Notification Center alert
Captured people appear here with source events (collect_form, widget_chat, or agent_console). Observe → Logs shows collection events with a link to the Contact detail page.
Zero Data Retention blocks Collect Contact creation and writes. Manual CSV import under ZDR still creates campaign callees only — see Outbound.
Setup and Agent Console test steps: Collect Contact.
Related
- Collect Contact — configure fields, chat form vs voice, optional forward
- Notification Center — callback and ops alerts
- Integrations — Contact sync webhook, SMTP notification delivery, SIP trunks
- Outbound campaigns — CSV upload, add-from-Contacts, campaign dialer
- Logs — session history and retention
- Core concepts — how Operate fits the platform

