Receive an incoming call and see who is calling

When a customer calls a company number, the platform records the call, identifies the caller (or creates a contact for an unknown one) and shows the Operator whose extension is ringing an incoming call card within 2 seconds.

When this happens: The Customer dials +373 22 123 456 (Vânzări) and the phone system reports call.ringing for extension 101.

Step by step

  1. 1

    Sees the card: Maria Popescu — Alfa Trade SRL, the phone number as their field permissions allow, owner Ion Rusu, tags, 2 open opportunities, 1 open ticket, conversation status and last interaction, and Called: Vânzări (+373 22 123 456).

    Maria Popescu dials +373 22 123 456 from +373 69 765 432. EasyCRM posts a signed call.ringing event: callId, direction: inbound, from, to, extension: 101, occurredAt. EasyCRM verifies the signature, stores the event once (duplicates by eventId are ignored) and answers 200 within 5 seconds. EasyCRM creates the call record, normalizes the caller number to E.164 and matches it to a Phone identity or a contact's phone; finds Maria Popescu. Pushes the incoming call card to the signed-in user mapped to extension 101, within 2 seconds of the event reaching the platform.

  2. 2

    Answers on the softphone (MicroSIP) or desk phone, and continues with UC-29.5.

Other paths

Unknown caller

At step 4 no contact matches. EasyCRM creates a contact named Telefon in the company language with the masked number +373 22 ••• 456, records the phone and a Phone identity, sets the first interaction channel to Voice and the owner to Unassigned. The card shows a New caller badge.

Withheld number

The caller number is anonymous, empty or unparseable. EasyCRM creates no contact and no conversation; keeps the call as an unlinked call. The card reads Hidden number with only the called line; the call can be linked later.

Number matches several contacts

Two contacts share the number. The oldest contact is used; the name is never used to match.

Caller is a whatsapp customer

The number matches a contact whose Phone identity was recorded from WhatsApp. The call joins that contact; the contact's history shows the call and the WhatsApp messages together.

Ringing several extensions

A ring group rings 101 and 102. Both mapped users get the card. When Ion Rusu (102) answers, Maria Popescu's card closes with Answered by Ion Rusu (UC-29.5 ).

Two calls at once

The same customer calls twice while the first is ringing or active. EasyCRM records two calls with two call messages in the same conversation; the Operator sees stacked cards.

Operator has the tab in the background

EasyCRM shows a browser notification (no sound) if the Operator allowed notifications.

A hunt group moves on

The hunt group stops ringing extension 101 and rings 102; the phone system posts call.ring_ended with extension: 101. EasyCRM closes the card of you mapped to 101 on all their tabs. The call is not over: 102's user still has a card, and the call keeps ringing. If the phone system does not send call.ring_ended, the card stays until the call is answered elsewhere or ends (, UC-29.5 ).

If something goes wrong

Signature or token mismatch

At step 3 verification fails. Answers 400, stores nothing, shows no card and records WebhookSignatureInvalid.

Unmapped extension

The ringing extension has no mapping. The call is recorded and identified, nobody gets a card, and the extension appears under Extensions seen but not linked.

Events out of order or late

call.answered arrives before call.ringing, or call.ended first. EasyCRM computes the call's state from all its events by their occurredAt; an event for an unseen call creates it from what it carries. No stale card is shown for a call that already ended.

Blocked number

The caller is on the blocked list. The call is kept flagged Blocked; no contact, card, notification or follow-up is created.

Internal call

direction: internal (extension to extension). Acknowledges with 200 and ignores it.

Missing required field

The event lacks callId. Answers 400 naming the field; nothing is stored.

Permission missing

A mapped user without EasyCrm.Calls receives no card.

Good to know

  • Ringing events are processed in the request that receives them, so the card appears within 2 seconds; other events go through the background job.
  • Callers are matched by phone number only, normalized with the company country, never by name.
  • An unknown caller becomes a contact exactly like a first WhatsApp message; a withheld number never does.
  • The call's state is computed from all its events regardless of arrival order; an ended call stays ended except for later recording or voicemail events.
  • The card shows only the permitted fields (a masked number where the Phone field is not permitted) and ignores the your conversation scope.
  • Users without an extension, and extensions of deactivated users, get no card.
  • Events are acknowledged within 5 seconds with 200 on accept or duplicate.
  • call.ring_ended (with its extension) is optional; it closes only that extension's card. Without it a card stays until the call is answered elsewhere or ends.