From df557a3390205740851d0f7df50139f44962a4ed Mon Sep 17 00:00:00 2001 From: Ahmet Date: Wed, 7 Apr 2021 18:49:58 +0300 Subject: [PATCH 1/3] Prepare SMS-Sending documentation --- docs/en/SMS-Sending.md | 98 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 96 insertions(+), 2 deletions(-) diff --git a/docs/en/SMS-Sending.md b/docs/en/SMS-Sending.md index 75069aacbe..8d5cd8da1e 100644 --- a/docs/en/SMS-Sending.md +++ b/docs/en/SMS-Sending.md @@ -1,3 +1,97 @@ -# 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 **easily integrate** to your favorite SMS sender with a few lines of configuration. +- 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..." // SMS text + ); + } + } +} +``` + +The given `SendAsync` method in the example is an extension method to send sms with primitive paremeters, it basicly creates `SmsMessage` object and pass it. You can also use the default `SendAsync` method which requires `SmsMessage` object. + +> `IEmailSender` is the suggested way to send emails, since it makes your code provider independent. + +## SmsMessage + +In addition to use primitive parameters, you can pass a `SmsMessage` object to the `SendAsync` method. + +- `PhoneNumber` (string): Target phone number to send sms. +- `Text` (string): SMS Text +- `Properties` (Dictionary): string key-value pair to handle different usages by senders. + +## NullSmsSender + +`NullSmsSender` is a built-in class that implements the `ISmsSender`, but writes sms contents to the [standard log system](Logging.md), rathen than actually sending the SMSs. + +This class can be useful especially in development time where you generally don't want to send real sms. +`NullSmsSender` will try to register itself automatically if there is no other registrated sms sender. + +## See also + +- [Twilio SMS Sender](https://docs.abp.io/en/commercial/latest/modules/twilio-sms) with [ABP Commercial](https://commercial.abp.io/). From e6c88b6eafb6eb9f566dfd88323c422d692ccafd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ahmet=20=C3=87otur?= Date: Thu, 8 Apr 2021 10:28:06 +0300 Subject: [PATCH 2/3] Update docs/en/SMS-Sending.md Co-authored-by: Qingxiao Ren --- docs/en/SMS-Sending.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/SMS-Sending.md b/docs/en/SMS-Sending.md index 8d5cd8da1e..9ee5b06d00 100644 --- a/docs/en/SMS-Sending.md +++ b/docs/en/SMS-Sending.md @@ -75,7 +75,7 @@ namespace MyProject The given `SendAsync` method in the example is an extension method to send sms with primitive paremeters, it basicly creates `SmsMessage` object and pass it. You can also use the default `SendAsync` method which requires `SmsMessage` object. -> `IEmailSender` is the suggested way to send emails, since it makes your code provider independent. +> `ISmsSender` is the suggested way to send SMS, since it makes your code provider independent. ## SmsMessage From 5e328bb9d2020d02157a316b5b878492c220bff1 Mon Sep 17 00:00:00 2001 From: Ahmet Date: Thu, 8 Apr 2021 11:07:27 +0300 Subject: [PATCH 3/3] Update SMS-Sending.md --- docs/en/SMS-Sending.md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/docs/en/SMS-Sending.md b/docs/en/SMS-Sending.md index 9ee5b06d00..7662a8a465 100644 --- a/docs/en/SMS-Sending.md +++ b/docs/en/SMS-Sending.md @@ -92,6 +92,30 @@ In addition to use primitive parameters, you can pass a `SmsMessage` object to t This class can be useful especially in development time where you generally don't want to send real sms. `NullSmsSender` will try to register itself automatically if there is no other registrated sms sender. +## Creating a custom SMS sender + +You can easily create your custom provider by creating a class that implements the `ISmsSender` interface. + +```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 + } + } +} +``` + +That's all. Now you can send SMS by using `MyCustomSmsSender` in your application. + ## See also - [Twilio SMS Sender](https://docs.abp.io/en/commercial/latest/modules/twilio-sms) with [ABP Commercial](https://commercial.abp.io/).