Azure AI Bot Service 봇에 대한 일반적인 문제 해결

적용 대상: SDK v4

이러한 자주 묻는 질문은 일반적인 봇 개발 또는 운영 문제를 해결하는 데 도움이 될 수 있습니다.

내 봇 관련 문제를 해결하려면 어떻게 해야 하나요?

  1. Visual Studio Code 또는 Visual Studio를 사용하여 봇의 소스 코드를 디버그합니다.
  2. 클라우드에 배포하기 전에 Bot Framework Emulator 를 사용하여 봇을 테스트합니다.
  3. Azure와 같은 클라우드 호스팅 플랫폼에 봇을 배포한 다음, Azure Portal의 봇 대시보드에서 기본 제공 웹 채팅 컨트롤을 사용하여 봇에 대한 연결을 테스트합니다. Azure에 배포한 후 봇에 문제가 발생하는 경우 Azure 문제 해결 및 지원 이해 블로그 문서를 사용하는 것이 좋습니다.
  4. 인증은 가능한 문제에서 배제합니다.
  5. 웹 채팅, Teams 또는 봇과 함께 사용하려는 다른 채널에서 봇을 테스트합니다. 이렇게 하면 엔드 투 엔드 사용자 환경의 유효성을 검사하는 데 도움이 됩니다.
  6. Direct Line 또는 웹 채팅 같은 추가 인증 요구 사항이 있는 채널에서 봇을 테스트하는 것이 좋습니다.
  7. 봇을 디버그하는 방법 및 해당 섹션의 다른 디버깅 문서를 검토하세요.

인증 문제를 해결하려면 어떻게 해야 하나요?

봇 인증 문제를 해결하는 방법에 대한 자세한 내용은 Bot Framework 인증 문제 해결을 참조하세요.

봇과 채널 간의 네트워크 연결을 테스트할 어떻게 할까요? 있나요?

아래 단계에서 생성된 IP 주소를 사용하여 해당 주소와의 연결을 차단하는 규칙이 있는지 확인할 수 있습니다. 실패한 연결에 대한 방화벽 추적 확인 섹션 을 참조하세요.

봇에서 채널로의 연결 테스트

  1. 브라우저에서 Azure Portal로 이동합니다.

  2. 연결을 테스트하려는 Bot App Service를 선택합니다.

  3. 왼쪽 창의 개발 도구 섹션에서 고급 도구를 선택합니다.

  4. 오른쪽 창에서 이동을 선택합니다. Kudu 정보 페이지가 표시됩니다.

  5. 위쪽 메뉴 모음에서 디버그 콘솔을 선택합니다. 그런 다음 드롭다운 메뉴에서 CMD를 선택합니다. Kudu 봇 웹앱 콘솔이 열립니다. 자세한 내용은 Kudu를 참조하세요.

    kudu cmd console

  6. DNS 확인이 작동하는 경우 실행하고 nslookup directline.botframework.com 검사. nslookup (이름 서버 조회)는 do기본 이름 시스템(DNS)을 쿼리하여 do기본 이름 또는 IP 주소 매핑 또는 기타 DNS 레코드를 가져오는 네트워크 관리 명령줄 도구입니다. DNS 확인이 작동하는 경우 이 명령에 대한 응답에는 관련 정보가 포함됩니다.

    kudu cmd console bot channel dns

    WHOIS IP 조회 도구는 IP 주소에 대한 정보를 가져오는 데 유용합니다.

  7. curl -I directline.botframework.com을 실행합니다. (이 옵션은 -I 헤더만 포함하는 응답을 가져오는 데 사용됩니다.) 연결이 있는지 확인하기 위해 HTTP 상태 301이 반환되는 것을 두 번 검사.

    kudu cmd console http 301

채널에서 봇으로의 연결 테스트

curl은 프로덕션 사이트에 directline.botframework.com 액세스할 수 없고 공용 인터넷에 있으므로 시뮬레이션 모드에서 curl을 사용해야 합니다. 예를 들어 휴대폰 핫스팟을 사용하여 VNET(Virtual Private Network) 외부에 아래 표시된 단계를 수행합니다. Azure Virtual Network란?참조하세요.

  1. nslookup ivr-sr-bot.botapps.amat.com을 실행합니다. 이 명령에 대한 응답에 관련 정보가 포함된 경우 DNS 확인이 작동합니다.

    kudu cmd console channel bot dns

  2. 적절한 HTTP 상태 코드가 반환되는지 여부를 실행하고 curl -I https://ivr-sr-bot.botapps.amat.com/api/messages 검사(예: 405 메서드가 허용되지 않음) 요청에 지정된 메서드는 지정된 URI로 식별되는 리소스에 대해 허용되지 않습니다. 이는 연결이 있음을 검사 방법일 뿐입니다.

    kudu cmd console http 405

  3. 봇에서 응답을 받지 못하면 클라이언트의 IP 주소를 적어 씁니다.

실패한 연결에서 방화벽 추적 확인

어느 방향으로든 해당 주소와의 연결을 차단하는 규칙이 있는 경우 IP 주소를 nslookup ivr-sr-bot.botapps.amat.comnslookup directline.botframework.com 사용하고 검사.

.NET용 Bot Framework SDK를 사용하고 있습니다. 내 봇 관련 문제를 해결하려면 어떻게 해야 하나요?

예외 찾기

Visual Studio 2019에서 Windows>예외 설정 디버그>로 이동합니다. 예외 설정 창에서 공용 언어 런타임 예외 옆에 있는 throw 시 중단 검사 상자를 선택합니다. throw되거나 처리되지 않은 예외가 있을 때 출력 창에 진단 출력이 표시되기도 합니다.

호출 스택 보기

Visual Studio에서 내 코드만 디버깅할지 여부를 선택할 수 있습니다. 전체 호출 스택을 검사하면 모든 문제에 대한 더 많은 인사이트를 제공할 수 있습니다.

모든 대화 상자 메서드가 다음 메시지를 처리할 계획으로 끝나는지 확인합니다.

모든 대화 단계는 폭포의 다음 단계로 피드하거나 현재 대화 상자를 종료하여 스택에서 팝해야 합니다. 단계가 올바르게 처리되지 않으면 대화가 예상대로 진행되지 않습니다. 대화 상자에 대한 자세한 내용은 개념 문서를 참조하세요.

HTTP 상태 코드 429 "너무 많은 요청"에 오류가 발생하는 원인은 무엇인가요?

HTTP 상태 코드 429가 있는 오류 응답은 일정 시간 동안 실행된 요청이 너무 많음을 의미합니다. 응답 본문에는 문제에 대한 설명이 포함되어야 하며 요청 간에 필요한 최소 간격을 지정할 수도 있습니다. 이 오류의 가능한 한 가지 원인은 ngrok 도구입니다. 무료 요금제에 있고 ngrok의 한도에 진입하는 경우 웹 사이트의 가격 책정 및 제한 페이지로 이동하여 더 많은 옵션을 확인하세요.

사용자가 내 봇 메시지를 받지 못하는 이유는 무엇인가요?

응답으로 생성된 메시지 활동은 올바르게 처리되어야 합니다. 그렇지 않으면 의도한 대상에 도착하지 않습니다. 대부분의 경우 이를 명시적으로 처리할 필요가 없습니다. SDK는 메시지 작업의 주소를 지정합니다.

활동을 올바르게 해결하려면 발신자에 대한 세부 정보와 함께 적절한 대화 ID 세부 정보를 포함합니다. 대부분의 경우 메시지 활동은 도착한 활동에 대한 응답으로 전송됩니다. 따라서 인바운드 활동에서 주소 지정 세부 정보를 사용할 수 있습니다.

추적 또는 감사 로그를 검사하는 경우 검사 메시지의 주소가 올바르게 지정되었는지 확인할 수 있습니다. 그렇지 않은 경우 봇에서 중단점을 설정하고 메시지에 대한 ID가 설정되는 위치를 확인합니다.

ASP.NET 백그라운드 작업을 실행하기 위해 어떻게 해야 하나요?

일부 경우 몇 초 동안 대기한 다음, 특정 코드를 실행하여 사용자 프로필을 지우거나 대화/대화 상태를 재설정하는 비동기 작업을 시작하고자 할 수 있습니다. 이 작업을 수행하는 자세한 방법은 ASP.NET에서 백그라운드 작업을 실행하는 방법을 참조하세요. 특히 HostingEnvironment.QueueBackgroundWorkItem을 사용하는 것이 좋습니다.

봇이 받은 첫 번째 메시지에 응답하는 속도가 느립니다. 더 빠르게 만들려면 어떻게 해야 하나요?

봇은 웹 서비스이며 Azure를 포함한 일부 호스팅 플랫폼은 특정 기간 동안 트래픽을 수신하지 않는 경우 서비스를 자동으로 절전 모드로 설정합니다. 봇에 이런 상황이 발생할 경우 다음번에 메시지를 수신했을 때 처음부터 다시 시작해야 하며 이로 인해 이미 실행 중일 때보다 응답이 훨씬 느려집니다.

일부 호스팅 플랫폼을 사용하면 절전 모드로 설정되지 않도록 서비스를 구성할 수 있습니다. 봇이 Azure AI Bot Service Web Apps에서 호스트되는 경우 Azure Portal에서 봇의 서비스로 이동하여 애플리케이션 설정을 선택한 다음, Always On을 선택합니다. 이 옵션은 대부분의 서비스 계획에서 사용할 수 있으나 전부는 아닙니다.

메시지 배달 순서를 보장하려면 어떻게 해야 하나요?

Bot Framework는 메시지 순서를 최대한 유지합니다. 예를 들어 메시지 A를 보내고 메시지 B를 보내기 위해 다른 HTTP 작업을 시작하기 전에 해당 HTTP 작업이 완료될 때까지 기다리는 경우입니다. SMS 및 전자 메일과 같은 일부 채널은 사용자가 메시지를 받을 순서를 보장하지 않습니다.

메시지 텍스트의 일부가 삭제되는 이유는 무엇인가요?

Bot Framework 및 많은 채널은 텍스트를 Markdown으로 서식이 지정된 것처럼 해석합니다. 텍스트에 Markdown 구문으로 해석될 수 있는 문자가 포함되어 있는지 확인합니다.

동일한 봇 서비스 엔드포인트에서 여러 봇을 어떻게 지원할 수 있나요?

샘플에서는 오른쪽으로 MicrosoftAppCredentials 구성 Conversation.Container 하고 간단한 MultiCredentialProvider 인증을 사용하여 여러 앱 ID 및 암호를 인증하는 방법을 보여 줍니다.

Bot Framework에서 식별자는 어떻게 작동합니까?

Bot Framework의 식별자에 대한 자세한 내용은 Bot Framework 식별자 가이드를 참조하세요.

사용자 ID에 대한 액세스는 어떻게 얻나요?

Bot Framework 채널은 사용자가 보낸 활동의 from.Id 필드에 사용자의 ID를 표시합니다. SMS 및 전자 메일 메시지는 이 속성의 원시 사용자 ID를 제공합니다. 일부 채널은 속성이 from.Id 가려지므로 채널의 사용자 ID와 다른 사용자에 대한 고유 ID가 포함됩니다. 기존 계정에 연결해야 하는 경우 로그인 카드 사용하고 사용자 고유의 OAuth 흐름을 구현하여 사용자 ID를 사용자의 서비스 사용자 ID에 연결할 수 있습니다.

내 Facebook 사용자 이름이 더 이상 표시되지 않는 이유는 무엇인가요?

Facebook 암호를 변경했나요? 이렇게 하면 액세스 토큰이 무효화되고 Azure Portal에서 Facebook Messenger 채널에 대한 봇의 구성 설정을 업데이트해야 합니다.

봇에서 인증된 서비스는 어떻게 사용하나요?

Microsoft Entra ID 인증의 경우 봇에 인증 추가 자습서를 참조하세요.

참고 항목

봇에 인증 및 보안 기능을 추가하는 경우 코드에서 구현하는 패턴이 애플리케이션에 적합한 보안 표준을 준수하는지 확인해야 합니다.

봇에 대한 액세스를 미리 결정된 사용자 목록으로 제한하려면 어떻게 해야 하나요?

SMS 및 전자 메일과 같은 일부 채널은 범위가 지정되지 않은 주소를 제공합니다. 이러한 경우 사용자의 메시지에는 속성에 원시 사용자 ID가 from.Id 포함됩니다.

Facebook 및 Slack과 같은 다른 채널은 봇이 미리 사용자의 ID를 예측할 수 없도록 범위가 지정된 주소 또는 테넌트 주소를 제공합니다. 이러한 경우 봇을 사용할 권한이 있는지 여부를 확인하기 위해 로그인 링크 또는 공유 비밀을 통해 사용자를 인증해야 합니다.

모든 메시지 후에 Direct Line 1.1 대화가 시작되는 이유는 무엇인가요?

참고 항목

이 섹션은 최신 버전의 Direct Line 프로토콜 3.0에는 적용되지 않습니다.

모든 메시지 from 후에 직접 회선 대화가 다시 시작되는 것처럼 보이면 속성이 누락되거나 null Direct Line 클라이언트가 봇에 보낸 메시지에서 발생할 수 있습니다. Direct Line 클라이언트가 누락되거나 null속성이 from 있는 메시지를 보내면 Direct Line 서비스에서 자동으로 ID를 할당하므로 클라이언트가 보내는 모든 메시지는 새로운 다른 사용자로부터 시작된 것으로 표시됩니다.

이 문제를 해결하려면 Direct Line 클라이언트가 보내는 각 메시지의 from 속성을, 메시지를 보내는 사용자를 고유하게 나타내는 안정적인 값으로 설정합니다. 예를 들어 사용자가 이미 웹 페이지나 앱에 로그인한 경우 사용자가 보내는 메시지에서 기존 사용자 ID를 from 속성 값으로 사용할 수 있습니다. 또는 페이지 로드 또는 애플리케이션 로드 시 임의의 사용자 ID를 생성하고, 해당 ID를 쿠키 또는 디바이스 상태에 저장하고, 해당 ID를 사용자가 보내는 메시지의 from 속성 값으로 사용하도록 선택할 수 있습니다.

Direct Line 3.0 서비스가 HTTP 상태 코드 502 "잘못된 게이트웨이"라 답하는 이유는 무엇인가요?

Direct Line 3.0은 봇에 연결하려고 하지만 요청이 성공적으로 완료되지 않으면 HTTP 상태 코드 502를 반환합니다. 이 오류는 봇이 오류를 반환했거나 요청 시간이 초과되었음을 나타냅니다. 봇이 생성하는 오류에 대한 자세한 내용은 Azure Portal 내의 봇 대시보드로 이동하여 영향을 받는 채널에 대한 "문제" 링크를 선택합니다. 봇에 대한 Application Insights를 구성한 경우 자세한 오류 정보도 찾을 수 있습니다.

봇을 만들 때 Authorization_RequestDenied 예외가 발생하는 이유는 무엇인가요?

Azure AI Bot Service 봇을 만들 수 있는 권한은 Microsoft Entra ID 포털을 통해 관리됩니다. Microsoft Entra ID 관리 센터에서 사용 권한이 제대로 구성되지 않은 경우 사용자는 봇 서비스를 만들려고 할 때 Authorization_RequestDenied 예외가 발생합니다.

먼저 디렉터리의 "게스트"인지 여부를 검사.

  1. Azure Portal에 로그인합니다.
  2. 모든 서비스를 선택하고 활성검색합니다.
  3. Microsoft Entra ID를 선택합니다.
  4. 사용자를 선택합니다.
  5. 목록에서 사용자를 찾고 사용자 유형게스트가 아닌지 확인합니다.

Microsoft Entra ID User-type

게스트가 아닌지 확인한 후 Active Directory 내의 사용자가 봇 서비스를 만들 수 있는지 확인하려면 디렉터리 관리자가 다음 설정을 구성해야 합니다.

  1. Microsoft Entra ID 관리 센터에 로그인합니다. 사용자 및 그룹으로 이동하고 사용자 설정을 선택합니다.
  2. 앱 등록 섹션에서 사용자가 애플리케이션을로 등록할 수 있도록 설정합니다. 이렇게 하면 디렉터리의 사용자가 봇 서비스를 만들 수 있습니다.
  3. 외부 사용자 섹션에서 게스트 사용자 설정 권한은 아니요제한됩니다. 이렇게 하면 디렉터리의 게스트 사용자가 봇 서비스를 만들 수 있습니다.

Microsoft Entra ID Admin Center

봇을 마이그레이션할 수 없는 이유는 무엇인가요?

봇이 dev.botframework.com 등록되어 있고 Azure로 마이그레이션하려고 하지만 봇을 마이그레이션하는 데 문제가 있는 경우 봇이 기본 디렉터리가 아닌 디렉터리에 속하기 때문일 수 있습니다. 다음 단계를 수행합니다.

  1. 대상 디렉터리에서 기본 디렉터리의 멤버가 아닌 새 사용자(이메일 주소를 통해)를 추가하고 마이그레이션의 대상인 구독에 대한 사용자 기여자 역할을 부여합니다.

  2. 개발자 포털에서 마이그레이션해야 하는 봇의 공동 소유자로 사용자의 이메일 주소를 추가합니다. 그런 다음 로그아웃합니다.

  3. 새 사용자로 Dev Portal에 로그인하고 봇 마이그레이션을 진행합니다.

자세한 도움말은 어디서 얻을 수 있나요?

  • Stack Overflow에서 이전에 답변한 질문을 검색하거나 태그를 botframework 사용하여 고유한 질문을 게시합니다. Stack Overflow에는 설명이 포함된 제목, 완전하고 간결한 문제 설명 및 문제를 재현하기 위한 충분한 세부 정보 요구와 같은 지침이 있습니다. 기능 요청 또는 지나치게 광범위한 질문은 주제가 벗어났습니다. 자세한 내용은 새 사용자가 Stack Overflow 도움말 센터를 방문해야 합니다.
  • Bot Framework SDK의 알려진 문제에 대한 자세한 내용은 GitHub의 BotBuilder 문제를 참조하거나 새 문제를 보고하세요.
  • Gitter에 대한 BotBuilder 커뮤니티 토론입니다.