Part 2 · Clients, sales and relationships
Contacts
The shared Symbifox address book, its company and person records, their AI enrichment, the relationship persona and Nextcloud synchronization.
The Contacts application is your organization's shared address book: companies, people, suppliers and partners each have a record there. Every other application links to it: an opportunity, an invoice, a ticket or a meeting always points to a contact. Symbifox adds three things: record enrichment by artificial intelligence, a relationship profile per contact (the persona) and synchronization with Nextcloud. This chapter is for anyone who keeps records up to date, and for the managers who configure these additions.
Overview#
A contact record describes either a company or a person. A person can be linked to a company: they then appear in the company's Contacts & Addresses tab and take its address. Each record has a chatter, the message thread at the bottom of the form, where emails, internal notes and activities accumulate.
Tags are free keywords that segment the address book. The Secteur d'activité (industry) classifies a company according to a provided classification.
The home screen is a kanban view: one card per record, with the city, email, job position and small activity counters. On the Boréal demo, companies and people sit side by side in alphabetical order.

Symbifox adds three sets of features to this base application:
- The Enrichissement (enrichment) menu: scan a business card, import a vCard file, detect duplicates. On each record, buttons complete the contact details from the signatures of received emails or from the website. A Complétude (completeness) score flags the records that need completing.
- The Personas menu: one relationship profile per contact. It holds the form of address (the informal French “tu” or the formal “vous”), greetings, people to copy, payment behaviour, indicators and relationship health.
- Synchronization with a Nextcloud address book (CardDAV), configured in Settings, with no menu in Contacts.
The CRM draws its customers from here (see CRM), Invoicing its partners and Project the clients of its engagements. The Email application creates or enriches a contact from a received message (see Email). Outreach sets a Ne plus démarcher (do not contact again) flag on the record (see Outreach). Privacy keeps consent preferences there (see Privacy (Law 25 and other frameworks)). Law 25 is Québec's Act respecting the protection of personal information in the private sector.
Configuration#
Access and permissions#
Every internal user can consult the address book. Creating or editing a record requires the Contact Creation right, granted on the user's form (see Settings and brand identity). The Symbifox modules add their own groups:
- Enrichissement de contacts (contact enrichment) opens Contacts › Enrichissement › Numériser une carte (scan a card) and the mobile scanning page. That page also checks the Contact Creation right.
- Utilisateur persona (persona user) opens the Personas entries and the Persona tab of records. Gestionnaire persona (persona manager) adds Catégories (categories) and the persona's Détails personnels (personal details) tab.
- Everyone can read the Nextcloud synchronization; only administrators can configure it.
Settings#
Contacts has no settings menu of its own on the demo. Three settings concern it, in Settings:
- LLM Gateway designates the AI provider that reads cards and signatures (see Gen, the assistant). Without a provider, the enrichment buttons show a message and write nothing.
- Clé hook ntfy (dégradation persona) (ntfy hook key, persona degradation) receives the key of the notification service to alert when a relationship switches to “dégradée” (degraded). When it is empty, no alert goes out.
- The Nextcloud Contacts Sync section of General Settings holds Enable Nextcloud Contacts Sync Cron, Sync Interval (minutes) and Default Address Book. Configure Nextcloud Address Books opens the address books. These labels are in English in both interface languages.
Base data#
Before you start, go through Contacts › Configuration:
- Contact Tags: empty on the demo. Create your segmentation tags and, if you synchronize with Nextcloud, an exclusion tag.
- Contact Titles, Industries, Countries and Fed. States are provided. There is nothing to create, except an industry that is missing.
- Banks and Bank Accounts: only if you pay suppliers by transfer.
Under Contacts › Personas › Catégories, five communication categories are delivered: Facturation (billing), Support, Technique (technical), Juridique (legal) and Social. The copy rules use them. An address book must also exist on the Nextcloud side before the first synchronization.
Getting started#
This walkthrough creates the record of a new contact person at Clinique dentaire Rosemont, classifies it, checks its completeness and opens its persona.
- Go to Contacts › Contacts. The kanban view shows Boréal's records.
- Select New. A blank form opens.
- Leave the type on Individual and enter “Marc Lavoie” as the name.
- In the company field, enter “Clinique dentaire Rosemont” and select the existing record. The clinic's address is copied over.
- Enter the job position “Administrative assistant”, an email and a phone number.
- Under Tags, enter “Client” and create the tag on the fly.
- Save the record. Complétude shows the share of contact details filled in.
- Select the shortcut button Persona at the top of the form. Symbifox creates Marc's relationship profile and opens it on the Communication tab.
- Set the Addressing Style to Vouvoiement (the formal “vous”) and save.
Result: Marc's record exists, linked to the clinic and tagged, with a completeness score and a persona ready to guide your emails. In the kanban view, his card appears with his job position.
Common tasks#
Create a company and its contact people#
Create the company first; its contact people are then linked to it and inherit its address.
- Go to Contacts › Contacts and select New.
- Select the Company type and enter the name.
- Enter the address, phone, email and website. In the Sales & Purchase tab, choose the Secteur d'activité.
- In the Contacts & Addresses tab, select Add and enter the first contact person: name, job position, email, phone.
- Repeat for each person, then save.
Result: the people carry the company name before their own, as in “Clinique dentaire Rosemont, Dre Amélie Fournier”. A delivery address is entered in the same place, by choosing that address type.
Scan a business card#
Back from a trade show, a photo of a card is enough: the AI reads the image and proposes the record. Prerequisites: the Enrichissement de contacts group and a configured AI provider.
- Go to Contacts › Enrichissement › Numériser une carte. The Numériser une carte d'affaires (scan a business card) dialog opens.
- Under Carte d'affaires (business card), upload the photo or the file (JPG, PNG or PDF, front side).
- Optional: in Contact à enrichir (contact to enrich), choose an existing record that the card should complete.
- Select Lire la carte (read the card). Name, job position, company, email, phones, website and address fill in. Texte lu (text read) and Confiance (confidence) show what the AI saw.
- If an existing contact is detected by email, name or domain, it appears in Contact existant détecté (existing contact detected). In Action, choose to create a record or to update that one.
- Correct if needed, then select Enregistrer le contact (save the contact).
Result: the record opens, the card is attached in its chatter and each added field is logged there. The same action, Numériser une carte, is available at the top of a record, with Contact à enrichir already filled in.

Scan a card from a phone#
At a trade show or on a visit, the same scanning lives on a mobile page, with no app to install.
- On the phone, open your Symbifox address followed by
/scanand sign in. - Optional: accept the browser's offer to add the page to the home screen.
- Select the photo capture. The phone's camera opens; the page asks for no camera permission.
- Review the proposed fields, correct them if needed, then save.
Result: the record is created or updated as from the desktop, because the page drives the same dialog. The photo is reduced before it is sent.
Enrich a record from email signatures#
The missing phone number or title often hides in a signature. Prerequisite: emails from this correspondent archived in the Email application.
- Open the record to complete.
- To apply directly, select Enrichir maintenant (signatures) (enrich now, from signatures). Only empty fields are filled in.
- To review before writing, select Enrichir (réviser) (enrich, with review) instead. The Enrichir un contact (enrich a contact) dialog opens.
- Select Analyser (analyze). The “actuel” (current) columns show the record; the proposed fields show what the signatures contain.
- Optional: check Écraser les valeurs existantes (overwrite existing values) to also replace what is already entered.
- Select Appliquer (apply).
Result: the added fields appear on the record, and a note in the chatter specifies what was written. For an email received from a stranger, Créer / enrichir le contact (create or enrich the contact) in the Email application creates the record, then runs the same analysis. See Email.
Enrich several records in bulk#
An address book imported from an old system often arrives half empty. Bulk enrichment processes the records in the background.
- Go to Contacts › Contacts and switch to the list view.
- Check the records to complete.
- Select Actions › Enrichir depuis les signatures courriel (enrich from email signatures).
- Come back later: the records are completed over successive automatic runs, every 30 minutes.
Result: each processed record carries its new fields and a note in its chatter. En file d'enrichissement (queued for enrichment) is cleared once the record has been processed. If the AI provider is misconfigured, the queue stops in an error state without blocking anything else.
Complete a company from its website#
For a company where you have only the name or the domain, a web search fills in the address, phone and description. Prerequisite: Gen configured with web search (see Gen, the assistant).
- Open the company's record and check that Website is filled in.
- Select Enrichir (site web) (enrich, from the website).
- Review the record once the search is finished.
Result: empty fields are filled in; nothing already entered is replaced. This is the only enrichment function that goes through Gen's search service rather than through LLM Gateway.
Import a vCard file#
A vCard file (.vcf) exported from a phone, from Outlook or from a Google account contains one or more records.
- Go to Contacts › Enrichissement › Importer une vCard (import a vCard).
- Select Upload your file and choose the .vcf file.
- Select Importer (import).
Result: one record per card read, with photo, notes and address when the file includes them. An unreadable card is counted and skipped. A company already in the address book becomes the parent company.

Detect and merge duplicates#
The same person entered twice skews follow-ups and reports. The detector finds duplicate records by email and by normalized name.
- Go to Contacts › Enrichissement › Détecter les doublons (detect duplicates).
- Select Lancer la détection (run detection). One line per group appears, with the shared Clé (key), the Motif (reason), the Nombre (count) and the Contacts concerned.
- On a line, select Voir / fusionner (view or merge). The list of that group's records opens.
- Check the records to combine, then select Actions › Merge.
- Choose the record to keep and confirm.
- Select Fermer (close) when all groups are handled.
Result: a single record remains per person, and the emails, activities and documents of the absorbed records are attached to it. The detector flags; you decide.
Maintain a contact's persona#
The persona gathers what the team knows about a relationship: how to address the person, whom to copy, how they pay. Prerequisite: the Utilisateur persona group.
- Open the contact's record and select the shortcut button Persona. The persona opens, created if needed.
- In the Communication tab, choose the Addressing Style, the Preferred Salutation (“Bonjour Jean”), the Closing Formula and the Preferred Language.
- In the Ton (tone) tab, note the person's observed tone toward you and yours toward them.
- In the Payeur (payer) tab, read the average payment delay, recalculated every day from the invoices.
- In the Connaissances partagées (shared knowledge) tab, select Lier les éléments de matrice (link matrix items) to attach the knowledge base items shared with this contact.
- In the KPIs tab, add the indicators to track (revenue, hours used, satisfaction).
- Save.
Result: the contact's card in Personas › Tableau de bord (dashboard) shows the style, the tone and the payer. Résumé persona (persona summary) on the record sums up the essentials. Lancer Claude /persona refresh opens Gen with the instruction to reread recent exchanges (see Gen, the assistant). /persona on the contact record does the same.

Write to a contact in the right tone#
When you write, the persona keeps you from using the informal “tu” with someone who expects “vous”, or from forgetting someone in copy.
- From a contact record, an opportunity or a ticket, open the email dialog.
- Read the banner that recalls the recipient's tone preference.
- Select Appliquer le persona (apply persona).
- Finish the message, then send it.
Result: the greeting is placed at the top and the closing at the end. The people whose copy is mandatory for this contact are added to the recipients.
Define who to copy#
Some people require their accountant to receive a copy of everything about billing. The persona remembers this as rules per category.
- Open the contact's persona, then the Règles c.c. (cc rules) tab.
- Add a line and choose the communication Category.
- In À mettre en c.c. (to copy), choose the contacts to add.
- Turn on Mandatory if the copy must never be forgotten.
- Save.
Result: the next time you write, Appliquer le persona adds these recipients. A manager maintains the categories under Contacts › Personas › Catégories.
Synchronize contacts with Nextcloud#
Symbifox records can feed a Nextcloud address book, and through it the phones that subscribe to it. Prerequisites: administrator access and a Nextcloud app password.
- Go to Contacts › Configuration › Contact Tags and create the exclusion tag (“No Nextcloud sync”).
- Go to Settings › General Settings, section Nextcloud Contacts Sync, then select Configure Nextcloud Address Books.
- Select New and enter Address Book Name, Nextcloud URL, CardDAV Path, Nextcloud User and App Password.
- Choose the Sync Direction and the Exclusion Tag created in step 1, then save.
- Select Test Connection. A message confirms access to the address book.
- Select Push to Nextcloud, or Pull from Nextcloud if Nextcloud is the source.
- Go back to Settings and turn on Enable Nextcloud Contacts Sync Cron.
Result: Synced Contacts, Last Sync and Last Sync Status fill in. From then on, any record changed in Symbifox goes back to Nextcloud at the next run, and a deleted record disappears from the Nextcloud address book.
Archive, duplicate or export records#
In the list and in the form, Actions groups the maintenance actions for the address book.
- Go to Contacts › Contacts, in the list view, and check one or more records.
- Select Actions, then the action you want. Archive removes the record from lists without deleting it, Duplicate copies it, Delete erases it and Export produces a file with the columns you choose.
- Confirm if Symbifox asks.
Result: an archived record stays linked to its invoices and can be found with the archived filter. The entry Ajouter à une campagne de démarchage (add to an outreach campaign) is described in Outreach.
The menus, one by one#
Contacts › Contacts: the kanban view of the address book, with New and the search. Cards can be grouped by company, tag or industry. The provided filters distinguish people, companies, customers and suppliers, and one filter isolates incomplete records. The form holds the enrichment buttons, the shortcut button Persona and the Persona tab (screenshot m141_form.png).
Contacts › Enrichissement: a grouping menu for the three dialogs below.
Contacts › Enrichissement › Numériser une carte: the Numériser une carte d'affaires dialog, reserved for the Enrichissement de contacts group.
Contacts › Enrichissement › Importer une vCard: the dialog for importing a .vcf file.
Contacts › Enrichissement › Détecter les doublons: the detection dialog, with Lancer la détection and Fermer.

Contacts › Configuration: a grouping menu for the base data.
Contacts › Configuration › Contact Tags: the list of tags, empty on the demo, with name, colour and parent tag.
Contacts › Configuration › Contact Titles: the five provided titles, with their abbreviation.
Contacts › Configuration › Industries: the 21 provided industries, with the Name and Full Name columns. The full name repeats the official title from the classification.

Contacts › Configuration › Localization: a grouping menu.
Contacts › Configuration › Localization › Countries: the 250 provided countries, with code and currency.
Contacts › Configuration › Localization › Fed. States: the provinces, states and regions of each country.
Contacts › Configuration › Localization › Country Group: groupings of countries (six provided).
Contacts › Configuration › Bank Accounts: a grouping menu.
Contacts › Configuration › Bank Accounts › Banks: the financial institutions (one on the demo).
Contacts › Configuration › Bank Accounts › Bank Accounts: the accounts linked to contacts, empty on the demo.
Contacts › Personas: a grouping menu, visible to the Utilisateur persona group.
Contacts › Personas › Tableau de bord: a kanban view of the personas, grouped by relationship health (Santé relationnelle on screen). Each card gives the addressing style, the contact's tone and the payer. On an empty screen, the help text invites you to run the automatic seeding or to create a persona by hand.
Contacts › Personas › Personas: the same information as a list, with the columns Partner, Addressing Style, Relationship Health, Last Interaction Date, Tone Summary, Our Tone Summary and Payer Quality. The headers are in English; the values are in French: Tutoiement (informal “tu”), Vouvoiement (formal “vous”), Chaleureux (warm), Neutre (neutral), Formel (formal), Tendu (tense).

Contacts › Personas › Catégories: the list of communication categories (Name, Code, Color, Active), reserved for managers. You can reorder the five delivered categories by dragging them.
Reference#
Fields of the Contact form#
| Field | Description | Required or default |
|---|---|---|
| Name | Name of the company or the person | Required |
| Individual / Company | Record type | Individual |
| Company (parent) | The company's record, for a person | Optional |
| Address, Phone, Mobile, Email, Website | Contact details; a person's address follows their company's | Optional |
| Job Position, Title, Language, Tags, Secteur d'activité | Classification of the record | Optional |
| Complétude | Percentage of contact details filled in | Computed |
| En file d'enrichissement | Checked by the bulk action, cleared after processing | Cleared |
| Persona, Résumé persona | Relationship profile and its summary | Created on first access |
| Ne plus démarcher | Set by Outreach when the person refuses solicitation | Cleared |
| Nextcloud Address Book, Contact Sync Source, Last Contact Sync | Linked address book, origin of the record, last synchronization | Filled in by the synchronization |
Fields of the Numériser une carte d'affaires dialog#
| Field | Description | Required or default |
|---|---|---|
| Carte d'affaires | Image or PDF of the card, front side | Required to read the card |
| Contact à enrichir | Existing record that the card updates | Optional |
| Nom complet, Prénom, Nom, Fonction, Société (full name, first name, last name, job position, company) | Identity read, editable | Filled in by the reading |
| Courriel, Téléphone, Mobile, Site web, Rue, Ville, Code postal, Pays (email, phone, mobile, website, street, city, postal code, country) | Contact details read | Filled in by the reading |
| Texte lu, Confiance | Raw transcription and confidence index | Read-only |
| Contact existant détecté | Record found by email, name or domain | Computed |
| Action | Create a record or update the detected record | Create |
Fields of the Persona form#
| Field | Description | Required or default |
|---|---|---|
| Addressing Style | Tutoiement, Vouvoiement or Auto | Auto |
| Preferred Salutation, Closing Formula | Texts placed by Appliquer le persona | Optional |
| Tone Summary, Our Tone Summary | The contact's tone toward you, and yours toward them, with notes | Not assessed |
| Payer Quality, Avg Payment Delay Days | Payer behaviour; the delay is recalculated every day | Computed |
| Relationship Health, Last Interaction Date | Relationship health (weekly) and last known exchange | Computed |
| Règles c.c. | People to copy per category, with the mandatory flag | Optional |
| Détails personnels | Family, hobbies, milestones; managers only | Optional |
| Éléments partagés avec le contact (items shared with the contact) | Linked knowledge base items | Optional |
| KPIs | Indicators specific to the contact | Optional |
Fields of the Nextcloud Address Book form#
| Field | Description | Required or default |
|---|---|---|
| Address Book Name | Name of the configuration | Required |
| Nextcloud URL | Base address of the Nextcloud server | Required |
| CardDAV Path | Path of the address book, such as /remote.php/dav/addressbooks/users/<user>/contacts/ |
Required |
| Nextcloud User, App Password | Nextcloud account and app password, encrypted on save | Required |
| Sync Direction | Bidirectional, Odoo → NC (Symbifox to Nextcloud) or NC → Odoo (the reverse) | Odoo → NC |
| Exclusion Tag | Tag whose holders are never synchronized | Required |
Reports and exports#
The application provides no printed report. The list view exports through Actions › Export, with a choice of columns. Personas can be grouped and filtered in the list and kanban views. Importing goes through the standard importer of the list view, or through Importer une vCard.
Automations#
- Every 30 minutes, the records queued by Enrichir depuis les signatures courriel are processed in batches, without replacing an entered value.
- Every day, each persona's average payment delay is recalculated. Tones not assessed for more than six months are marked for refresh.
- Every month, a persona is seeded for every active person without a profile. This requires recent emails, a paid invoice or a project.
- Every week, relationship health is reassessed (pace of received emails, message length, negative markers). A switch to “dégradée” triggers the alert.
- Every day, if you turn it on (it is off at installation), a “Réévaluer le persona” (reassess the persona) activity is created on stale but active personas.
- Every 15 minutes, if the setting is on, the Nextcloud synchronization pushes changed records and pulls new ones. A full resynchronization every six hours also exists, off at installation.
Public pages and portal#
The /scan page is reserved for signed-in users who hold the Enrichissement de contacts group and the Contact Creation right. It installs on a phone's home screen and captures the card with the camera. Its manifest and its installation script are public, because a browser requests them without being signed in; they contain nothing private. Contacts exposes nothing on the customer portal.
Modules that extend this application#
The persona relies on Invoicing (payment delay) and on the knowledge base (shared items); both must be installed.
The Nextcloud synchronization depends on no other Symbifox module; it talks directly to the Nextcloud server.
Two other modules add fields to the record without belonging to this chapter. Outreach adds Ne plus démarcher (see Outreach). Privacy keeps consent preferences there (see Privacy (Law 25 and other frameworks)).
Understanding#
Enrichment adds; it does not undo. A value already entered is never replaced, unless you check Écraser les valeurs existantes. Each addition is logged in the chatter with its origin. You can therefore run enrichment on the whole address book without fear of losing a correction made by hand.
The AI reads data, not instructions. The content of a card or an email is treated as material to extract, never as an instruction. Calls go through the provider configured under LLM Gateway, which can run on your own infrastructure: records go to no third-party service. Website enrichment is the exception, because it requires an autonomous web search, handled by Gen.
Why a mobile page rather than an app. Scanning a card takes ten seconds and needs neither notifications nor offline work. An installable page costs an address to open, not an app store listing.
The persona tracks two tones. It distinguishes the person's tone toward you, read in the emails you receive from them, from yours toward them. A tone not reassessed for six months is marked stale. Relationship health compares the last thirty days with the previous sixty. Without a minimum of exchanges, the value stays “N/D” (not available), as it does for the demo's fourteen personas.
Seeding targets people. It creates profiles only for people with real activity; a new address book stays without personas until the first exchanges.
Synchronization treats Symbifox as the reference. By default, every record goes to Nextcloud, except those with the exclusion tag. A push recreates the records missing from Nextcloud and deletes the cards that match nothing in Symbifox. On the way back, a card is matched to an existing record by its email before a new one is created. An unchanged record is skipped.
Limits to know. The duplicate detector compares the email and the normalized name, so two records with two emails and two spellings will not be found. The vCard reader handles the common dialects (Apple, Android, Outlook, Google).
Troubleshooting#
| Symptom | Likely cause | Fix |
|---|---|---|
| Lire la carte shows a message and fills in nothing | No AI provider configured, or an invalid setting | Configure the provider under Settings › LLM Gateway, then try again |
The /scan page refuses access |
The user lacks one of the two required rights | Grant the Enrichissement de contacts group and the Contact Creation right |
| Enrichir maintenant (signatures) changes nothing | No email received from this correspondent is archived, or the fields are already filled in | Check the Email application; to replace values, use Enrichir (réviser) and check Écraser les valeurs existantes |
| Bulk records stay En file d'enrichissement | The automatic task stopped in error | Fix the AI provider; the queue resumes at the next run |
| Contacts disappeared from the Nextcloud address book | A push deleted the cards with no match in Symbifox | Recreate them in Symbifox, or synchronize to a dedicated Nextcloud address book |
| Test Connection fails | Inexact CardDAV path, or revoked app password | Copy the path again from Nextcloud's Contacts app and create a new app password |
See also#
- CRM: customers and opportunities.
- Outreach: campaigns and Ne plus démarcher.
- Email: create or enrich a contact from a received message.
- Gen, the assistant: the AI provider and the /persona instruction.
- Knowledge base: the persona's shared items.
- Nextcloud and Collabora: address books and app passwords.
- Privacy (Law 25 and other frameworks): consent and contact preferences.
- Common actions in every application: chatter, activities, import, export.