...
- How many messages should a user be allowed to send?
- 10/min? <<< Let's use this at the preliminary threshold. Shouldn't apply to Synapse admin's.
- 1/min?
- 1/sec?
- How many recipients can be sent to at once?
- 10?
- 50? <<< Let's use this at the preliminary threshold. Shouldn't apply to Synapse admin's.
- Infinite?
How should we configure Amazon SES? <<< What can be done using readily available SES tools, dashboards and/or alarms?
- Proposal:
- Reroute bounce and complaints to SNS
- Have a worker disable emails to hard-bounced recipients
- Also flip flags in settings for complaints
- Store the bounce/complaint in a blob
- Proposal:
- 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)
- Should some messages be stored as templates? <<< The template should be stored as a properties file. Each individual Message should be stored in its final form. This design choice would change for very very large notification message volumes.
- If we start sending out notifications about Entity changes and the like, most of the contents will be similar except for the ID and some small part of the message body. We could conceivably add a flag to the MessageToUser object that tells the client to fill in a messages according to some simple template. Then we could store the key-values of the template in a blob (perhaps following the same schema as StringAnnotations) along with the message.
- What options belong in the settings object? <<< Initially the only setting will be yes/no deliver as email
- Send email when...
- Update to a favorite-ed entity
- Team is messaged
- Message from user
- Admin sends mail to everyone
- Mark message as read if forwarded to email? <<< Yes, sure. Great idea.
- Send email when...
- When someone is added to a conversation, should they be allowed to see all previous messages within the conversation? Or should it be the client's job to forward each individual message to the person? <<< Yes, the new recipient could get the whole history of the conversation. Might be implemented by forwarding ALL the previous messages or might be implemented by concatenating all previous into one new message. I do think is lower priority.
- How should we tie Entities to users in terms of notifications?
- Ownership? << It might be this.
- Favorites? << It might be this.
- Permissions? << I don't think it's this.
- Something else? << It could be a completely new set of services, allowing users to enable/disable notification. (Could be initialized from Favorites and Owners.)
Objects
Name | DBO | Migration | DTO |
---|---|---|---|
(Immutable after creation) |
| Backup via ID Note: Etag is required because MessageStatus is mutable. | Interface
|
(Immutable after creation) |
| Secondary to MessageContent | Implements MessageContent
|
(Immutable after creation) |
| Secondary to MessageContent | |
|
| Secondary to MessageContent |
|
(Immutable after creation) |
| Secondary to MessageContent | Implements MessageContent
|
|
| TBD |
|
|
| TBD |
|
| Bundles the MessageToUser and Message Status | ||
|
|
...