다음을 통해 공유


Teams ID에 대한 Azure Communication Services 지원 - 사용 사례

Microsoft Teams는 Microsoft Entra ID에서 관리하는 ID와 Teams 관리 센터 및 정책으로 제어되는 통화 환경을 제공합니다. 사용자에게 Microsoft Teams 전화의 전화 통화 및 고급 통화 기능을 사용할 수 있는 라이선스가 할당되었을 수 있습니다. Teams ID에 대한 Azure Communication Services 지원을 통해 VoIP(Teams Voice over IP) 통화, Teams 전화 통화 및 Teams 모임 참가를 관리할 수 있습니다. 개발자는 Microsoft 365 에코시스템의 컨텍스트 데이터를 제공하도록 Graph API로 Azure Communication Services를 확장할 수 있습니다. 이 페이지에서는 기존 Microsoft 기술을 사용하여 Teams 사용자와의 통화 시나리오 및 Azure Communication Services Calling SDK를 위한 엔드투엔드 환경을 제공하는 방법에 대한 영감을 제공합니다.

사용 사례 1: 아웃바운드 Teams PSTN 통화

이 시나리오에서는 Contoso 회사가 Fabrikam 회사에 SaaS를 제공하는 다중 테넌트 사용 사례를 보여 줍니다. SaaS를 사용하면 Fabrikam의 사용자가 Teams 사용자의 ID와 해당 Teams 사용자에게 할당된 PSTN 연결의 구성을 사용하는 사용자 지정 웹 사이트를 통해 Teams 전화로 통화할 수 있습니다.

Diagram is showing user experience of Alice making Teams phone call to customer Megan.

다음 시퀀스 다이어그램은 Teams 전화 통화를 시작하는 자세한 단계를 보여 줍니다.

Sequence diagram is describing detailed set of steps that happens to initiate a Teams phone call using Azure Communication Services and Teams.

단계

  1. Contoso의 클라이언트 애플리케이션에서 Fabrikam의 Alice 인증: Alice가 브라우저를 사용하여 Fabrikam의 웹 페이지를 열고 인증합니다. Teams ID를 사용한 인증에 대한 자세한 내용을 확인할 수 있습니다. 인증에 성공하면 Alice가 초기 페이지로 리디렉션됩니다.
  2. 고객 및 해당 PSTN 번호 로드: Contoso는 고객 및 연결된 전화 번호의 목록을 검색하는 사용자 지정 논리를 제공합니다. 이 목록은 초기 페이지에서 Alice에게 렌더링됩니다.
  3. Megan과의 통화 시작: Alice가 Contoso의 클라이언트 애플리케이션에서 Megan과의 PSTN 통화를 시작하는 단추를 선택합니다. 클라이언트 애플리케이션은 Azure Communication Services Calling SDK를 사용하여 통화 기능을 제공합니다. 먼저 첫 번째 단계에서 획득한 Azure Communication Services 액세스 토큰을 저장하는 callAgent 인스턴스를 만듭니다.
const callClient = new CallClient(); 
tokenCredential = new AzureCommunicationTokenCredential('<AlICE_ACCESS_TOKEN>');
callAgent = await callClient.createTeamsCallAgent(tokenCredential)

그런 다음, Megan의 전화 번호로 전화를 걸어야 합니다.

const pstnCallee = { phoneNumber: '<MEGAN_PHONE_NUMBER_E164_FORMAT>' }
const oneToOneCall = callAgent.startCall([pstnCallee], { threadId: '00000000-0000-0000-0000-000000000000' });
  1. PSTN 통화를 Megan에게 연결: 통화는 Alice에게 할당된 Teams 전화 연결을 통해 라우팅되고, PSTN 네트워크에 도달하고, 제공된 전화 번호와 연결된 전화에 전화를 겁니다. Megan이 Alice의 Teams 사용자와 연결된 전화 번호에서 걸려 오는 수신 전화를 확인합니다.
  2. Megan이 전화 수락: Megan이 전화를 수락하고 Alice와 Megan 사이에 연결이 설정됩니다.

사용 사례 2: 인바운드 Teams 전화 통화 수신

이 시나리오에서는 Contoso 회사가 Fabrikam 회사에 SaaS를 제공하는 다중 테넌트 사용 사례를 보여 줍니다. SaaS를 사용하면 Fabrikam의 사용자가 Teams 사용자의 ID와 해당 Teams 사용자에게 할당된 PSTN 연결의 구성을 사용하는 사용자 지정 웹 사이트를 통해 Teams 전화 통화를 수신할 수 있습니다.

Diagram is showing user experience of Alice receiving Teams phone call from customer Megan.

다음 시퀀스 다이어그램은 수신되는 Teams 전화 통화를 수락하기 위한 자세한 단계를 보여 줍니다.

Sequence diagram is describing detailed set of steps that happens to receive a Teams phone call using Azure Communication Services and Teams.

단계

  1. Contoso의 클라이언트 애플리케이션에서 Fabrikam의 Alice 인증: Alice가 브라우저를 사용하여 Fabrikam의 웹 페이지를 열고 인증합니다. Teams ID를 사용한 인증에 대한 자세한 내용을 확인할 수 있습니다. 인증에 성공하면 Alice가 초기 페이지로 리디렉션됩니다.
  2. 수신 전화 구독: 클라이언트 애플리케이션은 Azure Communication Services Calling SDK를 사용하여 통화 기능을 제공합니다. 먼저 첫 번째 단계에서 획득한 Azure Communication Services 액세스 토큰을 저장하는 callAgent 인스턴스를 만듭니다.
const callClient = new CallClient(); 
tokenCredential = new AzureCommunicationTokenCredential('<AlICE_ACCESS_TOKEN>');
callAgent = await callClient.createTeamsCallAgent(tokenCredential)

그런 다음, 수신 전화 이벤트를 구독합니다.

const incomingCallHandler = async (args: { teamsIncomingCall: TeamsIncomingCall }) => {
    
    const incomingCall = args.teamsIncomingCall;
    
    // Get information about caller
    var callerInfo = incomingCall.callerInfo
    
    showIncomingCall(callerInfo,incomingCall);
};
callAgent.on('incomingCall', incomingCallHandler);

showIncomingCall 메서드는 수신 전화와 통화를 수락하고 거절하는 두 개의 단추를 나타내는 사용자 인터페이스를 렌더링하는 사용자 지정 Contoso의 메서드입니다. 수락 단추를 선택하면 다음 코드가 사용됩니다.

// Accept the call
var call = await incomingCall.accept();

거절 단추를 선택하면 다음 코드가 사용됩니다.

// Reject the call
incomingCall.reject();
  1. Megan이 Teams 사용자 Alice에게 할당된 PSTN 번호와의 통화 시작: Megan이 휴대폰을 사용하여 Alice에게 전화를 겁니다. 이동 통신 사업자 네트워크가 Alice에게 할당된 Teams 전화 연결 기능에 연결하고 Alice에 대해 등록된 모든 Teams 엔드포인트에 전화를 겁니다. 여기에는 Teams 데스크톱, 모바일, 웹 클라이언트 및 Azure Communication Services Calling SDK를 기반으로 하는 애플리케이션이 포함됩니다.
  2. Contoso의 클라이언트 애플리케이션에 Megan의 수신 전화가 표시됨: 클라이언트 애플리케이션이 수신 전화 알림을 받습니다. showIncomingCall 메서드가 사용자 지정 Contoso의 논리를 사용하여 전화 번호를 고객의 이름으로 변환합니다(예: 전화 번호 및 고객 이름으로 구성된 키-값 쌍을 저장하는 데이터베이스). 정보가 검색되면 Contoso의 클라이언트 애플리케이션에서 Alice에게 알림이 표시됩니다.
  3. Alice가 통화를 수락함: Alice가 통화를 수락하는 단추를 선택하고 Alice와 Megan 간의 연결이 설정됩니다.

사용 사례 3: 아웃바운드 Teams VoIP 통화

이 시나리오에서는 Contoso 회사가 Fabrikam 회사에 SaaS를 제공하는 다중 테넌트 사용 사례를 보여 줍니다. SaaS를 사용하면 Fabrikam의 사용자가 Teams 사용자의 ID를 사용하는 사용자 지정 웹 사이트를 통해 Teams VoIP 통화를 할 수 있습니다.

Diagram is showing user experience of Alice making Teams VoIP call to colleague Megan.

다음 시퀀스 다이어그램은 Teams VoIP 통화를 시작하는 자세한 단계를 보여 줍니다.

Sequence diagram is describing detailed set of steps that happens to initiate a Teams VoIP call using Azure Communication Services and Teams.

단계

  1. Contoso의 클라이언트 애플리케이션에서 Fabrikam의 Alice 인증: Alice가 브라우저를 사용하여 Fabrikam의 웹 페이지를 열고 인증합니다. Teams ID를 사용한 인증에 대한 자세한 내용을 확인할 수 있습니다. 인증에 성공하면 Alice가 초기 페이지로 리디렉션됩니다.
  2. Fabrikam 조직의 사용자 및 해당 식별자 로드: Contoso 클라이언트 애플리케이션은 Graph API를 활용하여 Fabrikam 테넌트에서 사용자 목록을 가져옵니다. Alice 또는 관리자는 Graph API에 이 작업을 수행에 대한 동의를 제공해야 합니다. 설명서에서 Graph API 명령에 대해 자세히 알아볼 수 있습니다.
GET https://graph.microsoft.com/v1.0/users
Permissions: User.ReadBasic.All (delegated)
Response: response.body.value[1].displayName; // ”Megan Bowen”
	  response.body.value[1].id; // "e8b753b5-4117-464e-9a08-713e1ff266b3"

그러면 Contoso의 클라이언트 애플리케이션에 사용자 목록과 특정 사용자와의 통화를 시작하는 기능이 표시됩니다.

  1. Megan과의 통화 시작: Alice가 Contoso의 클라이언트 애플리케이션에서 Megan과의 Teams VoIP 통화를 시작하는 단추를 선택합니다. 클라이언트 애플리케이션은 Azure Communication Services Calling SDK를 사용하여 통화 기능을 제공합니다. Teams 클라이언트의 통화는 Teams 채팅과 연결됩니다. 먼저 애플리케이션은 VoIP 통화 전용 채팅 만들기를 요청합니다.
POST https://graph.microsoft.com/v1.0/chats
Body:
{
    "chatType": "oneOnOne",
    "members": [
        {
            "@odata.type": "#microsoft.graph.aadUserConversationMember",
            "roles": [
                "owner"
            ],
            "user@odata.bind": "https://graph.microsoft.com/v1.0/users('8c0a1a67-50ce-4114-bb6c-da9c5dbcf6ca')"
        },
        {
            "@odata.type": "#microsoft.graph.aadUserConversationMember",
            "roles": [
                "owner"
            ],
            "user@odata.bind": "https://graph.microsoft.com/v1.0/users('e8b753b5-4117-464e-9a08-713e1ff266b3')"
        }
    ]
}
Permissions: Chat.Create (delegated)
Response: response.body.value.id; // "19:8c0a1a67-50ce-4114-bb6c-da9c5dbcf6ca_e8b753b5-4117-464e-9a08-713e1ff266b3@unq.gbl.spaces"

그런 다음, 클라이언트 애플리케이션은 첫 번째 단계에서 획득한 Azure Communication Services 액세스 토큰을 저장하는 callAgent 인스턴스를 만듭니다.

const callClient = new CallClient(); 
tokenCredential = new AzureCommunicationTokenCredential('<AlICE_ACCESS_TOKEN>');
callAgent = await callClient.createTeamsCallAgent(tokenCredential)

그리고 사용자가 Megan의 Teams ID로 전화를 겁니다.

var teamsUser = { microsoftTeamsUserId: 'e8b753b5-4117-464e-9a08-713e1ff266b3'};
const oneToOneCall = callAgent.startCall([teamsUser], { threadId: '19:8c0a1a67-50ce-4114-bb6c-da9c5dbcf6ca_e8b753b5-4117-464e-9a08-713e1ff266b3@unq.gbl.spaces' });
  1. VoIP 통화를 Megan에게 연결: Teams를 통해 통화가 라우팅되고 Megan과 연결된 Teams 클라이언트에 전화가 옵니다. Megan이 Microsoft Entra ID에 정의된 이름과 Alice의 수신 전화를 확인합니다.
  2. Megan이 전화 수락: Megan이 전화를 수락하고 Alice와 Megan 사이에 연결이 설정됩니다.

사용 사례 4: 인바운드 Teams VoIP 통화 수신

이 시나리오에서는 Contoso 회사가 Fabrikam 회사에 SaaS를 제공하는 다중 테넌트 사용 사례를 보여 줍니다. SaaS를 사용하면 Fabrikam의 사용자가 Teams 사용자의 ID를 사용하고 Teams 사용자에게 적용되는 라우팅 정책을 적용하는 사용자 지정 웹 사이트를 통해 Teams VoIP 통화를 수신할 수 있습니다.

Diagram is showing user experience of Alice receiving Teams VoIP call from customer Megan.

다음 시퀀스 다이어그램은 수신되는 Teams VoIP 통화를 수락하기 위한 자세한 단계를 보여 줍니다.

Sequence diagram is describing detailed set of steps that happens to receive a Teams VoIP call using Azure Communication Services. Graph API, and Teams.

단계

  1. Contoso의 클라이언트 애플리케이션에서 Fabrikam의 Alice 인증: Alice가 브라우저를 사용하여 Fabrikam의 웹 페이지를 열고 인증합니다. Teams ID를 사용한 인증에 대한 자세한 내용을 확인할 수 있습니다. 인증에 성공하면 Alice가 초기 페이지로 리디렉션됩니다.
  2. 수신 전화 구독: 클라이언트 애플리케이션은 Azure Communication Services Calling SDK를 사용하여 통화 기능을 제공합니다. 먼저 첫 번째 단계에서 획득한 Azure Communication Services 액세스 토큰을 저장하는 callAgent 인스턴스를 만듭니다.
const callClient = new CallClient(); 
tokenCredential = new AzureCommunicationTokenCredential('<AlICE_ACCESS_TOKEN>');
callAgent = await callClient.createTeamsCallAgent(tokenCredential)

그런 다음, 애플리케이션이 수신 전화 이벤트를 구독합니다.

const incomingCallHandler = async (args: { teamsIncomingCall: TeamsIncomingCall }) => {
    
    const incomingCall = args.teamsIncomingCall;
    
    // Get information about caller
    var callerInfo = incomingCall.callerInfo
    
    showIncomingCall(callerInfo,incomingCall);
};
callAgent.on('incomingCall', incomingCallHandler);

showIncomingCall 메서드는 수신 전화와 통화를 수락하고 거절하는 두 개의 단추를 나타내는 사용자 인터페이스를 렌더링하는 사용자 지정 Contoso의 메서드입니다. 수락 단추를 선택하면 다음 코드가 사용됩니다.

// Accept the call
var call = await incomingCall.accept();

거절 단추를 선택하면 다음 코드가 사용됩니다.

// Reject the call
incomingCall.reject();
  1. Megan이 Teams 사용자 Alice와의 VoIP 통화 시작: Megan이 Teams 데스크톱 클라이언트를 사용하여 Alice에게 전화를 겁니다. Teams 인프라가 Alice와 연결된 모든 엔드포인트에 전화를 겁니다. 여기에는 Teams 데스크톱, 모바일, 웹 클라이언트 및 Azure Communication Services Calling SDK를 기반으로 하는 애플리케이션이 포함됩니다.
  2. Contoso의 클라이언트 애플리케이션에 Megan의 수신 전화가 표시됨: 클라이언트 애플리케이션이 수신 전화 알림을 받습니다. showIncomingCall 메서드는 Graph API를 사용하여 Teams 사용자 ID를 표시 이름으로 변환합니다.
GET https://graph.microsoft.com/v1.0/users/e8b753b5-4117-464e-9a08-713e1ff266b3
Permissions: User.Read (delegated)
Response: response.body.value.displayName; // ”Megan Bowen”
	  response.body.value.id; // "e8b753b5-4117-464e-9a08-713e1ff266b3"

정보가 검색되면 Contoso의 클라이언트 애플리케이션에서 Alice에게 알림이 표시됩니다.

  1. Alice가 통화를 수락함: Alice가 통화를 수락하는 단추를 선택하고 Alice와 Megan 간의 연결이 설정됩니다.

사용 사례 5: Teams 모임 참가

이 시나리오에서는 Contoso 회사가 Fabrikam 회사에 SaaS를 제공하는 다중 테넌트 사용 사례를 보여 줍니다. Fabrikam 사용자는 SaaS를 사용하여 Teams 사용자의 ID를 사용하는 사용자 지정 웹 사이트를 통해 Teams 모임에 참가할 수 있습니다.

Diagram is showing user experience of Alice joining Teams Meeting.

다음 시퀀스 다이어그램은 Teams 모임에 참가하기 위한 자세한 단계를 보여 줍니다.

Sequence diagram is describing detailed set of steps that happens to join a Teams meeting using Azure Communication Services, Graph API, and Teams.

단계

  1. Contoso의 클라이언트 애플리케이션에서 Fabrikam의 Alice 인증: Alice가 브라우저를 사용하여 Fabrikam의 웹 페이지를 열고 인증합니다. Teams ID를 사용한 인증에 대한 자세한 내용을 확인할 수 있습니다. 인증에 성공하면 Alice가 초기 페이지로 리디렉션됩니다.
  2. Teams 모임 및 해당 식별자 로드: Contoso 클라이언트 애플리케이션은 Graph API를 활용하여 Fabrikam 사용자의 Teams 모임 목록을 가져옵니다. Alice 또는 관리자는 Graph API에 이 작업을 수행에 대한 동의를 제공해야 합니다. 설명서에서 Graph API 명령에 대해 자세히 알아볼 수 있습니다.
GET https://graph.microsoft.com/v1.0/me/calendar/calendarView?startDateTime={start_datetime}&endDateTime={end_datetime}
Permissions: Calendars.Read (delegated)
Response: response.body.value[0].subject; // ”Project Tailspin”
	  response.body.value[0].onlineMeeting.joinUrl; // "https://teams.microsoft.com/l/meetup-join/..."
	  response.body.value[0].start.dateTime;
	  response.body.value[0].end.dateTime;
	  response.body.value[0].location.displayName;

그러면 Contoso의 클라이언트 애플리케이션에 Teams 모임 목록과 참가 기능이 표시됩니다.

  1. Teams 모임 "Project Tailspin" 참가: Alice가 Contoso의 클라이언트 애플리케이션에서 Teams 모임 "Project Tailspin"에 참가하는 단추를 선택합니다. 클라이언트 애플리케이션은 Azure Communication Services Calling SDK를 사용하여 통화 기능을 제공합니다. 클라이언트 애플리케이션은 첫 번째 단계에서 획득한 Azure Communication Services 액세스 토큰을 저장하는 callAgent 인스턴스를 만듭니다.
const callClient = new CallClient(); 
tokenCredential = new AzureCommunicationTokenCredential('<AlICE_ACCESS_TOKEN>');
callAgent = await callClient.createTeamsCallAgent(tokenCredential)

그런 다음, 애플리케이션이 수신된 joinUrl을 통해 모임에 참가합니다.

var meetingLocator = new TeamsMeetingLinkLocator("https://teams.microsoft.com/l/meetup-join/...");
callAgent.startCallJoinAsync(meetingLocator , new JoinCallOptions());

그런 다음, Alice가 Teams 모임에 참가합니다.

  1. 다른 참가자가 Teams 모임에 참가함: 제공되는 환경은 표준 Teams 모임입니다. 구성 및 초대에 따라 Teams 웹 클라이언트, Teams 데스크톱 클라이언트, Teams 모바일 클라이언트를 사용하는 Teams 사용자, Teams 익명 사용자, Communication Services Calling SDK 기반 애플리케이션을 사용하는 Azure Communication Services 사용자 또는 휴대폰을 사용하는 사용자가 Teams 모임에 참가할 수 있습니다.

다음 단계

다음 문서가 유용할 수 있습니다.