Compartir a través de


Enviar URL corta

Los mensajes SMS están limitados a 160 caracteres, lo que puede afectar a su capacidad de enviar direcciones URL a los clientes. Las direcciones URL pueden superar el límite de 160 caracteres, ya que contienen parámetros de consulta, información cifrada, etc. Puede usar el abreviador de direcciones URL de Azure para generar direcciones URL cortas que sean adecuadas para enviar a través de SMS, ya que permanecen muy por debajo del límite de 160 caracteres. 

En este documento se describe el proceso de integración de Azure Communication Services con el abreviador de direcciones URL de Azure. El abreviador de direcciones URL es un servicio de código abierto que le permite crear, administrar y supervisar fácilmente vínculos abreviados.

Código de ejemplo

Puede encontrar el código completo para este tutorial en GitHub de Azure Samples, SMS Url Shortener para C#.

Requisitos previos

Introducción a la arquitectura

En este artículo se describe cómo configurar el middleware para organizar las solicitudes para enviar SMS y acortar las direcciones URL a través del servicio Azure URL Shortener. Interactúa con Azure Communication Services para completar el envío del SMS.

Diagrama de información general sobre la arquitectura.

Configuración de Azure Functions

Para empezar, es necesario crear una nueva función de Azure. Puede crear la función de Azure siguiendo los pasos descritos en Azure Functions. Si no usa una función de Azure y, en su lugar, usa un marco diferente, omita este paso y continúe con la sección siguiente.

Una vez configurada la función de Azure, vaya al local.settings.json archivo y agregue tres valores más que necesita almacenar: la cadena de conexión de Azure Communication Services, el número de teléfono, como +15555555555 y un punto de conexión de acortador de direcciones URL, como https://<Azure_Function_URL>/api/UrlCreate. Estas variables son todos los valores que generó a partir de los requisitos previos al principio del artículo.


{
    "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>" 
    }
}

Configuración de los parámetros de consulta

Una vez creada la función de Azure, debe configurar los parámetros de consulta necesarios para desencadenarla. La función espera un número de teléfono y una dirección URL. El número de teléfono es el destinatario del mensaje SMS. La dirección URL es el vínculo que se abrevia y se envía al destinatario.


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);
        }
    }
}

Acortar la dirección URL

Ahora que tiene el número de teléfono y la dirección URL, puede usar el servicio del abreviador de direcciones URL de Azure para acortar la dirección URL. Asegúrese de implementar el servicio Azure URL Shortener . El servicio contiene varios puntos de conexión, pero para este tutorial el foco se pone en el punto de conexión UrlCreate. Use el método PostAsync para realizar una solicitud POST al servicio del abreviador de direcciones URL de Azure con la dirección URL que desee acortar.

El servicio devuelve un objeto JSON con la dirección URL abreviada. Almacene la dirección URL abreviada en una variable denominada shortUrl. En el fragmento de código, inserte el punto de conexión del servicio del abreviador de direcciones URL de Azure implementado. Para más información sobre cómo obtener el punto de conexión, vea Validación de la implementación.

...
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);
        }
    }
}

Envío de SMS

Ahora que se abrevió la dirección URL, puede usar Azure Communication Services para enviar el SMS. Use el método send de la clase SmsClient del paquete Azure.Communication.Sms.


dotnet add package Azure.Communication.Sms

Este método envía el SMS al número de teléfono proporcionado en los parámetros de consulta. El SMS contiene la dirección URL abreviada. Para obtener más información sobre cómo enviar SMS, consulte Enviar 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);
        }
    }
}

Prueba local

Nota:

Deberá comprobar el número de teléfono para enviar mensajes SMS con direcciones URL. Una vez que se haya colocado la aplicación de verificación en estado pendiente (uno a dos días), el número de teléfono se habilitará para enviar direcciones URL. La comprobación completa tarda cinco a seis semanas. Para obtener más información sobre la verificación de números gratuitos, consulte Preguntas más frecuentes sobre la verificación gratuita.

Ejecute la función de Azure localmente presionando F5 en Visual Studio Code o ejecute el siguiente comando en el terminal:

func host start

A continuación, use una herramienta como Postman para probar la función mediante la realización de una POST solicitud al punto de conexión de la función de Azure. Deberá proporcionar el número de teléfono y la dirección URL como parámetros de consulta. Por ejemplo, si la función de Azure se ejecutase localmente, podría realizar una solicitud a http://localhost:7071/api/<FUNCTION NAME>?phoneNumber=%2B15555555555&url=https://www.microsoft.com. Debería recibir una respuesta con la dirección URL abreviada y un estado de Success.

Implementar en Azure

Para implementar la función de Azure, siga las instrucciones paso a paso.

Una vez implementada, podrá acceder a la función a través de un método similar al que hizo al probar localmente. Deberá proporcionar el número de teléfono y la dirección URL como parámetros de consulta. Por ejemplo, si la función de Azure se implementase en Azure, podría realizar una solicitud a https://<YOUR AZURE FUNCTION NAME>.azurewebsites.net/api/<FUNCTION NAME>?phoneNumber=%2B15555555555&url=https://www.microsoft.com. Debería recibir una respuesta con la dirección URL abreviada y un estado de Success.

Código de ejemplo

Puede encontrar el código completo de este tutorial en GitHub de Azure Samples SMS Url Shortener para JavaScript.

Requisitos previos

Introducción a la arquitectura

En este artículo se describe cómo configurar un middleware que organiza las solicitudes para enviar SMS y el acortamiento de direcciones URL a través del servicio Abreviador de direcciones URL de Azure. Interactúa con Azure Communication Services para completar el envío del SMS.

Diagrama de información general sobre la arquitectura.

Configuración de Azure Functions

Para empezar, es necesario crear una nueva función de Azure. Puede crear la función de Azure siguiendo los pasos descritos en la documentación de Azure Functions. Si no usa una función de Azure y, en su lugar, usa un marco diferente, omita este paso y continúe con la sección siguiente.

Una vez configurada la función de Azure, vaya al local.settings.json archivo y agregue tres valores más que necesita almacenar: la cadena de conexión de Azure Communication Services, el número de teléfono, como +15555555555 y el punto de conexión del abreviador de direcciones URL, como https://<Azure_Function_URL>/api/UrlCreate. Estas variables son todos los valores que generó a partir de los requisitos previos al principio de este artículo.


{
    "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>" 
    }
}

Configuración de los parámetros de consulta

Una vez creada la función de Azure, debe configurar los parámetros de consulta necesarios para desencadenarla. La función espera un número de teléfono y una dirección URL. El número de teléfono se usa como destinatario del mensaje SMS. La dirección URL es el vínculo que se abrevia y se envía al destinatario.


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;

Acortar la dirección URL

Ahora que tiene el número de teléfono y la dirección URL, puede usar el servicio del abreviador de direcciones URL de Azure para acortar la dirección URL. Asegúrese de que ya ha implementado el servicio Azure URL Shortener . El servicio contiene varios puntos de conexión, pero para este tutorial el foco se pone en el punto de conexión UrlCreate. Use el método fetch para realizar una solicitud POST al servicio del abreviador de direcciones URL de Azure con la dirección URL que desee acortar.

El servicio devuelve un objeto JSON con la dirección URL abreviada. Almacene la dirección URL abreviada en una variable denominada shortUrl. En el fragmento de código, inserte el punto de conexión del servicio del abreviador de direcciones URL de Azure implementado. Para más información sobre cómo obtener el punto de conexión, vea Validación de la implementación.


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;

Envío de SMS

Ahora que tiene la dirección URL corta, use Azure Communication Services para enviar el SMS. Comience con el método send de la clase SmsClient del paquete @azure/communication-sms.


npm i @azure/communication-sms --save

Este método envía el SMS al número de teléfono proporcionado en los parámetros de consulta. El SMS contiene la dirección URL abreviada. Para obtener más información sobre cómo enviar SMS, consulte Enviar 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
      };
    })

};

Prueba local

Nota:

Deberá comprobar el número de teléfono para enviar mensajes SMS con direcciones URL. Una vez que tu solicitud de verificación esté en estado pendiente (uno o dos días), el número de teléfono será habilitado para enviar URLs. La comprobación completa tarda cinco a seis semanas. Para obtener más información sobre la verificación de números gratuitos, consulte Preguntas más frecuentes sobre la verificación gratuita.

Para ejecutar la función de Azure localmente, presione F5 en Visual Studio Code o ejecute el siguiente comando en el terminal:

func host start

A continuación, use una herramienta como Postman para probar la función mediante una POST solicitud al punto de conexión de la función de Azure. Deberá proporcionar el número de teléfono y la dirección URL como parámetros de consulta. Por ejemplo, si la función de Azure se ejecutase localmente, podría realizar una solicitud a http://localhost:7071/api/<FUNCTION NAME>?phoneNumber=%2B15555555555&url=https://www.microsoft.com. Debería recibir una respuesta con la dirección URL abreviada y un estado de Success.

Implementar en Azure

Para implementar la función de Azure, consulte instrucciones paso a paso.

Una vez implementada, podrá acceder a la función a través de un método similar al que hizo al probar localmente. Deberá proporcionar el número de teléfono y la dirección URL como parámetros de consulta. Por ejemplo, si la función de Azure se implementase en Azure, podría realizar una solicitud a https://<YOUR AZURE FUNCTION NAME>.azurewebsites.net/api/<FUNCTION NAME>?phoneNumber=%2B15555555555&url=https://www.microsoft.com. Debería recibir una respuesta con la dirección URL abreviada y un estado de Success.

Pasos siguientes