수신 전화 개념

Azure Communication Services Call Automation를 사용하면 개발자가 전화를 걸고 받을 수 있는 애플리케이션을 만들 수 있습니다. Event Grid 구독을 활용하여 IncomingCall 이벤트를 제공하므로 애플리케이션이 통화를 효과적으로 리디렉션하거나 응답하도록 이러한 알림을 받도록 환경을 구성하는 것이 중요합니다. 따라서 수신 호출의 기본 사항을 이해하는 것은 Azure Communication Services Call Automation의 모든 잠재력을 활용하는 데 필수적입니다.

통화 시나리오

환경을 설정하기 전에 IncomingCall 이벤트를 트리거할 수 있는 시나리오를 이해하는 것이 중요합니다. IncomingCall 이벤트를 트리거하려면 Azure Communication Services ID 또는 Azure Communication Services 리소스와 연결된 PSTN(공용 교환 전화망) 번호를 호출해야 합니다. 다음은 이러한 리소스의 예입니다.

  1. Azure Communication Services ID
  2. Azure Communication Services 리소스가 소유한 PSTN 전화번호

이러한 예제를 고려할 때 다음 시나리오는 Event Grid로 전송된 IncomingCall 이벤트를 트리거합니다.

원본 대상 시나리오
Azure Communication Services ID Azure Communication Services ID 호출, 리디렉션, 참가자 추가, 전송
Azure Communication Services ID Azure Communication Services 리소스가 소유한 PSTN 번호 호출, 리디렉션, 참가자 추가, 전송
공용 PSTN Azure Communication Services 리소스가 소유한 PSTN 번호 호출, 리디렉션, 참가자 추가, 전송

참고 항목

Azure Communication Services ID가 사용자 또는 애플리케이션을 나타낼 수 있음을 이해하는 것이 중요합니다. 플랫폼에는 사용자 또는 애플리케이션에 ID를 명시적으로 할당하는 기본 제공 기능이 없지만 애플리케이션 또는 지원 인프라에서 이를 수행할 수 있습니다. 이 토픽에 대한 자세한 내용은 ID 개념 가이드를 참조하세요.

Event Grid 리소스 공급자 등록

이전에 Azure 구독에서 Event Grid를 사용하지 않은 경우 Event Grid 리소스 공급자를 등록해야 할 수 있습니다. 공급자를 등록하려면 다음 단계를 따릅니다.

  1. Azure Portal로 이동합니다.
  2. 왼쪽 메뉴에서 구독을 선택합니다.
  3. Event Grid에 사용하는 구독을 선택합니다.
  4. 왼쪽 메뉴의 설정에서 리소스 공급자를 선택합니다.
  5. Microsoft.EventGrid를 찾습니다.
  6. 리소스 공급자가 등록되지 않은 경우 등록을 선택합니다.

Event Grid에서 수신 전화 알림 받기

Azure Communication Services에서는 Event Grid 구독을 통해 IncomingCall 알림을 받을 수 있습니다. 알림의 수신자는 처리 방법을 유연하게 선택할 수 있습니다. Call Automation API는 이벤트에 대한 웹후크 콜백을 활용하므로 일반적으로 'Webhook' Event Grid 구독을 사용합니다. 그러나 서비스는 다양한 구독 유형을 제공하며 필요에 가장 적합한 구독 유형을 선택할 수 있습니다.

이 아키텍처에는 다음과 같은 이점이 있습니다.

  • Event Grid 구독 필터를 사용하여 IncomingCall 알림을 특정 애플리케이션으로 라우팅할 수 있습니다.
  • PSTN 번호 할당 및 라우팅 논리는 애플리케이션에 존재할 수 있으며 온라인에서 정적으로 구성될 수 있습니다.
  • 호출 시나리오 섹션에서 설명한 것처럼 사용자가 서로 간에 전화를 걸 때도 애플리케이션에 알릴 수 있습니다. 그런 다음 이 시나리오를 통화 녹음 API와 결합하여 규정 준수 요구를 충족할 수 있습니다.

이벤트의 샘플 페이로드 및 Event Grid에 게시된 다른 호출 이벤트에 대한 자세한 내용은 이 가이드를 참조하세요.

다음은 이벤트 유형 필터가 IncomingCall 이벤트를 수신 대기하는 Event Grid Webhook 구독의 예제입니다.

Image showing IncomingCall subscription.

Call Automation 및 Event Grid를 사용하여 라우팅 옵션 호출

Call Automation 및 Event Grid에서 호출 라우팅은 특정 요구 사항에 맞게 조정할 수 있습니다. Event Grid 구독 내에서 고급 필터를 사용하면 특정 원본/대상 전화 번호 또는 Azure Communication Services ID와 관련된 IncomingCall 알림을 구독할 수 있습니다. 그러면 이 알림을 웹후크 구독과 같은 엔드포인트로 보낼 수 있습니다. 그런 다음, 통화 자동화 SDK를 사용하면 엔드포인트 애플리케이션은 통화를 다른 Azure Communication Services ID 또는 PSTN으로 리디렉션하도록 결정할 수 있습니다.

참고 항목

애플리케이션이 필요한 이벤트만 수신하도록 하려면 Event Grid에서 필터링을 구성하는 것이 좋습니다. 이는 인바운드 PSTN 호출을 Azure Communication Services 엔드포인트로 리디렉션하는 등 IncomingCall 이벤트를 생성하는 시나리오에서 특히 중요합니다. 필터를 사용하지 않는 경우 Event Grid 구독은 첫 번째 알림만 수신하려고 했음에도 불구하고 두 개의 IncomingCall 이벤트(PSTN 통화용 하나와 Azure Communication Services 사용자용 하나)를 수신합니다. 애플리케이션에서 필터 또는 다른 메커니즘을 사용하여 이러한 시나리오를 처리하지 않으면 무한 루프 및 기타 바람직하지 않은 동작이 발생할 수 있습니다.

다음은 '+18005551212의 PSTN 전화 번호로 시작하는 data.to.PhoneNumber.Value 문자열을 감시하는 Event Grid 구독의 고급 필터 예제입니다.

Image showing Event Grid advanced filter.

번호 할당

Azure Communication Services에서 IncomingCall 알림을 사용하는 경우 특정 번호를 모든 엔드포인트와 자유롭게 연결할 수 있습니다. 예를 들어 +14255551212의 PSTN 전화 번호를 가져와 애플리케이션에서 375f0e2f-e8db-4449-9bf7-2054b02e42b4 ID를 가진 사용자에게 할당하려는 경우 해당 번호의 매핑을 ID에 유지 관리해야 합니다. 받는 사람 필드의 전화번호와 일치하는 IncomingCall 알림이 전송되면 Redirect API를 호출하고 사용자의 ID를 제공합니다. 즉, 애플리케이션 내에서 번호 할당을 관리하고 런타임 시 통화를 라우팅하거나 답변합니다.

좋은 연습 방법

  1. Event Grid가 웹후크 엔드포인트에 이벤트를 제공하고 악의적인 사용자가 엔드포인트로 이벤트가 쇄도하는 것을 방지하려면 소유권을 증명해야 합니다. 이벤트 수신과 관련된 문제를 해결하려면 SubscriptionValidationEvent를 처리하여 구성한 웹후크가 확인되었는지 확인합니다. 자세한 내용은 이 가이드를 참조하세요.

  2. 수신 전화 이벤트가 수신되면 애플리케이션이 필요한 시간 프레임 내에 Event Grid에 200Ok 상태 코드로 다시 응답하지 못하는 경우 Event Grid는 지수 백오프 재시도를 활용하여 이벤트를 다시 보냅니다. 그러나 수신 전화는 30초 동안만 울리며, 그 시간 이후에는 통화에 응답할 수 없습니다. 만료되거나 부실한 호출에 대한 재시도를 방지하려면 재시도 정책을 최대 이벤트 배달 시도 횟수를 2로, 이벤트 TTL(Time to Live)을 1분으로 설정하는 것이 좋습니다. 이러한 설정은 이벤트 구독의 추가 기능 탭에서 찾을 수 있습니다. 여기에서 재시도에 대해 자세히 알아봅니다.

  3. Event Grid 리소스에 대한 로깅을 사용하도록 설정하여 배달에 실패한 이벤트를 모니터링하는 것이 좋습니다. 이렇게 하려면 통신 리소스의 이벤트 탭 아래에 있는 시스템 토픽으로 이동하고 진단 설정에서 로깅을 사용하도록 설정합니다. 실패 로그는 'AegDeliveryFailureLogs' 테이블에서 찾을 수 있습니다.

    AegDeliveryFailureLogs
    | limit 10 
    | where Message has "incomingCall"
    

다음 단계