The goal of this change is to reduce the amount of messages users are getting by default.
Desire is to change the default system behavior so that the ‘default’ for a user is to get fewer messages.
This page describes the design for supporting notification consolidation for the notification service. It is an output of the .
consolidation logic lays within notification service
the feature can be fairly easy reused by other client services
pretty straightforward when implementing simple, non-dynamic messages like
There are 5 requisitions waiting for your approval, click below to approve them.
https://test.openlmis.org/#!/requisitions/approvalList
implementing more sophisticated(more dynamic) notifications, like below, will increase the complexity greatly by introducing message parameters and/or callbacks to the client service (most likely both)
There are 5 requisitions waiting for your approval:
Requisition at XYZ for XYZ program
https://test.openlmis.org/#!/requisition/requisition-1-id/fullSupply
Requisition at YZX for YZG program
https://test.openlmis.org/#!/requisition/requisition-2-id/fullSupply
Requisition at ZYX for ZYX program
https://test.openlmis.org/#!/requisition/requisition-3-id/fullSupply
Requisition at YXZ for YXZ program
https://test.openlmis.org/#!/requisition/requisition-4-id/fullSupply
Requisition at ZXY for ZXY program
https://test.openlmis.org/#!/requisition/requisition-5-id/fullSupply
This new addition to the notification class would let us group notification together to be sent as a single, consolidated message later.
Digest configuration will define how messages can be consolidated. The idea here is to let each of the services define possible ruling for the message digest. Each configuration will contain the following fields:
This entity would let each of the user to decide whether or not they would like to use each of the digest configurations.
Below is the activity diagram describing how notification would deal with digesting notifications and sending them daily. It is split into 4 workflows (from left to right):
With this approach, we're not implementing message consolidation in a way that we decide to either receive the consolidated message or individual messages. It lets the user decide on a per message-type basis which of them they want to receive.
The main focus here is on adding the ability to opt out of specific message types individually. On top of that, we would add new message types (that would serve as the consolidated messages) would be added to each of the services (requisition being the first one).
Example:
We have 2 message types: REQUISITION_APPROVAL and REQUISITION_APPROVAL_SUMMARY.
The first one is the notification we currently have implemented that informs the recipient about a specific requisition being approved.
The second one is a new notification type that sends a notification daily informing the recipient how many requisitions have been approved.
With this approach, the user can decide to opt into one, both or none message types so they can receive information for each requisition individually, a daily summary, both or none.
Class describing a single notification type. It is registered by each of the client services on startup.
Notification is extended with a single field called notification type, it is used by the notification service to define whether the message should be sent or not.
This class is extended by the list of notification that the related user want to be opted out.