기술 개요Skills overview

적용 대상: SDK v4APPLIES TO: SDK v4

Bot Framework SDK 버전 4.7부터 다른 봇(기술)을 사용하여 봇을 확장할 수 있습니다.Starting with version 4.7 of the Bot Framework SDK, you can extend a bot using another bot (a skill). 기술은 다양한 다른 봇에서 사용하여 재사용을 용이하게 할 수 있으며, 이러한 방법으로 사용자 지향 봇을 만들고 사용자 또는 타사 기술을 사용하여 확장할 수 있습니다.A skill can be consumed by various other bots, facilitating reuse, and in this way, you can create a user-facing bot and extend it by consuming your own or 3rd party skills.

  • 기술 은 다른 봇에 대한 작업 세트를 수행할 수 있는 봇입니다.A skill is a bot that can perform a set of tasks for another bot. 봇은 기술 및 사용자 측 봇일 수 있습니다.A bot can be both a skill and a user-facing bot.
  • 기술 소비자 는 하나 이상의 기술을 호출할 수 있는 봇입니다.A skill consumer is a bot that can call one or more skills. 사용자 측 기술 소비자는 루트 봇 이라고도 합니다.A user-facing skill consumer is also called a root bot.
  • 기술 매니페스트 는 기술에서 수행할 수 있는 작업, 해당 입/출력 매개 변수 및 해당 기술의 엔드포인트를 설명하는 JSON 파일입니다.A skill manifest is a JSON file that describes the actions the skill can perform, its input and output parameters, and the skill's endpoints.
    • 기술의 소스 코드에 액세스할 수 없는 개발자는 매니페스트의 정보를 사용하여 기술 소비자를 설계할 수 있습니다.Developers who don't have access to the skill's source code can use the information in the manifest to design their skill consumer.
    • 기술 매니페스트 스키마 는 기술 매니페스트의 스키마를 설명하는 JSON 파일입니다.The skill manifest schema is a JSON file that describes the schema of the skill manifest. 현재 버전은 2.1.0입니다.The current version is 2.1.0.
    • 기술을 구현 하는 방법 및 샘플 기술 매니페스트에 대 한 기술 매니페스트를 작성 하는 방법을 참조 하세요.See how to implement a skill and how to write a skill manifest for sample skill manifests.

다시 말해, 사용자는 루트 봇과 직접 상호 작용하고, 루트 봇은 대화형 논리 중 일부를 기술에 위임합니다.In other words, the user interacts directly with the root bot, and the root bot delegates some of its conversational logic to a skill.

기술 기능은 다음과 같이 설계되었습니다.The skills feature is designed so that:

  • 기술과 소비자는 봇 프레임워크 프로토콜을 사용하여 HTTP를 통해 통신합니다.Skills and consumers communicate over HTTP using the bot framework protocol.
  • 기술 소비자는 여러 기술을 사용할 수 있습니다.A skill consumer can consume multiple skills.
  • 기술 소비자는 기술을 구현하는 데 사용되는 언어에 관계없이 기술을 사용할 수 있습니다.A skill consumer can consume a skill regardless of the language used to implement the skill. 예를 들어 C# 봇은 Python을 사용하여 구현된 기술을 사용할 수 있습니다.For example, a C# bot can consume a skill implemented using Python.
  • 기술은 기술 소비자일 수 있으며 다른 기술을 호출할 수도 있습니다.A skill can also be a skill consumer and call other skills.
  • 기술은 사용자 인증을 지원합니다. 그러나 사용자 인증은 해당 기술에 국한되며 다른 봇으로 전송할 수 없습니다.Skills support user authentication; however, user authentication is local to the skill and cannot be transferred to another bot.
  • 기술은 Bot Framework 어댑터와 사용자 지정 어댑터 모두에서 사용할 수 있습니다.Skills can work with both the Bot Framework adapter and custom adapters.

이 다이어그램은 가능한 순열 중 일부를 보여줍니다.This diagram shows some of the possible permutations.

블록 다이어그램

개념 아키텍처Conceptual architecture

기술과 기술 소비자는 별도의 봇이며, 독립적으로 게시됩니다.A skill and skill consumer are separate bots, and you publish them independently.

  • 기술 소비자는 기술을 호출 하거나 취소 하는 경우 등의 기술 관리를 위한 추가 논리가 필요 합니다.A skill consumer requires added logic for managing a skill, such as when to call or cancel the skill, and so on. 소비자는 일반적인 봇 및 어댑터 개체 외에도 기술과 활동을 교환하는 데 사용되는 몇 가지 기술 관련 개체를 포함합니다.In addition to the usual bot and adapter objects, the consumer includes a few skill-related objects, used to exchange activities with the skill. 기술 소비자는 적어도 두 개의 HTTP 끝점을 구현 합니다.A skill consumer implements at least two HTTP endpoints:
    • 메시징 끝점 은 사용자 또는 채널에서 작업을 받습니다.A messaging endpoint receives activities from the user or channel. 모든 bot에서 구현 하는 일반적인 메시징 끝점입니다.This is the usual messaging endpoint that all bots implement.
    • 기술에서 활동을 받기 위한 기술 호스트 끝점 입니다.A skill host endpoint for receiving activities from a skill. 이는 기술에서 응답 하는 서비스 URL 인 콜백 URL로 작동 합니다.This acts as a callback URL, the service URL to which the skill replies. (기술 소비자는 기술 처리기를 사용 하 여 기술에서 HTTP 메서드 요청을 받는 코드를 쌍으로 처리 해야 합니다.)(The skill consumer needs to pair code that receives the HTTP method request from the skill with a skill handler.)
  • 기술 소비자는 활동을 기술에 전달 하는 작업을 endOfConversation 중지할 시기를 알 수 있도록 작업 완료 시 활동을 보내기 위한 추가 논리가 필요 합니다.A skill requires added logic to send an endOfConversation activity when it completes, so that the skill consumer knows when to stop forwarding activities to the skill.

이 다이어그램에서는 사용자에서 루트 봇, 기술로 차례로 이어지는 활동 및 그 반대 순서로 이어지는 활동의 흐름을 보여 줍니다.This diagram outlines the flow of activities from the user to the root bot to a skill and back again.

아키텍처 다이어그램

  1. 루트 봇의 어댑터는 사용자로부터 활동을 받아서 루트 봇의 활동 처리기로 전달합니다.The root bot's adapter receives activities from the user and forwards them to the root bot's activity handler. 사용자의 활동은 루트 봇의 메시징 끝점에서 수신 됩니다.(Activities from the user are received at the root bot's messaging endpoint.)
  2. 루트 봇은 기술 HTTP 클라이언트를 사용하여 활동을 기술에 보냅니다.The root bot uses a skill HTTP client to send an activity to the skill. 클라이언트는 기술 정의 및 기술 대화 ID 팩터리에서 소비자 기술 대화 정보를 가져옵니다.The client gets the consumer-skill conversation information from a skill definition and a skill conversation ID factory. 여기에는 기술이 활동에 회신하는 데 사용할 서비스 URL이 포함됩니다.This includes the service URL that the skill will use to reply to the activity.
  3. 기술의 어댑터는 기술 소비자로부터 활동을 받아서 기술의 활동 처리기로 전달합니다.The skill's adapter receives activities from the skill consumer and forwards them to the skill's activity handler. (소비자의 활동은 기술 봇의 메시징 끝점에서 수신 됩니다.)(Activities from the consumer are received at the skill bot's messaging endpoint.)
  4. 기술이 응답하면 루트 봇의 기술 처리기에서 활동을 받습니다.When the skill responds, the root bot's skill handler receives the activity. 기술 대화 ID 팩터리에서 루트-사용자 대화 정보를 가져옵니다.It gets the root-user conversation information from the skill conversation ID factory. 그런 다음, 활동을 루트 봇의 어댑터에 전달합니다.It then forwards the activity to the root bot's adapter. (기술에서의 활동은 루트 봇의 기술 호스트 끝점에서 수신 됩니다.)(Activities from the skill are received at the root bot's skill host endpoint.)
  5. 루트 봇의 어댑터는 내부적으로 사용자와의 대화를 다시 시작하는 자동 관리 메시지를 생성합니다.The root bot's adapter internally generates a proactive message to resume the conversation with the user.
  6. 루트 봇의 어댑터는 모든 메시지를 기술에서 사용자에게 보냅니다.The root bot's adapter sends any messages from the skill to the user.

이러한 개체는 기술을 관리하고 기술 트래픽을 라우팅하는 데 도움이 됩니다.These objects help manage skills and route skill traffic:

  • Bot Framework 기술 은 기술에 대한 라우팅 정보를 설명하고, 기술 소비자의 구성 파일에서 읽을 수 있습니다.A Bot Framework skill describes routing information for a skill and can be read from the skill consumer's configuration file.
  • 기술 HTTP 클라이언트 는 활동을 기술에 보냅니다.A skill HTTP client sends activities to a skill.
  • 기술 처리기 는 활동을 기술로부터 받습니다.A skill handler receives activities from a skill.
  • 기술 대화 ID 팩터리 는 사용자-루트 대화 참조와 루트-기술 대화 참조 사이를 변환합니다.The skill conversation ID factory translates between the user-root conversation reference and the root-skill conversation reference.
  • Bot Connector 서비스는 채널 및 봇-봇 인증을 모두 제공합니다.The Bot Connector service provides both channel and bot-to-bot authentication. 인증 구성 개체를 사용 하 여 기술 또는 기술 소비자에 게 클레임 유효성 검사를 추가 하 여 액세스 권한이 있는 응용 프로그램 또는 사용자를 제한할 수 있습니다.Using an authentication configuration object, you can add claims validation to a skill or skill consumer to limit which applications or users have access.

기술 클라이언트 및 기술 처리기 개체는 모두 대화 ID 팩터리 를 사용하여 루트 봇에서 사용자와 상호 작용하는 데 사용하는 대화와 루트 봇에서 기술과 상호 작용하는 데 사용하는 대화 사이를 변환합니다.The skill client and skill handler objects both use the conversation ID factory to translate between the conversation the root bot uses to interact with the user and the conversation the root bot uses to interact with the skill.

봇-봇 통신Bot-to-bot communication

디자인하려는 봇에 관계없이 이 디자인의 특정 측면을 이해하는 것이 중요합니다.It's important to understand certain aspects of this design, independent of which bot you're designing.

대화 참조Conversation references

사용자-루트 대화는 루트-기술 대화와 다릅니다.The user-root conversation is different than the root-skill conversation.

대화 ID 팩터리 는 기술 소비자와 기술 사이의 트래픽을 관리하는 데 도움이 됩니다.The conversation ID factory helps to manage traffic between a skill consumer and a skill. 팩터리는 루트에서 사용자와 나누는 대화의 ID 및 기술과 나누는 대화의 ID 사이를 변환합니다.The factory translates between the ID of the conversation the root has with the user and the one it has with the skill. 즉, 루트와 기술 간에 사용할 대화 ID를 생성하고, 루트-기술 대화 ID에서 원본 사용자-루트 대화 ID를 복구합니다.In other words, it generates a conversation ID for use between the root and the skill, and recovers the original user-root conversation ID from the root-skill conversation ID.

서버 간 조정Cross-server coordination

루트와 기술 봇은 HTTP를 통해 통신합니다.The root and skill bots communicate over HTTP. 따라서 기술로부터 활동을 받는 루트 봇의 인스턴스는 시작 활동을 보낸 인스턴스와 다를 수 있습니다. 즉, 다른 서버에서 이러한 두 요청을 처리할 수 있습니다.So, the instance of the root bot that receives an activity from a skill may not be the same instance that sent the initiating activity; in other words, different servers may handle these two requests.

  • 항상 기술 소비자의 상태를 저장한 후에 활동을 기술에 전달합니다.Always save state in the skill consumer before forwarding an activity to a skill. 이렇게 하면 기술로부터 트래픽을 받는 인스턴스에서 기술을 호출하기 전에 이전 인스턴스가 중단된 위치를 선택할 수 있습니다.This ensures that the instance that receives traffic from a skill can pick up where the previous instance left off before it called the skill.
  • 기술 처리기는 기술로부터 활동을 받으면 기술 소비자에 적합한 형태로 변환하여 소비자의 어댑터로 전달합니다.When the skill handler receives an activity from a skill, it translates it into a form appropriate for the skill consumer, and forwards it to the consumer's adapter.

기술 소비자 및 기술 상태Skill consumer and skill state

기술 소비자와 기술은 자체의 상태를 개별적으로 관리합니다.The skill consumer and skill manage their own state separately. 그러나 소비자는 기술과 통신하는 데 사용하는 대화 ID를 만듭니다.However, the consumer creates the conversation ID that it uses to communicate with the skill. 이는 기술의 대화 상태에 영향을 줄 수 있습니다.This can have an effect on conversation state in the skill.

중요

앞에서 설명한 대로, 기술 소비자에서 기술에 대한 사용자 활동을 위임하면 소비자의 다른 인스턴스에서 기술 응답을 받을 수 있습니다.As noted previously, when the skill consumer delegates a user activity to a skill, a different instance of the consumer may receive the skill response. 소비자는 항상 대화 상태를 저장한 후에 활동을 기술에 전달해야 합니다.The consumer should always save conversation state immediately before forwarding an activity to a skill.

봇-봇 인증Bot-to-bot authentication

버전 4.11부터 응용 프로그램 ID 및 암호를 사용 하 여 Emulator에서 로컬로 기술 및 기술 소비자를 테스트할 필요가 없습니다.Starting with version 4.11, you do not need an app ID and password to test a skill and skill consumer locally in the Emulator. Azure에 대 한 기술을 배포 하려면 Azure 구독이 계속 필요 합니다.An Azure subscription is still required to deploy your skill to Azure.

서비스 수준 인증은 Bot Connector 서비스에서 관리됩니다.Service-level authentication is managed by the Bot Connector service. 이 프레임워크는 전달자 토큰과 봇 애플리케이션 ID를 사용하여 각 봇의 ID를 확인합니다.The framework uses bearer tokens and bot application IDs to verify the identity of each bot. (봇 Framework는 인증 구성 개체를 사용 하 여 들어오는 요청에 대 한 인증 헤더의 유효성을 검사 합니다.)(The Bot Framework uses an authentication configuration object to validate the authentication header on incoming requests.)

중요

이렇게 하려면 배포 된 모든 봇 (기술 소비자와 사용 하는 기술)이 유효한 응용 프로그램 자격 증명을 가져야 합니다.This requires all deployed bots (the skill consumer and any skills it consumes) to have valid application credentials.

클레임 유효성 검사Claims validation

인증 구성에 클레임 유효성 검사기 를 추가 해야 합니다.You must add a claims validator to the authentication configuration. 클레임은 인증 헤더 다음에 평가됩니다.The claims are evaluated after the authentication header. 유효성 검사 코드에서 오류 또는 예외를 throw하여 요청을 거부합니다.Throw an error or exception in your validation code to reject the request.

참고

Bot 앱 ID 및 암호를 포함 하는 경우 클레임 유효성 검사를 수행 합니다. 그렇지 않으면 클레임 유효성 검사가 수행 되지 않습니다.The bot performs claims validation if it has an app ID and password; otherwise, claims validation is not performed.

다른 방법으로 인증된 요청을 거부할 수 있는 여러 가지 이유는 다음과 같습니다.There are various reasons you might reject an otherwise authenticated request:

  • 기술 소비자에서 대화를 시작했을 수 있는 기술의 트래픽만 수락해야 하는 경우When the skill consumer should accept traffic only from skills that it may have initiated a conversation with.
  • 기술이 유료 서비스의 일부이고 데이터베이스에 없는 사용자가 액세스할 수 없는 경우When a skill is part of a paid-for service, and users not in the database should not have access.
  • 기술에 대한 액세스를 특정 기술 소비자로 제한하려는 경우When you want to restrict access to the skill to specific skill consumers.

중요

클레임 유효성 검사기를 제공 하지 않으면 봇이 기술 또는 기술 소비자 인지 여부에 관계 없이 다른 봇에서 활동을 받을 때 봇이 오류 또는 예외를 생성 합니다.If you don't provide a claims validator, your bot will generate an error or exception upon receiving an activity from another bot, whether your bot is a skill or a skill consumer.

추가 정보Additional information

사용자의 관점에서, 루트 봇과 상호 작용하고 있습니다.From the user's perspective, they are interacting with the root bot. 기술의 관점에서 기술 소비자는 사용자와 통신하는 채널입니다.From the skill's perspective, the skill consumer is the channel over which it communicates with the user.