GitHub - EasyAbp/NotificationService: An integrated user notification service Abp module, supporting email, SMS, PM, and more other methods. (original) (raw)
An integrated user notification service Abp module, supporting email, SMS, PM, and more other methods.
Installation
- Install the following NuGet packages. (see how)
- EasyAbp.NotificationService.Application
- EasyAbp.NotificationService.Application.Contracts
- EasyAbp.NotificationService.Domain
- EasyAbp.NotificationService.Domain.Shared
- EasyAbp.NotificationService.EntityFrameworkCore
- EasyAbp.NotificationService.HttpApi
- EasyAbp.NotificationService.HttpApi.Client
- (Optional) EasyAbp.NotificationService.MongoDB
- (Optional) EasyAbp.NotificationService.Web
- (Optional) EasyAbp.NotificationService.Provider.Mailing
- (Optional) EasyAbp.NotificationService.Provider.PrivateMessaging
- (Optional) EasyAbp.NotificationService.Provider.Sms
- (Optional) EasyAbp.NotificationService.Provider.WeChatOfficial
- Add
DependsOn(typeof(NotificationServiceXxxModule))attribute to configure the module dependencies. (see how) - Add
builder.ConfigureNotificationService();to theOnModelCreating()method in MyProjectMigrationsDbContext.cs. - Add EF Core migrations and update your database. See: ABP document.
Usage
You can create a notification using a notification factory or manually.
Create with Notification Factory
- Create a factory.
public class UserWelcomeNotificationFactory
: NotificationFactory<UserWelcomeNotificationDataModel, CreateSmsNotificationEto>, ITransientDependency
{
public override async Task CreateAsync(
UserWelcomeNotificationDataModel model, IEnumerable userIds)
{
var text = $"Hello, {model.UserName}, here is a gift card code for you: {model.GiftCardCode}";
return new CreateSmsNotificationEto(CurrentTenant.Id, userIds, text, new Dictionary<string, object>());
}
} - Use the factory to create a notification and publish it.
var eto = await userWelcomeNotificationFactory.CreateAsync(
model: new UserWelcomeNotificationDataModel(userData.UserName, giftCardCode),
userId: userData.Id
);
// use the distributed event bus to create notifications and send them in the background
await distributedEventBus.PublishAsync(eto);
// or use the integration service to create notifications and send them in the background
var notifications = await notificationIntegrationService.CreateAsync(eto);
// or use the integration service to create notifications and send it them immediately
var notifications = await notificationIntegrationService.QuickSendAsync(eto);
Create Manually
Publish the notification.
await distributedEventBus.PublishAsync( new CreateEmailNotificationEto(CurrentTenant.Id, userIds, subject, body));
Providers
- Mailing
- PrivateMessaging
- Sms
- WeChatOfficial
Q&A
How to Change User's Email Address and Phone Number Info Source
You can override the IdentityUserEmailAddressProvider and the IdentityUserPhoneNumberProvider.
How to Use a Dynamic Notification Content Template
You can use the ABP Text Templating feature, see the demo.
Road map
- Private messaging notification provider.
- WeChat official template message notification provider.
- WeChat mini-program subscribe message notification provider.
- Notification management UI.
