Archive for March 2008

Avaya Intelligent Presence Server Incorporates Jabber XCP Software

Monday, March 17, 2008 by Dave Uhlir

This is big news; for Jabber, Avaya, our customers and everyone who is interested in presence and presence-enabling applications.

Here is an example use case of the technology in this announcement: imagine that your best friend at work has one XMPP device and one SIP device, both of which are online, publishing presence. When you subscribe to her with either protocol, you will see an aggregated view of her presence, including the presence all of her devices.

This is a unique solution providing aggregated presence for SIP/SIMPLE, XMPP and other protocols. Don’t confuse presence aggregation with federation. Aggregation collects presence information within a system, where it can be processed, filtered and published. Federation allows two or more systems to publish and subscribe to each others’ presence. Presence aggregation, particularly in multi-protocol, high-scale systems, is a much harder challenge than federation. Working together, Avaya and Jabber have met this challenge.

This announcement is another example of how presence is essential for unified communications, collaboration applications and real-time services. It also is proof positive of the fact that presence is useful for much more than instant messaging. In contrast to conceptual discussions on this blog discussing the types of applications driving demand for presence software and the critical requirements of presence platforms, this announcement is concrete - a real solution for real-world, real-time applications.

Participating in this solution has been of great value to Jabber in enhancing our multi-protocol technology and organizational knowledge. SIP is well established, particularly for applications incorporating digital telephony. Use of XMPP is growing rapidly the consumer, enterprise and government markets, with new presence-enabled applications and services based on the protocol being announced/uncovered on a weekly basis (read the hot scoop on new XMPP activities and applications here).

In case it isn’t clear, the value of presence is driven by Metcalfe’s Law. As more presence-enabled nodes (people, apps, devices, etc.) are added to a network, the value of the presence information grows exponentially. As there are several presence protocols, the only credible presence servers are those that are multi-protocol. It was challenging for Jabber, Inc. to become a multi-protocol presence server, but just being a presence server that only supports one protocol doesn’t cut it anymore.

Priority -1 Presence

Tuesday, March 11, 2008 by Joe Hildebrand

Pedro Melo is wondering about negative presence priority:

But there are some road blocks ahead. The first one is that most clients out there don’t deal properly with negative priorities. If a buddy of mine only has negative priorities, my IM client must show him as offline. Most clients right now, don’t do that.
[Negative priority]

I agree with Pedro that it’s not clear how clients should render negative-priorty presence. This post outlines one possible approach. Just so that we have some concrete protocol to discuss, consider a PBX that injects the following presence on your behalf:

<presence from=joe@example.com/phone>
  <priority>-1</priority>
  <status>On the phone</status>
  <show>away</show>
  <c xmlns=http://jabber.org/protocol/caps
     hash=sha-1
     node=http://jabber.com/bots/pbx
     ver=PwgGa/jZx9sUeueZsjT/xBlJfqo=/>
  <reach xmlns=http://jabber.org/protocol/reach>
    <addr uri=tel:+1-303-555-1212/>
    <addr uri=sip:joe@example.com/>
  </reach>
</presence>

Let’s step through this bit by bit.

  • Priority: -1, obviously, since that’s what we’re here to talk about. We would rather have messages be sent offline than come to this resource. It’s never the most available resource for this user.
  • Status: We’re off-hook.
  • Show: use the away icon. Which actual image should we show, though?
  • Entity capabilities: a pointer to information about the software that sent the presence. The node URI is a semantically-relevant descriptor of the client, and the ver attribute is a hash of the features and other information about that client.
  • Reach: how else can this device be reached? In this case, a POTS phone number and a SIP URI. This namespace is from the deferred XEP-0152, and is just here to give a little more flavor to the presence.

Assume that this is the only presence for this user at the moment. Now, imagine the client of a subscriber to this person, with a user interface that looks something like this:

Negative Priority UI

This person is seeing me as offline for IM, and my phone is off-hook. There is an image for each of my negative-priority resources; presumably when I mouse over the image, something interesting will pop up, like “On the phone”. If I click on the image, I might be given options like “Call”, which could use the tel: URI in the reach section. One potential issue is what to do if there are too many negative-priority resources - that’s something for the UI designers to deal with, though.

But, how do we actually decide what image to show? There are several ways:

  1. Hard-code a mapping between the (caps node, show) pair to a resource in the subscriber’s client. This would work, but is obviously limited for the future.
  2. Hard-code a mapping between the (caps identity, show) pair of the device and a resource in the subscriber’s client. This is similarly limited.
  3. Do an IQ to the publisher to ask what it’s current image is. With this one it’s hard to know when to cache, so scalability suffers.
  4. Use one of the avatar XEPs (like 0153), and include an image reference in the presence. This doesn’t work because the avatar is for the identity of the person sending the presence, not for the software or device.
  5. Create a new namespace that has a URL for the current presence icon. This would work just fine, and normal web caching would get us everything we need. It would increase the size of every presence stanza, though.
  6. Add a couple of new fields to the XEP-0232 software information that comes along with the caps. There would be a field for each presence state that you care about, where the value of that field is a URL to an image.

This last approach is obviously the one I favor. The caps result would look like this:

<iq from=joe@example.com/phone
    to=subscriber@example.com/work
    id=disco1
    type=result>
  <query xmlns=http://jabber.org/protocol/disco#info
         node=http://jabber.com/bots/pbx#PwgGa/jZx9sUeueZsjT/xBlJfqo=>
    <identity category=client type=bot name=PBX/>
    <x xmlns=jabber:x:data type=result>
      <field var=FORM_TYPE type=hidden>
        <value>urn:xmpp:dataforms:softwareinfo</value>
      </field>
      <field var=icon>
        <value>http://jabber.com/pbx.png</value>
      </field>
      <field var=icon_available>
        <value>http://jabber.org/pbx_available.png</value>
      </field>
      <field var=icon_away>
        <value>http://jabber.org/pbx_away.png</value>
      </field>
    </x>
  </query>
</iq>

In this case, there is a general-purpose icon field, and then one icon_[show] field for each show that we will be sending. Whenever the subscriber gets a new negative-priority presence update, it looks in its caps cache, pulls out the field for the appropriate show, and pulls the image URL through an HTTP client that does caching (or does it’s own manual image caching). The image is scaled into the desired size, and displayed in the user interface. If these fields are added to XEP-0232, we should probably specify a desired image size, like 128×128 pixels.

We have started to see our customers and partners send negative presence, and are feeling the pain of client UI that doesn’t know how to deal with it. The first step for us is to figure out the correct protocol to deal with the UI issues. We’ll push this into MomentIM as soon after that as release cycles allow.