Notifications System - Requirements

Last modified by Vincent Massol on 2024/11/19 16:12

 XWiki
 Requirements
 Dropped
 
 

Description

We're going to need to revamp the notification system to make it more scalable. It will be useful both to improve existing features and to create a sound base for new features. This revamp should be based on activity stream instead of queries. This means that the system works in three phases:

1/ Users subscribe to channels 2/ Channels are recorded 3/ Channels are output in the desired format by the user

Available Channels

  • All the wikis in a XEM
  • All activity in the Wiki
  • All activity in a space
  • All activity of a list of chosen pages
  • All activity of a given user
  • All activity of a given user's friends (optional/future)
  • All activity in a tag (optional/future)
  • All activity in a search (optional/future)
  • All activity in a tag of XWiki Watch (optional/future)

Extensibility

  • Developers / admins should be able to create additional channels. Those new channels should be automatically detected and will have the same subscription and output options as existing channels
  • Example: the collection plugin provides new channels for Workpackages and Workpackage categories. Users can subscribe to either of those channels either by email or via RSS.

Subscription

  • From his Watch area the user can decide to receive notification for the whole XEM or the whole Wiki
  • From the Watch menu he can subscribe to the current space or page
  • From the tags page he can subscribe to a given tag

There can be multiple type of subscriptions using the same channel. The subscription system should be extensible. 

Based on the subscription configuration we get a list of channels a user is subscribed too.

Notification feed outputs

  • RSS 
  • Emails

Optionally the RSS and emails should provide nice display of differences for each update.

The RSS feeds can be broken down by subscription or maybe channels.

Implementation

There are two types of channels

Shared

The channel is created only once for all users and security is checked at RSS or emails generation time

Personal

The channel is personal and created when the update are happening. It is for use only by one person.

Example

Monitoring a whole wiki

1/ We record a channel per space 2/ One user subscribes to the whole wiki 3/ This means he monitors the channels corresponding to each space 4/ He can get an RSS feed by space or for his full subscription (the wiki) 5/ He will get an email showing him the results for the channels he is subscribed to (by space)

Monitoring a list of pages

Approach 1

In this approach we take a subset of prerecorded channels

1/ We record a channel per space (the page items are listed) 2/ One user subscribes to a list of pages 3/ He can get a RSS feed generated based on a match of the pages he subscribed to 4/ He can get an email showing the result by matching the pages he subscribed to

Approach 2

In this approach we create the user personal Watch channel

1/ The user configures his personal channel by setting a list of pages to monitor 2/ We record in this channel the modifications to the pages he subscribed to 3/ The user can get and RSS feed or email for his personal channel

Approach 2 has the benefit of simplifying the system (no sub query inside a channel)

Monitoring a list of tags

Approach 1

In this approach we create a channel per tag

Approach 2

In this approach we had the matching pages to the user's personal channel

Proposed Technical Architecture

ActivityStreams notifications

Activity are the streams which will store the information in the backend


    • XEM Activity Stream
    • Wiki Activity Stream
    • Tag Activity Stream (maybe)
    • Personal Activity Stream
    • Friends Activity Stream (maybe)

Subscriptions

Subscriptions are the way notifications are organized from a user point of view. We need to decide if subscriptions are grouped together or more segmented.

There can be the following subscription types

  • All wikis (xem)
  • All wiki (wiki:wikiname)
  • Wiki space (space:wikiname:space)
  • Page (page:wikiname:page)
  • Tag (tag:wikiname:tag)
  • Collection (collection:wikiname:collection)
  • Collection Category ( collectioncategory:wikiname:categoryname:categoryvalue)
  • Friends (friends)

Certain subscription types need particular channels to work.

A user can create multiple subscription which have a schedule. Subscription items can be grouped into subscription sections (for display)


 

Get Connected