Snabbstart: Ta emot och svara på SMS

Azure Communication Services SMS-funktioner ger utvecklare alternativ för att använda SMS-mottagna händelser. Händelserna publiceras i Azure Event Grid som tillhandahåller färdiga integreringar för att bearbeta dem som använder webhooks, Azure Functions, Power Automate/Logic App-anslutningsappar med mera.

När sms har tagits emot kan de bearbetas för att svara på dem eller logga dem till en databas för framtida åtkomst.

I den här snabbstarten fokuserar vi på att visa upp bearbetningen av SMS-mottagna händelser via Azure Functions med Event Grid-utlösare och anslutningsappar utan kod för Power Automate/Logic Apps.

Händelsen SMSReceived som genereras när ett SMS skickas till ett Azure Communication Services telefonnummer formateras på följande sätt:

[{
  "id": "Incoming_20200918002745d29ebbea-3341-4466-9690-0a03af35228e",
  "topic": "/subscriptions/50ad1522-5c2c-4d9a-a6c8-67c11ecb75b8/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"
}]

För att kunna börja generera händelserna måste vi konfigurera Azure Event Grid för vår Azure Communication Services resurs.

Anteckning

Användning av Azure Event Grid medför ytterligare kostnader. Mer information finns i Azure Event Grid prissättning.

Förutsättningar

Event Grid tillhandahåller inbyggt stöd för Azure Functions, vilket gör det enkelt att konfigurera en händelselyssnare utan att behöva hantera komplexiteten i att parsa rubriker eller felsöka webhooks. Med utlösaren out-of-the-box kan vi konfigurera en Azure-funktion som körs varje gång en händelse identifieras som matchar utlösaren. I det här dokumentet fokuserar vi på SMS-mottagna utlösare.

Konfigurera vår lokala miljö

  1. Installera Azure Functions-tillägget med hjälp av Visual Studio Code.

  2. Med tillägget skapar du en Azure-funktion enligt de här anvisningarna.

    Konfigurera funktionen med följande instruktioner:

    • Språk: TypeScript
    • Mall: Azure Event Grid utlösare
    • Funktionsnamn: Användardefinierad

    När den har skapats visas en funktion som skapats i din katalog så här:

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

Konfigurera Azure Function för att ta emot SMS-händelse

  1. Konfigurera Azure Function för att parsa värden från händelsen, till exempel vem som skickade den, till vilket nummer och vad meddelandet var.

    
    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;
    
    

Nu har du hanterat mottagandet av ett SMS via händelser. Nu sträcker sig möjligheterna för vad du ska göra med den händelsen från att bara logga den till att svara på den. I nästa avsnitt fokuserar vi på att svara på det SMS som vi fick. Om du inte vill svara på SMS:et går du vidare till nästa avsnitt om att köra funktionen lokalt.

Svara på SMS:et

  1. För att svara på inkommande SMS använder vi SMS-funktionerna i Azure Communication Service för att skicka SMS. Vi börjar med att SmsClient anropa och initiera den med connection string för vår resurs. Du kan antingen klistra in anslutningssträngen direkt i koden eller placera den i filen local.settings.json i azure-funktionskatalogen under värden.

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

  1. Sedan skriver vi ett SMS som ska skickas baserat på to värdena och from från händelsen vi fick.

    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;
    

Härifrån är möjligheterna oändliga. Från att svara på ett meddelande med ett förkonserverat svar, till att lägga till en robot eller helt enkelt lagra svar, kan du anpassa koden i det sista steget för att göra det.

Körs lokalt

Om du vill köra funktionen lokalt trycker du F5 i Visual Studio Code. Vi använder ngrok för att koppla vår lokalt körande Azure-funktion med Azure Event Grid.

  1. När funktionen körs konfigurerar vi ngrok. (Du måste ladda ned ngrok för din miljö.)

    ngrok http 7071
    

    Kopiera ngrok-länken som tillhandahålls där funktionen körs.

  2. Konfigurera SMS-händelser via Event Grid i din Azure Communication Services resurs. Vi gör detta med hjälp av Azure CLI. Du behöver resurs-ID:t för din Azure Communication Services resurs som finns i Azure Portal. (Resurs-ID ser ut ungefär så här: /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. Nu när allt är anslutet testar du flödet genom att skicka ett SMS till telefonnumret som du har på din Azure Communication Services resurs. Du bör se konsolloggarna på terminalen där funktionen körs. Om du har lagt till koden för att svara på SMS:et bör du se att sms:et levereras tillbaka till dig.

Distribuera till Azure

Om du vill distribuera Azure-funktionen till Azure måste du följa de här anvisningarna. När den har distribuerats konfigurerar vi Event Grid för den Azure Communication Services resursen. Med URL:en för Den Azure-funktion som distribuerades (URL:en som finns i Azure Portal under funktionen) kör vi följande kommando:


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

Eftersom vi uppdaterar händelseprenumerationen som vi skapade för lokal testning ska du använda samma händelseprenumerationsnamn som du använde ovan.

Du kan testa genom att skicka ett SMS till det telefonnummer som du har köpt via Azure Communication Services resurs.

Logic Apps och Power Automate tillhandahåller färdiga anslutningsappar för att hantera händelser som genereras av Azure Communication Services via Event Grid. Både Logic Apps och Power Automate har samma uppsättning anslutningsappar. Det är upp till dig att bestämma vad du föredrar, läsa om skillnaderna mellan tjänsterna för att informera ditt beslut.

Hantera händelser med Event Grid-anslutningsappen

  1. Börja med att skapa ett nytt flöde i önskad miljö. Välj utlösaren When a resource event occurs för att komma igång.

    Skärmbild av utlösarval för Power Automate.

  2. Nu ska vi konfigurera det. Anslutningsappen kräver att du anger en prenumeration som du vill använda. (Ska vara samma prenumeration där din Azure Communication Services resurs finns). Ange resurstyp. I det här fallet väljer du Microsoft.Communication.CommunicationServices. Sedan måste du ange ett resursnamn för den Azure Communication Services resurs som du vill att den ska ansluta till. Slutligen måste vi välja de händelsetyper som vi vill ta emot, i det här fallet: Microsoft.Communication.SMSReceived.

    Skärmbild av event grid-anslutningsprogrammet.

    Anslutningsappen konfigurerar automatiskt händelseprenumerationen för din räkning och konfigurerar de händelser som den vill ta emot.

  3. För att göra våra liv enklare senare lägger du till ett Parse JSON connector för att bearbeta svar som kommer från Event Grid-anslutningsappen. Konfigurera anslutningsappen Body för att ta objektet från Event Grid-anslutningsappen och matcha det med vårt förväntade schema för händelsen:

    Exempelschema (öppet för att se)
    
        {
            "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"
        }
    
    

    Skärmbild av Parsa JSON-anslutningsprogrammet.

Nu har du hanterat SMS-händelsen. Sedan har du flera alternativ för vad du ska göra med den, allt från att logga händelsen till att svara på SMS: et. I det här dokumentet visar vi hur du svarar på det. Fortsätt läsa för att lära dig stegen för att svara på SMS: et.

Svara på SMS:et

  1. Börja med att lägga till SMS-anslutningsappen i vårt flöde och konfigurera den med informationen för vår Azure Communication Services resurs. Det gör att anslutningsappen kan komma åt resursen och skicka SMS för vår räkning. Du behöver connection string för din resurs.

    Skärmbild av konfigurationsskärmen för SMS-anslutningsappen.

  2. Därefter konfigurerar vi anslutningsappen med information för avsändaren och mottagaren. Vi använder informationen från händelsen som vi fick för att fylla i dem. Fip numren to och from för att skicka ett SMS tillbaka till den ursprungliga avsändaren. Lägg slutligen till ett meddelande.

    Skärmbild av konfigurationen av SMS-anslutningsappen.

Nu kan du spara flödet och testa det genom att skicka ett SMS till det telefonnummer som är associerat med din Azure Communication Services resurs. Du bör få tillbaka ett sms.

Härifrån är möjligheterna oändliga. Från att svara på ett meddelande med ett förkonserverat svar till att lägga till en robot eller helt enkelt lagra svar, kan du lägga till mer logik i flödet.

Rensa resurser

Om du vill rensa och ta bort en Communication Services-prenumeration kan du ta bort resursen eller resursgruppen. Om du tar bort resursgruppen tas även alla andra resurser som är associerade med den bort. Läs mer om att rensa resurser.

Avgiftsfri verifiering

Om du har ett nytt avgiftsfritt nummer och vill skicka stora mängder SMS eller skicka SMS till kanadensiska telefonnummer, besök här för att lära dig hur du verifierar ditt avgiftsfria nummer.

Nästa steg

I den här snabbstarten har du lärt dig hur du skickar SMS med hjälp av Communication Services.