Notifications in ShipFast
ShipFast comes with built-in functionality for sending notifications in key user scenarios, helping to keep your users informed and engaged with your platform. Notifications are sent through email and can be easily customized to meet your branding and communication requirements.
1. Welcome Message on User Registration
When a user registers for the platform, ShipFast automatically sends a welcome message to notify them of their successful registration. This email serves as a confirmation of their account creation and provides an opportunity to establish initial engagement with the user.
How It Works
The welcome email is sent using the sendWelcomeNotification function, which is triggered by the Cloud Firestore Triggers onUserCreated. This trigger observes changes in the firestore users collection and executes the sendWelcomeNotification function whenever a new document is added to the collection (indicating a new user registration).
Below is the implementation of the sendWelcomeNotification function:
export const sendWelcomeNotification = async email => {
const { subject, html } = generateWelcomeEmailTemplate(email);
return sendEmail(email, subject, html);
};File Path: /functions/shared/services/mailgun.js
Template Generation
The sendWelcomeNotification function uses generateWelcomeEmailTemplate to create the email's subject and HTML body. This allows for dynamic content generation tailored to the user.
Sending the Email
Once the email content is generated, the sendEmail function is used to dispatch the message to the user's email address.
Customizing the Welcome Email
To customize the email template further, you can edit the generateWelcomeEmailTemplate function. Ensure that the email content reflects your platform's style and values for a seamless user experience.
2. Invitation to Join Organization
ShipFast includes functionality for inviting users to join an organization within the platform. When an organization administrator invites a member, an invitation notification is sent to the recipient’s email. This notification contains:
- A link to join the organization.
- Instructions on how to complete the registration or login process.
- Relevant information about the organization they are joining.
How It Works
The invitation process is managed by the sendMemberInvitation and sendAddMemberNotification functions. These functions handle email notifications based on the recipient's registration status:
- New Users: If the
user_organizationsdocument does not contain a value in theuserIdproperty, it means the user is not yet registered in the app. In this case, the system sends an invitation email using thesendMemberInvitationfunction. - Existing Users: If the
user_organizationsdocument contains a value in theuserIdproperty, it indicates the user is already registered. In this case, the system sends a notification email using thesendAddMemberNotificationfunction to inform them about the organization they are being added to.
Both functions are triggered by the Firestore Cloud Function onOrganizationMemberChange, which monitors changes to the user_organizations collection. Specifically, it is invoked when:
- A new document is added to the
user_organizationscollection. - The invitation status (
isInviteAccepted) or invitation URL (inviteUrl) in the document is updated.
Both functions are triggered by the Firestore Cloud Function onOrganizationMemberChange, which monitors changes to the user_organizations collection. Specifically, it is invoked when:
- A new document is added to the
user_organizationscollection. - The invitation status (
isInviteAccepted) or invitation URL (inviteUrl) in the document is updated.
Code Implementation
Below is the simplified implementation of the sendMemberInvitation function:
const sendMemberInvitation = async (
email,
invitationLink,
organizationName
) => {
const { subject, html } = generateInvitationTemplate(
invitationLink,
organizationName
);
return sendEmail(email, subject, html);
};File Path: /functions/shared/services/mailgun.js
Below is the simplified implementation of the sendAddMemberNotification function:
const sendAddMemberNotification = async (email, organizationName) => {
const { subject, html } =
generateAddMemberNotificationTemplate(organizationName);
return sendEmail(email, subject, html);
};File Path: /functions/shared/services/mailgun.js
- Parameters:
email: The recipient's email address.invitationLink: A dynamically generated URL for the recipient to accept the invitation (only used insendMemberInvitation).organizationName: The name of the organization the recipient is being invited to or added to.
Customizing the Email Templates
-
To customize the invitation email, edit the
generateInvitationTemplatefunction infunctions/services/templates/email.js. -
To customize the member notification email, edit the
generateAddMemberNotificationTemplatefunction in the same file.
These templates allow you to modify the subject, body, and design of the emails to align with your branding and desired messaging.
By following these guidelines, you can effectively manage and personalize invitations and notifications for your platform, ensuring a smooth onboarding experience for your users.
3. Plan Switching or Cancellation Notifications
ShipFast supports notifications to inform users when they switch or cancel their subscription plans. These notifications are essential for maintaining transparency and ensuring users are aware of changes to their accounts.
Types of Notifications
- Plan Change Notification: Sent when a user upgrades, downgrades, or switches to a different plan. Includes details of the new plan, such as its price and features.
- Cancellation Notification: Sent when a user cancels their subscription, providing details about the effective end date of their plan.
Implementation Details
The following functions are responsible for handling subscription-related notifications:
-
sendSubscriptionPlanSwitch
Sends notifications for plan upgrades, downgrades, or immediate/scheduled plan changes. -
sendSubscriptionCancellation
Sends notifications when a user cancels their subscription.
These functions are triggered by Cloud Firestore Triggers that monitor changes in the user's subscription plan (priceId) within the subscriptions collection. The triggers handle the following scenarios:
- First-time Paid Plan Subscription: Triggered when a user subscribes to a paid plan for the first time.
- Immediate Plan Change: Triggered when a user switches to a new plan immediately.
- Scheduled Plan Change: Triggered when a user schedules a plan change, such as downgrading at the end of the billing cycle.
- Cancellation: Triggered when a user cancels their subscription, effective at the end of the billing cycle.
Code Implementation
sendSubscriptionPlanSwitch Function
const sendSubscriptionPlanSwitch = async (
email,
oldPlan,
newPlan,
effectiveDate
) => {
const { subject, html } = generateSubscriptionPlanSwitchTemplate(
email,
oldPlan,
newPlan,
effectiveDate
);
return sendEmail(email, subject, html);
};File Path: /functions/shared/services/mailgun.js
Parameters:
email: Recipient's email address.oldPlan: The user's current subscription plan before the change.newPlan: The user's new subscription plan after the change.effectiveDate: Date when the new plan becomes effective.
sendSubscriptionCancellation Function
const sendSubscriptionCancellation = async (email, oldPlan, oldPlanEndDate) => {
const { subject, html } = generateSubscriptionCancellationTemplate(
email,
oldPlan,
oldPlanEndDate
);
return sendEmail(email, subject, html);
};File Path: /functions/shared/services/mailgun.js
Parameters:
email: Recipient's email address.oldPlan: The subscription plan being canceled.oldPlanEndDate: Date when the plan will officially end.
How It Works
-
Plan Change Notification:
- When the subscription plan (
priceId) in thesubscriptionsdocument is updated, the system determines if the change is immediate or scheduled. - For immediate changes, the
sendSubscriptionPlanSwitchfunction sends a notification with details of the new plan. - For scheduled changes, the notification includes the effective date of the plan change.
- When the subscription plan (
-
Cancellation Notification:
- If the user cancels their subscription, the
sendSubscriptionCancellationfunction is invoked. - The notification includes details of the canceled plan and the effective end date.
- If the user cancels their subscription, the
Customization
To customize the email templates:
- Plan Switch Notifications: Modify the
generateSubscriptionPlanSwitchTemplatefunction located infunctions/services/templates/email.js. - Cancellation Notifications: Modify the
generateSubscriptionCancellationTemplatefunction located in the same directory.