Dela via


Ta emot ett SMS

Sms-funktioner i Azure Communication Services 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 med webhooks, Azure Functions, Power Automate/Logic App-anslutningsappar med mera.

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

Den här artikeln beskriver hur du bearbetar mottagna SMS-händelser via Azure Functions med Event Grid-utlösare och kodfria kopplingar 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": "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"
}]

Anmärkning

Formatet för MessageId som returneras av det här API:et anses vara en intern implementeringsinformation och kan komma att ändras utan föregående meddelande. Klienter måste behandla meddelande-ID:n som ogenomskinliga identifierare och får inte parsa, härleda struktur eller skapa logik baserat på deras format eller innehåll.

Om du vill börja generera händelser konfigurerar du Azure Event Grid för att använda din Azure Communication Services-resurs.

Anmärkning

Att använda Azure Event Grid medför mer kostnader. Mer information finns i Priser för Azure Event Grid.

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 den färdiga utlösaren 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 dessa instruktioner.

    Konfigurera funktionen med följande instruktioner:

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

    När du har skapat den visas en funktion som skapats i katalogen 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-funktionen för att ta emot SMS-händelse

  1. Konfigurera Azure-funktionen för att parsa värden från händelsen som 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 framgångsrikt hanterat mottagandet av ett SMS genom händelser. Nu sträcker sig möjligheterna för vad man 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 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 FUNKTIONERNA i Azure Communication Service SMS för att skicka SMS. Vi börjar med att anropa SmsClient 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 din local.settings.json-fil 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. Du kan svara på ett meddelande med ett förskrivet svar, lägga till en robot eller lagra svar genom att anpassa koden i det sista steget.

Kör 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 Azure-funktion som körs lokalt med Azure Event Grid.

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

    ngrok http 7071
    

    Kopiera den länk ngrok 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-portalen. Resurs-ID:t 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 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 distributionen är klar konfigureras Event Grid för Azure Communication Services-resursen. Med URL:en för Den Azure-funktion som distribuerades (URL:en som finns i Azure-portalen 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 bör du använda samma händelseprenumerationsnamn som du använde tidigare.

Du kan testa genom att skicka ett SMS till det telefonnummer som du har konfigurerat i din 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 tillhandahåller samma uppsättning av connectors. 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 kan du konfigurera anslutningsappen. Du måste ange 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 åt dig 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-anslutningen. Konfigurera anslutningen för att ta Body objektet från Event Grid-anslutningen 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-anslutningsprogram.

Nu har du hanterat SMS-händelsen. Du har flera alternativ för vad du ska göra med det, allt från att logga händelsen till att svara på SMS. I det här dokumentet svarar vi på det mottagna SMS-meddelandet.

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 installationssidan 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 vi fick för att fylla i dem. Byt to och from numren 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 kopplat till din Azure Communication Services-resurs. Du bör få tillbaka ett sms.

Härifrån är möjligheterna oändliga. Du kan svara på ett meddelande med ett förskrivet svar, lägga till en robot, lagra svaret eller lägga till arbetsflödesautomation.

Rensa resurser

Om du vill rensa och ta bort en Communication Services-prenumeration kan du ta bort resursen eller resursgruppen. Att ta bort resursgruppen innebär också att alla andra resurser som är kopplade till den tas bort. Läs mer om att rensa resurser.

Avgiftsfri verifiering

Om du har ett nytt avgiftsfritt nummer och vill skicka en stor mängd SMS eller skicka SMS till kanadensiska telefonnummer, se SMS FAQ > Skicka avgiftsfri verifiering för att lära dig hur du verifierar ditt avgiftsfria nummer.

Nästa steg