Basic call flow and different call events

​For each incoming request (call/chat/email etc.) to Puzzel, the Puzzel platform generates one or more events wrapped in one session (internal_iq_session_ id). One event is represented by a record in the db.

In the call_events table there are different types of Call events, e.g. Initiation event, Menu event, Queue event and Conversation event. For most of the contact centre routing modules the incoming call goes through, an event(record) is created. One call may go through none or several audio/caller input/menu modules (resulting in menu events), none or several queues (resulting in queue events) and there may be generated none or several calls to agents or other destination numbers (results in conversation events).

When the incoming call ends (caller hangs up) the session ends, and the different events for this session are processed and inserted into the database.


A caller calls in at 12:00:00 and spends 1 minute in menus, 4 minutes in queue a, 3 minutes speaking with agent x and then 1 minute in queue b, and finally 4 minutes speaking with agent y, so the call ends at 12:13:00. All events for this incoming call are inserted in the database a few minutes after 12:13:00.

All events for one session will have the same call_id.

The initiation event contains the request_id, (from db version 1.7) which might be useful if you try to link information retried from the API (e.g. request_add) with Raw data.

In special cases (e.g. Callback in queue , outbound calls and email in queue) there might be 2 or more sessions with the same call_id.

For incoming phone calls, the Initiation event represents the time the incoming call is connected to the Puzzel platform, but this event is also used for other requests like emails/chats and for outgoing calls initiated by the agent or the Dialler.

Example events for a call_id, with some of the columns in call_events:

Since some calls last very long (e.g. long time in queue and a long conversation with an agent, who may transfer the caller to a new queue or agent…), it may take a long time from a call starts until the events for the call are available in the database.

All events have a call_id, a start, a duration, a result (and other details), and there may be events that are overlapping in time, e.g. a queue event and conversation event(s) or 2 conversation events (consultation call).

In very special cases, menu events for audio files played to the caller while in queue are created, and such menu event’s duration will be ‘within’ the queue event’s duration.

About the caller’s number and the Initiation event’s source

For an incoming call, the caller’s number is usually put in the Initiation event’s source field. Please note the phone number may be stored with or without +/00 and country code.

If the caller (A) calls to number B, which is forwarded to a Puzzel access number (C), the caller’s number might end up in the Initiation event’s additional_source or redirect_source, and the called number (B) might end up in source. Puzzel reports what is received as Calling party number, Additional number and Redirecting number from the network.

For calls from callers that have a secret number or that have withheld number or have used CLIR (Calling Line Identity Restricted), the caller’s number is not presented in Raw data (the source field is empty).

For outbound calls from agents, the called number is usually reported as the source.

For agent-to-agent calls, the reported source is “xxxxxxxx”.

If a user has anonymised calls from a given phone number from the Admin Portal's Archive - Anonymise page or using the API (after May 2024), we will anonymise this phone number
- in table ‘call_events’ in fields ‘source’, ‘additional_source’, ‘redirect_source’ for the initiation events, 
   and in fields 'originating' and 'add_originating' for conversation events
- in table ‘surveys’ in field ‘destination’


About Menu events

One call_id can have 0 or more menu events, and for one call_id there might even be more than 1 menu events for the same menue_key. In each menu, one can configure what should happen if the caller dials an illegal digit or dials nothing within a time limit.

  • The caller can stay in the menu module and hear the message again. If a caller first enters 4, then 7 and finally 1 in a menu module asking for digits 1, 2 or 3, this will result in only one menu event with menue_key =1.
  • The caller can be routed directly to an exit if he presses an illegal digit. The next module can be a queue, but if the next module is a menu saying ‘wrong digit’ and the call then is routed back to the first menu, there will be 2 menu events from the first menu.

And, there can be menus with option ‘press x to return to the previous/main menu’. If this exists, then one call_id can have 2 (or more) menu events from the same menu. The descriptions/names for the different menus can be found in table menues.

To compare number of menu events per menue_choice with the corresponding queue events (queue arrivals) is tricky due to the above, and since there might be several ways to enter a queue (from different menus, from different access numbers, from other queues and call transfer from agent to queue).


Last updated