%ents; ]>
Chat Markers This specification describes a solution of marking the last received, read and acknowledged message in a chat. This XMPP Extension Protocol is copyright (c) 1999 - 2013 by the XMPP Standards Foundation (XSF). Permission is hereby granted, free of charge, to any person obtaining a copy of this specification (the "Specification"), to make use of the Specification without restriction, including without limitation the rights to implement the Specification in a software program, deploy the Specification in a network service, and copy, modify, merge, publish, translate, distribute, sublicense, or sell copies of the Specification, and to permit persons to whom the Specification is furnished to do so, subject to the condition that the foregoing copyright notice and this permission notice shall be included in all copies or substantial portions of the Specification. Unless separate permission is granted, modified works that are redistributed shall not contain misleading information regarding the authors, title, number, or publisher of the Specification, and shall not claim endorsement of the modified works by the authors, any organization or project to which the authors belong, or the XMPP Standards Foundation. ## NOTE WELL: This Specification is provided on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. In no event shall the XMPP Standards Foundation or the authors of this Specification be liable for any claim, damages, or other liability, whether in an action of contract, tort, or otherwise, arising from, out of, or in connection with the Specification or the implementation, deployment, or other use of the Specification. ## In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall the XMPP Standards Foundation or any author of this Specification be liable for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising out of the use or inability to use the Specification (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if the XMPP Standards Foundation or such author has been advised of the possibility of such damages. This XMPP Extension Protocol has been contributed in full conformance with the XSF's Intellectual Property Rights Policy (a copy of which may be found at <http://www.xmpp.org/extensions/ipr-policy.shtml> or obtained by writing to XSF, P.O. Box 1641, Denver, CO 80201 USA). xxxx ProtoXEP Standards Track Standards Council XMPP Core XEP-0001 Etc. NOT_YET_ASSIGNED Spencer MacDonald im@spencermacdonald.com im@spencermacdonald.com 0.0.2 2013-06-11 sdm

Change to a message based protocol.

0.0.1 2013-05-24 sdm

First draft.

The concept of delivery and read receipts has been popularised by other messaging services such as iMessage, Google Hangouts and Blackberry Messenger. These services provide a visual indication of when a message has been delivered to any of the recipients resources and (optionally) when it has been read. These visual indications (referred to herein as "Chat Markers") are synced between all of the sender's and recipient's resources automatically so the state of a chat is always consistent and if one of the resources is not connected it can fetch Chat Marker from the Message Archive.

&xep0184; currently provides delivery receipts on a per message basis, but it does not provide any mechanism for the user to indicate that they have read or acknowledged the message. As delivery receipts are sent on a per message basis it would require multiple messages to "sync" up delivery receipts between resources.

Moreover by using &xep0085; you could infer that a message has been read if the recipient becomes active at any point after the message has been delivered, but again it would require multiple messages to "sync" up chat states between resources.

This XEP outlines an efficient message based protocol to provide this functionally using Chat Markers.

The acronym "MUC" refers to Multi User Chat as defined in &xep0045;.

The term "active chat" refers to a chat that a user is currently active in.

This document addresses the following requirements:

  1. Enable a recipient to mark up to an individual message in a chat as received.
  2. Enable a recipient to mark up to an individual message in a chat as read.
  3. Enable a recipient to mark up to an individual message in a chat as acknowledged.
  4. Enable a entity to update and query Chat Markers regardless of the other entities presence.

Chat Markers use a dedicated protocol extension qualified by the 'urn:xmpp:chat-markers:tmp' namespace.

There are three allowable elements in this namespace (in order of significance):

The Chat Marker MAY have a 'stamp' which is the timestamp of the Chat Marker.

The Chat Marker MUST have an 'id' which is the 'id' of the message being marked.

A Chat Marker Indicates that all messages up to and including that message 'id' have been marked.

]]>

If the sender knows only the recipient's bare JID, it cannot cannot determine (via &xep0030; or &xep0115;) whether the intended recipient supports the Chat Markers protocol. In this case, the sender MAY send a chat marker.

If the sender knows a full JID for the recipient (e.g., via presence), it SHOULD attempt to determine (via service disco or entity capabilities) whether the client at that full JID supports the Chat Markers protocol before attempting to send a Chat Marker.

If the sender determines that the recipient's client does not support the Chat Markers protocol then it SHOULD NOT send Chat Markers.

If the sender determines that the recipient's client supports the Chat Markers protocol then it MAY send a Chat Marker to that full JID.

To prevent looping, an entity MUST NOT send a Chat Maker to mark up to a Chat Marker.

Clients SHOULD use &xep0280; to support multiple online resources.

Clients SHOULD use &xep0136; or &xep0313; to support offline updating of Chat Markers. Chat Markers SHOULD be archived, so they can be updated regardless of the recipients current presence.

All messages MUST have an 'id' to use Chat Markers.

Less Significant Chat Markers should only be sent if they are later than the more significant Chat Marker i.e. if a Message has been marked as read, a delivered Chat Marker should only be sent if it has a later timestamp than the read Chat Marker.

If a delivery receipt is sent to a resource that advertises support, then a delivery receipt MUST be sent if it is satisfies &xep0184;.

If a resource advertises both Chat Maker and Delivery Receipt support it SHOULD NOT request a receipt.

Chat Markers can be used alongside Chat States.

Clients MUST NEVER mark a message as acknowledged without any user interaction.

Since mobile devices often must pay for network traffic based on usage, you may wish not to enable Chat Marker Subscription.

If an entity supports the Chat Markers protocol, it MUST report that by including a &xep0030; feature of "urn:xmpp:chat-markers:tmp" in response to disco#info requests:

]]> ... ... ]]>

Support can also be determined via &xep0115;, a.k.a. "caps".

A user may not wish to disclose that they have received, read or acknowledge a message.

It is possible for a recipient to leak its presence when updating Chat Markers; therefore, a recipient SHOULD NOT return message delivery receipts to senders who are not otherwise authorized to view its presence.

This document requires no interaction with the Internet Assigned Numbers Authority (IANA).

This specification defines the following XML namespace:

  • 'urn:xmpp:chat-markers:tmp'
The protocol documented by this schema is defined in XEP-XXXX: http://xmpp.org/extensions/xep-XXXX.html ]]>