EasyUC
4.8.7

EasyUC for Cisco

Presence Sync: how it works and architecture

Which states are transferred in which direction, how a synchronisation run proceeds and where the data is stored.

EasyUC · Version 4.8.7

In EasyUC: Presence Sync → Presence profiles

What it is for

Presence Sync synchronises the presence status between Microsoft Teams and Cisco telephony. The most common case: an employee is on a call on the Cisco desk phone. Without synchronisation, Teams still shows them as available, colleagues call or write and interrupt the call. With Presence Sync they are shown as "In a call" in Teams for as long as the call is connected.

This chapter explains the function before you set anything up: which variant belongs to which Cisco client, which state is transferred in which direction, how a single synchronisation run proceeds, which interfaces and permissions are involved and what is transferred to Microsoft. The setup itself is described in the following chapters.

Presence Sync is a module of its own with its own workspace and its own background service. It needs neither the Teams SBC nor the ACD. A presence profile has no SIP port, no host name and no certificate.

Prerequisites

  • You need no permission to read this chapter. For the setup, the roles from the chapter on the presence profile apply.
  • You know which Cisco client the users work with: desk phones and Jabber with Cisco IM and Presence, or the Webex App. The variant depends on this.
  • You have access to Microsoft Entra to create an app registration and grant admin consent.
  • For the Jabber variant: a CUCM with call monitoring set up in EasyUC and, for the Jabber status, a Cisco IM and Presence with a reachable presence web service.

Step by step: how to proceed

  1. Determine the variant using the table Variants at a glance.
  2. Read the state tables and clarify with the business department which directions are needed. Often CUCM-Anrufstatus → Teams (CUCM call status) is enough.
  3. Use the table Interfaces and permissions to check which accounts and approvals you have to prepare.
  4. Read the section Limits so that the expectations for "Do not disturb" and "Presenting" are right.
  5. Then set up Presence Sync with the end-to-end checklist.

Fields and options: variants at a glance

Fields and options: variants at a glance
Field / actionMeaning and use
CUCM-Anrufstatus → TeamsThe source is the connected calls from the call monitoring of the CUCM connection (JTAPI). A connected call on the Cisco phone or softphone sets the mapped Teams user to "In a call". Ringing alone sets no status. This direction does not need IM and Presence.
Cisco Jabber → TeamsEasyUC reads the Jabber status through the presence web service of Cisco IM and Presence and publishes "Available" and "Away" in Teams.
Teams → Cisco JabberEasyUC reads the Teams status through Microsoft Graph and publishes it in Jabber through the presence web service: available, away, busy as well as calls and meetings.
Cisco Webex (native integration)With the Webex App the status lives in the Webex cloud. Synchronisation with Teams is handled by Cisco through "Cisco Call for Microsoft Teams". EasyUC publishes nothing itself here. It can read and set the organisation-wide switch of the integration and observes the status changes on both sides.
Several directions at onceThe three Jabber directions can be switched individually and can be combined. Microsoft Graph allows one session per user for each app. EasyUC therefore merges Jabber status and CUCM calls into one source.
User mappingEasyUC recognises the same person by an identifier that carries the same value in both systems, for example e-mail address or phone number. The preview shows Eindeutig (unique), Nicht gefunden (not found) or Mehrdeutig (ambiguous) for each user. Only unique matches and manual mappings take part in the synchronisation.
IntervalThe background service works at a base rate of 5 seconds. For each profile you set 5 to 60 seconds, default 10.
Dry runCalculates a synchronisation run completely and shows the planned changes. No states are published and no events are written.
Presence LiveLog per profile: every publication, refresh, removal, omission and every error with time, user, direction, source status before and after, target status, result and reason.

State table: Cisco → Teams

State table: Cisco → Teams
Field / actionMeaning and use
Connected call on the Cisco deviceTeams: availability "Busy" with activity "In a call". The only source is a call confirmed by call monitoring. When it ends, EasyUC removes its session and Teams shows the user's own status again.
Ringing, diallingNo change in Teams.
Jabber: availableTeams: "Available".
Jabber: awayTeams: "Away".
Jabber: busy, in a meetingOmitted and logged: "Microsoft Graph unterstützt diesen Status nicht als sichere App-Session." This means: Microsoft Graph does not support this status as a safe app session.
Jabber: do not disturbOmitted and logged. EasyUC does not overwrite a Teams status that the user has set personally.
Jabber: offlineEasyUC removes its own session in Teams. It does not artificially report the user as offline.
Status unknown or source not reachableThe last published state remains until it expires. A failure of the source never means "available".
Status that EasyUC itself has set in JabberNot mirrored back to Teams: "Die eigene EasyUC-PWS-Quelle wird nicht zurück nach Teams gespiegelt." This means: EasyUC's own PWS source is not mirrored back to Teams.

State table: Teams → Cisco Jabber

State table: Teams → Cisco Jabber
Field / actionMeaning and use
Teams: AvailableJabber: available.
Teams: Away, Be right backJabber: away.
Teams: BusyJabber: busy.
Teams: In a callJabber: busy with a call indicator ("On a call").
Teams: In a conference callJabber: as for "On a call".
Teams: In a meetingJabber: busy.
Teams: Do not disturb, PresentingOmitted and logged: "Ein persönlicher Cisco-DND-Override wird nicht überschrieben." This means: a personal Cisco DND override is not overwritten. For "Do not disturb" Cisco requires a global override, which EasyUC does not set.
Teams: OfflineEasyUC removes its own source in Jabber.
Status unknownThe existing source in Jabber remains.
Status that EasyUC itself has set in TeamsNot mirrored back to Cisco: "Der von EasyUC in Teams gesetzte Status wird nicht zurück nach Cisco gespiegelt." This means: the status set in Teams by EasyUC is not mirrored back to Cisco. This prevents a feedback loop.

How a synchronisation run proceeds

  1. Every 5 seconds the presence service checks for which profiles the configured interval has elapsed. A lock in the database prevents two runs from publishing for the same profile at the same time.
  2. It loads the user mapping of the profile. Ambiguous matches are excluded and count as conflicts.
  3. It reads the sources of the directions that are switched on: connected calls of the CUCM connection, Jabber status from the presence web service, Teams status from Microsoft Graph.
  4. For each user it compares the state it has read with the last one observed. Only a change creates an entry in Presence Live. Unchanged queries write nothing.
  5. It determines the target state according to the state tables. States that cannot be transferred are logged as skipped with a reason.
  6. It publishes new states, refreshes existing ones before they expire and removes states whose source has ended.
  7. It stores status, message and time of the run at the profile. The interface shows these values under Last check.
  8. If synchronisation is switched off or the module is stopped, the service removes only the states set by EasyUC. The settings of the profile are kept.

Data flow and storage locations

Data flow and storage locations
Field / actionMeaning and use
What goes to MicrosoftFor each mapped user, the presence status as a pair of availability and activity, for example "Busy / In a call". Phone numbers, call parties, call duration or call content are not transferred.
What EasyUC reads from MicrosoftThe users of the tenant with the identifier selected for the mapping and, when the reverse direction is switched on, their presence status.
What goes to Cisco IM and PresenceThe status read from Teams as rich presence for the Jabber address of the user.
What is stored on the applianceProfiles, credentials, user mapping, the last observed state per user and the Presence Live log. Everything is in the database of your appliance.
Log contentTime in UTC with milliseconds, profile, user, client, direction, previous state, source and target status, action, result and reason. Credentials, session keys and tokens are not included.
Background serviceA service of its own on the appliance with one instance. The Manager shows its state, its logs and a restart control separately from the other services.
Expiry times at the vendorA session set by EasyUC in Microsoft Graph expires after ten minutes, a source in Cisco IM and Presence after one hour. EasyUC refreshes active states before that. If EasyUC fails, the states it has set disappear at the latest when this expiry time is reached.

Interfaces and permissions

Interfaces and permissions
Field / actionMeaning and use
Microsoft GraphApp registration in Microsoft Entra with client ID and client secret. Application permissions with admin consent: User.Read.All (read users), Presence.Read.All (read status) and Presence.ReadWrite.All (publish status). In Webex mode the two read permissions are sufficient.
CUCM: call monitoringThe CUCM connection in EasyUC monitors active calls on all devices (JTAPI through the CTI Manager). Presence Sync shares this monitoring.
CUCM: user directoryAXL read access to map lines to their users and Jabber addresses. You use an existing CUCM connection or enter a separate AXL access.
Cisco IM and PresencePresence web service over HTTPS. An application user with the role Admin-3rd Party API publishes. To read the Jabber status, EasyUC additionally needs a dedicated end user as observer. The certificate is always verified.
WebexA Webex integration with client ID, client secret and refresh token, and the organisation ID. Read permissions for people and for the telephony settings; to switch the integration, additionally the write permission and a suitable administrator role.
Roles in EasyUCSeparate permissions for viewing profiles, editing profiles, viewing synchronisation and editing synchronisation. Details are in the chapter on the presence profile.

Limits

  • "Do not disturb" is not transferred in either direction. Both vendors treat this state as a personal decision of the user, which EasyUC does not overwrite.
  • "Presenting" cannot be derived reliably from the Jabber status and is not transferred.
  • From Jabber, only "Available" and "Away" reach Teams. A call status comes exclusively from the call monitoring of the CUCM.
  • Shared CUCM lines (shared lines) are not attributed to a single user and set no call status.
  • Only one presence profile may publish per Entra app. Only one profile may write to Jabber per application user in IM and Presence.
  • The synchronisation polls the vendors cyclically. States that last less than the interval can go unnoticed.
  • In Webex mode, Beobachtet (observed) means that EasyUC has read a source status. It does not confirm an individual transfer by Cisco.
  • How Jabber displays a status set from outside and merges it with its own sources depends on the version of IM and Presence and Jabber. Check this with your versions during acceptance testing.

Check the result and narrow down errors

  • You have understood the function when you can predict for a test user what Teams shows during a call on the Cisco phone and what is not transferred.
  • If the expectation does not match the behaviour, open Presence Live and read the entry of the user. Result and reason state what EasyUC did or omitted.
  • If a user does not appear in the log at all, they are not mapped uniquely. Check the mapping in the profile with Zuordnung prüfen (check mapping).
  • The individual messages with meaning and remedy are in the chapter on error patterns.

Related chapters