Envío de vínculos del abreviador a través de SMS con Azure Communication Services
Los mensajes SMS están limitados a 160 caracteres, lo que limita la 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. Mediante el abreviador de direcciones URL de Azure, es posible generar direcciones URL cortas que sean adecuadas para envío a través de SMS, ya que permanecerán 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, un servicio de código abierto que le permite crear, administrar y supervisar fácilmente vínculos abreviados.
Código de ejemplo
El código completo de este tutorial se encuentra en GitHub.
Requisitos previos
- Una suscripción de Azure activa. Cree una cuenta gratuita.
- Un recurso activo de Azure Communication Services. Para más información, consulte Creación de un recurso de Azure Communication Services.
- Un número de teléfono Azure Communication Services. Obtención de un número de teléfono. Deberá comprobar el número de teléfono para poder enviar mensajes con direcciones URL.
- AzUrlShortener implementado. Haga clic en el botón Implementar en Azure para la implementación rápida.
- [Opcional] Implemente la aplicación web Administrador para administrar y supervisar vínculos en la interfaz de usuario.
- En este tutorial, las solicitudes SMS se enrutan a una función de Azure. Siempre podría usar un servicio existente, un marco diferente como Express o, simplemente, ejecutar el tutorial como una aplicación de consola de C#. Para seguir este tutorial con una función de Azure, consulte las instrucciones para configurarlo: Azure Function para C#.
Introducción a la arquitectura
En este tutorial, se pone el foco en configurar un middleware que organiza las solicitudes para enviar SMS y el acortamiento de direcciones URL a través del servicio del abreviador de direcciones URL de Azure. Interactúa con Azure Communication Services para completar el envío del SMS.
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 archivo local.settings.json
y agregue tres valores más que debe almacenar: la cadena de conexión de Azure Communication Services, el número de teléfono (por ejemplo: +15555555555) y el punto de conexión del abreviador de dirección URL (por ejemplo: https://<Azure_Function_URL>/api/UrlCreate
). Estas variables son todos los valores que generó a partir de los requisitos previos del principio del documento.
{
"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
Ahora que ha creado 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.
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 que ya haya implementado este servicio. 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 las aplicaciones de verificación estén establecidas en estado pendiente (1-2 días), el número de teléfono se habilitará para enviar direcciones URL. La comprobación completa tardará entre 5 y 6 semanas. Para obtener más información sobre la comprobación de números gratuitos, consulte Preguntas más frecuentes sobre la verificación de números gratuitos.
Ahora puede ejecutar la función de Azure localmente presionando F5
en Visual Studio Code o ejecutando el siguiente comando en el terminal:
func host start
Después, mediante una herramienta como Postman, podrá probar la función realizando una solicitud POST
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 instancia de Azure Functions, puede seguir 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
El código completo de este tutorial se encuentra en GitHub.
Requisitos previos
- Una suscripción de Azure activa. Cree una cuenta gratuita.
- Un recurso activo de Azure Communication Services. Para más información, consulte Creación de un recurso de Azure Communication Services.
- Un número de teléfono Azure Communication Services. Obtención de un número de teléfono. Deberá comprobar el número de teléfono para poder enviar mensajes con direcciones URL.
- AzUrlShortener implementado. Haga clic en el botón Implementar en Azure para la implementación rápida.
- [Opcional] Implemente la aplicación web Administrador para administrar y supervisar vínculos en la interfaz de usuario.
- En este tutorial, las solicitudes SMS se enrutan a una función de Azure. Siempre podría usar un servicio existente, un marco diferente como Express o, simplemente, ejecutar el tutorial como una aplicación de consola de Node.JS. Para seguir este tutorial con una función de Azure, consulte las instrucciones para configurarlo: Azure Function para TypeScript.
Introducción a la arquitectura
En este tutorial, se pone el foco en configurar un middleware que organiza las solicitudes para enviar SMS y el acortamiento de direcciones URL a través del servicio del abreviador de direcciones URL de Azure. Interactúa con Azure Communication Services para completar el envío del SMS.
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 archivo local.settings.json
y agregue tres valores más que debe almacenar: la cadena de conexión de Azure Communication Services, el número de teléfono (por ejemplo: +15555555555) y el punto de conexión del abreviador de dirección URL (por ejemplo: https://<Azure_Function_URL>/api/UrlCreate
). Estas variables son todos los valores que generó a partir de los requisitos previos del principio del documento.
{
"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
Ahora que ha creado 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 haya implementado este servicio. 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 las aplicaciones de verificación estén establecidas en estado pendiente (1-2 días), el número de teléfono se habilitará para enviar direcciones URL. La comprobación completa tardará entre 5 y 6 semanas. Para obtener más información sobre la comprobación de números gratuitos, consulte Preguntas más frecuentes sobre la verificación de números gratuitos.
Ahora puede ejecutar la función de Azure localmente presionando F5
en Visual Studio Code o ejecutando el siguiente comando en el terminal:
func host start
Después, mediante una herramienta como Postman, podrá probar la función realizando una solicitud POST
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 instancia de Azure Functions, puede seguir 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
.
Pasos siguientes
- Agregue un dominio personalizado para las direcciones URL abreviadas.