작업 처리Activity processing

적용 대상: SDK v4APPLIES TO: SDK v4

봇과 사용자는 작업을 통해 상호 작용하고 정보를 교환합니다.The bot and user interact and exchange information via activities. 봇 애플리케이션이 받은 각 작업은 봇 어댑터로 전달되고, 봇 어댑터는 작업 정보를 봇 논리로 전달하고 궁극적으로 사용자에게 응답을 보냅니다.Each activity received by your bot application is passed to a bot adapter, which passes activity information to your bot logic and ultimately sends any responses to the user. 작업 받기 및 이후의 봇을 통한 처리를 순서라고 하며, 봇의 전체 주기 하나를 나타냅니다.Receiving an activity, and subsequently processing it through your bot, is called a turn; this represents one complete cycle of your bot. 순서는 모든 실행이 수행되고, 작업이 완전히 처리되고 봇의 모든 계층이 완료된 경우 종료합니다.A turn ends when all execution is done, the activity is fully processed and all the layers of the bot have completed.

활동, 특히 봇 턴 중에 봇에서 보낸 활동은 비동기적으로 처리됩니다.Activities, particularly those that are sent from a bot during a bot turn, are handled asynchronously. 봇 빌드에서 필수적인 부분입니다. 작동 원리를 다시 살펴보려면 선택한 언어에 따라 .NET용 비동기 또는 JavaScript용 비동기를 확인하세요.It's a necessary part of building a bot; if you need to brush up on how that all works, check out async for .NET or async for JavaScript depending on your language choice.

봇 어댑터The bot adapter

봇 어댑터는 인증 프로세스를 캡슐화하고 Bot Connector Service와 작업을 주고받습니다.The bot adapter encapsulates authentication processes and sends activities to and receives activities from the Bot Connector Service. 봇이 작업을 받으면 어댑터는 해당 작업에 대한 모든 항목을 래핑하고, 턴에 대한 컨텍스트 개체를 만들어서 봇의 애플리케이션 논리에 전달하고, 봇이 생성한 응답을 다시 사용자의 채널로 보냅니다.When your bot receives an activity, the adapter wraps up everything about that activity, creates a context object for the turn, passes it to your bot's application logic, and sends responses generated by your bot back to the user's channel.

인증Authentication

어댑터는 작업의 정보 및 REST 요청의 Authentication 헤더를 사용하여 애플리케이션에서 수신하는 각 들어오는 작업을 인증합니다.The adapter authenticates each incoming activity the application receives, using information from the activity and the Authentication header from the REST request. 어댑터는 커넥터 개체 및 애플리케이션의 자격 증명을 사용하여 사용자에 대한 아웃바운드 작업을 인증합니다.The adapter uses a connector object and your application's credentials to authenticate the outbound activities to the user.

Bot Connector Service 인증에는 JWT(JSON 웹 토큰) Bearer 토큰 및 Microsoft 앱 ID, 그리고 봇 서비스를 만들 때 또는 봇을 등록할 때 Azure가 자동으로 만든 Microsoft 앱 암호 가 사용됩니다.Bot Connector Service authentication uses JWT (JSON Web Token) Bearer tokens and the Microsoft app ID and Microsoft app password that Azure creates for you when you create a bot service or register your bot. 어댑터가 트래픽을 인증하려면 초기화 시 애플리케이션에서 이러한 자격 증명이 필요합니다.Your application will need these credentials at initialization time, to allow the adapter to authenticate traffic.

참고

예를 들어 Bot Framework 에뮬레이터를 사용하여 봇을 로컬로 실행하거나 테스트하는 경우 봇으로 들어가고 나오는 트래픽을 인증하도록 어댑터를 구성할 필요가 없습니다.If you are running or testing your bot locally, for example, using the Bot Framework Emulator, you can do so without configuring the adapter to authenticate traffic to and from your bot.

턴 컨텍스트Turn context

어댑터는 작업을 받으면 턴 컨텍스트 개체를 생성합니다. 이 개체는 들어오는 작업, 보낸 사람 및 받는 사람, 채널, 대화, 작업을 처리하는 데 필요한 기타 데이터에 대한 정보를 제공합니다.When an adapter receives an activity, it generates a turn context object, which provides information about the incoming activity, the sender and receiver, the channel, the conversation, and other data needed to process the activity. 그러면 어댑터는 이 컨텍스트 개체를 봇에 전달합니다.The adapter then passes this context object to the bot. 컨텍스트 개체는 턴 시간 동안 유지되며, 다음에 대한 정보를 제공합니다.The context object persists for the length of a turn, and provides information on the following:

  • 대화 - 대화를 식별하고 대화에 참여한 봇과 사용자에 대한 정보를 포함합니다.Conversation - Identifies the conversation and includes information about the bot and the user participating in the conversation.
  • 작업 - 대화의 요청과 회신은 모두 작업 형식입니다.Activity - The requests and replies in a conversation are all types of activities. 이 컨텍스트는 라우팅 정보, 채널 정보, 대화, 보낸 사람 및 받는 사람에 대한 정보를 포함하여 들어오는 작업에 대한 정보를 제공합니다.This context provides information about the incoming activity, including routing information, information about the channel, the conversation, the sender, and the receiver.
  • 사용자 지정 정보 - 미들웨어를 구현하여 또는 봇 논리 내에서 봇을 확장하는 경우 각 턴에서 추가 정보를 제공할 수 있습니다.Custom information – If you extend your bot either by implementing middleware or within your bot logic, you can make additional information available in each turn.

또한 컨텍스트 개체는 사용자에게 응답을 보내고, 어댑터에 대한 참조를 가져오는 데 사용될 수 있습니다.The context object can also be used to send a response to the user, and get a reference to the adapter..

참고

애플리케이션 및 어댑터는 요청을 비동기적으로 처리하지만, 비즈니스 논리가 요청-응답 기반일 필요는 없습니다.Your application and the adapter will handle requests asynchronously; however, your business logic does not need to be request-response driven.

미들웨어Middleware

어댑터에 미들웨어를 추가할 수 있습니다.You can add middleware to the adapter. 미들웨어 및 봇 논리는 컨텍스트 개체를 사용하여 작업에 대한 정보를 검색하고 그에 따라 작동합니다.The middleware and the bot logic use the context object to retrieve information about the activity and act accordingly. 미들웨어 및 봇은 턴, 대화 또는 기타 범위에 대한 추적 상태와 같은 정보를 업데이트하거나 컨텍스트 개체에 추가할 수도 있습니다.The middleware and the bot can also update or add information to the context object, such as to track state for a turn, a conversation, or other scope. 미들웨어에 대한 자세한 내용은 미들웨어 문서를 참조하세요.For more in depth information about middleware, see the middleware article.

응답 생성Generating responses

컨텍스트 개체는 코드가 작업에 응답하도록 허용하는 작업 응답 메서드를 제공합니다.The context object provides activity response methods to allow code to respond to an activity:

  • send activitysend activities 메서드는 하나 이상의 작업을 대화에 보냅니다.The send activity and send activities methods send one or more activities to the conversation.
  • 채널에서 지원되는 경우 update activity 메서드는 대화 내에서 작업을 업데이트합니다.If supported by the channel, the update activity method updates an activity within the conversation.
  • 채널에서 지원되는 경우 delete activity 메서드는 대화에서 작업을 제거합니다.If supported by the channel, the delete activity method removes an activity from the conversation.

각 응답 메서드는 비동기 프로세스에서 실행됩니다.Each response method runs in an asynchronous process. 작업 응답 메서드는 호출되면 처리기를 호출하기 전까지 연결된 이벤트 처리기 목록을 복제합니다. 즉, 이 시점까지 추가된 모든 처리기를 포함하지만, 프로세스가 시작된 후에 추가된 항목을 전혀 포함하지 않습니다.When it is called, the activity response method clones the associated event handler list before starting to call the handlers, which means it will contain every handler added up to this point but will not contain anything added after the process starts.

이는 응답의 순서가 보장되지 않는다는 뜻이며, 한 작업이 다른 작업보다 복잡한 경우에 더욱 그렇습니다.This also means the order of your responses is not guaranteed, particularly when one task is more complex than another. 봇이 들어오는 작업에 대한 여러 응답을 생성할 수 있는 경우 사용자가 받는 순서대로 의미가 통해야 합니다.If your bot can generate multiple responses to an incoming activity, make sure that they make sense in whatever order they are received by the user.

중요

기본 봇 턴을 처리하는 스레드는 사용을 마친 컨텍스트 개체를 폐기합니다.The thread handling the primary bot turn deals with disposing of the context object when it is done. 응답(처리기 포함)이 상당한 시간을 소요하고 컨텍스트 개체에 따라 작동하는 경우 Context was disposed 오류가 발생할 수 있습니다.If a response (including its handlers) take any significant amount of time and try to act on the context object, they may get a Context was disposed error. 턴 컨텍스트의 처리 및 폐기가 완료될 때까지 기본 스레드가 생성된 작업을 기다리도록 작업 호출을 await해야 합니다.Be sure to await any activity calls so the primary thread will wait on the generated activity before finishing it's processing and disposing of the turn context.

응답 이벤트 처리기Response event handlers

봇 및 미들웨어 논리 외에도, 컨텍스트 개체에 응답 처리기(이벤트 처리기 또는 작업 이벤트 처리기라고도 함)를 추가할 수 있습니다.In addition to the bot and middleware logic, response handlers (also sometimes referred to as event handlers, or activity event handlers) can be added to the context object. 이러한 처리기는 현재 컨텍스트 개체에서 관련 응답이 발생하면 실제 응답을 실행하기 전에 호출됩니다.These handlers are called when the associated response happens on the current context object, before executing the actual response. 이러한 처리기는 실제 이벤트 전에 또는 후에 현재 응답의 나머지 부분에서 해당 형식의 모든 작업에 대해 무엇을 할 것인지 알고 있는 경우에 유용 합니다.These handlers are useful when you know you'll want to do something, either before or after the actual event, for every activity of that type for the rest of the current response.

경고

각 응답 이벤트 처리기 내부에서 작업 응답 메서드를 호출하지 않도록 주의해야 합니다. 예를 들어 on send activity 처리기 내에서 send activity 메서드를 호출하면 안 됩니다.Be careful to not call an activity response method from within it's respective response event handler, for example, calling the send activity method from within an on send activity handler. 호출하면 무한 루프가 생성될 수 있습니다.Doing so can generate an infinite loop.

새 작업마다 실행할 새 스레드가 생깁니다.Each new activity gets a new thread to execute on. 작업을 처리하는 스레드가 생성되면 해당 작업에 대한 처리기 목록이 해당하는 새 스레드에 복사됩니다.When the thread to process the activity is created, the list of handlers for that activity is copied to that new thread. 해당 시점 이후 추가된 처리기는 해당 활동 이벤트에 대해 실행되지 않습니다.No handlers added after that point will be executed for that specific activity event.

컨텍스트 개체에 등록된 처리기는 어댑터에서 미들웨어 파이프라인을 관리하는 방법과 매우 비슷하게 처리됩니다.The handlers registered on a context object are handled very similarly to how the adapter manages the middleware pipeline. 즉, 처리기는 추가된 순서대로 호출되며, 다음 대리자를 호출하면 등록된 그 다음 이벤트 처리기에 컨트롤이 전달됩니다.Namely, handlers get called in the order they're added, and calling the next delegate passes control to the next registered event handler. 처리기에서 다음 대리자를 호출 하지 않는 경우에는 이벤트 짧은 회로와 어댑터는 응답을 채널에 보내지 않습니다.If a handler doesn't call the next delegate, none of the subsequent event handlers are called, the event short circuits, and the adapter does not send the response to the channel.

다음 단계Next steps