Messaging
Customize messaging
It is possible to trigger SMS
or EMAIL
notification for various operation performed. Notification are
are added to the work queue for processing, By default Email notification is triggered by the engine to
the following operations.
- User Enrollment
- User email verification
- Order delivery
- Order confirmation
- Order rejection
- Quotation status change
You can override the default template and/or add your own email/SMS notification. In order to add a
custom EMAIL
or SMS
notification you must create a function that implement the
TemplateResolver and register
the template the
IMessagingDirector. After
that you only need to add work in the queue with the corresponding type(EMAIL/SMS) with template name you
want to use and any required dynamic data required in the template.
Bellow is an example of a simple error notification email message configuration setup, that will send an automated email to support team when a user encounter error during some action.
Implement TemplateResolver
const ERROR_EMAIL_TEMPLATE = `
{userName} encountered {error} in {resolverName}
`
const errorReported: TemplateResolver = async (
{ userId, emailSubject, error, resolverName },
context
) => {
const { modules } = context;
const user = await modules.users.findUserById(userId);
const text = mustache.render(ERROR_EMAIL_TEMPLATE, {
userName: `${user.profile?.address?.firstName} ${user.profile?.address?.lastName}`
error,
resolverName,
}, undefined, { escape: (t) => t }); // No escape, it's a text mail
return [
{
type: "EMAIL",
retries: 0,
input: {
from: user.contact.emailAddress,
to: "support@dshop.local",
replyTo: user.contact.emailAddress,
subject: emailSubject || 'Error occurred',
text,
},
},
];
};
Register email template into Messaging director
import { MessagingDirector } from '@unchainedshop/core';
MessagingDirector.registerTemplate('ERROR_REPORT', errorReported);
Trigger message
Triggering the message is done by adding a work in the work queue and is treated like any other work, you
simple specify the work type as MESSAGE
and the template you want to use for the message as input to
the work.
const someResolver = async (root, params, context: AppContext) => {
const { modules, userId, countryContext } = context;
await modules.worker.addWork(
{
type: "MESSAGE",
retries: 0,
input: {
template: "ERROR_REPORT",
userId,
error: 'Required more information',
resolverName: 'someResolver'
...params,
},
},
);
return true;
};
If you want to override the existing template with your own custom template, follow the steps above and register the template using the same name as the message type you want to override. Look into MessageTypes definition to see all the built in message template name used in the engine.