빠른 시작: 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 수신 이벤트를 처리하는 방법을 중점적으로 설명합니다.
SMS가 Azure Communication Services 전화 번호로 전송될 때 생성된 SMSReceived
이벤트는 다음과 같은 방식으로 형식이 지정됩니다.
[{
"id": "Incoming_20200918002745d29ebbea-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": "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"
}]
이벤트 생성을 시작하려면 Azure Communication Services 리소스용 Azure Event Grid를 구성해야 합니다.
참고 항목
Azure Event Grid를 사용하면 추가 비용이 발생합니다. 자세한 내용은 Azure Event Grid 가격을 참조하세요.
필수 구성 요소
- 활성 구독이 있는 Azure 계정. 체험 계정을 만듭니다.
- 활성 Communication Services 리소스 및 연결 문자열 Communication Services 리소스 만들기
- SMS 지원 전화 번호. 전화 번호를 가져옵니다.
- 구독에서 Event Grid 리소스를 제공하도록 설정합니다. 지침을 참조하세요.
Event Grid는 Azure Functions를 지본적으로 지원하므로, 복잡한 헤더 구문 분석 또는 웹후크 디버깅 문제를 처리하지 않고도 이벤트 수신기를 손쉽게 설정할 수 있습니다. 기본 제공되는 트리거를 사용하여 트리거와 일치하는 이벤트가 검색될 때마다 실행되는 Azure 함수를 설정할 수 있습니다. 이 문서에서는 SMS 수신 트리거에 중점을 줍니다.
로컬 환경 설정
Visual Studio Code를 사용하여 Azure Functions 확장을 설치합니다.
확장을 사용하여 다음 지침에 따라 Azure 함수를 만듭니다.
다음 지침에 따라 함수를 구성합니다.
- 언어: 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 함수 구성
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에 응답
- 들어오는 SMS에 응답하려면 Azure Communication Service SMS 기능을 사용해 SMS를 보냅니다. 먼저
SmsClient
를 호출하고 리소스에 대한connection string
으로 초기화합니다. 연결 문자열을 코드에 직접 붙여넣거나, 값 아래 Azure 함수 디렉터리의 local.settings.json 파일 안에 배치할 수 있습니다.
{
"IsEncrypted": false,
"Values": {
"FUNCTIONS_WORKER_RUNTIME": "node",
"ACS_CONNECTION_STRING": "<<CONNECTION STRING>>"
}
}
그런 다음, 받은 이벤트의
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 Event Grid를 통해 로컬로 실행되는 Azure 함수를 후크합니다.
함수가 실행되면 ngrok를 구성합니다. 이때 사용자 환경에 맞는 ngrok를 다운로드해야 합니다.
ngrok http 7071
함수가 실행 중인 위치에 제공된 ngrok 링크를 복사합니다.
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
이제 모든 항목이 연결되었으므로, Azure Communication Services 리소스에 있는 전화 번호로 SMS를 보내 흐름을 테스트합니다. 함수가 실행 중인 터미널에 콘솔 로그가 표시됩니다. SMS에 응답하기 위한 코드를 추가한 경우, 해당 문자 메시지가 사용자에게 다시 전달되는 것을 볼 수 있습니다.
Azure에 배포
Azure 함수를 Azure에 배포하려면 다음 지침을 따라야 합니다. 배포되면 Azure Communication Services 리소스용 Event Grid를 구성합니다. 배포된 Azure 함수의 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 커넥터로 이벤트 처리
먼저 선호하는 환경에서 새 흐름을 만듭니다.
When a resource event occurs
트리거를 선택해서 시작합니다.그럼 이제 구성해 보겠습니다. 커넥터를 사용하려면 이용하려는 구독을 제공해야 합니다. 이때 Azure Communication Services 리소스가 있는 구독과 동일해야 합니다. 리소스 유형을 지정합니다. 이 경우
Microsoft.Communication.CommunicationServices
를 선택합니다. 그런 다음 연결하려는 Azure Communication Services 리소스의 리소스 이름을 제공해야 합니다. 마지막으로 수신하려는 이벤트 유형을 선택해야 합니다. 이 경우Microsoft.Communication.SMSReceived
입니다.커넥터는 사용자 대신 이벤트 구독을 자동으로 설정하고, 수신하려는 이벤트를 구성합니다.
나중에 좀 더 쉽게 작업할 수 있도록 하려면
Parse JSON connector
를 추가하여 Event Grid 커넥터에서 들어오는 응답을 처리합니다. 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" }
이제 SMS 이벤트를 성공적으로 처리했습니다. 그러면 이벤트 로깅부터 SMS 응답에 이르기까지 다양한 옵션을 사용할 수 있습니다. 이 문서의 컨텍스트에서는 이에 응답하는 방법을 보여 드립니다. SMS에 응답하는 단계를 알아보려면 계속 읽어보세요.
SMS에 응답
먼저 SMS 커넥터를 흐름에 추가하고 Azure Communication Services 리소스에 대한 정보로 구성합니다. 이렇게 하면 커넥터에서 리소스에 액세스하고 SMS를 대신 보낼 수 있습니다. 리소스에 대한
connection string
이 필요합니다.다음으로, 보낸 사람과 받는 사람에 대한 정보로 커넥터를 구성합니다. 받은 이벤트의 정보를 사용하여 채웁니다.
to
및from
번호를 입력하여 SMS를 원래 보낸 사람에게 다시 보냅니다. 마지막으로 메시지를 추가합니다.
이제 흐름을 저장하고 SMS를 Azure Communication Services 리소스와 연결된 전화 번호로 보내서 테스트할 수 있습니다. 문자 메시지를 다시 받아야 합니다.
이제 가능성은 무한합니다. 미리 만든 답변으로 메시지에 응답하는 일부터 봇을 추가하거나 단순히 응답을 저장하는 일까지, 흐름에 더 많은 논리를 추가할 수 있습니다.
리소스 정리
Communication Services 구독을 정리하고 제거하려면 리소스 또는 리소스 그룹을 삭제하면 됩니다. 리소스 그룹을 삭제하면 해당 리소스 그룹에 연결된 다른 모든 리소스가 함께 삭제됩니다. 리소스 정리에 대해 자세히 알아보세요.
무료 확인
새 무료 번호가 있고 많은 양의 SMS 메시지를 보내거나 SMS 메시지를 캐나다 전화 번호로 보내려면 여기를 방문하여 무료 번호를 확인하는 방법을 알아보세요.
다음 단계
이 빠른 시작에서는 Communication Services를 사용하여 SMS 메시지를 보내는 방법을 알아보았습니다.