Skip to content
Beng (Hippware) edited this page Aug 3, 2015 · 4 revisions

Preamble

Some of the terms in this document are borrowed from the XMPP protocol or an extension.

Description

There are several ways to think of what a channel is.

A channel is a "groupware" entity that allows a set of users to interact and share content with each other.

A channel is a stream of content, activities and notifications (generated by the members of the channel).

A channel is a set of users, a set of beacons, and a set of notes. A channel provides a context for the interactions between, and within, these sets.

Users have great flexibility in how they use channels. The functionality of a channel is intentionally generic so users can adapt them to their own habits and usage patterns.

Beacons

Beacons are geographical locations or points of interest which can be associated with a channel. Used to associate location with activities or content. Can be none, one or many.

Content

Users are able to post content to a channel which will be available to all members of a channel. Content is divided into two levels as posts and comments.

A post is a stand-alone piece of content. It may also be thought of as "top-level" content. A post may be text and one of an image, audio or video.

A comment is a piece of text and represents commentary on a "parent" post. Comments are text only and does not include image, audio or video.

Notifications

Notifications can be generated. For example: a new post is made, a user joins or leaves a channel, a user enters/lingers/exits a beacon of the channel, a beacon is associated/de-associated with the channel.

Visibility

A channel's visibility can be public or private.

A public channel is discoverable by anyone and anyone can join.

A private channel is not discoverable. It is visible only to existing members. Becoming a member is invite-only or requires approval.

(ToDo: Consider allowing private channels to be discoverable in some scenarios. Less compute-intensive.)

Local

"Local" is the concept that channel participation is restricted to users in a vicinity or vicinities.

(ToDo: Consider a more meaningful and intuitive term than "local")

If a channel is local, only users who are in the proximity of a specially configured beacon (or beacons) are allowed to participate. "Participate" in this context means posting content but could be expanded to include other actions in the future.

This property does not affect visibility or view access. It only affects participation.

Moderation (deferred)

At some time in the future, channels will require optional moderation ability.

The owner of a channel will have the ability to designate arbitrary users as channel moderators.

There are two moderation models under consideration.

Moderating content

In this model, moderators moderate content.

  • Moderators have the ability to delete any posts.
  • The channel may be configured such that all posts by unprivileged members require approval before being published. Privileged users (ie. moderators and the owner) are under no such restriction.

(Suggested terms: "Curated" channel, "Curation moderation")

Moderating users

In this model, moderators moderate users.

  • Moderators have the ability to delete any posts.
  • The channel may be configured such that unprivileged members are not permitted to post. Privileged users (ie. moderators and the owner) are under no such restriction.
  • Moderators (and the owner) may give "voice" to arbitrary members. Members "with voice" are permitted to post.

(Suggested terms: "Whitelist" channel, "Whitelist moderation")

Banning users

In both moderation models, channel owners and moderators can ban arbitrary users from a channel.

Affiliations

This is a table of the possible channel affiliations and the actions permitted for each affiliation.

Permission Owner Moderator Member None Outcast
Public channel
Discover channel
Subscribe
Private channel
Discover channel
Apply for subscription
Common
View content
Post content ?
Delete own content
Delete any content
Moderate
Configure channel
Delete channel
Transfer ownership

Note: This has incomplete support for moderation as moderation is deferred.

Discover channel means that the channel name appears in browsable lists or search results. Only a limited set of information is exposed during discovery.

Moderate is an umbrella term for the privileged actions that moderators can take. This set of actions is not finalised but could include things like: approve subscriptions, assign affiliations, ban users etc.

(ToDo: Insert a "Follower" column)

User settings

This is a list of user settings for per channel.

Subscription

The relationship between a user and a channel is termed a subscription. A subscription may have the following states:

  • None: There is no relationship between the user and the channel. This is the default.
  • Pending: The user has applied for a subscription and the request has not yet been approved by the channel owner or moderator.
  • Subscribed: The user is subscribed to the channel and is allowed to view content ie. affiliation "Member" (or above).

Follow

This is a boolean setting which the user can enable to indicate they have an active interest in the channel.

Mute / Disable

mute is a boolean setting which lets the user temporarily suspend their subscription to the channel. (Needs more thought)

disable is a boolean setting which allows the channel owner to temporarily disable the channel. (Needs more thought)

Proximity sharing

These settings are related to member-to-member proximity sharing ie. detecting when two members of the same channel are in proximity to each other. For this to happen, both members must opt into proximity sharing with the same channel.

(Needs more thought)

Proximity share enable

If enabled, the channel is allowed to use the user's location in order to calculate proximity to other members.

Proximity alert enable

If enabled, when a co-proximity event is detected, the user is notified. (This could be a device-level setting)

Fields

TBD

Protocol

Namespaces

hippware.com/hxep/channel
hippware.com/hxep/errors

Get simple information

To retrieve simple information about a channel, send an <iq type='get'><get> element specifying the channel as a node.

<iq type='get'
    from='user@server.xmpp.domain.com/device'
    to='server2.xmpp.domain.com'
    id='123'>
    <get xmlns='hippware.com/hxep/channel'
        node='channel/123e4567-e89b-12d3-a456-426655440000'>
    </get>
</iq>

If successful, this will return single-valued scalar fields and meta-fields of the channel.

<iq type='result'
    from='server2.xmpp.domain.com'
    to='user@server.xmpp.domain.com/device'
    id='123'>
    <channel xmlns='hippware.com/hxep/channel'
        node='channel/123e4567-e89b-12d3-a456-426655440000'>
        <field id='jid' type='jid' 
            value='server2.xmpp.domain.com/channel/123e4567-e89b-12d3-a456-426655440000'/>
        <field id='title' type='string' value='My channel'/>
        <field id='shortname' type='string' value='mychan'/>
        <field id='owner' type='jid' value='user@server.xmpp.domain.com'/>
        <field id='description' type='string' value='This is my channel'/>
        <field id='visibility' type='int' value='0'/>
        <field id='local' type='int' value='0'/>
        <field id='created' type='int' value='143000000'/>

        <field id='image+version' type='string' value='...'/>
        <field id='subscribers+version' type='string' value='...'/>
        <field id='subscribers+size' type='int' value='...'/>
        <field id='followers+version' type='string' value='...'/>
        <field id='followers+size' type='int' value='...'/>
        <field id='moderators+version' type='string' value='...'/>
        <field id='moderators+size' type='int' value='...'/>
        <field id='outcasts+version' type='string' value='...'/>
        <field id='outcasts+size' type='int' value='...'/>
        <field id='beacons+version' type='string' value='...'/>
        <field id='beacons+size' type='int' value='...'/>
    </channel>
</iq>

If any fields are restricted and should be withheld from the requesting entity or user, they do not appear in the <channel> element.

Error cases

Forbidden

The requesting entity does not have sufficient privileges to retreive information about a channel.

<iq type='error'
    from='server2.xmpp.domain.com'
    to='user@server.xmpp.domain.com/device'
    id='123'>
    <error type='auth'>
        <forbidden xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>
    </error>
</iq>

Item not found

The channel does not exist.

This error may also occur if the channel is a private channel and the requesting entity is not a subscriber.

<iq type='error'
    from='server2.xmpp.domain.com'
    to='user@server.xmpp.domain.com/device'
    id='123'>
    <error type='cancel'>
       <item-not-found xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>
    </error>
</iq>

Get a single field

To retrieve a single field of a channel, specify the field with a <field> element.

<iq type='get'
    from='user@server.xmpp.domain.com/device'
    to='server2.xmpp.domain.com'
    id='123'>
    <get xmlns='hippware.com/hxep/channel'
        node='channel/123e4567-e89b-12d3-a456-426655440000'>
        <field id='title'/>
    </get>
</iq>

This will return a single field.

<iq type='result'
    from='server2.xmpp.domain.com'
    to='user@server.xmpp.domain.com/device'
    id='123'>
    <channel xmlns='hippware.com/hxep/channel'
        node='channel/123e4567-e89b-12d3-a456-426655440000'>
        <field id='title' type='string' value='My channel'/>
    </channel>
</iq>

Error cases

Forbidden

See the corresponding section in Get simple information.

This error may also occur if the requesting entity has sufficient privileges to retrieve simple information about the channel, but has insufficient privileges to retrieve the requested field.

Item not found

See the corresponding section in "Get simple information".