Auf Englisch lesen

Teilen über


Senden von kürzeren Links per SMS mit Azure Communication Services

SMS-Nachrichten sind auf 160 Zeichen beschränkt, wodurch die Möglichkeit zum Senden von URLs an Kunden eingeschränkt ist. URLs können den Grenzwert von 160 Zeichen überschreiten, da sie Abfrageparameter, verschlüsselte Informationen usw. enthalten. Mit der Azure-URL-Verkürzung können Sie kurze URLs generieren, die zum Senden per SMS geeignet sind, da sie deutlich weniger als 160 Zeichen umfassen. 

In diesem Dokument wird der Prozess der Integration von Azure Communication Services mit der Azure-URL-Verkürzung beschrieben, einem Open Source-Dienst, mit dem Sie ganz einfach verkürzte Links erstellen, verwalten und überwachen können.

Beispielcode

Den vollständigen Code für dieses Tutorial finden Sie auf GitHub.

Voraussetzungen

Übersicht über die Architektur

In diesem Tutorial liegt der Fokus auf der Einrichtung einer Middleware, die Anforderungen zum Senden von SMS und die Verkürzung von URLs über den Azure-URL-Verkürzungsdienst orchestriert. Sie interagiert mit Azure Communication Services, um den Versand der SMS abzuschließen.

Diagram for architecture overview.

Einrichten der Azure-Funktion

Für den Einstieg müssen Sie eine neue Azure-Funktion erstellen. Sie können die Azure-Funktion erstellen, indem Sie die Schritte in der Azure Functions-Dokumentation ausführen. Wenn Sie keine Azure-Funktion sondern stattdessen ein anderes Framework verwenden, überspringen Sie diesen Schritt, und fahren Sie mit dem nächsten Abschnitt fort.

Sobald die Azure-Funktion eingerichtet ist, wechseln Sie zur Datei „local.settings.json“, und fügen Sie drei weitere Werte hinzu, die Sie speichern müssen: die Azure Communication Services-Verbindungszeichenfolge, die Telefonnummer (z. B. +15555555555) und den URL-Verkürzungsendpunkt (z. B. https://<Azure_Function_URL>/api/UrlCreate). Diese Variablen sind alle Werte, die Sie aus den Voraussetzungen am Anfang des Dokuments generiert haben.


{
    "IsEncrypted": false,
    "Values": {
    "AzureWebJobsStorage": "",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet",
    "ACS_CONNECTIONSTRING": "<AZURE COMMUNICATION SERVICES CONNECTION STRING>",
    "ACS_PHONE_NUMBER": "<AZURE COMMUNICATION SERVICES PHONE NUMBER>",
    "URL_SHORTENER": "<URL SHORTENER ENDPOINT>" 
    }
}

Konfigurieren der Abfrageparameter

Nachdem Sie die Azure-Funktion erstellt haben, müssen Sie die Abfrageparameter konfigurieren, die zum Auslösen erforderlich sind. Die Funktion erwartet eine Telefonnummer und eine URL. Die Telefonnummer wird als Empfänger der SMS-Nachricht verwendet. Die URL ist der Link, der gekürzt und an den Empfänger gesendet wird.


namespace Company.Function
{
    public static class SendSMSUrlShortener
    {
        [FunctionName("SendSMSUrlShortener")]
        public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");

            string phoneNumberTo = req.Query["phoneNumber"]; // get phone number query parameter
            string urlToShorten = req.Query["url"]; // get url to shorten query parameter

            return new OkObjectResult(null);
        }
    }
}

Kürzen der URL

Nachdem Sie nun über die Telefonnummer und die URL verfügen, können Sie den Azure-URL-Verkürzungsdienst verwenden, um die URL zu kürzen. Stellen Sie sicher, dass Sie diesen Dienst bereits bereitgestellt haben. Der Dienst enthält mehrere Endpunkte, aber in diesem Tutorial liegt der Fokus auf dem Endpunkt „UrlCreate“. Verwenden Sie die Methode „PostAsync“, um eine POST-Anforderung an den Azure-URL-Verkürzungsdienst mit der URL zu stellen, die Sie kürzen möchten. Der Dienst gibt ein JSON-Objekt mit der verkürzten URL zurück. Speichern Sie die verkürzte URL in einer Variablen namens „shortUrl“. Fügen Sie im Ausschnitt den Endpunkt Ihres bereitgestellten Azure-URL-Verkürzungsdiensts ein. Informationen zum Abrufen des Endpunkts finden Sie unter Überprüfen der Bereitstellung.

...
using System.Net.Http;
using System.Text.Json;
using System.Text;

namespace Company.Function
{
    public class ShortenedUrl
    {
        public string ShortUrl { get; set; }
    }

    public static class SendSMSUrlShortener
    {
        static string urlShortener = Environment.GetEnvironmentVariable("URL_SHORTENER", EnvironmentVariableTarget.Process);

        [FunctionName("SendSMSUrlShortener")]
        public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");

            //Parse Query Parameters
            string phoneNumberTo = req.Query["phoneNumber"]; // get phone number query parameter
            string urlToShorten = req.Query["url"]; // get url to shorten query parameter
            
            //Get short URL from Azure URL Shortener
            using var client = new HttpClient();
            var requestData = new
            {
                Url = urlToShorten //Body request for the POST call
            };
            var requestBody = JsonSerializer.Serialize(requestData);
            var httpContent = new StringContent(requestBody, Encoding.UTF8, "application/json");
            var response = await client.PostAsync(urlShortener, httpContent); // POST call to the Azure URL Shortener
            var content = await response.Content.ReadAsStringAsync();
            var data = System.Text.Json.JsonSerializer.Deserialize<ShortenedUrl>(content); // Parse content to ShortenedUrl object
            var url = data.ShortUrl;
            log.LogInformation("Shortened URL " + url);

            return new OkObjectResult(null);
        }
    }
}

Senden einer SMS

Nachdem die URL gekürzt wurde, können Sie Azure Communication Services verwenden, um die SMS zu senden. Verwenden Sie die Methode „send“ aus der Klasse „SmsClient“ des Pakets „Azure.Communication.Sms“.


dotnet add package Azure.Communication.Sms

Diese Methode sendet die SMS an die Telefonnummer, die in den Abfrageparametern angegeben ist. Die SMS enthält die verkürzte URL. Weitere Informationen zum Senden von SMS finden Sie unter Senden von SMS.

...
using Azure;
using Azure.Communication;
using Azure.Communication.Sms;

namespace Company.Function
{
    // Class to deserialize URL Shortener response
    public class ShortenedUrl
    {
        public string ShortUrl { get; set; }
    }

    public static class SendSMSUrlShortener
    {
        [FunctionName("SendSMSUrlShortener")]
        public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");
            
            //Parse Query Parameters
            string phoneNumberTo = req.Query["phoneNumber"]; // get phone number query parameter
            string urlToShorten = req.Query["url"]; // get url to shorten query parameter
            
            //Get short URL from Azure URL Shortener
            using var client = new HttpClient();
            var requestData = new
            {
                Url = urlToShorten //Body request for the POST call
            };
            var requestBody = JsonSerializer.Serialize(requestData);
            var httpContent = new StringContent(requestBody, Encoding.UTF8, "application/json");
            string urlShortener = Environment.GetEnvironmentVariable("URL_SHORTENER", EnvironmentVariableTarget.Process); // Ex. https://<Azure Function URL>/api/UrlCreate
            var response = await client.PostAsync(urlShortener, httpContent); // POST call to the Azure URL Shortener
            var content = await response.Content.ReadAsStringAsync();
            var data = System.Text.Json.JsonSerializer.Deserialize<ShortenedUrl>(content); // Parse content to ShortenedUrl object
            var url = data.ShortUrl;
            log.LogInformation("Shortened URL " + url);
            
            //Send SMS with Azure Communication Services
            string connectionString = Environment.GetEnvironmentVariable("ACS_CONNECTIONSTRING", EnvironmentVariableTarget.Process);
            string phoneNumberFrom = Environment.GetEnvironmentVariable("ACS_PHONE_NUMBER", EnvironmentVariableTarget.Process); // Ex. +15555555555
            SmsClient smsClient = new SmsClient(connectionString);            
            SmsSendResult sendResult = smsClient.Send(
                from: phoneNumberFrom,
                to: phoneNumberTo,
                message: "Here is your shortened URL: " + url
            ); // Send SMS message with shortened URL
            
            return new OkObjectResult(sendResult);
        }
    }
}

Lokales Testen

Hinweis

Sie müssen Ihre Telefonnummer überprüfen, damit SMS-Nachrichten mit URLs gesendet werden können. Sobald Ihre Überprüfungsanwendungen auf den Status „Ausstehend (1-2 Tage)“ festgelegt sind, wird die Telefonnummer zum Senden von URLs aktiviert. Die vollständige Überprüfung dauert 5-6 Wochen. Weitere Informationen zur Überprüfung gebührenfreier Nummern finden Sie unter Häufig gestellte Fragen zur gebührenfreien Überprüfung.

Sie können Ihre Azure-Funktion jetzt lokal ausführen, indem Sie in Visual Studio Code auf F5 klicken oder den folgenden Befehl im Terminal ausführen:


func host start

Anschließend können Sie mithilfe eines Tools wie Postman Ihre Funktion testen, indem Sie eine POST-Anforderung an den Endpunkt Ihrer Azure-Funktion senden. Sie müssen die Telefonnummer und die URL als Abfrageparameter angeben. Wenn Ihre Azure-Funktion beispielsweise lokal ausgeführt wird, können Sie eine Anforderung an http://localhost:7071/api/<FUNCTION NAME>?phoneNumber=%2B15555555555&url=https://www.microsoft.com senden. Sie sollten eine Antwort mit der verkürzten URL und dem Status von Success erhalten.

In Azure bereitstellen

Wenn Sie Ihre Azure-Funktion bereitstellen möchten, befolgen Sie die Schritt-für-Schritt-Anweisungen.

Nach der Bereitstellung können Sie über eine ähnliche Methode wie beim lokalen Testen auf die Funktion zugreifen. Sie müssen die Telefonnummer und die URL als Abfrageparameter angeben. Wenn Ihre Azure-Funktion beispielsweise in Azure bereitgestellt wurde, können Sie eine Anforderung an https://<YOUR AZURE FUNCTION NAME>.azurewebsites.net/api/<FUNCTION NAME>?phoneNumber=%2B15555555555&url=https://www.microsoft.com senden. Sie sollten eine Antwort mit der verkürzten URL und dem Status von Success erhalten.

Beispielcode

Den vollständigen Code für dieses Tutorial finden Sie auf GitHub.

Voraussetzungen

Übersicht über die Architektur

In diesem Tutorial liegt der Fokus auf der Einrichtung einer Middleware, die Anforderungen zum Senden von SMS und die Verkürzung von URLs über den Azure-URL-Verkürzungsdienst orchestriert. Sie interagiert mit Azure Communication Services, um den Versand der SMS abzuschließen.

Diagram for architecture overview.

Einrichten der Azure-Funktion

Für den Einstieg müssen Sie eine neue Azure-Funktion erstellen. Sie können die Azure-Funktion erstellen, indem Sie die Schritte in der Azure Functions-Dokumentation ausführen. Wenn Sie keine Azure-Funktion sondern stattdessen ein anderes Framework verwenden, überspringen Sie diesen Schritt, und fahren Sie mit dem nächsten Abschnitt fort.

Sobald die Azure-Funktion eingerichtet ist, wechseln Sie zur Datei „local.settings.json“, und fügen Sie drei weitere Werte hinzu, die Sie speichern müssen: die Azure Communication Services-Verbindungszeichenfolge, die Telefonnummer (z. B. +15555555555) und den URL-Verkürzungsendpunkt (z. B. https://<Azure_Function_URL>/api/UrlCreate). Diese Variablen sind alle Werte, die Sie aus den Voraussetzungen am Anfang des Dokuments generiert haben.


{
    "IsEncrypted": false,
    "Values": {
    "AzureWebJobsStorage": "",
    "FUNCTIONS_WORKER_RUNTIME": "node",
    "ACS_CONNECTIONSTRING": "<AZURE COMMUNICATION SERVICES CONNECTION STRING>",
    "ACS_PHONE_NUMBER": "<AZURE COMMUNICATION SERVICES PHONE NUMBER>",
    "URL_SHORTENER": "<URL SHORTENER ENDPOINT>" 
    }
}

Konfigurieren der Abfrageparameter

Nachdem Sie die Azure-Funktion erstellt haben, müssen Sie die Abfrageparameter konfigurieren, die zum Auslösen erforderlich sind. Die Funktion erwartet eine Telefonnummer und eine URL. Die Telefonnummer wird als Empfänger der SMS-Nachricht verwendet. Die URL ist der Link, der gekürzt und an den Empfänger gesendet wird.


const httpTrigger: AzureFunction = async function (context: Context, req: HttpRequest): Promise<void> {
    //Parse Query Parameters
    let phoneNumber = req.query.phoneNumber; // get phone number query parameter
    let url =  req.query.url; // get url to shorten query parameter

    context.res = {
      // status: 200, /* Defaults to 200 */
      body: null
    };
};

export default httpTrigger;

Kürzen der URL

Nachdem Sie nun über die Telefonnummer und die URL verfügen, können Sie den Azure-URL-Verkürzungsdienst verwenden, um die URL zu kürzen. Stellen Sie sicher, dass Sie diesen Dienst bereits bereitgestellt haben. Der Dienst enthält mehrere Endpunkte, aber in diesem Tutorial liegt der Fokus auf dem Endpunkt „UrlCreate“. Verwenden Sie die Methode „fetch“, um eine POST-Anforderung an den Azure-URL-Verkürzungsdienst mit der URL zu stellen, die Sie kürzen möchten. Der Dienst gibt ein JSON-Objekt mit der verkürzten URL zurück. Speichern Sie die verkürzte URL in einer Variablen namens „shortUrl“. Fügen Sie im Ausschnitt den Endpunkt Ihres bereitgestellten Azure-URL-Verkürzungsdiensts ein. Informationen zum Abrufen des Endpunkts finden Sie unter Überprüfen der Bereitstellung.


const urlShortener = process.env.URL_SHORTENER

const httpTrigger: AzureFunction = async function (context: Context, req: HttpRequest): Promise<void> {
    //Parse Query Parameters    
    let phoneNumberTo = req.query.phoneNumber; // get phone number query parameter
    let urlToShorten =  req.query.url; // get url to shorten query parameter
    
    //Get short URL from Azure URL Shortener
    const body =  JSON.stringify({ "Url": url})
    await fetch(urlShortener, {
      method: 'POST',
      body: body
    })
    .then(res => res.json())
    .then(async data => {
      const shortUrl = data["ShortUrl"]
      context.log(shortUrl)
      }
    })

    context.res = {
      // status: 200, /* Defaults to 200 */
      body: null
    };
};

export default httpTrigger;

Senden einer SMS

Da Sie nun eine kurze URL haben, verwenden Sie Azure Communication Services, um die SMS zu senden. Beginnen Sie mit der Methode „send“ aus der Klasse „SmsClient“ des Pakets „@azure/communication-sms“.


npm i @azure/communication-sms --save

Diese Methode sendet die SMS an die Telefonnummer, die in den Abfrageparametern angegeben ist. Die SMS enthält die kurze URL. Weitere Informationen zum Senden von SMS finden Sie unter Senden von SMS.


import { AzureFunction, Context, HttpRequest } from "@azure/functions"
import { SmsClient }  from "@azure/communication-sms"

const httpTrigger: AzureFunction = async function (context: Context, req: HttpRequest): Promise<void> {
    //Parse Query Parameters
    let to = req.query.phoneNumber; // Get phone number to send SMS to
    let urlToShorten =  req.query.url; // Get URL to shorten

    //Get short URL from Azure URL Shortener
    const body =  JSON.stringify({ "Url": urlToShorten})
    const urlShortener = process.env.URL_SHORTENER
    await fetch(urlShortener, {
      method: 'POST',
      body: body
    })
    .then(res => res.json())
    .then(async data => {
      const url = data["ShortUrl"]
      const connectionString =  process.env.ACS_CONNECTIONSTRING
      const phoneNumberFrom = process.env.ACS_PHONE_NUMBER
      const smsClient = new SmsClient(connectionString);
      // Send the SMS message
      const sendResults = await smsClient.send({
        from: phoneNumberFrom,
        to: [to],
        message: "Join your scheduled appointment here: " + url
      }, {
        enableDeliveryReport: true
      });
      // Use the "successful" property to verify the status.
      for (const sendResult of sendResults) {
        if (sendResult.successful) {
          console.log("Success: ", sendResult);
        } else {
          console.error("Something went wrong when trying to send this message: ", sendResult);
        }
      }
      context.res = {
        // status: 200, /* Defaults to 200 */
        body: url
      };
    })

};

Lokales Testen

Hinweis

Sie müssen Ihre Telefonnummer überprüfen, damit SMS-Nachrichten mit URLs gesendet werden können. Sobald Ihre Überprüfungsanwendungen auf den Status „Ausstehend (1-2 Tage)“ festgelegt sind, wird die Telefonnummer zum Senden von URLs aktiviert. Die vollständige Überprüfung dauert 5-6 Wochen. Weitere Informationen zur Überprüfung gebührenfreier Nummern finden Sie unter Häufig gestellte Fragen zur gebührenfreien Überprüfung.

Sie können Ihre Azure-Funktion jetzt lokal ausführen, indem Sie in Visual Studio Code auf F5 klicken oder den folgenden Befehl im Terminal ausführen:


func host start

Anschließend können Sie mithilfe eines Tools wie Postman Ihre Funktion testen, indem Sie eine POST-Anforderung an den Endpunkt Ihrer Azure-Funktion senden. Sie müssen die Telefonnummer und die URL als Abfrageparameter angeben. Wenn Ihre Azure-Funktion beispielsweise lokal ausgeführt wird, können Sie eine Anforderung an http://localhost:7071/api/<FUNCTION NAME>?phoneNumber=%2B15555555555&url=https://www.microsoft.com senden. Sie sollten eine Antwort mit der verkürzten URL und dem Status von Success erhalten.

In Azure bereitstellen

Wenn Sie Ihre Azure-Funktion bereitstellen möchten, befolgen Sie die Schritt-für-Schritt-Anweisungen.

Nach der Bereitstellung können Sie über eine ähnliche Methode wie beim lokalen Testen auf die Funktion zugreifen. Sie müssen die Telefonnummer und die URL als Abfrageparameter angeben. Wenn Ihre Azure-Funktion beispielsweise in Azure bereitgestellt wurde, können Sie eine Anforderung an https://<YOUR AZURE FUNCTION NAME>.azurewebsites.net/api/<FUNCTION NAME>?phoneNumber=%2B15555555555&url=https://www.microsoft.com senden. Sie sollten eine Antwort mit der verkürzten URL und dem Status von Success erhalten.

Nächste Schritte