DEV Community

Cover image for 💬 Presence, Messaging, and Subscriptions - It's that SIMPLE
SIP GAMES
SIP GAMES

Posted on • Edited on

💬 Presence, Messaging, and Subscriptions - It's that SIMPLE

Our SIP journey has focused mostly on calls (INVITE, ACK, BYE, RTP…). But SIP is more than just voice.

SIP SIMPLE is an extension framework that enables instant messaging, presence, and event notifications over SIP. This article introduces SIP SIMPLE, explains why it was created, and walks through some example scenarios.


🧩 What is SIP SIMPLE?

SIP for Instant Messaging and Presence Leveraging Extensions (SIMPLE) is a set of SIP extensions defined by multiple RFCs.

It was designed to make SIP more than a “phone call protocol” — by adding:

  • Presence → Is a user available, busy, offline?
  • Subscriptions → Letting clients subscribe to events.
  • Messaging → Sending short instant messages over SIP.

🛠️ SIP Requests in SIMPLE

SIMPLE reuses existing SIP request methods and adds new ones:

  • SUBSCRIBE → Client subscribes to presence/events.
  • NOTIFY → Server notifies subscriber of updates (e.g., presence change).
  • MESSAGE → Instant messaging.
  • PUBLISH → User publishes their own presence state.

👀 Presence with SIMPLE

Presence is about letting others know your status.

Example flow:

Watcher (UA A).       Presence Server

 SUBSCRIBE (presence of B) -------->
 <--------------------------- 200 OK
 <--------------- NOTIFY (B=offline)
                 ...
 <---------------- NOTIFY (B=online)
Enter fullscreen mode Exit fullscreen mode
  • UA A (Watcher) sends SUBSCRIBE to the server for UA B’s presence.
  • The Presence Server responds with 200 OK and then NOTIFYs updates as B’s status changes.

SUBSCRIBE

SUBSCRIBE sip:bob@example.com SIP/2.0
From: sip:alice@example.com;tag=1111
To: sip:bob@example.com
Call-ID: pres-1234@example.com
CSeq: 1 SUBSCRIBE
Event: presence
Expires: 3600

NOTIFY

NOTIFY sip:alice@example.com SIP/2.0
From: sip:bob@example.com;tag=2222
To: sip:alice@example.com;tag=1111
Call-ID: pres-1234@example.com
CSeq: 2 NOTIFY
Event: presence
Subscription-State: active
Content-Type: application/pidf+xml

<presence entity="sip:bob@example.com">
 <tuple id="t1">
   <status>
     <basic>open</basic>
   </status>
 </tuple> >
</presence>


💬 Messaging with SIMPLE

SIP SIMPLE also defines MESSAGE, a lightweight request for sending instant messages.

Unlike MSRP (Message Session Relay Protocol, used for large chat/file sessions), MESSAGE is page-mode messaging — think SMS-like.

Example Flow

UA A                           UA B

 MESSAGE "Hi Bob!"  ------------->
 <------------------------- 200 OK

Enter fullscreen mode Exit fullscreen mode

MESSAGE

MESSAGE sip:bob@example.com SIP/2.0
From: sip:alice@example.com;tag=aaaa
To: sip:bob@example.com
Call-ID: msg-5555@example.com
CSeq: 1 MESSAGE
Content-Type: text/plain
Content-Length: 7

Hello!


📡 PUBLISH presence with SIMPLE

SIP PUBLISH is how a user tells the network “here’s my current status” — online, busy, or away.

  • Think of PUBLISH as posting a status update in SIP — presence servers read it, watchers get notified.

  • PUBLISH doesn’t go peer-to-peer; it’s a signal to the presence server, which relays the info.

  • Each PUBLISH comes with an Expires — like saying “I’m online for the next 30 mins unless I update.”

  • With PUBLISH, SIP users share context (chat-ready, in a call, do-not-disturb) across the network.

Example Flow

Presentity (UA B)          Presence Server

 PUBLISH (I'm online)   ---------------->
 <-------------------------------- 200 OK

          NOTIFY all subscribers
        ( Server tells watchers )
 <-------------------------------- NOTIFY

Enter fullscreen mode Exit fullscreen mode
  • PUBLISH sets the status.
  • The server distributes updates via NOTIFY to watchers.

PUBLISH

PUBLISH sip:presence.example.com SIP/2.0
Via: SIP/2.0/UDP alicepc.example.com;branch=z9hG4bK776sgdkse
Max-Forwards: 70
From: "Alice" <sip:alice@example.com>;tag=1928301774
To: <sip:alice@example.com>
Call-ID: a84b4c76e66710@alicepc.example.com
CSeq: 314159 PUBLISH
Contact: <sip:alice@alicepc.example.com>
Event: presence
Expires: 3600
Content-Type: application/pidf+xml
Content-Length: 178

<presence xmlns="urn:ietf:params:xml:ns:pidf"entity="sip:alice@example.com">
  <tuple id="t123">
    <status>
      <basic>open</basic>
    </status>
    <note>Available for chat</note>
  </tuple>
</presence>


⚔️ SIMPLE vs XMPP Presence

XMPP (Extensible Messaging and Presence Protocol) was designed from the ground up for chat and presence.

👉 dedicated protocol for messaging ecosystems.

SIP SIMPLE was created for environments that already used SIP, to avoid running a completely separate protocol for messaging/presence.

👉 extend what you already have in SIP networks.


Presence workflow comparison

+---------------------------+  +----------------------------+
|        SIP SIMPLE         |  |           XMPP             |
+---------------------------+  +----------------------------+
| UA A (Watcher)            |  | Client A                   |
|   SUBSCRIBE presence ---->|  |   <presence to="server">   |
|                           |  |--------------------------->|
| Presence Server           |  | XMPP Server                |
|   200 OK ---------------->|  |   Routes to B’s roster     |
|   NOTIFY (offline/online)>|  |   Broadcast presence       |
|                           |  |<---------------------------|
| UA A learns status        |  | Client B status to A       |
+---------------------------+  +----------------------------+

Enter fullscreen mode Exit fullscreen mode
  • SIMPLE → Presence is explicitly subscribed and managed with SUBSCRIBE/NOTIFY.
  • XMPP → Presence is broadcast automatically by the server when a client’s status changes.

🎬 Real-world SIMPLE scenario

Alice subscribes to Bob’s presence, learns when he comes online, and then sends him a message.

Alice (Watcher)            Presence Server                Bob (Presentity)
--------------------------------------------------------------------------
 SUBSCRIBE (presence of Bob) ------->
 <---------------------------- 200 OK
 <-------------- NOTIFY (Bob=offline)


                                     <------------------ PUBLISH (online)
                                     200 OK ---------------------------->
 <--------------- NOTIFY (Bob=online)

 MESSAGE "Hey Bob!" ---------------------------------------------------->
 <---------------------------------------------------------------- 200 OK

Enter fullscreen mode Exit fullscreen mode
  • Alice subscribes to Bob’s presence.
  • Initially, Bob is offline.
  • Later, Bob publishes “I’m online.”
  • The server notifies Alice that Bob is now online.
  • Alice sends a MESSAGE.

🏁 Wrap Up

SIP SIMPLE Request Messages

Request Purpose
SUBSCRIBE Ask to follow an event (e.g. presence)
NOTIFY Deliver updates to subscribers
MESSAGE Send a short IM
PUBLISH Publish own state (presence info)
  • SIP SIMPLE turns SIP into more than a voice protocol.
  • It enables presence, messaging, and subscriptions using standard SIP transactions.
  • SIMPLE shines in SIP-native environments but is less common than XMPP or modern WebRTC chat solutions.
  • SIMPLE builds on SIP’s event notification framework (RFC 3265).
  • Apart from presence, SUBSCRIBE/NOTIFY can track:
    • Message-summary → Voicemail indicators (MWI)
    • Conference state
    • Registration state

👉 Follow @sip_gamesto unlock the next level.

Top comments (0)