Sist endret: 29. okt. 2026
Preview: Dette er dokumentasjonen for Altinn Studio v9, som er en forhåndsversjon. Gjeldende versjon er v8. For å se dokumentasjonen for gjeldende versjon, velg v8 i versjonsvelgeren i menyen til venstre.

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.cs
using Altinn.App;
using Altinn.App.Core.Features.Process;

void RegisterCustomAppServices(IServiceCollection services, IConfiguration config, IWebHostEnvironment env)
{
    services.AddTransient<IOnTaskStartingHandler, SmsOnStart>();
}