Presence of thoughts
Jabber is so final many years. Webex and its competitors are the most effective fashionable technique of messaging. However Cisco IM&P, a companion server to Cisco Name Supervisor, continues to be one of the simplest ways to subscribe to person presence updates.
Suppose you’ve a bunch of staff to whom you assign duties as they arrive in. For those who can watch the presence of that group, you’ll know who is out there, who’s away, who’s on the cellphone, and many others. You may construct an utility that mechanically assigns duties in accordance with the presence of the customers.
The Presence Internet Companies (PWS) API, a function of Cisco IM&P, is right for this type of utility. In my expertise as a former developer assist engineer, I observed many builders don’t fairly perceive tips on how to use PWS correctly. I hope that by the point you’re completed studying this, you’ll have an excellent grasp of the whole lot concerned in making PWS give you the results you want.
Right here’s a condensed breakdown of the steps:
- Log in an utility person with app username and password
a. This operation returns the applying person session key - Use the applying person session key to log in an finish person
a. This operation returns an finish person session key - Create an online service to deal with presence notifications
a. Run this net service to hear on a typical port, e.g., 8080 - Use the applying person session key to register the URL of your net service as an endpoint
a. This returns an endpoint ID - Use the top person session key to subscribe to a number of finish person contacts
a. This returns a subscription ID - Create a script to fetch the subscribed presence, utilizing the subscription ID
a. For instance, get_subscribed_presence.py
In steps 1 and a couple of, there’s a selection referred to as “drive=”. For those who set “drive=true”, the server will return a brand new session key each time. I like to recommend you employ “drive=false”, in order that it retains re-using the identical session key. This covers a large number of programming sins.
In Step 3, you will need to use a typical port, like 80, 82, 8080, and many others. In case your net service relies on Python and you employ the Flask library, the default port for Flask is 5000, which is not going to work. You have to inform flask to make use of one of many widespread ports, as a substitute.
Upon getting accomplished steps 1 by 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 cross 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 utility ought to then use the subscription ID to fetch all of the presence adjustments for that subscription. The API for that’s getSubscribedPresence. The script that invokes getSubscribedPresence is, coincidentally, get_subscribed_presence.py.
The pattern scripts use REST, however you may also use SOAP.
No problemo!
A typical drawback happens whenever 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 data. This can be a drawback as a result of, if for any purpose 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 choose up the notification and fetch the presence data, the server will cease sending presence notifications till you fetch that presence data.
It is very important know that the presence notification doesn’t ship any contact data 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 net service should fetch the details about the contact and the contact’s presence.
To keep away from the potential for missed notifications, run the get_subscribed_presence.py script as soon as the whole lot 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 another excuse the net service could not obtain a notification. If the Cisco IM&P server CPU utilization reaches 80% or larger, the server stops sending notifications till the CPU utilization drops under 80%. Right here’s tips on how 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 finest), simply to be sure that if, for any purpose, your utility didn’t act on a presence notification, the queue will clear, and notifications will proceed.
Scripts
WARNING: Don’t use my pattern scripts on a manufacturing server. These are for tutorial functions solely.
My pattern scripts are as follows:
pws-create.py
pws-delete.py
endpoint.py
get_subscribed_presence.py
And there are some knowledge information the script makes use of to get details about the server, the host for the endpoint, app person, finish person, and the contacts in your presence subscription.
serverparams.json (factors to your Cisco IM&P server and the host IP tackle for the endpoint)
appuser.json (has the applying username and password)
enduser.json (has the top person title. You employ the session key out of your utility person login)
contacts.checklist (the checklist of contacts for which you’ll subscribe to get presence notifications)
Order Up
Right here’s the way you run the scripts, so as.
- python3 pws-delete.py
- This removes all endpoints and subscriptions so you can begin recent
- python3 pws-create.py
- This units up the endpoint and subscribes to the presence of contacts in checklist. It makes use of serverparams.json to establish your Cisco IM&P server and the IP tackle of the host the place your endpoint will run.
- python3 endpoint.py
- That is the endpoint script. It makes use of the Flask Python library to work as an online service.
- python3 get_subscribed_presence.py 1 BASIC_PRESENCE (or RICH_PRESENCE)
- You run this after the endpoint net 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.
For those who have a look at the code within the pattern endpoint script, for the net service endpoint doesn’t embody the code to fetch the subscription presence. I put all that into the get_subscribed_presence.py script. My endpoint merely executes the script externally like so:
subprocess.run("python3 get_subscribed_presence.py "+id+" "+etype, shell=True) The endpoint will know the worth of id and etype and cross the values when it runs get_subscribed_presence.py. If you wish to run the script your self, nevertheless, it's good to cross values on the command line, for instance:
python3 get_subscribed_presence.py 1 BASIC_PRESENCE
It’s also possible to use RICH_PRESENCE as a substitute if that’s what you need. For those who’re completed the whole lot accurately, the subscription id will at all times be 1, which is why you cross the quantity 1 to the script on the command line.
The pattern script doesn’t do something with the presence data. It prints it to the console the place you run the endpoint net service. Your utility should carry out your wanted job, corresponding to updating a show of contacts and their presence.
Sources
We’d love to listen to what you assume. Ask a query or go away a remark under.
And keep related with Cisco DevNet on social!
LinkedIn | Twitter @CiscoDevNet | Fb | YouTube Channel
Share: