웹 브라우저와 봇 통합Integrate your bot with a web browser

적용 대상: SDK v4APPLIES TO: SDK v4

일부 시나리오에서는 요구 사항을 이행하는 봇 이상을 요구합니다.Some scenarios require more than just a bot to fulfill a requirement. 봇은 웹 브라우저로 사용자를 보내 작업을 완료한 다음, 작업이 완료된 후에 사용자와의 대화를 다시 시작해야 할 수 있습니다.A bot may need to send the user to a web browser to complete a task and then resume the conversation with the user after the task has been completed.

인증 및 권한 부여Authentication and authorization

봇에 Office 365에서 사용자의 일정을 읽거나 해당 사용자 대신 약속을 하는 기능이 필요한 경우 사용자는 먼저 Microsoft Azure Active Directory에서 인증을 받고 봇에게 사용자 일정 데이터에 액세스할 수 있는 권한을 부여합니다.If a bot wants the ability to read the user's calendar in Office 365, or perhaps even create appointments on behalf of that user, the user must first authenticate with Microsoft Azure Active Directory and authorize the bot to access the user's calendar data. 봇은 사용자를 웹 브라우저로 리디렉션하여 인증 및 권한 부여 작업을 완료한 후, 사용자와의 대화를 다시 시작합니다.The bot will redirect the user to a web browser to complete the authentication and authorization tasks, and then will subsequently resume the conversation with the user.

보안 및 규정 준수Security and compliance

보안 및 규정 준수 요구 사항은 종종 봇이 사용자와 교환할 수 있는 정보 유형을 제한합니다.Security and compliance requirements often restrict the type of information that a bot can exchange with a user. 경우에 따라 사용자가 현재 대화 밖에서 데이터를 송/수신해야 할 수도 있습니다.In some cases, it may be necessary for the user to send/receive data outside of the current conversation. 예를 들어, 사용자가 타사 지급업체를 사용하여 결제를 진행하려는 경우 대화 컨텍스트 내에서 신용 카드 번호를 지정하면 안 됩니다.For example, if a user wants to execute a payment using a third-party payment provider, a credit card number should not be specified within the context of the conversation. 대신, 봇은 사용자를 웹 브라우저로 리디렉션하여 결제 프로세스를 완료한 후, 사용자와의 대화를 다시 시작합니다.Instead, the bot will direct the user to a web browser to complete the payment process, and then will subsequently resume the conversation with the user.

이 문서에서는 봇에서 웹 브라우저로 전환했다가 다시 돌아오는 작업을 편리하게 진행하는 프로세스를 알아봅니다.This article explores the process of facilitating a user's transition from bot to web browser, and back again.

참고

채팅에서 웹 브라우저로 전환했다가 다시 돌아올 경우 애플리케이션 간을 전환하는 과정에서 사용자를 혼동하기 쉬우므로 이상적인 방식이 아닙니다.Transitioning from chat to web browser and back is not ideal, as switching between applications can easily confuse a user. 더 나은 환경을 제공하기 위해 많은 채널은 봇이 애플리케이션을 제공하기 위해 사용할 수 있는 기본 제공 HTML 창을 제공합니다(이 경우가 아니면 애플리케이션이 웹 브라우저에 제공됨).To provide a better experience, many channels offer built-in HTML windows that a bot can use to present applications would otherwise appear in a web browser. 이 기술을 사용하면 대화를 벗어나지 않으면서 외부 리소스에 액세스할 수 있습니다.This technique allows the user to remain within the conversation while still accessing external resources. 이 방법은 포함된 웹 보기 내에서 OAuth를 사용하여 권한 부여 흐름을 관리하는 모바일 애플리케이션과 개념적으로 유사합니다.This approach is conceptually similar to mobile applications managing authorization flows using OAuth within embedded web views.

봇에서 웹 브라우저로 전환 및 다시 돌아오기Bot to web browser, and back again

이 다이어그램에서는 봇과 웹 브라우저 간의 통합에 대한 간단한 흐름을 보여 줍니다.This diagram shows the high-level flow for integration between bot and web browser.

봇-웹 상호 작용

흐름의 각 단계를 고려합니다.Consider each step of the flow:

  1. 봇이 사용자를 웹 사이트로 리디렉션하는 하이퍼링크를 생성하고 표시합니다.The bot generates and displays a hyperlink that will redirect the user to a website. 하이퍼링크는 일반적으로 채널의 대화 ID, 채널 ID 및 사용자 ID와 같은 현재 대화의 컨텍스트에 대한 정보를 지정하는 쿼리 문자열 매개 변수를 통해 대상 URL에 데이터를 포함합니다.The hyperlink typically includes data via querystring parameters on the target URL that specify information about the context of the current conversation, such as conversation ID, channel ID, and user ID in the channel.

  2. 사용자는 하이퍼링크를 클릭하면 웹 브라우저 내의 대상 URL로 리디렉션됩니다.The user clicks the hyperlink and is redirected to the target URL within a web browser.

  3. 봇은 웹 사이트 흐름이 완료되었음을 나타내는 웹 사이트의 통신을 대기하는 상태가 됩니다.The bot enters a state awaiting communication from the website to indicate that the website flow is complete.

    사용자가 웹 사이트 흐름을 절대 완료하지 않을 경우 봇이 영구적으로 ‘대기’ 상태를 유지하는 일이 없도록 이 흐름을 디자인합니다.Design this flow so that the bot will not permanently remain in the 'waiting' state if the user never completes the website flow. 즉, 사용자가 웹 브라우저를 중단했다가 봇과의 통신을 다시 시작하면 봇은 해당 입력을 무시하지 않고 승인합니다.In other words, if the user abandons the web browser and starts communicating with the bot again, the bot should acknowledge, not ignore that input.

  4. 사용자는 웹 브라우저를 통해 필요한 작업을 완료합니다.The user completes the necessary task(s) via the web browser. 이것은 일반적인 시나리오에 필요한 OAuth 흐름 또는 이벤트 시퀀스일 수 있습니다.This could be an OAuth flow or any sequence of events required by the scenario at hand.

  5. 사용자가 웹 사이트 흐름을 완료하면 웹 사이트는 '매직 넘버'를 생성하고 사용자에게 해당 값을 복사한 후 봇과의 대화에 붙여넣도록 지시합니다.When the user completes the website flow, the website generates a 'magic number' and instructs the user to copy the value and paste it back into the conversation with the bot.

  6. 웹 사이트는 사용자가 웹 사이트 흐름을 완료했다는 사실을을 봇에게 신호로 알립니다.The website signals to the bot that the user has completed the website flow. 봇에 '매직 넘버'를 전달하고 기타 관련 데이터를 제공합니다.It communicates the 'magic number' to the bot and provides any other relevant data. 예를 들어, OAuth 흐름의 경우 웹 사이트는 봇에 액세스 토큰을 제공해야야 합니다.For example, in the case of an OAuth flow, the website would provide an access token to the bot.

  7. 사용자는 봇으로 돌아가 채팅에 '매직 넘버'를 붙여넣습니다.The user returns to the bot and pastes the 'magic number' into the chat. 봇은 사용자가 제공하는 '매직 넘버'가 예상되는 값과 일치하는지 확인하고, 현재 사용자가 이전에 웹 사이트 흐름을 시작하기 위해 하이퍼링크를 클릭한 사용자와 같은지 검토합니다.The bot validates that 'magic number' provided by the user matches the expected value, verifying that the current user is the same user who previously clicked the hyperlink to initiate the website flow.

'매직 넘버'를 사용하여 사용자 ID 확인Verifying user identity using the 'magic number'

봇-웹 사이트 흐름 동안 진행되는 '매직 넘버' 생성(위의 5단계)을 통해 봇은 웹 사이트 흐름을 시작한 사람이 의도한 사람인지를 확인할 수 있습니다.The generation of a 'magic number' during the bot-to-website flow (step 5 above) enables the bot to subsequently verify that the user who initiated the website flow is indeed the user for whom it was intended. 예를 들어, 봇이 여러 사용자와 그룹 채팅을 수행하는 경우 이러한 사용자 중 한 명이 하이퍼링크를 클릭하여 웹 사이트 흐름을 시작했을 수 있습니다.For example, if a bot is conducting a group chat with multiple users, any one of them could have clicked the hyperlink to initiate the website flow. '매직 넘버' 유효성 검사 프로세스가 없으면 봇은 사용자가 흐름을 완료했는지 알 수 없습니다.Without the 'magic number' validation process, the bot has no way of knowing which user completed the flow. 한 명의 사용자가 인증을 받은 후 다른 사용자의 세션에서 액세스 토큰을 삽입할 수도 있는 것입니다.One user could authenticate and inject access tokens in another user's session.

경고

이러한 행동은 그룹 채팅 내에서 단지 위험한 수준이 아닙니다.This isn't just a risk within group chats. '매직 넘버' 유효성 검사 프로세스가 없으면 웹 사이트 흐름을 시작하기 위한 하이퍼링크만 있으면 누구든지 사용자의 ID를 스푸핑할 수 있습니다.Without the 'magic number' validation process, anyone who obtains the hyperlink to launch the website flow can spoof a user's identity.

매직 넘버는 강력한 암호화 라이브러리를 사용하여 생성된 난수여야 합니다.The magic number should be a random number generated using a strong cryptography library. C#에서의 생성 프로세스 예제를 보려면 BotAuth 라이브러리 내의 이 코드를 참조하세요.For an example of the generation process in C#, see this code within the BotAuth library. BotAuth에서는 Microsoft Bot Framework에서 빌드된 봇이 웹 사이트의 사용자를 인증하고 나중에 인증 프로세스에서 생성된 액세스 토큰을 사용하기 위한 봇-웹 사이트 흐름을 구현할 수 있도록 합니다.BotAuth enables bots that are built in Microsoft Bot Framework to implement the bot-to-website flow to authenticate a user in a website and then to subsequently use the access token that was generated from the authentication process. BotAuth는 채널 기능에 대해 어떠한 가정도 하지 않으므로 이러한 흐름이 대부분의 채널에서 잘 작동합니다.Since BotAuth does not make any assumptions about the channel's capabilities, such flows should function well with most channels.

참고

채널은 포함된 자체 웹 보기를 빌드하므로 '매직 넘버' 유효성 검사 프로세스에 대한 필요성은 더 이상 지원되지 않습니다.The need for the 'magic number' validation process should be deprecated as channels build their own embedded web views.

웹 사이트는 봇에 어떻게 '신호'할까요?How does the website 'signal' the bot?

봇은 사용자가 웹 사이트 흐름을 시작하기 위해 클릭하는 하이퍼링크를 생성할 때 채널의 대화 ID, 채널 ID 및 사용자 ID와 같은 현재 대화의 컨텍스트에 대한 쿼리 문자열 매개 변수를 통해 대상 URL에 데이터를 포함합니다.When the bot generates the hyperlink that the user will click to initiate the website flow, it includes information via querystring parameters in the target URL about the context of the current conversation, such as conversation ID, channel ID, and user ID in the channel. 이후에 웹 사이트는 이 정보를 사용하여 Bot Framework SDK 또는 REST API를 통해 해당 사용자 또는 대화에 대한 상태 변수를 읽고 쓸 수 있습니다.The website can subsequently use this information to read and write state variables for that user or conversation using the Bot Framework SDK or REST APIs. 웹 사이트가 웹 사이트 흐름이 완료되었음을 봇에 ‘신호로 알리는’ 방법의 예제를 보려면 위의 6단계를 참조하세요.See step 6 above for an example of how the website 'signals' to the bot that the website flow is complete.

예제 코드Sample code

이 문서에 설명된 대로 BotAuth 라이브러리를 사용하여 OAuth 흐름을 Microsoft Bot Framework에서 .NET 및 Node를 사용하여 빌드한 봇에 바인딩할 수 있습니다.As described in this article, the BotAuth library enables OAuth flows to be bound to bots that are built using .NET and Node in the Microsoft Bot Framework.

추가 리소스Additional resources