wiki:BluePrint/Messaging

Version 161 (modified by Fran Boon, 11 years ago) ( diff )

--

Blueprint for the Messaging Framework

Current Status

See DeveloperGuidelines/Messaging

See also UserGuidelines/Messaging

Core Architecture

See BluePrint/Messaging/DataModel

Also see BluePrint/Messaging/Old

Parser

See BluePrint/Messaging/Parser

Channels

APRS

We would like to be able to connect to the Automatic Packet Reporting System used by Amateur Radio networks:

CAP

See the CAP Broker BluePrint

Email

The email settings should be made web-configurable as part of the Messaging Module

  • however also need to be used by Auth (order issues)

Rich Text

We'd like to be able to send HTML mails for rich-text support (including attachments) This requires the use of smtplib to send MIME-encoded files:

SMS

Support both online gateways (such as Clickatell, AWS SES or SMPP-compatible) & local hardware such as:

The SMS Handler Daemon to handle Inbound messages is a separate Python script.

  • Routes incoming message according to whether it's using specialist micro-syntax (e.g. submitting an XForm to another controller)
  • Non-XForms messages get sent to the Ticketing module's Master Message Log
  • Tagged messages also get Routed to the appropriate area (Project / Location / Organisation)

It can distinguish between simple messages (added to the Inbox of the Messaging Module) & those which are encoded in Binary XML (the output of XForms from the J2ME client).

Implementation details are here:

We use Cron to check Outbox & signal the daemon to send Pending messages (as for email)

SMS alerts (security alerts more common than natural disasters):

  • Being able to trigger an SMS alert broadcast upon reception of an SMS
    • Is this just an XForm to a Group? (Can we pre-populate the XForm to do this whenever a certain number is called or just a single word routes here?)

SMS login / data entry / reports

Would be good to add an LCR (Least-Cost Routing engine) for SMS deliveries (so that e.g. local messages routed via modem, but International via Gateway).

Toolkits we can base on:

Hardware compatibility databases:

SMPP

Twitter

Adding support for sending out/receiving alerts via Twitter & mining a hashtag for potential value:

  • store tweets from 1 or more hastags e.g. #eqnz #canterburyquake to build up a local repo of all relevant tweets
  • be able to reply/retweet to these messages e.g. provide an official response
  • provide analytics on things like - who are the most active users and retweeters e.g. which to target for sending out messages and who is most likely to retweet
  • if possible try and cluster similar/identical tweets to reduce the amount of noise - making it faster and simpler to monitor what is going on. As well as automatic clustering, it would be nice to provide users the ability to manually drag a tweet to an existing cluster so that it is removed from the master timeline (so as to simplify the timeline viewed by the user)
  • be able to link tickets/actions to specific tweet
  • it should be possible to automatically load a hashtag that is included in all outgoing messages e.g. we would have setup #eqnz to be included in all outgoing tweets. this may change during the event e.g. the Ministry of Civil Defence Emergency Management started with #CanterburyQuake but this was soon shortened and overtaken by #eqnz as being shorter and more useable.

ToDo

  • msg.send_tweet_by_pe_id using tweepy
    • Usecases:
      • User subscribes to notifications via Twitter
      • We send out alerts to a Hashtag
  • Process Inbound messages to (one of) the Sahana instance's Twitter IDs
    • Generic messages for the InBox
    • Structured message meant for an application (create a new record or update an existing one)
  • Hashtag Harvesting: A User wants to search public hashtag(s) for tweets of interest
    1. User has a UI to create a filter of which hashtags (& keywords?) they're interested in
    2. A real-time view is returned of the Tweets which match the filter (probably using JSON)
      • # of matches
      • 1st 10(-50?) records are browseable to see what they look like
    3. If there are too many/insufficient matches then user may refine the search & repeat until they're happy
    4. User saves the query to a msg_twitter_search table 5.
      • Option A: A single table for all queries' search results is created
      • Option B: A Table is created to hold the results of the search for each record in this search table (similar to the survey module's instances)
    5. Cron queries Twitter & adds new records to the table as they are found
    6. When user opens the search results table, they can route messages to applications, e.g.
      • 'This is a Request'
      • 'This is an Assessment'
      • 'This is a Shelter'

XForms

We have controllers/xforms.py to generate XForms automatically out of Sahana models.

These can be used by the Mobile clients for data collection.

This can be used to create OCR-able Printed Forms.

XMPP

Instant Messaging & Presence including GoogleTalk:

Alternate implementations

Use Cases

Security Management

  • Allow users to subscribe for SMS security alerts
    • Ideally allow subscription via SMS too (with optional confirmation by admin staff)
  • Allow security staff to broadcast security alerts by sending the alert to a single number & have it propagate on
    • Security for this managed by either pre-registering their numbers as valid or by logging-in 1st
    • End-users should be able to report back their status via SMS
    • Security staff should receive a report via SMS of who hasn't reported in (ideally with last known Location).

Volunteer Management

  • Allow team leaders to be able to send messages to their team members.
  • Allow team members to select which communications means (Email/SMS/Twitter) to use for both normal & priority messages.

http://www.ch16.org/reports/

  • Allow users to submit reports via SMS/Email/Twitter/iPadio.
  • Allow users to subscribe to updates via SMS/Email/RSS.

Attachments (1)

Download all attachments as: .zip

Note: See TracWiki for help on using the wiki.