Inicio rápido: Recepción y respuesta a SMS

Las funcionalidades de SMS de Azure Communication Services proporcionan a los desarrolladores opciones para consumir eventos recibidos por SMS. Los eventos se publican en Azure Event Grid, que proporciona integraciones listas para usar para procesarlos mediante webhooks, Azure Functions, conectores Power Automate / Logic App, etc.

Una vez recibidos, los mensajes SMS se pueden procesar para responder a ellos o simplemente registrarlos en una base de datos para el acceso futuro.

En este inicio rápido, nos centraremos en mostrar el procesamiento de eventos recibidos por SMS a través de Azure Functions mediante desencadenadores de Event Grid y conectores sin código para Power Automate o Logic Apps.

El evento SMSReceived generado cuando se envía un SMS a un número de teléfono de Azure Communication Services tiene el siguiente formato:

[{
  "id": "Incoming_20200918002745d29ebbea-3341-4466-9690-0a03af35228e",
  "topic": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/acse2e/providers/microsoft.communication/communicationservices/{communication-services-resource-name}",
  "subject": "/phonenumber/15555555555",
  "data": {
    "MessageId": "Incoming_20200918002745d29ebbea-3341-4466-9690-0a03af35228e",
    "From": "15555555555",
    "To": "15555555555",
    "Message": "Great to connect with Azure Communication Services events",
    "ReceivedTimestamp": "2020-09-18T00:27:45.32Z"
  },
  "eventType": "Microsoft.Communication.SMSReceived",
  "dataVersion": "1.0",
  "metadataVersion": "1",
  "eventTime": "2020-09-18T00:27:47Z"
}]

Para empezar a generar los eventos, debemos configurar Azure Event Grid para nuestro recurso de Azure Communication Services.

Nota

El uso de Azure Event Grid conlleva costos adicionales. Para obtener más información, consulte Precios de Azure Event Grid.

Requisitos previos

Event Grid ofrece compatibilidad inmediata con Azure Functions, lo que facilita la configuración de un agente de escucha de eventos sin necesidad de lidiar con la complejidad de analizar encabezados o depurar webhooks. Con el desencadenador listo para usar, podemos configurar una Función de Azure que se ejecute cada vez que se detecta un evento que coincide con el desencadenador. En este documento, nos centramos en los desencadenadores recibidos por SMS.

Configurando nuestro entorno local

  1. Con Visual Studio Code, instale la extensión de Azure Functions.

  2. Con la extensión, cree una Función de Azure siguiendo estas instrucciones.

    Configure la función con las instrucciones siguientes:

    • Lenguaje: TypeScript
    • Plantilla: desencadenador de Azure Event Grid
    • Nombre de la función: Definido por el usuario

    Una vez creada, verá una función creada en el directorio de la siguiente manera:

    
    import { AzureFunction, Context } from "@azure/functions"
    
    const eventGridTrigger: AzureFunction = async function (context: Context, eventGridEvent: any): Promise<void> {
        context.log(eventGridEvent);
    
    };
    
    export default eventGridTrigger;
    
    

Configurar Azure Function para recibir eventos de SMS

  1. Configure Azure Function para analizar los valores del evento, como quién lo envió, a qué número y cuál era el mensaje.

    
    import { AzureFunction, Context } from "@azure/functions"
    
    const eventGridTrigger: AzureFunction = async function (context: Context, eventGridEvent: any): Promise<void> {
       context.log(eventGridEvent);
       const to = eventGridEvent['data']['to'];
       const from = eventGridEvent['data']['from'];
       const message = eventGridEvent['data']['message'];
    
    };
    
    export default eventGridTrigger;
    
    

En este momento, ha controlado correctamente la recepción de un SMS a través de eventos. Ahora las posibilidades de qué hacer con ese evento van desde simplemente registrarlo hasta responder a él. En la siguiente sección, nos centramos en responder a ese SMS que recibimos. Si no desea responder al SMS, vaya a la sección siguiente sobre la ejecución local de la función.

Responder al SMS

  1. Para responder al SMS entrante, usamos las funcionalidades de SMS de Azure Communication Service para enviar SMS. Empezamos invocando el SmsClient e inicializando con el connection string de nuestro recurso. Puede pegar la cadena de conexión directamente en el código o colocarla dentro del archivo local.settings.json en el directorio de Azure Function en valores.

{
  "IsEncrypted": false,
  "Values": {
    "FUNCTIONS_WORKER_RUNTIME": "node",
    "ACS_CONNECTION_STRING": "<<CONNECTION STRING>>"
  }
}

  1. A continuación, redactamos un SMS para enviar en función de los valores to y from del evento que obtuvimos.

    import { AzureFunction, Context } from "@azure/functions"
    import { SmsClient } from "@azure/communication-sms";
    
    const connectionString = process.env.ACS_CONNECTION_STRING; //Replace with your connection string
    
    const eventGridTrigger: AzureFunction = async function (context: Context, eventGridEvent: any): Promise<void> {
        context.log(eventGridEvent);
        const to = eventGridEvent['data']['to'];
        const from = eventGridEvent['data']['from'];
        const message = eventGridEvent['data']['message'];
    
        const smsClient = new SmsClient(connectionString);
    
        const sendResults = await smsClient.send({
            from: to,
            to: [from],
            message: "Message received successfully. Will respond shortly."
        });
    
    };
    
    export default eventGridTrigger;
    

Desde aquí, las posibilidades son infinitas. Desde responder a un mensaje con una respuesta preestablecida, hasta añadir un bot o simplemente almacenar respuestas, puedes adaptar el código del último paso para ello.

Ejecución local

Para ejecutar la función localmente, presione F5 en Visual Studio Code. Usamos ngrok para enlazar Azure Function que se ejecuta localmente con Azure Event Grid.

  1. Una vez que se ejecuta la función, se configura ngrok. (Debe descargar ngrok para su entorno).

    ngrok http 7071
    

    Copie el vínculo ngrok proporcionado donde se ejecuta la función.

  2. Configure eventos SMS a través de Event Grid en el recurso de Azure Communication Services. Esto se hace mediante la CLI de Azure. Necesita el identificador de recurso para el recurso de Azure Communication Services que se encuentra en Azure Portal. (El identificador de recurso tendrá un aspecto similar al siguiente: /subscriptions/<<AZURE SUBSCRIPTION ID>>/resourceGroups/<<RESOURCE GROUP NAME>>/providers/Microsoft.Communication/CommunicationServices/<<RESOURCE NAME>>)

    
    az eventgrid event-subscription create --name "<<EVENT_SUBSCRIPTION_NAME>>" --endpoint-type webhook --endpoint "<<NGROK URL>> " --source-resource-id "<<RESOURCE_ID>>"  --included-event-types Microsoft.Communication.SMSReceived 
    
    
  3. Ahora que todo está conectado, pruebe el flujo enviando un SMS al número de teléfono que tiene en el recurso de Azure Communication Services. Debería ver los registros de la consola en el terminal donde se ejecuta la función. Si agregó el código para responder al SMS, debería ver que el mensaje de texto se le devolvía.

Implementar en Azure

Para implementar Azure Function en Azure, debe seguir estas instrucciones. Una vez implementado, configuramos Event Grid para el recurso de Azure Communication Services. Con la dirección URL de Azure Function que se implementó (la dirección URL que se encuentra en Azure Portal en la función), ejecutamos el siguiente comando:


az eventgrid event-subscription update --name "<<EVENT_SUBSCRIPTION_NAME>>" --endpoint-type azurefunction --endpoint "<<AZ FUNCTION URL>> " --source-resource-id "<<RESOURCE_ID>>"

Puesto que estamos actualizando la suscripción de eventos que creamos para las pruebas locales, asegúrese de usar el mismo nombre de suscripción de eventos que usó anteriormente.

Puede probar enviando un SMS al número de teléfono que ha adquirido a través del recurso de Azure Communication Services.

Logic Apps y Power Automate proporcionan conectores listos para usar que ayudan a administrar los eventos generados por Azure Communication Services a través de Event Grid. Logic Apps y Power Automate proporcionan el mismo conjunto de conectores. Es decisión suya decidir lo que prefiere, leer las diferencias entre los servicios para informar de su decisión.

Control de eventos con el conector de Event Grid

  1. Empiece por crear un nuevo flujo en su entorno preferido. Elija el desencadenador When a resource event occurs para empezar.

    Captura de pantalla de la selección de desencadenador para Power Automate.

  2. Ahora vamos a configurarlo. El conector requiere que proporcione una suscripción que quiera usar. (Debe ser la misma suscripción donde está el recurso de Azure Communication Services). Especifique el tipo de recurso. En este caso, seleccione Microsoft.Communication.CommunicationServices. A continuación, debe proporcionar un nombre de recurso para el recurso de Azure Communication Services al que quiere que se conecte. Por último, es necesario elegir los tipos de evento que queremos recibir, en este caso: Microsoft.Communication.SMSReceived.

    Captura de pantalla del conector de Event Grid.

    El conector configura automáticamente la suscripción de eventos en su nombre y configura los eventos que desea recibir.

  3. Para facilitar nuestra vida más adelante, agregue un Parse JSON connectorpara procesar la respuesta procedente del conector de Event Grid. Configure el conector para que tome el objeto Body del conector de Event Grid y lo haga coincidir con el esquema esperado para el evento:

    Esquema de ejemplo (abierto para ver)
    
        {
            "properties": {
                "data": {
                    "properties": {
                        "From": {
                            "type": "string"
                        },
                        "Message": {
                            "type": "string"
                        },
                        "MessageId": {
                            "type": "string"
                        },
                        "ReceivedTimestamp": {
                            "type": "string"
                        },
                        "To": {
                            "type": "string"
                        }
                    },
                    "type": "object"
                },
                "dataVersion": {
                    "type": "string"
                },
                "eventTime": {
                    "type": "string"
                },
                "eventType": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "metadataVersion": {
                    "type": "string"
                },
                "subject": {
                    "type": "string"
                },
                "topic": {
                    "type": "string"
                }
            },
            "type": "object"
        }
    
    

    Captura de pantalla del conector Análisis de JSON.

En este momento, ha controlado correctamente el evento SMS. A continuación, tienes múltiples opciones para hacer con él, desde registrar el evento hasta responder al SMS. En el contexto de este documento, mostraremos cómo responder a él. Siga leyendo para obtener información sobre los pasos para responder al SMS.

Responder al SMS

  1. Empiece por agregar el conector SMS a nuestro flujo y configurarlo con la información de nuestro recurso de Azure Communication Services. Permite al conector acceder al recurso y enviar el SMS en nuestro nombre. Necesita el connection string para su recurso.

    Captura de pantalla de configuración del conector SMS.

  2. A continuación, configuramos el conector con la información del remitente y el destinatario. Usamos la información del evento que recibimos para rellenarlos. Toque los números to y from para devolver un SMS al remitente original. Por último, agregue un mensaje.

    Captura de pantalla de la configuración del conector de SMS.

Ahora, puede guardar el flujo y probarlo enviando un SMS al número de teléfono asociado al recurso de Azure Communication Services. Debe recibir un mensaje de texto.

Desde aquí, las posibilidades son infinitas. Desde responder a un mensaje con una respuesta preestablecida, hasta añadir un bot o simplemente almacenar respuestas, puede agregar más lógica al flujo.

Limpieza de recursos

Si quiere limpiar y quitar una suscripción a Communication Services, puede eliminar el recurso o grupo de recursos. Al eliminar el grupo de recursos, también se elimina cualquier otro recurso que esté asociado a él. Obtenga más información sobre la limpieza de recursos.

Comprobación gratuita

Si tiene un nuevo número gratuito y desea enviar un gran volumen de mensajes SMS o enviar mensajes SMS a números de teléfono canadienses, visite este enlace para obtener información sobre cómo comprobar su número gratuito.

Pasos siguientes

En este inicio rápido, aprendió a enviar mensajes SMS mediante el uso de Communication Services.