[Intum](https://intum.pl/pomoc.md) / [CRM](https://intum.pl/pomoc/crm.md)

# [Scalanie zdublowanych kontaktów po adresie e-mail](https://intum.pl/pomoc/crm/scalanie-zdublowanych-kontaktow-po-adresie-e-mail.md) | [API](#api)

Gdy kontakty trafiają do CRM z kilku miejsc naraz (import z pliku, synchronizacja z własnym systemem, ręczne dodawanie przez handlowców, zapis z formularza), ta sama osoba potrafi pojawić się w bazie dwa albo trzy razy. Każdy z tych wpisów ma kawałek historii: jeden ma rozmowy mailowe, drugi telefon, trzeci notatkę ze spotkania. Aplikacja "Scalanie kontaktów po e-mailu" znajduje takie powtórzenia, pokazuje je do przejrzenia i dopiero na Twoje polecenie łączy je w jeden kontakt, nie gubiąc danych.

## Krok 1. Zainstaluj aplikację

Wejdź w Ustawienia konta - Aplikacje i dodatki, znajdź "Scalanie kontaktów po e-mailu" i kliknij Zainstaluj. Panel aplikacji znajdziesz pod adresem /a/crm-contacts-merge, link pojawi się też w ustawieniach CRM.

Tak wygląda panel aplikacji po wykonaniu podglądu:

![Panel aplikacji Scalanie kontaktów po e-mailu](7d8836642770-crm_contacts_merge_panel.png)

## Krok 2. Ustaw zasady scalania

Na górze panelu są dwa pola wyboru i jedno pole liczbowe. Domyślnie oba pola wyboru są wyłączone, czyli aplikacja działa ostrożnie i scala tylko oczywiste przypadki.

- Scalaj też grupy z różnymi nazwiskami. Bez tej opcji grupa, w której pod jednym adresem kryją się różne nazwy (np. "Jan Kowalski" i "Firma Sp. z o.o."), zostanie pominięta i oznaczona do ręcznej decyzji. Pusta nazwa albo nazwa równa adresowi e-mail nie liczy się jako nazwisko, więc kontakt "jan@firma.pl" bez imienia spokojnie połączy się z "Janem Kowalskim". Różne numery telefonu nie są konfliktem.
- Wchłaniaj też kontakty z identyfikatorem zewnętrznym. Kontakt z identyfikatorem zewnętrznym jest zwykle powiązany z Twoim systemem (ERP, sklepem), więc domyślnie nigdy nie znika: aplikacja łączy do niego kontakty bez identyfikatora, a inne kontakty z identyfikatorem zostawia. Włączenie tej opcji pozwala wchłonąć również je. Ich identyfikatory przepadają z karty kontaktu (zostają tylko w historii scalenia), więc włączaj to świadomie.
- Limit grup. Na pierwszy raz warto wpisać np. 20, sprawdzić wynik i dopiero potem uruchomić scalanie bez limitu. Grupy pominięte nie zużywają limitu.

## Krok 3. Zrób podgląd

Kliknij "Podgląd (nic nie zapisuje)". Aplikacja przejrzy wszystkie kontakty na koncie, zgrupuje je po adresie e-mail i w tabeli pokaże każdą grupę z oznaczeniem:

- Do scalenia - grupa nadaje się do połączenia zgodnie z ustawionymi zasadami
- Pominięte - różne nazwiska
- Pominięte - same identyfikatory zewnętrzne (nie ma czego wchłonąć bez drugiej opcji)

W każdym wierszu widać, który kontakt zostanie głównym (ten zostaje), które zostaną w niego wchłonięte, a które pozostaną nietknięte. Nazwy kontaktów są linkami, otwierają kartę kontaktu w nowej karcie przeglądarki, więc możesz spokojnie sprawdzić historię, notatki i firmę zanim cokolwiek zdecydujesz. Filtry nad tabelą pozwalają zawęzić listę np. do samych konfliktów nazwisk.

Kontaktem głównym zostaje najstarszy kontakt z identyfikatorem zewnętrznym, a gdy żaden go nie ma, najstarszy w ogóle. To ważne, bo do niego prowadzą już powiązania z Twoim systemem.

## Krok 4. Scal wybrane grupy albo wszystkie

Po przejrzeniu podglądu masz dwie drogi:

- zaznacz pola wyboru przy grupach, które chcesz połączyć, i kliknij "Scal zaznaczone". Zaznaczyć można też grupy pominięte przez konflikt nazwisk, jeśli po obejrzeniu kart wiesz, że to ta sama osoba - wtedy włącz jeszcze opcję scalania różnych nazwisk, inaczej grupa znów zostanie pominięta
- kliknij "Scal wszystkie grupy", żeby połączyć wszystko, co w podglądzie miało status "Do scalenia". Aplikacja poprosi o potwierdzenie.

Scalanie działa w tle, panel pokazuje postęp, a po zakończeniu dostaniesz powiadomienie w Intum. Wynik znów pojawia się w tabeli: grupy scalone na zielono, ewentualne błędy na czerwono z opisem, co poszło nie tak.

## Co dzieje się z danymi po scaleniu

Zostaje jeden kontakt na adres e-mail, wchłonięte kontakty znikają z listy. Ich dane nie przepadają:

- rozmowy mailowe, połączenia telefoniczne, interesy, notatki i dokumenty wchłoniętych kontaktów przechodzą na kontakt główny
- puste pola kontaktu głównego (telefon, stanowisko, adres) uzupełniają się wartościami z wchłoniętych kontaktów
- inne adresy e-mail i numery telefonu, których główny kontakt nie miał, zapisują się jako dodatkowe adresy i telefony na jego karcie
- na karcie kontaktu głównego zostaje historia scalenia: lista wchłoniętych kontaktów razem z ich danymi i identyfikatorami zewnętrznymi

Kontakty z Twojego systemu synchronizowane po identyfikatorze zewnętrznym dalej działają, bo identyfikator zawsze zostaje przy kontakcie głównym.

## Historia przebiegów

Sekcja "Przebiegi" pod zasadami scalania to lista wszystkich podglądów i scaleń z ostatnich 30 dni: kto uruchomił, z jakimi opcjami, ile grup przejrzano, ile scalono, ile było błędów. Kliknięcie w przebieg pokazuje jego grupy i dziennik z informacjami oraz błędami. Po miesiącu wyniki są usuwane, ale historia scalenia na kartach kontaktów zostaje na stałe.

Na jednym koncie może działać tylko jedno scalanie naraz. Jeśli ktoś inny właśnie uruchomił podgląd albo scalanie, dostaniesz komunikat, żeby chwilę poczekać.

---

## API

### Ogólne API

# Intum API

Dokumentacja API platformy [Intum](https://intum.pl) - system operacyjny firmy.

## Host

Host jest zawsze taki sam jak adres konta: `xxxx.intum.com` lub `xxx.intum.pl` (w zależności od ustawień konta)

## Autoryzacja

Wszystkie requesty API wymagają `api_token`:
- header: `Authorization: Bearer TOKEN`

Token możesz wygenerować w **Ustawienia Konta** → **Tokeny API**

## Scalanie kontaktów po e-mailu - API

Aplikacja uruchamia flow o kodzie `crm_contacts_merge_1` (kind `crm/contacts_merge`) i zapisuje wyniki do bazy Noe `crm-contacts-merge`. Wszystko jest dostępne przez standardowe API Intum, więc podgląd i scalanie można zlecać także z zewnątrz (np. cyklicznie po dużym imporcie). Autoryzacja: `Authorization: Bearer TOKEN` z uprawnieniem do flow (`flows`) i baz Noe.

### Uruchomienie przebiegu

```
POST /connect/flows/:flow_id/start.json
Content-Type: application/json
```

```json
{
  "mode": "preview",
  "merge_name_conflicts": false,
  "merge_external_id_conflicts": false,
  "max_groups": 20,
  "emails": ["jan@firma.pl", "anna@biuro.pl"]
}
```

| Pole | Wymagane | Opis |
|------|----------|------|
| `mode` | tak | `preview` (nic nie zapisuje w CRM) albo `merge` |
| `merge_name_conflicts` | nie | scalaj też grupy z różnymi nazwiskami (default `false`) |
| `merge_external_id_conflicts` | nie | wchłaniaj też kontakty z `external_id` (default `false`) |
| `max_groups` | nie | limit grup w jednym przebiegu; pominięte grupy nie liczą się do limitu |
| `emails` | nie | tylko wskazane adresy (tak działa "Scal zaznaczone") |

`flow_id` pobierzesz z `GET /connect/flows.json?code=crm_contacts_merge_1`. Odpowiedź startu zawiera `flow_process.id`.

### Postęp

```
GET /connect/flow_processes/:id.json
```

W `config.status_details`: `stage` (`running` / `finished` / `error`), `run_id`, `processed`, `total_groups`, `merged`, `previewed`, `skipped`, `errors`, `removed_contacts`, `stats`, `error` (przy błędzie, np. gdy inny przebieg jeszcze trwa).

### Wyniki w bazie Noe `crm-contacts-merge`

```
GET /noe/dbs/crm-contacts-merge/search.json?table_name=runs&sort=-id&limit=30
GET /noe/dbs/crm-contacts-merge/search.json?table_name=groups&filter[run_id]=RUN_ID&filter[status]=preview&limit=100&offset=0
GET /noe/dbs/crm-contacts-merge/search.json?table_name=logs&filter[run_id]=RUN_ID
```

- `runs` - jeden rekord na przebieg: `mode`, `status` (running/finished/error), `flow_process_id`, `user_name`, flagi, `max_groups`, `emails_count`, `total_groups`, `stats`, `errors_count`, `started_at`, `finished_at`, `error`
- `groups` - jedna grupa e-mail: `run_id`, `email`, `status` (`preview`, `merged`, `skipped_name`, `skipped_external_id`, `error`), `master` / `absorbed` / `kept` (skróty kontaktów: `id`, `name`, `email`, `phone`, `external_id`, `client_id`, `client_name`), `conflict_names`, `lost_external_ids`, `merged_emails`, `merged_phones` (dodatkowe adresy i telefony z `fields.merged` kontaktu głównego), `message`
- `logs` - `run_id`, `level` (`info` / `error`), `message`, `email`

Wyniki starsze niż 30 dni są kasowane przy starcie kolejnego przebiegu. Historia scalenia zostaje w polach `merged` kontaktu głównego (`GET /crm/contacts/:id.json`).

---

## Powiązane

- [Automatyczna synchronizacja danych klientów pomiędzy własną aplikacją a Intum CRM](https://intum.pl/pomoc/crm/automatyczna-synchronizacja-danych-klientow.md)
- [Kontakty](https://intum.pl/pomoc/crm/kontakty.md)
