Поделиться через


Получение SMS-сообщения

Возможности SMS служб связи Azure предоставляют разработчикам возможность обрабатывать полученные SMS-события. События публикуются в Службе "Сетка событий Azure", которая предоставляет готовые интеграции для обработки этих событий с помощью веб-перехватчиков, функций Azure, соединителей Power Automate, логических приложений и многое другое.

После получения SMS-сообщения можно обработать, чтобы ответить на них или записать их в базу данных для дальнейшего доступа.

В этой статье описывается, как обрабатывать полученные события SMS с помощью функций Azure с помощью триггеров сетки событий и соединителей без кода для Power Automate или Logic Apps.

Событие SMSReceived , созданное при отправке SMS на номер телефона Служб коммуникации Azure, форматируется следующим образом:

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

Замечание

MessageId Формат возвращаемого этим API считается внутренней информацией о реализации и подлежит изменению без уведомления. Клиенты должны обрабатывать идентификаторы сообщений как непрозрачные идентификаторы и не должны анализировать структуру, выводить или строить логику на основе их формата или содержимого.

Чтобы начать создание событий, настройте службу "Сетка событий Azure" для использования ресурса Служб коммуникации Azure.

Замечание

Использование Службы "Сетка событий Azure" ведет к большим затратам. Дополнительные сведения см. в разделе о ценах на службу "Сетка событий Azure".

Предпосылки

Служба "Event Grid" предоставляет встроенную поддержку Azure Functions, упрощая настройку прослушивателя событий без необходимости разбираться со сложностью синтаксического анализа заголовков или отладки веб-перехватчиков. С помощью триггера из коробки можно настроить функцию Azure, которая выполняется каждый раз при обнаружении события, соответствующего триггеру. В этом документе мы сосредоточимся на триггерах получения SMS.

Настройка нашей локальной среды

  1. С помощью Visual Studio Code установите расширение Функций Azure.

  2. С расширением создайте функцию Azure, следуя этим инструкциям.

    Настройте функцию со следующими инструкциями:

    • Язык: TypeScript
    • Шаблон: триггер сетки событий Azure
    • Имя функции: определяемое пользователем

    После создания вы увидите функцию, созданную в каталоге следующим образом:

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

Настройка функции Azure для получения события SMS

  1. Настройте функцию Azure для синтаксического анализа значений из события, например, кто его отправил, на какой номер и какой была передана информация.

    
    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;
    
    

На данном этапе вам удалось успешно обработать получение SMS через события. Теперь возможности того, что можно сделать с этим событием, варьируются от простой записи до реагирования на него. В следующем разделе мы сосредоточимся на реагировании на полученные SMS. Если вы не хотите отвечать на SMS, перейдите к следующему разделу о локальной работе функции.

Реагирование на SMS

  1. Чтобы ответить на входящий SMS, мы используем возможности SMS службы коммуникации Azure для отправки SMS. Начнем с вызова SmsClient и инициализации его с помощью connection string для нашего ресурса. Строку подключения можно вставить непосредственно в код или поместить ее в файл local.settings.json в каталоге функций Azure под значениями.

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

  1. Затем мы создадим SMS для отправки на основе значений to и from из полученного события.

    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;
    

Отсюда возможности бесконечны. Вы можете ответить на сообщение с предзаписанным ответом, добавить бота или сохранить ответы, адаптировав код на последнем шаге.

Запуск локально

Чтобы запустить функцию локально, нажмите клавишу F5 в Visual Studio Code. Мы используем ngrok, чтобы подключить нашу локально запущенную функцию Azure к Azure Event Grid.

  1. После запуска функции настройте ngrok. Необходимо скачать ngrok для вашей среды.

    ngrok http 7071
    

    Скопируйте предоставленную ссылку ngrok в месте выполнения вашей функции.

  2. Настройте события SMS через сетку событий в ресурсе Служб коммуникации Azure. Мы делаем это с помощью Azure CLI. Вам нужен идентификатор ресурса для ресурса Служб коммуникации Azure, найденного на портале Azure. Идентификатор ресурса выглядит примерно так: /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. Теперь, когда все подключено, протестируйте поток, отправив SMS на номер телефона в ресурсе Служб коммуникации Azure. Вы увидите журналы консоли в терминале, где выполняется функция. Если вы добавили код для ответа на SMS, вы увидите, что текстовое сообщение доставлено вам обратно.

Развертывание в Azure

Чтобы развернуть функцию Azure в Azure, необходимо выполнить следующие инструкции. После развертывания мы настроим сетку событий для ресурса Служб коммуникации Azure. Используя URL-адрес развернутой функции Azure (URL-адрес найден в портале Azure в разделе функции), мы выполняем следующую команду:

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

Так как мы обновляем подписку на события, созданную для локального тестирования, обязательно используйте то же имя подписки на события, которое вы ранее использовали.

Вы можете протестировать, отправив SMS на номер телефона, настроенный в ресурсе Служб коммуникации Azure.

Logic Apps и Power Automate предоставляют из коробки соединители для обработки событий, генерируемых службами Azure Communication Services через Event Grid. Logic Apps и Power Automate предоставляют одинаковый набор соединителей. Вы можете решить, что вам предпочесть, изучить различия между службами, чтобы принять решение.

Обработка событий с помощью соединителя Event Grid

  1. Начните с создания нового потока в предпочитаемой среде. Выберите When a resource event occurs триггер, чтобы приступить к работе.

    Снимок экрана: выбор триггера для Power Automate.

  2. Теперь можно настроить соединитель. Необходимо предоставить подписку, которую вы хотите использовать. (Должна быть той же подпиской, где находится ресурс Служб коммуникации Azure). Укажите тип ресурса. В этом случае выберите Microsoft.Communication.CommunicationServices. Затем необходимо указать имя ресурса для ресурса Служб коммуникации Azure, к которому вы хотите подключиться. Наконец, необходимо выбрать типы событий, которые мы хотим получить, в этом случае: Microsoft.Communication.SMSReceived

    Снимок экрана: соединитель Сетки событий.

    Соединитель автоматически настраивает подписку на события от вашего имени и настраивает события, которые он хочет получить.

  3. Чтобы упростить нашу жизнь в дальнейшем, добавьте Parse JSON connector для обработки ответа, поступающего из коннектора Event Grid. Настройте коннектор, чтобы получить объект Body из коннектора Event Grid и сопоставить его с ожидаемой схемой события.

    Пример схемы (открыт для просмотра)
    
        {
            "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"
        }
    
    

    Снимок экрана: соединитель Parse JSON.

На этом этапе вы успешно обработали событие SMS. У вас есть несколько вариантов того, что делать с ним, начиная от ведения журнала события до ответа на SMS. В контексте этого документа мы отвечаем на полученное SMS-сообщение.

Реагирование на SMS

  1. Начните с добавления SMS-коннектора в наш поток и настройки его с использованием информации о нашем ресурсе Службы связи Azure. Он позволяет соединителю получать доступ к ресурсу и отправлять SMS от нашего имени. Вам нужен connection string, чтобы использовать ресурс.

    Снимок экрана: страница установки соединителя SMS.

  2. Затем мы настроим соединитель с информацией для отправителя и получателя. Мы используем информацию, полученную из события, чтобы заполнить их. Переверните to и from номера, чтобы отправить SMS обратно первоначальному отправителю. Наконец, добавьте сообщение.

    Снимок экрана: конфигурация соединителя SMS.

Теперь вы можете сохранить поток и проверить его, отправив SMS на номер телефона, связанный с ресурсом Служб коммуникации Azure. Вы должны получить обратно текстовое сообщение.

Отсюда возможности бесконечны. Вы можете ответить на сообщение с предзаписанным ответом, добавить бота, сохранить ответ или добавить автоматизацию рабочих процессов.

Очистите ресурсы

Если вы хотите очистить и удалить подписку на Communication Services, вы можете удалить ресурс или группу ресурсов. Удаление группы ресурсов также удаляет все другие ресурсы, связанные с ней. Узнайте больше об очистке ресурсов.

Бесплатная верификация

Если у вас есть новый бесплатный номер и вы хотите отправить большое количество SMS-сообщений или отправить SMS-сообщения на канадские номера телефонов, ознакомьтесь с разделом Часто задаваемых вопросов > по отправке запросов на подтверждение бесплатного номера, чтобы узнать, как подтвердить ваш бесплатный номер.

Дальнейшие шаги