Azure Communication Services의 문제 해결

이 문서는 Communication Services 솔루션에서 발생할 수 있는 문제를 해결하는 데 도움이 됩니다. SMS 문제를 해결하는 경우 Event Grid를 통해 전달 보고를 사용하여 SMS 전달 세부 정보를 캡처할 수 있습니다.

도움말 가져오기

개발자는 질문을 제출하고, 기능을 제안하고, 문제를 보고하는 것이 좋습니다. 자세한 내용은 전담 지원 및 도움말 옵션 페이지를 참조하세요.

특정 문제를 해결하려면 다음 정보 중 하나 이상이 필요할 수 있습니다.

  • MS-CV ID: 전화 및 메시지 문제를 해결합니다.
  • 통화 ID: Communication Services 통화를 식별합니다.
  • SMS 메시지 ID: SMS 메시지를 식별합니다.
  • 짧은 코드 프로그램 브리프 ID: 짧은 코드 프로그램 브리프 애플리케이션을 식별합니다.
  • 무료 전화 확인 캠페인 브리프 ID: 무료 전화 확인 캠페인 브리프 애플리케이션을 식별합니다.
  • 이메일 메시지 ID: 이메일 보내기 요청을 식별합니다.
  • 상관 관계 ID: 통화 자동화를 사용하여 이루어진 요청을 식별합니다.
  • 통화 기록: 통화 및 네트워크 문제를 해결하는 데 사용할 수 있는 자세한 정보가 포함되어 있습니다.

제한 및 한도에 대한 자세한 내용은 서비스 한도를 참조하세요.

MS CV ID에 액세스

SDK를 초기화할 때 clientOptions 개체 인스턴스에서 진단을 구성하여 MS-CV ID에 액세스할 수 있습니다. 채팅, ID, VoIP 통화를 포함한 모든 Azure SDK에 대한 진단을 구성할 수 있습니다.

클라이언트 옵션 예제

다음 코드 조각에서는 진단 구성을 보여줍니다. SDK에 대한 진단을 사용하도록 설정하면 구성된 이벤트 수신기로 진단 세부 정보를 내보낼 수 있습니다.

// 1. Import Azure.Core.Diagnostics
using Azure.Core.Diagnostics;

// 2. Initialize an event source listener instance
using var listener = AzureEventSourceListener.CreateConsoleLogger();
Uri endpoint = new Uri("https://<RESOURCE-NAME>.communication.azure.net");
var (token, communicationUser) = await GetCommunicationUserAndToken();
CommunicationUserCredential communicationUserCredential = new CommunicationUserCredential(token);

// 3. Setup diagnostic settings
var clientOptions = new ChatClientOptions()
{
    Diagnostics =
    {
        LoggedHeaderNames = { "*" },
        LoggedQueryParameters = { "*" },
        IsLoggingContentEnabled = true,
    }
};

// 4. Initialize the ChatClient instance with the clientOptions
ChatClient chatClient = new ChatClient(endpoint, communicationUserCredential, clientOptions);
ChatThreadClient chatThreadClient = await chatClient.CreateChatThreadAsync("Thread Topic", new[] { new ChatThreadMember(communicationUser) });

통화 자동화에 필요한 액세스 ID

호출 관리 또는 녹음/녹화 문제와 같은 통화 자동화 SDK와 관련된 문제를 해결하는 경우 실패한 호출 또는 작업을 식별하는 데 도움이 되는 ID를 수집해야 합니다. 다음 두 가지 ID 중 하나를 제공할 수 있습니다.

  • API 응답 헤더에서 X-Ms-Skype-Chain-Id 필드를 찾습니다.

    X-Ms-Skype-Chain-Id를 보여 주는 응답 헤더의 스크린샷

  • 작업을 실행한 후 애플리케이션이 수신하는 콜백 이벤트에서. 예를 들어 CallConnected 또는 PlayFailed의 경우 correlationID를 찾습니다.

    상관 관계 ID를 보여 주는 통화 연결 끊김 이벤트의 스크린샷

이러한 ID 중 하나 외에도 오류가 발생한 사용 사례와 타임스탬프에 대한 세부 정보를 제공해야 합니다.

클라이언트 호출 ID에 액세스

음성 또는 영상 통화 문제를 해결할 때 call ID를 제공해야 할 수도 있습니다. call 개체의 id 속성을 통해 이 값에 액세스합니다.

// `call` is an instance of a call created by `callAgent.startCall` or `callAgent.join` methods
console.log(call.id)

SMS 메시지 ID에 액세스

SMS 문제의 경우 응답 개체에서 메시지 ID를 수집할 수 있습니다.

// Instantiate the SMS client
const smsClient = new SmsClient(connectionString);
async function main() {
  const result = await smsClient.send({
    from: "+18445792722",
    to: ["+1972xxxxxxx"],
    message: "Hello World 👋🏻 via Sms"
  }, {
    enableDeliveryReport: true // Optional parameter
  });
console.log(result); // your message ID is in the result
}

짧은 코드 프로그램 간략한 ID에 액세스

Azure Portal의 Short Codes 섹션에서 프로그램 브리프 ID를 찾습니다.

짧은 코드 프로그램 간략한 ID를 보여 주는 스크린샷


무료 확인 캠페인 간략 ID에 액세스

Azure Portal의 규정 문서 섹션에서 프로그램 브리프 설명 ID를 찾습니다.

무료 확인 캠페인 간략 ID를 보여 주는 스크린샷.


이메일 작업 ID에 액세스

이메일이나 이메일 메시지 상태 요청을 보내는 것과 관련된 문제를 해결할 때 operation ID를 제공해야 할 수도 있습니다. 응답에서 이 값에 액세스할 수 있습니다.

var emailSendOperation = await emailClient.SendAsync(
    wait: WaitUntil.Completed,
    senderAddress: sender,
    recipientAddress: recipient,
    subject: subject,
    htmlContent: htmlContent);

/// Get the OperationId so that it can be used for tracking the message for troubleshooting
Console.WriteLine($"Email operation id = {emailSendOperation.Id}");

호출 SDK에서 지원 파일 액세스

SDK를 호출하면 로그 파일에 편리하게 액세스할 수 있습니다. 이러한 파일은 Microsoft 지원 전문가 및 엔지니어에게 유용할 수 있습니다. 문제가 검색되면 이러한 로그를 수집하는 것이 좋습니다.

통화 로그 사용 및 액세스

[JavaScript]

Azure Communication Services 통화 SDK는 내부적으로 @azure/logger 라이브러리를 사용하여 로깅을 제어합니다.

@azure/logger 패키지의 setLogLevel 메서드를 사용하여 로그 출력 수준을 구성합니다. 다음과 같이 로거를 만들어 CallClient 생성자에 전달합니다.

import { setLogLevel, createClientLogger, AzureLogger } from '@azure/logger';
setLogLevel('verbose');
let logger = createClientLogger('ACS');
const callClient = new CallClient({ logger });

AzureLogger를 사용하면 AzureLogger.log 메서드를 재정의하여 Azure SDK의 로깅 출력을 리디렉션할 수 있습니다.

브라우저 콘솔, 파일, 버퍼에 기록하고, 자체 서비스로 보내는 등의 작업이 가능합니다. 네트워크를 통해 자체 서비스로 로그를 전송하려는 경우, 브라우저 성능에 부정적인 영향을 미치므로 로그 줄마다 요청을 보내지 마세요. 대신 로그 줄을 누적하여 일괄 처리로 보냅니다.

// Redirect log output
AzureLogger.log = (...args) => {
    // To console, file, buffer, REST API, etc...
    console.log(...args); 
};

네이티브 SDK(Android/iOS)

Android, iOS 및 Windows의 경우 Azure Communication Services 통화 SDK가 로그 파일에 대한 액세스를 제공합니다.

네이티브 SDK 호출의 경우 로그 파일 액세스 자습서를 참조하세요.

UI 라이브러리(Android, iOS)

Android 또는 iOS용 Azure Communication Services UI 라이브러리를 사용하는 경우 기본 제공 지원 양식을 통해 사용자 피드백을 요청할 수 있습니다.

통화 UI 지원 양식의 지원 함수에 대한 자세한 내용은 지원 양식 통합 자습서를 참조하세요. 이 문서에서는 필요한 이벤트 처리기를 추가하고 지원 정보를 중앙에 저장하기 위한 기본 클라이언트/서버를 구현하는 방법을 설명합니다. 이 가이드에서는 사용자의 조직에서 사용하는 지원 서비스를 통합하는 방법을 설명합니다.

ACS 통합에서 종단 간 지원 흐름 구축

통화 SDK나 Calling UI SDK를 사용하든, 고객에게 지원을 제공하는 것은 강력한 통합의 핵심 구성 요소입니다. 다음 문서에서는 지원 피드백 루프의 각 지점에서 주요 고려 사항을 강조하고 자세한 내용을 알아볼 수 있는 지점을 제공합니다.

사용자 지원 제공


Microsoft Entra 정보 찾기

  • 디렉터리 ID 가져오기
  • 애플리케이션 ID 가져오기
  • 사용자 ID 가져오기

디렉터리 ID 가져오기

디렉터리(테넌트) ID를 찾으려면 다음 단계를 따릅니다.

  1. Azure Portal로 이동하고 자격 증명을 사용하여 Azure Portal에 로그인합니다.

  2. 왼쪽 창에서 Microsoft Entra ID를 선택합니다.

  3. Microsoft Entra ID의 개요 페이지에서 디렉터리(테넌트) ID를 복사하여 애플리케이션 코드에 저장합니다.

    Microsoft Entra 테넌트 ID를 복사하고 저장하는 방법을 보여 주는 스크린샷.

애플리케이션 ID 가져오기

애플리케이션 ID를 찾으려면 다음 단계를 따릅니다.

  1. Azure Portal로 이동하고 자격 증명을 사용하여 Azure Portal에 로그인합니다.

  2. 왼쪽 창에서 Microsoft Entra ID를 선택합니다.

  3. Microsoft Entra ID의 앱 등록에서 애플리케이션을 선택합니다.

  4. 애플리케이션 ID를 복사하고 애플리케이션 코드에 저장합니다.

    Microsoft Entra 애플리케이션 ID를 복사하고 저장하는 방법을 보여 주는 스크린샷.

    디렉터리(테넌트) ID는 애플리케이션 개요 페이지에서도 찾을 수 있습니다.

사용자 ID 가져오기

사용자 ID를 찾으려면 다음 단계를 따릅니다.

  1. Azure Portal로 이동하고 자격 증명을 사용하여 Azure Portal에 로그인합니다.

  2. 왼쪽 창에서 Microsoft Entra ID를 선택합니다.

  3. Microsoft Entra ID의 사용자에서 사용자를 선택합니다.

  4. Microsoft Entra 사용자의 프로필 페이지에서 개체 ID 복사하여 애플리케이션 코드에 저장합니다.

    Microsoft Entra 사용자 ID를 복사하고 저장하는 방법을 보여 주는 스크린샷.

변경 불가능한 리소스 ID 가져오기

경우에 따라 Communication Service 리소스의 변경 불가능한 리소스 ID를 제공해야 할 수도 있습니다. 이를 찾으려면 다음 단계를 따릅니다.

  1. Azure Portal로 이동하고 자격 증명을 사용하여 Azure Portal에 로그인합니다.
  2. Communication Service 리소스를 엽니다.
  3. 왼쪽 창에서 개요선택하고 JSON 보기통신 리소스 개요를 JSON 보기로 전환하는 방법을 보여 주는 스크린샷.로 전환합니다.
  4. 리소스 JSON 페이지에서 immutableResourceId 값을 복사하여 지원 팀에 제공합니다. 리소스 JSON의 스크린샷

Teams 사용자에 대한 Azure Communication Services 지원을 사용하기 위한 Teams 라이선스 자격 확인

Teams 사용자에 대한 Azure Communication Services 지원을 사용하기 위한 Teams 라이선스 자격을 확인하는 다음 두 가지 방법이 있습니다.

  • Teams 웹 클라이언트를 통한 확인
  • Microsoft Graph API를 통한 현재 Teams 라이선스 확인

Teams 웹 클라이언트를 통한 확인

Teams 웹 클라이언트를 통해 Teams 라이선스 자격을 확인하려면 다음 단계를 따릅니다.

  1. 브라우저를 열고, Teams 웹 클라이언트로 이동합니다.
  2. 유효한 Teams 라이선스가 있는 자격 증명으로 로그인합니다.
  3. 인증에 성공하고 https://teams.microsoft.com/ 도메인에 남아 있는 경우 Teams 라이선스를 사용할 수 있습니다. 인증에 실패하거나 https://teams.live.com/v2/ 도메인으로 리디렉션되는 경우 Teams 라이선스는 Teams 사용자에 대한 Azure Communication Services 지원을 사용할 수 없습니다.

Microsoft Graph API를 통한 현재 Teams 라이선스 확인

사용자에게 할당된 라이선스를 반환하는 licenseDetails Microsoft Graph API를 사용하여 현재 Teams 라이선스를 확인할 수 있습니다. 다음 단계에 따라 Graph 탐색기 도구를 사용하여 사용자에게 할당된 라이선스를 확인합니다.

  1. 브라우저를 열고, Graph 탐색기로 이동합니다.

  2. 자격 증명을 사용하여 Graph 탐색기에 로그인합니다. Graph 탐색기에 로그인하는 방법의 스크린샷

  3. 쿼리 상자에서 다음 API를 입력하고, 쿼리 실행을 클릭합니다.

    https://graph.microsoft.com/v1.0/me/licenseDetails
    

    Graph 탐색기에서 API를 입력하는 방법의 스크린샷

    또는 다음 API를 통해 사용자 ID를 제공하여 특정 사용자를 쿼리할 수 있습니다.

    https://graph.microsoft.com/v1.0/users/{id}/licenseDetails
    
  4. 응답 미리 보기 창에 다음과 같은 출력이 표시됩니다.

    여기에 표시된 응답 개체는 가독성을 높이기 위해 줄어들 수 있습니다.

    {
        "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('071cc716-8147-4397-a5ba-b2105951cc0b')/assignedLicenses",
        "value": [
            {
                "skuId": "b05e124f-c7cc-45a0-a6aa-8cf78c946968",
                "servicePlans":[
                    {
                        "servicePlanId":"57ff2da0-773e-42df-b2af-ffb7a2317929",
                        "servicePlanName":"TEAMS1",
                        "provisioningStatus":"Success",
                        "appliesTo":"User"
                    }
                ]
            }
        ]
    }
    
  5. servicePlanName 속성에 적격 팀 라이선스 표의 값 중 하나가 있는 라이선스 세부 정보를 찾습니다.