SMS
Slik sender du SMS til brukere fra appen din.
Aktivere SMS-varsling i appen din
SMS-klienten er allerede registrert i appen. Du bruker den ved å ta inn grensesnittet ISmsNotificationClient i konstruktøren til klassen din.
Grensesnittet definerer en metode du bruker til å bestille en SMS-varsling fra Altinn Varslinger-API-et.
Kodeeksempel
Nedenfor ser du et eksempel der appen sender en SMS-varsling når brukeren har begynt å fylle ut skjemaet. Eksempelet bruker en prosess-hook som implementerer IOnTaskStartingHandler.
Prosessen kan kjøre hooken på nytt hvis den feiler. Bestill derfor SMS-en som det siste hooken gjør, slik at et nytt forsøk ikke sender den samme SMS-en to ganger.
using System.Threading.Tasks;
using Altinn.App.Core.Features;
using Altinn.App.Core.Features.Process;
using Altinn.App.Core.Models.Notifications.Sms;
using Microsoft.Extensions.Logging;
namespace Altinn.App;
public class SmsOnStart(ILogger<SmsOnStart> logger, ISmsNotificationClient smsNotificationClient)
: IOnTaskStartingHandler
{
// "Task_1" er id-en til skjemasteget i BPMN-prosessen
public bool ShouldRunForTask(string taskId) => taskId == "Task_1";
public async Task<HandlerResult> Execute(OnTaskStartingContext context)
{
var order = new SmsNotification
{
SenderNumber = "<sender>",
Body = "Du har startet innfylling av skjema",
SendersReference = "<min-skjema-ref>",
Recipients = [new("0047XXXXXXXX")],
};
try
{
var orderResult = await smsNotificationClient.Order(order, context.CancellationToken);
logger.LogInformation(
"Task started, SMS sent to {MobileNumber} - OrderId={OrderId}",
order.Recipients[0].MobileNumber,
orderResult.OrderId
);
}
catch (SmsNotificationException e)
{
// Prosessen går videre selv om SMS-en ikke ble sendt
logger.LogError(e, "Error sending SMS on task start");
}
return HandlerResult.Success();
}
}
I eksempelet går prosessen videre selv om bestillingen feiler. Skal prosessen heller vente og prøve på nytt, returnerer du HandlerResult.FailedRetryable("melding") i catch-blokken. Da venter prosessen til bestillingen lykkes, og den stopper hvis alle forsøkene feiler.
Deretter må du registrere klassen SmsOnStart som IOnTaskStartingHandler i Program.cs.
App/Program.csusing Altinn.App;
using Altinn.App.Core.Features.Process;
void RegisterCustomAppServices(IServiceCollection services, IConfiguration config, IWebHostEnvironment env)
{
services.AddTransient<IOnTaskStartingHandler, SmsOnStart>();
}