다음을 통해 공유


SMS 메시지 받기

Azure Communication Services SMS 기능은 개발자에게 SMS 수신 이벤트를 사용할 수 있는 옵션을 제공합니다. 이벤트는 웹후크, Azure Functions, Power Automate/Logic App 커넥터 등을 사용하여 처리하는 기본 통합을 제공하는 Azure Event Grid에 게시됩니다.

수신되면 SMS 메시지를 처리하여 응답하거나 나중에 액세스할 수 있도록 데이터베이스에 기록할 수 있습니다.

이 문서에서는 Power Automate/Logic Apps용 Event Grid 트리거 및 코드 없는 커넥터를 사용하여 Azure Functions를 통해 SMS 수신 이벤트를 처리하는 방법을 설명합니다.

SMSReceived SMS가 Azure Communication Services 전화 번호로 전송될 때 생성된 이벤트는 다음과 같은 방식으로 형식이 지정됩니다.

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

비고

이 API에서 반환되는 형식 MessageId 은 내부 구현 세부 정보로 간주되며 예고 없이 변경될 수 있습니다. 클라이언트는 메시지 ID를 불투명 식별자로 처리해야 하며 형식 또는 콘텐츠에 따라 구문 분석, 구조 유추 또는 빌드 논리를 작성해서는 안 됩니다.

이벤트 생성을 시작하려면 Azure Communication Services 리소스를 사용하도록 Azure Event Grid를 구성합니다.

비고

Azure Event Grid를 사용하면 더 많은 비용이 발생합니다. 자세한 내용은 Azure Event Grid 가격 책정을 참조하세요.

필수 조건

Event Grid는 Azure Functions에 대한 기본 지원을 제공하므로 헤더 구문 분석 또는 웹후크 디버깅의 복잡성을 처리할 필요 없이 이벤트 수신기를 쉽게 설정할 수 있습니다. 기본 제공 트리거를 사용하여 트리거와 일치하는 이벤트가 검색될 때마다 실행되는 Azure Function을 설정할 수 있습니다. 이 문서에서는 SMS 수신 트리거에 초점을 맞춥니다.

로컬 환경 설정

  1. Visual Studio Code를 사용하여 Azure Functions 확장을 설치합니다.

  2. 확장을 사용하여 다음 지침에 따라 Azure Function을 만드십시오 .

    다음 지침에 따라 함수를 구성합니다.

    • 언어: TypeScript
    • 템플릿: Azure Event Grid 트리거
    • 함수 이름: 사용자 정의

    만든 후에는 다음과 같이 디렉터리에 생성된 함수가 표시됩니다.

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

SMS 이벤트를 수신하도록 Azure Function 구성

  1. Azure Function을 구성하여 이벤트에서 누구에게 보냈는지, 어떤 번호로 보냈는지, 메시지 내용은 무엇인지와 같은 값을 파싱합니다.

    
    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 Communication Service SMS 기능을 사용합니다. 먼저 우리는 SmsClient을 호출하고, connection string을 사용하여 리소스를 초기화합니다. 연결 문자열을 코드에 직접 붙여넣거나 Azure Function 디렉터리의 local.settings.json 파일 안에 값 아래에 배치할 수 있습니다.

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

  1. 받은 이벤트의 to 값 및 from 값을 기반으로 SMS를 작성합니다.

    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;
    

여기에서, 가능성은 무한합니다. 마지막 단계에서 코드를 조정하여 미리 작성된 답변으로 메시지에 응답하거나, 봇을 추가하거나, 응답을 저장할 수 있습니다.

로컬 실행

함수를 로컬로 실행하려면 Visual Studio Code에서 F5를 누르세요. ngrok를 사용하여 로컬로 실행되는 Azure Function을 Azure Event Grid와 연결합니다.

  1. 함수가 실행되면 ngrok을 구성하십시오. 환경에 맞게 ngrok를 다운로드 해야 합니다.

    ngrok http 7071
    

    함수가 실행 중인 위치에 제공된 링크를 복사하십시오.

  2. Azure Communication Services 리소스 내에서 Event Grid를 통해 SMS 이벤트를 구성합니다. Azure CLI를 사용하여 이 작업을 수행합니다. Azure Portal에 있는 Azure Communication Services 리소스에 대한 리소스 ID가 필요합니다. 리소스 ID는 다음과 같습니다. /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. 이제 모든 항목이 연결되었으므로 Azure Communication Services 리소스의 전화 번호로 SMS를 전송하여 흐름을 테스트합니다. 함수가 실행 중인 터미널에 콘솔 로그가 표시됩니다. SMS에 응답하는 코드를 추가한 경우 문자 메시지가 다시 전달되는 것을 볼 수 있습니다.

Azure에 배포

Azure 함수를 Azure에 배포하려면 다음 지침을 따라야 합니다. 배포되면 Azure Communication Services 리소스에 대한 Event Grid를 구성합니다. 배포된 Azure Function의 URL(함수 아래의 Azure Portal에 있는 URL)을 사용하여 다음 명령을 실행합니다.

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

로컬 테스트를 위해 만든 이벤트 구독을 업데이트하고 있으므로 이전에 사용한 것과 동일한 이벤트 구독 이름을 사용해야 합니다.

Azure Communication Services 리소스에서 설정한 전화 번호로 SMS를 전송하여 테스트할 수 있습니다.

Logic Apps 및 Power Automate는 Event Grid를 통해 Azure Communication Services에서 생성된 이벤트를 처리하는 데 도움이 되는 기본 커넥터를 제공합니다. Logic Apps와 Power Automate는 모두 동일한 커넥터 집합을 제공합니다. 결정하는 것은 당신에게 달려 있습니다. 결정을 내리기 위해 서비스 간의 차이점에 대해 읽어보세요.

Event Grid 커넥터를 사용하여 이벤트 처리

  1. 먼저 선호하는 환경에서 새 흐름을 만듭니다. When a resource event occurs 트리거를 선택하여 시작하세요.

    Power Automate에 대한 트리거 선택 스크린샷

  2. 이제 커넥터를 구성할 수 있습니다. 사용하려는 구독을 제공해야 합니다. (Azure Communication Services 리소스가 있는 구독과 동일해야 합니다). 리소스 유형을 지정합니다. 이 경우 을 선택합니다 Microsoft.Communication.CommunicationServices. 그런 다음 연결할 Azure Communication Services 리소스에 대한 리소스 이름을 제공해야 합니다. 마지막으로 수신하려는 이벤트 유형을 선택해야 합니다. 이 경우 . Microsoft.Communication.SMSReceived

    Event Grid 커넥터의 스크린샷.

    커넥터는 사용자를 대신하여 이벤트 구독을 자동으로 설정하고 수신하려는 이벤트를 구성합니다.

  3. 나중에 우리의 삶을 더 쉽게 만들기 위해 Event Grid 커넥터에서 오는 응답을 처리할 수 있도록 Parse JSON connector을 추가하세요. Event Grid 커넥터에서 개체를 Body 가져와서 이벤트에 대한 예상 스키마와 일치하도록 커넥터를 구성합니다.

    샘플 스키마(보기 위해 열기)
    
        {
            "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"
        }
    
    

    JSON 구문 분석 커넥터의 스크린샷

이 시점에서 SMS 이벤트를 성공적으로 처리했습니다. 이벤트 로깅부터 SMS 응답에 이르기까지 다양한 옵션을 사용할 수 있습니다. 이 문서의 컨텍스트에서 수신된 SMS 메시지에 응답합니다.

SMS에 응답

  1. 먼저 흐름에 SMS 커넥터를 추가하고 Azure Communication Services 리소스에 대한 정보를 사용하여 구성합니다. 이를 통해 커넥터는 리소스에 액세스하고 대신 SMS를 보낼 수 있습니다. 리소스에 connection string가 필요합니다.

    SMS 커넥터에 대한 설정 페이지의 스크린샷.

  2. 다음으로, 보낸 사람과 받는 사람에 대한 정보를 사용하여 커넥터를 구성합니다. 받은 이벤트의 정보를 사용하여 채웁합니다. tofrom 번호를 바꿔서 원래 보낸 사람에게 SMS를 다시 보냅니다. 마지막으로 메시지를 추가합니다.

    SMS 커넥터 구성의 스크린샷.

이제 Azure Communication Services 리소스와 연결된 전화 번호로 SMS를 전송하여 흐름을 저장하고 테스트할 수 있습니다. 문자 메시지를 다시 받아야 합니다.

여기에서, 가능성은 무한합니다. 미리 작성된 답변으로 메시지에 응답하거나, 봇을 추가하거나, 응답을 저장하거나, 워크플로 자동화를 추가할 수 있습니다.

자원을 정리하세요

Communication Services 구독을 정리하고 제거하려면 리소스 또는 리소스 그룹을 삭제하면 됩니다. 리소스 그룹을 삭제하면 해당 리소스 그룹에 연결된 다른 모든 리소스가 함께 삭제됩니다. 리소스 정리에 대해 자세히 알아보세요.

무료 확인

새 무료 번호가 있고 대량의 SMS 메시지를 보내거나 캐나다 전화 번호로 SMS 메시지를 보내려는 경우 SMS FAQ > 무료 확인 제출 을 참조하여 무료 전화 번호를 확인하는 방법을 알아봅니다.

다음 단계