Bot Framework 일반 질문과 대답

이 문서에서는 자주 묻는 일반적인 질문에 답변 합니다.

적용 대상: SDK v4APPLIES TO: SDK v4

입력 작업이 아무 것도 수행하지 않는 이유는 무엇인가요?

일부 채널은 클라이언트에서 일시적 입력 업데이트를 지원하지 않습니다.

SDK에서 Connector 라이브러리와 Builder 라이브러리의 차이는 무엇인가요?

Connector 라이브러리는 REST API의 표시입니다. Builder 라이브러리는 프롬프트, 프로그래밍 모델 및 프롬프트, Watefall, 체인 및 안내가 있는 양식 완성 같은 대화형 대화 프로그래밍 모델 및 기타 기능을 추가합니다. Builder 라이브러리는 LUIS 같은 Cognitive Services에 대한 액세스도 제공합니다.

HTTPS 메서드 호출과 사용자의 메시지는 어떤 관계가 있나요?

사용자가 채널을 통해 메시지를 보내면 Bot Framework 웹 서비스가 봇의 웹 서비스 엔드포인트에 대해 HTTPS POST를 실행합니다. 봇은 이 채널에서 보내는 각각의 메시지에 대해 Bot Framework에 별도의 HTTPS POST를 실행하여 0, 1 또는 여러 메시지를 사용자에게 돌려보낼 수 있습니다.

사용자와 내 봇 간의 모든 메시지를 어떻게 가로챌 수 있나요?

.NET용 Bot Framework SDK를 사용하여 IPostToBotIBotToUser 인터페이스의 구현을 Autofac 종속성 주입 컨테이너에 제공할 수 있습니다. 임의 언어용 Bot Framework SDK를 사용하여 거의 같은 용도로 미들웨어를 사용할 수 있습니다. BotBuilder-Azure 리포지토리에는 이 데이터를 Azure 테이블에 기록하는 C# 및 Node.js 라이브러리가 포함되어 있습니다.

.NET용 Bot Framework SDK의 IDialogStack.Forward 메서드는 무엇인가요?

IDialogStack.Forward의 주 목적은 자식 대화(IDialog.StartAsync)가 일부 ResumeAfter 처리기가 있는 T 개체를 대기하는 "사후"인 경우가 많은 기존 자식 대화를 재사용하는 것입니다. 특히 IMessageActivity``T를 대기하는 자식 대화가 있는 경우 IDialogStack.Forward 메서드를 사용하여 들어오는 IMessageActivity(이미 일부 부모 대화에서 받음)를 전달할 수 있습니다. 예를 들어 들어오는 IMessageActivityLuisDialog에 전달하려면 IDialogStack.Forward를 호출하여 대화 스택에 LuisDialog를 푸시하고 다음 메시지 대기를 예약할 때까지 LuisDialog.StartAsync에서 코드를 실행한 다음, 즉시 전달된 IMessageActivity를 통해 해당 대기를 만족합니다. IDialog.StartAsync이 보통 이러한 작업 유형을 대기하도록 생성되기 때문에 T는 일반적으로 IMessageActivity를 사용합니다. IDialogStack.ForwardLuisDialog에 메커니즘으로 사용하여 메시지를 기존 LuisDialog에 전달하기 전에 일부 처리를 위해 사용자로부터 메시지를 가로챌 수 있습니다. 이 목적으로 DispatchDialogContinueToNextGroup을 사용할 수도 있습니다.

StartAsync에서 예약한 첫 번째 ResumeAfter 처리기(예: LuisDialog.MessageReceived)에서 전달된 항목을 찾게 됩니다.

"사전"과 "사후"는 어떻게 다른가요?

봇의 관점에서 "사후"는 사용자가 봇에게 메시지를 보내 대화를 시작하고 봇이 이 메시지에 답해 반응한다는 뜻입니다. 반대로 "사전"은 봇이 먼저 사용자에게 메시지를 보내 대화를 시작하는 것입니다. 예를 들어, 봇이 타이머 만료나 이벤트 발생을 사용자에게 알리기 위해 사전 메시지를 보낼 수 있습니다.

사용자에게 사전 메시지를 보내려면 어떻게 해야 하나요?

사전 메시지를 보내는 방법을 보여 주는 예제는 GitHub의 BotBuilder-Samples 리포지토리 내의 C# V4 샘플Node.js V4 샘플을 참조하세요.

SDK v3의 C# 대화에서 직렬화할 수 없는 서비스를 참조하려면 어떻게 해야 하나요?

다음과 같은 몇 가지 옵션이 있습니다.

  • AutofacFiberModule.Key_DoNotSerialize를 통해 종속성을 해결합니다. 이것이 가장 깔끔한 솔루션입니다.
  • NonSerializedOnDeserialized 특성을 사용하여 역직렬화의 종속성을 복원합니다. 이것이 가장 간단한 솔루션입니다.
  • 종속성을 저장하지 않으므로 직렬화되지 않습니다. 이 솔루션은 기술적으로 가능하지만 권장되지는 않습니다.
  • 리플렉션 직렬화 서로게이트를 사용합니다. 이 솔루션은 일부 경우 불가능하며 직렬화가 너무 많이 발생할 위험이 있습니다.

ETag란? 봇 데이터 스토리지와는 어떤 관계가 있나요?

ETag낙관적 동시성 제어를 위한 메커니즘입니다. 이 봇 데이터 모음은 데이터 업데이트 충돌을 방지하기 위해 ETag를 사용합니다. HTTP 상태 코드 412 "사전 조건이 실패했습니다."인 ETag 오류는 봇에서 첫 번째 작업을 완료하기 전에 여러 메시지를 동시에 받았음을 나타냅니다. 대화 스택 및 상태는 봇 데이터 모음에 저장됩니다. 예를 들어, 봇이 해당 대화에 대해 새 메시지를 수신했을 때 여전히 이전 메시지를 처리 중이라면 "전제 조건 실패" ETag 오류가 표시될 수 있습니다.

속도 제한이란?

어떤 단일 봇도 다른 봇의 성능에 나쁜 영향을 미칠 수 없도록 Bot Framework 서비스는 서비스 자체 및 해당 고객을 악의적인 호출 패턴(예: 서비스 거부 공격)에서 보호해야 합니다. 이러한 종류의 보호를 위해 속도 제한(제한이라고도 함)이 엔드포인트에 추가되었습니다. 속도 제한을 적용하여 클라이언트 또는 봇에서 특정 호출을 수행할 수 있는 빈도를 제한할 수 있습니다. 예를 들어, 속도 제한을 사용하도록 설정한 경우 봇이 많은 수의 작업을 게시하고 싶다면 시간이 지나면서 공간을 확보해야 할 것입니다. 속도 제한을 적용하는 목적이 봇의 총 용량을 제한하려는 것은 아닙니다. 사람의 대화 패턴을 따르지 않는 대화형 인프라가 남용되는 것을 방지하도록 디자인된 것입니다. 예를 들어 두 사람이 사용할 수 있는 것보다 더 많은 콘텐츠로 인해 두 대화에 서비스 장애가 발생합니다.

속도 제한이란?

Microsoft는 서비스 및 사용자를 보호하면서 동시에 속도 제한을 계속해서 가능한 한 관대하게 조정하고 있습니다. 때때로 임계값이 변경되므로 지금은 수치를 게시하지 않습니다. 마지막으로, App Service에서 봇을 호스트 하는 경우 봇은 App Service의 제한 사항에 바인딩됩니다. 자세한 내용은 Azure 서비스에 대 한 SLA 요약 을 참조 하세요. 속도 제한으로 영향을 받는 경우에는 언제 든 지 자유롭게 연락 bf-reports@microsoft.com 하세요.

채널을 사용 하 여 전송 되는 파일의 크기 제한은 무엇 인가요?

일부 채널에는 보낼 수 있는 파일의 크기나 형식에 대 한 제한이 있습니다. 예를 들어, 에뮬레이터에 제한이 없는 반면 Line 및 Facebook의 작업 페이로드가 262144 바이트로 제한 됩니다. 이러한 한도는 채널에 의해 적용 됩니다. 이 한도를 초과 하는 메시지를 보내는 경우 요청 콘텐츠 길이가 262144 바이트 제한을 초과 하는 경우와 같은 오류가 발생할 수 있습니다. 그러나 인터넷 첨부 파일로 리소스에 대 한 링크를 제공할 수 있습니다. 첨부 파일을 보내는 방법에 대 한 자세한 내용은 메시지에 미디어를 추가 하는 방법을 참조 하세요.

요금 제한으로 영향을 받는지 어떻게 알 수 있나요?

높은 용량에서도 속도 제한을 경험할 가능성은 낮습니다. 대부분의 속도 제한은 작업의 대량 전송(봇 또는 클라이언트로부터), 과도한 부하 테스트 또는 버그로 인해서만 발생합니다. 요청이 제한될 경우 요청 다시 시도가 성공하기 전에 대기할 시간(초)을 나타내는 Retry-After 헤더와 함께 HTTP 429(너무 많은 요청) 응답이 반환됩니다. Azure Application Insights를 통해 봇에 대해 분석 기능을 사용하도록 설정하여 이 정보를 수집할 수 있습니다. 또는 봇의 코드를 로그 메시지에 추가할 수 있습니다.

속도 제한은 어떻게 발생하나요?

Rate 제한은 다음 조건 중 하나로 인해 발생 합니다.

  • Bot 메시지를 너무 자주 보냅니다.
  • Bot 클라이언트가 메시지를 너무 자주 보냅니다.
  • 직접 회선 클라이언트가 새 웹 소켓을 너무 자주 요청하는 경우

사용자 핸드 오프를 구현 하는 방법

때로는 봇에서 인간으로 대화를 전송 (전달) 해야 합니다. 이는 봇이 사용자를 인식 하지 못하는 경우 또는 요청을 자동화할 수 없는 경우 등에 발생 합니다. 이러한 경우 봇은 인간에게 전환을 제공합니다. Bot Framework SDK는 인간에게 전달을 지원합니다. 전달 작업을 신호로 알리는 몇 가지 이벤트 유형이 있습니다. 이러한 이벤트는 참여 허브라고도 하는 봇과 에이전트 허브 간에 교환됩니다. 이 에이전트 허브는 일반적으로 사람이 봇의 에스컬레이션 요청뿐만 아니라 사용자의 요청을 수신하고 처리할 수 있도록 하는 애플리케이션 또는 시스템으로 정의됩니다. 자세한 내용은 봇에서 인간으로 대화 전환 문서를 참조하세요.