0
0
Lập trình
Admin Team
Admin Teamtechmely

SIP SIMPLE: Nhắn tin, hiện diện và đăng ký dễ dàng

Đăng vào 1 ngày trước

• 7 phút đọc

Giới thiệu về SIP SIMPLE

Trong hành trình sử dụng SIP, chúng ta thường tập trung vào các cuộc gọi (như INVITE, ACK, BYE, RTP...). Nhưng SIP không chỉ đơn thuần là giao thức gọi điện thoại.

SIP SIMPLE là một framework mở rộng cho phép thực hiện nhắn tin tức thời, hiện diện và thông báo sự kiện thông qua SIP. Bài viết này sẽ giới thiệu về SIP SIMPLE, lý do ra đời của nó và hướng dẫn một số tình huống ví dụ.

SIP SIMPLE là gì?

SIP for Instant Messaging and Presence Leveraging Extensions (SIMPLE) là một tập hợp các mở rộng SIP được định nghĩa bởi nhiều RFC.

Mục tiêu của SIMPLE là biến SIP thành một giao thức không chỉ dành cho cuộc gọi điện thoại bằng cách thêm các tính năng sau:

  • Hiện diện → Cho biết người dùng có đang có mặt, bận hay ngoại tuyến.
  • Đăng ký → Cho phép client đăng ký nhận thông báo về các sự kiện.
  • Nhắn tin → Gửi các tin nhắn ngắn tức thời qua SIP.

Các yêu cầu SIP trong SIMPLE

SIMPLE tái sử dụng các phương thức yêu cầu SIP hiện có và bổ sung thêm một số phương thức mới:

  • SUBSCRIBE → Client đăng ký nhận thông tin về hiện diện/sự kiện.
  • NOTIFY → Server thông báo cho người đăng ký về các cập nhật (ví dụ: thay đổi trạng thái hiện diện).
  • MESSAGE → Nhắn tin tức thời.
  • PUBLISH → Người dùng công bố trạng thái hiện diện của mình.

Hiện diện với SIMPLE

Hiện diện là việc cho phép người khác biết trạng thái của bạn.

Ví dụ về luồng hiện diện:

Copy
Watcher (UA A).       Presence Server

 SUBSCRIBE (presence of B) -------->
 <--------------------------- 200 OK
 <--------------- NOTIFY (B=offline)
                 ...
 <---------------- NOTIFY (B=online)
  • UA A (Watcher) gửi SUBSCRIBE đến server để nhận thông tin về hiện diện của UA B.
  • Server hiện diện phản hồi với 200 OK và sau đó NOTIFY các cập nhật khi trạng thái của B thay đổi.

Ví dụ yêu cầu SUBSCRIBE

Copy
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

Ví dụ yêu cầu NOTIFY

Copy
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>

Nhắn tin với SIMPLE

SIP SIMPLE cũng định nghĩa MESSAGE, một yêu cầu nhẹ để gửi các tin nhắn tức thời.

Khác với MSRP (Message Session Relay Protocol, được sử dụng cho các phiên chat/tệp lớn), MESSAGE là nhắn tin theo chế độ trang — giống như SMS.

Ví dụ luồng nhắn tin

Copy
UA A                           UA B

 MESSAGE "Chào Bob!"  ------------->
 <------------------------- 200 OK

Ví dụ yêu cầu MESSAGE

Copy
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
>
> Chào bạn!

Công bố hiện diện với SIMPLE

SIP PUBLISH là cách mà người dùng thông báo cho mạng “đây là trạng thái hiện tại của tôi” — trực tuyến, bận hoặc đi vắng.

  • Hãy nghĩ về PUBLISH như việc đăng một cập nhật trạng thái trong SIP — các server hiện diện sẽ đọc nó và các watcher sẽ nhận thông báo.
  • PUBLISH không đi từ người dùng này đến người dùng khác; nó là tín hiệu gửi đến server hiện diện, nơi sẽ chuyển tiếp thông tin.
  • Mỗi PUBLISH kèm theo một thời gian hết hạn — giống như nói “Tôi đang trực tuyến trong 30 phút tới trừ khi tôi cập nhật.”
  • Với PUBLISH, người dùng SIP chia sẻ ngữ cảnh (sẵn sàng chat, đang trong cuộc gọi, không làm phiền) qua mạng.

Ví dụ luồng công bố hiện diện

Copy
Presentity (UA B)          Presence Server

 PUBLISH (Tôi đang trực tuyến)   ---------------->
 <-------------------------------- 200 OK

          NOTIFY tất cả người đăng ký
        ( Server thông báo cho các watcher )
 <-------------------------------- NOTIFY

Ví dụ yêu cầu PUBLISH

Copy
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>Sẵn sàng chat</note>  
> </tuple>  
> </presence>

So sánh SIMPLE với XMPP

XMPP (Extensible Messaging and Presence Protocol) được thiết kế từ đầu cho chat và hiện diện.

👉 Giao thức chuyên dụng cho các hệ sinh thái nhắn tin.

SIP SIMPLE được tạo ra cho các môi trường đã sử dụng SIP, để tránh việc phải chạy một giao thức hoàn toàn riêng biệt cho nhắn tin/hiện diện.

👉 Mở rộng những gì bạn đã có trong các mạng SIP.

So sánh luồng hiện diện

Copy
+---------------------------+  +----------------------------+
|        SIP SIMPLE         |  |           XMPP             |
+---------------------------+  +----------------------------+
| UA A (Watcher)            |  | Client A                   |
|   SUBSCRIBE presence ---->|  |   <presence to="server">   |
|                           |  |--------------------------->|
| Presence Server           |  | XMPP Server                |
|   200 OK ---------------->|  |   Chuyển tiếp đến danh bạ của B|
|   NOTIFY (offline/online)>|  |   Phát hiện hiện diện       |
|                           |  |<---------------------------|
| UA A biết trạng thái      |  | Client B trạng thái đến A   |
+---------------------------+  +----------------------------+
  • SIMPLE → Hiện diện được quản lý rõ ràng và đăng ký với SUBSCRIBE/NOTIFY.
  • XMPP → Hiện diện được phát tự động bởi server khi trạng thái của client thay đổi.

Tình huống thực tế với SIMPLE

Alice đăng ký nhận thông tin hiện diện của Bob, biết khi nào Bob trực tuyến, và sau đó gửi cho anh ta một tin nhắn.

Copy
Alice (Watcher)            Presence Server                Bob (Presentity)
--------------------------------------------------------------------------
 SUBSCRIBE (hiện diện của Bob) ------->
 <---------------------------- 200 OK
 <-------------- NOTIFY (Bob=offline)


                                     <------------------ PUBLISH (trực tuyến)
                                     200 OK ---------------------------->
 <--------------- NOTIFY (Bob=online)

 MESSAGE "Chào Bob!" ---------------------------------------------------->
 <---------------------------------------------------------------- 200 OK
  • Alice đăng ký nhận thông tin hiện diện của Bob.
  • Ban đầu, Bob ngoại tuyến.
  • Sau đó, Bob công bố “Tôi đang trực tuyến.”
  • Server thông báo cho Alice rằng Bob giờ đã trực tuyến.
  • Alice gửi một MESSAGE.

Kết luận

Các yêu cầu tin nhắn SIP SIMPLE

Yêu cầu Mục đích
SUBSCRIBE Yêu cầu theo dõi một sự kiện (ví dụ: hiện diện)
NOTIFY Gửi cập nhật đến người đăng ký
MESSAGE Gửi một tin nhắn ngắn
PUBLISH Công bố trạng thái của bản thân (thông tin hiện diện)
  • SIP SIMPLE biến SIP thành một giao thức không chỉ cho giọng nói.
  • Nó cho phép hiện diện, nhắn tin và đăng ký thông qua các giao dịch SIP tiêu chuẩn.
  • SIMPLE nổi bật trong các môi trường sử dụng SIP nhưng ít phổ biến hơn so với XMPP hoặc các giải pháp chat WebRTC hiện đại.
  • SIMPLE xây dựng trên framework thông báo sự kiện của SIP (RFC 3265).
  • Ngoài hiện diện, SUBSCRIBE/NOTIFY có thể theo dõi:
    • Tóm tắt tin nhắn → Các chỉ báo hộp thư thoại (MWI)
    • Trạng thái hội nghị
    • Trạng thái đăng ký

👉 Theo dõi @sip_gamesto để mở khóa cấp độ tiếp theo.

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào