diff --git a/docs/en/SMS-Sending.md b/docs/en/SMS-Sending.md index 75069aacbe..99d06fa903 100644 --- a/docs/en/SMS-Sending.md +++ b/docs/en/SMS-Sending.md @@ -1,3 +1,111 @@ -# Emailing +# SMS Sending -TODO! \ No newline at end of file +The ABP Framework provides an abstraction to sending SMS. Having such an abstraction has some benefits; + +- You can then **easily change** your SMS sender without changing your application code. +- If you want to create **reusable application modules**, you don't need to make assumption about how the SMS are sent. + +## Installation + +It is suggested to use the [ABP CLI](CLI.md) to install this package. + +### Using the ABP CLI + +Open a command line window in the folder of the project (.csproj file) and type the following command: + +```bash +abp add-package Volo.Abp.Sms +``` + +### Manual Installation + +If you want to manually install; + +1. Add the [Volo.Abp.Sms](https://www.nuget.org/packages/Volo.Abp.Sms) NuGet package to your project: + +``` +Install-Package Volo.Abp.Sms +``` + +2. Add the `AbpSmsModule` to the dependency list of your module: + +```csharp +[DependsOn( + //...other dependencies + typeof(AbpSmsModule) //Add the new module dependency + )] +public class YourModule : AbpModule +{ +} +``` + +## Sending SMS + +[Inject](Dependency-Injection.md) the `ISmsSender` into any service and use the `SendAsync` method to send a SMS. + +**Example:** + +```csharp +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Sms; + +namespace MyProject +{ + public class MyService : ITransientDependency + { + private readonly ISmsSender _smsSender; + + public MyService(ISmsSender smsSender) + { + _smsSender = smsSender; + } + + public async Task DoItAsync() + { + await _smsSender.SendAsync( + "+012345678901", // target phone number + "This is test sms..." // message text + ); + } + } +} +``` + +The given `SendAsync` method in the example is an extension method to send an SMS with primitive parameters. In addition, you can pass an `SmsMessage` object which has the following properties: + +- `PhoneNumber` (`string`): Target phone number +- `Text` (`string`): Message text +- `Properties` (`Dictionary`): Key-value pairs to pass custom arguments + +## NullSmsSender + +`NullSmsSender` is a the default implementation of the `ISmsSender`. It writes SMS content to the [standard logler](Logging.md), rather than actually sending the SMS. + +This class can be useful especially in development time where you generally don't want to send real SMS. **However, if you want to actually send SMS, you should implement the `IsSmsSender` in your application code.** + +## Implementing the ISmsSender + +You can easily create your SMS sending implementation by creating a class that implements the `ISmsSender` interface, as shown below: + +```csharp +using System.IO; +using System.Threading.Tasks; +using Volo.Abp.Sms; +using Volo.Abp.DependencyInjection; + +namespace AbpDemo +{ + public class MyCustomSmsSender : ISmsSender, ITransientDependency + { + public async Task SendAsync(SmsMessage smsMessage) + { + // Send sms + } + } +} +``` + +## More + +[ABP Commercial](https://commercial.abp.io/) provides Twilio integration package to send SMS over [Twilio service](https://docs.abp.io/en/commercial/latest/modules/twilio-sms). \ No newline at end of file diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index 32e62eccbe..5e0f0b469a 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -285,6 +285,10 @@ } ] }, + { + "text": "SMS Sending", + "path": "SMS-Sending.md" + }, { "text": "Event Bus", "items": [