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.
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
Fields and options: variants at a glance
| Field / action | Meaning and use |
|---|---|
| CUCM-Anrufstatus → Teams | The 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 → Teams | EasyUC reads the Jabber status through the presence web service of Cisco IM and Presence and publishes "Available" and "Away" in Teams. |
| Teams → Cisco Jabber | EasyUC 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 once | The 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 mapping | EasyUC 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. |
| Interval | The background service works at a base rate of 5 seconds. For each profile you set 5 to 60 seconds, default 10. |
| Dry run | Calculates a synchronisation run completely and shows the planned changes. No states are published and no events are written. |
| Presence Live | Log 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
| Field / action | Meaning and use |
|---|---|
| Connected call on the Cisco device | Teams: 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, dialling | No change in Teams. |
| Jabber: available | Teams: "Available". |
| Jabber: away | Teams: "Away". |
| Jabber: busy, in a meeting | Omitted 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 disturb | Omitted and logged. EasyUC does not overwrite a Teams status that the user has set personally. |
| Jabber: offline | EasyUC removes its own session in Teams. It does not artificially report the user as offline. |
| Status unknown or source not reachable | The last published state remains until it expires. A failure of the source never means "available". |
| Status that EasyUC itself has set in Jabber | Not 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
| Field / action | Meaning and use |
|---|---|
| Teams: Available | Jabber: available. |
| Teams: Away, Be right back | Jabber: away. |
| Teams: Busy | Jabber: busy. |
| Teams: In a call | Jabber: busy with a call indicator ("On a call"). |
| Teams: In a conference call | Jabber: as for "On a call". |
| Teams: In a meeting | Jabber: busy. |
| Teams: Do not disturb, Presenting | Omitted 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: Offline | EasyUC removes its own source in Jabber. |
| Status unknown | The existing source in Jabber remains. |
| Status that EasyUC itself has set in Teams | Not 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
Data flow and storage locations
| Field / action | Meaning and use |
|---|---|
| What goes to Microsoft | For 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 Microsoft | The 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 Presence | The status read from Teams as rich presence for the Jabber address of the user. |
| What is stored on the appliance | Profiles, credentials, user mapping, the last observed state per user and the Presence Live log. Everything is in the database of your appliance. |
| Log content | Time 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 service | A 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 vendor | A 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
| Field / action | Meaning and use |
|---|---|
| Microsoft Graph | App 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 monitoring | The CUCM connection in EasyUC monitors active calls on all devices (JTAPI through the CTI Manager). Presence Sync shares this monitoring. |
| CUCM: user directory | AXL 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 Presence | Presence 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. |
| Webex | A 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 EasyUC | Separate 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.