Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  •  Throttle message input 
    • Max 10 creations per minute
    • Max 50 recipients
  •  When adding a new person to a conversation, the new person should get the whole history of the conversation
    • Might be implemented by forwarding ALL the previous messages 
    • OR by concatenating all previous into one new message
  •  

    Configure Amazon SES

    • Automated proposal:
      • Reroute bounce and complaints to SNS
      • Have a worker subscribe to the topic via SQS
      • Have a worker disable emails to hard-bounced recipients
      • The worker may email a Google Group to notify us of anything it cannot handle
      • Also flip flags in settings for complaints
      • Store the bounce/complaint in a blob (question)
  •  Should users be notified of bounces? <<< Yes, and (1) this is a special case of 'notification', i.e. a Message triggered by a Synapse event, (2) perhaps user can configure email receipt to avoid excessive email from notifications (or other sources) Add methods to send messages according to templates
    • Each individual Message should be stored in its final form.  
    • This design choice would change for very very large notification message volumes.
    • Templates:
      •  Password reset
      •  Welcome
      •  Entity shared
      •  Entity changed
      •  TBD
      

...

Message sender (worker)

  •  Extend ObjectType to include a "MESSAGE" type
  •  Have DBOMessage extend ObservableEntity
  •  Send a change message when a message is created
  •  Subscribe worker to the repo-changes topic
  •  Look for MESSAGE-CREATED changes to process
  •  The worker should always check to see if a message has already been sent, so that messages do not get resent every time the stack changes.
  •  A message has been sent if there is a recipient.  The worker is in charge of making sure all sent messages have at least one recipient.  In the case where a user sends a message to multiple recipients, all of which are not visible to the user, then the worker should bounce the message back to the user, along with a bounce message.  This ensures the message has a row in the MessageStatus table.  Whenever the message sending worker encounters an error:
    •  Send the sender of the message a notification with the summary of delivery failures
    •  Add CloudWatch metrics to count delivery failures
    •  If the message cannot be sent to anyone, mark the sender as the receiver of the message so that it doesn't get reprocessed (i.e. after migration)
  •  Process change of other ObjectTypes (i.e. ENTITY) for notifications
    •  Needs additional state: either a link between ObjectID/Type and messageContent or ObjectID/Type and UserID

...

MethodURIBodyParametersReturnDescriptionPermission
  •  POST
/messageMessageToUser MessageToUserSends a message.  Note, message delivery permission is on a recipient-by-recipient basis, asynchronous to the message creation.  Unauthorized delivery may result in silent failure or a bounce message (TBD).

Authenticated User

 

Must be admin to send to AUTH_USERS

Must have SEND_MESSAGE permission on team to send to team

  •  GET
/message/inbox 

Sorting + pagination

Paginated results<MessageBundle>Gets all messages the authenticated user has receivedAuthenticated User
  •  GET
/message/outbox 

Sorting + pagination

Paginated results<MessageToUser>Gets all messages the authenticated user has sentAuthenticated User
  •  GET
/message/{id}  MessageToUserGets a specific messageSender or Receiver
  •  POST
/message/{id}/forwardMessageRecipientSet MessageToUserForwards a message to other recipients. This is equivalent to getting a (visible) message and POST-ing it to /message with a different set of recipientsSender or Receiver
  •  GET
/message/{id}/conversation 

Sorting + pagination

Paginated results<MessageToUser>Gets messages belonging in the same thread as the message ID.  The list is filtered according to the user's ID.Sender or Receiver
  •  POST
/message/{id}/conversation/forwardMessageRecipientSet  

Adds the set of recipients to the conversation by marking each recipient as a receiver of each message within the conversation.

Should each recipient be sent the messages (i.e. via email)?

Or should a notification be sent instead?

Sender or Receiver
  •  PUT
/message/statusMessageStatus  

Marks a message as:

  • READ
  • UNREAD
  • ARCHIVED
Receiver
  •  POST
/entity/{id}/messageMessageToUser MessageToUser

Sends a message to the creator or administrator of the given entity. This allows users to ask for permission to see restricted entities.

Added per

Jira Legacy
serverJIRA (sagebionetworks.jira.com)
columnskey,summary,type,created,updated,due,assignee,reporter,priority,status,resolution
serverIdba6fb084-9827-3160-8067-8ac7470f78b2
keySWC-1070

Authenticated user
  •  POST
/entity/{id}/commentComment CommentMethod for commenting on an entity.

Authenticated user with SEND_MESSAGE permission on entity

  •  GET
/entity/{id}/comment 

Sorting + pagination

Paginated results<Comment>Gets messages belonging to the thread tied to the entity.Authenticated user with READ permission on entity