How one can Use Presence Internet Providers



Presence of thoughts

Jabber is so final many years. Webex and its competitors are the very best trendy technique of messaging. However Cisco IM&P, a companion server to Cisco Name Supervisor, remains to be one of the best ways to subscribe to consumer presence updates.

Suppose you could have a gaggle of staff to whom you assign duties as they arrive in. If you happen to can watch the presence of that group, you’ll know who is out there, who’s away, who’s on the cellphone, and so on. You may construct an software that robotically assigns duties in response to the presence of the customers.

The Presence Internet Providers (PWS) API, a function of Cisco IM&P, is right for this sort of software. In my expertise as a former developer assist engineer, I seen many builders don’t fairly perceive methods to use PWS correctly. I hope that by the point you’re performed studying this, you’ll have a great grasp of every part concerned in making PWS give you the results you want.

Right here’s a condensed breakdown of the steps:

  1. Log in an software consumer with app username and password
    a. This operation returns the appliance consumer session key
  2. Use the appliance consumer session key to log in an finish consumer
    a. This operation returns an finish consumer session key
  3. Create an internet service to deal with presence notifications
    a. Run this internet service to hear on a typical port, e.g., 8080
  4. Use the appliance consumer session key to register the URL of your internet service as an endpoint
    a. This returns an endpoint ID
  5. Use the tip consumer session key to subscribe to a number of finish consumer contacts
    a. This returns a subscription ID
  6. Create a script to fetch the subscribed presence, utilizing the subscription ID
    a. For instance,

In steps 1 and a pair of, there’s a selection referred to as “power=”. If you happen to set “power=true”, the server will return a brand new session key each time. I like to recommend you utilize “power=false”, in order that it retains re-using the identical session key. This covers a mess of programming sins.

In Step 3, you will need to use a typical port, like 80, 82, 8080, and so on. In case your internet service relies on Python and you utilize the Flask library, the default port for Flask is 5000, which is not going to work. It’s essential to inform flask to make use of one of many widespread ports, as an alternative.

After you have accomplished steps 1 by way of 5, any change within the presence of the contacts in your step 5 subscription will set off a REST GET operation on the endpoint. The GET will go two parameters: The subscription id which ought to at all times be 1 with these scripts, and etype, which ought to at all times be “PRESENCE_NOTIFICATION”.

Your software ought to then use the subscription ID to fetch all of the presence modifications for that subscription. The API for that’s getSubscribedPresence. The script that invokes getSubscribedPresence is, coincidentally,

The pattern scripts use REST, however you may also use SOAP.

No problemo!

A standard downside happens once you run your endpoint after a contact’s presence already modified. The server will ship a presence notification to the endpoint, however the endpoint isn’t operating, in order that notification by no means will get to the endpoint, and the endpoint doesn’t fetch the subscribed presence info. This can be a downside as a result of, if for any motive you don’t fetch the presence values on that subscription, the server will cease sending future notifications till you do.

So, the script you create in Step 6 is a fail-safe. Suppose a contact, Carlotta Tendant, switches from AVAILABLE to AWAY. The server will notify the net service on the endpoint URL {that a} change in presence occurred. In case your endpoint isn’t lively, or it doesn’t decide up the notification and fetch the presence info, the server will cease sending presence notifications till you fetch that presence info.

You will need to know that the presence notification doesn’t ship any contact info or the truth that Carlotta is now AWAY; it simply notifies the net service {that a} presence has modified for a number of contacts for that subscription. Your internet service should fetch the details about the contact and the contact’s presence.

To keep away from the potential for missed notifications, run the script as soon as every part is ready up and prepared and your endpoint is operating. This grabs the knowledge for the customers and their presence, and thus clears the queue for the server to ship new presence notifications.

There may be one more reason the net service might not obtain a notification. If the Cisco IM&P server CPU utilization reaches 80% or increased, the server stops sending notifications till the CPU utilization drops under 80%. Right here’s methods to compensate for that chance. Write your app to carry out a get subscribed presence at an interval of each 10 minutes (or whichever appears greatest), simply to be sure that if, for any motive, your software didn’t act on a presence notification, the queue will clear, and notifications will proceed.


WARNING: Don’t use my pattern scripts on a manufacturing server. These are for tutorial functions solely.

My pattern scripts are as follows:

And there are some knowledge recordsdata the script makes use of to get details about the server, the host for the endpoint, app consumer, finish consumer, and the contacts on your presence subscription.

serverparams.json (factors to your Cisco IM&P server and the host IP deal with for the endpoint)

appuser.json (has the appliance username and password)

enduser.json (has the tip consumer identify. You utilize the session key out of your software consumer login)

contacts.listing (the listing of contacts for which you’ll subscribe to get presence notifications)

Order Up

Right here’s the way you run the scripts, so as.

  1. python3
    1. This removes all endpoints and subscriptions so you can begin recent
  2. python3
    1. This units up the endpoint and subscribes to the presence of contacts in listing. It makes use of serverparams.json to determine your Cisco IM&P server and the IP deal with of the host the place your endpoint will run.
  3. python3
    1. That is the endpoint script. It makes use of the Flask Python library to work as an internet service.
    1. You run this after the endpoint internet service is up and operating. This clears out any pending subscription updates and notifications in order that the queue is empty and future notifications will work.

If you happen to have a look at the code within the pattern endpoint script, for the net service endpoint doesn’t embrace the code to fetch the subscription presence. I put all that into the script. My endpoint merely executes the script externally like so:

     "python3 "+id+" "+etype, shell=True)

The endpoint will know the worth of id and etype and go the values when it runs If you wish to run the script your self, nonetheless, you could go values on the command line, for instance:


You may also use RICH_PRESENCE as an alternative if that’s what you need. If you happen to’re performed every part accurately, the subscription id will at all times be 1, which is why you go the quantity 1 to the script on the command line.

The pattern script doesn’t do something with the presence info. It prints it to the console the place you run the endpoint internet service. Your software should carry out your wanted process, akin to updating a show of contacts and their presence.


We’d love to listen to what you assume. Ask a query or depart a remark under.
And keep linked with Cisco DevNet on social!

LinkedIn | Twitter @CiscoDevNet | Fb | YouTube Channel




Please enter your comment!
Please enter your name here