Compartir a través de


Recepción de un mensaje 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 integradas para procesarlos mediante webhooks, Azure Functions, Power Automate o conectores de Logic App, etc.

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

En este artículo se describe cómo procesar 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 SMSReceived evento generado cuando se envía un SMS a un número de teléfono de Azure Communication Services tiene el formato siguiente:

[{
  "id": "d29ebbea-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": "d29ebbea-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"
}]

Nota:

El formato de MessageId devuelto por esta API se considera un detalle de implementación interno y está sujeto a cambios sin previo aviso. Los clientes deben tratar los identificadores de mensaje como identificadores opacos y no deben analizar, inferir estructura ni crear lógica en función de su formato o contenido.

Para empezar a generar eventos, configure Azure Event Grid para que use el recurso de Azure Communication Services.

Nota:

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

Prerrequisitos

Event Grid proporciona soporte integrado para Azure Functions, lo que facilita la configuración para escuchar eventos sin necesidad de tratar con la complejidad de interpretar encabezados o depurar webhooks. Con el desencadenador listo para usar, podemos configurar una función de Azure que se ejecuta cada vez que se detecta un evento que coincide con el desencadenador. En este documento, nos centramos en los desencadenadores recibidos por SMS.

Configuración de 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;
    
    

Configuración de la función de Azure para recibir eventos 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 para 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 cómo ejecutar la función localmente.

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 inicializándolo con el connection string para nuestro recurso. Puede pegar la cadena de conexión directamente en el código o colocarla dentro de su archivo local.settings.json en el directorio de Azure Function bajo la sección de valores.

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

  1. A continuación, redactamos un SMS para enviar basado en los valores de 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. Puede responder a un mensaje con una respuesta preescrita, agregar un bot o almacenar respuestas adaptando el código en el último paso.

Ejecución en modo local

Para ejecutar la función localmente, presione F5 en Visual Studio Code. Usamos ngrok para enlazar nuestra función de Azure en ejecución local con Azure Event Grid.

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

    ngrok http 7071
    

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

  2. Configure eventos SMS a través de Event Grid en el recurso de Azure Communication Services. Lo hacemos mediante la CLI de Azure. Necesita el ID del recurso de sus Azure Communication Services que se encuentra en el portal de Azure. El identificador de recurso tiene un aspecto similar a: /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 mediante el envío de un SMS al número de teléfono 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.

Implementación en Azure

Para implementar la función de Azure en Azure, debe seguir estas instrucciones. Una vez implementado, se configura Event Grid para el recurso de Azure Communication Services. Con la dirección URL de la función de Azure que se implementó (URL que se encuentra en el portal de Azure bajo 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 mediante el envío de un SMS al número de teléfono que configuró en el recurso de Azure Communication Services.

Logic Apps y Power Automate proporcionan conectores de fábrica para ayudar a controlar los eventos generados por Azure Communication Services a través de Event Grid. Logic Apps y Power Automate proporcionan el mismo conjunto de conectores. Depende de ti decidir lo que prefieres, lee sobre las diferencias entre los servicios para informar tu decisión.

Control de eventos con el conector de Event Grid

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

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

  2. Ahora, puede configurar el conector. Debe proporcionar una suscripción que quiera usar. (Debe ser la misma suscripción en la que está el recurso de Azure Communication Services). Especifique el tipo de recurso. En este caso, elija 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 seleccionar 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 connector para procesar la respuesta procedente del conector de Event Grid. Configure el conector para tomar el Body objeto del conector de Event Grid y hacer coincidirlo con nuestro 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 de Análisis de JSON.

En este momento, ha controlado correctamente el evento SMS. Tiene varias opciones de qué hacer con él, desde registrar el evento hasta responder al SMS. En el contexto de este documento, respondemos al mensaje SMS recibido.

Responder al SMS

  1. Comience agregando el conector de SMS a nuestro flujo y configurándolo 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 la página de configuración del conector de SMS.

  2. A continuación, configuramos el conector con la información del remitente y el destinatario. Usamos la información del evento que hemos recibido 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 mediante el envío de un SMS al número de teléfono asociado al recurso de Azure Communication Services. Debería recibir de vuelta un mensaje de texto.

Desde aquí, las posibilidades son infinitas. Puede responder a un mensaje con una respuesta preescrita, agregar un bot, almacenar la respuesta o agregar automatización del flujo de trabajo.

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.

Verificación sin coste

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, consulte Preguntas más frecuentes sobre > SMS Enviar verificación gratuita para obtener información sobre cómo comprobar su número gratuito de pago.

Pasos siguientes