1

로그인을 통해 인증 된 클라이언트가 있습니다. 요청할 때마다 해당 userID와 토큰을 봇에 전달해야합니다. 이 정보가 필요한 내 서버 웹 API를 때리는 데 사용할 수 있습니다. 헤더에 들어있는 인증을 얻으려고했지만 비밀을 전달합니다. 헤더에 id와 token을 붙일 수 있다면 저에게 도움이 될 것입니다.어떻게 내 사용자 ID 토큰을 Microsoft Bot Framework의 직력을 통해 내 클라이언트에서 직접 보낼 수 있습니까?

this.botConnection = new BotChat.DirectLine({ 
    secret: 'yNy9g1Mok1g.cwA.fyks.fghsth.rcKOQUIu558-TI',//params['mysecret'], 
    token: params[this.token],  //I think I should pass it here but this does not work. 
    //domain: params['ngroktunneledurl.com/api/messages'], 
    webSocket: params['webSocket'] && params['webSocket'] === "true" // defaults to true, 
}); 

그런 다음 ... 메시지 컨트롤러에서 토큰을 검색하려고 봇

public async Task<HttpResponseMessage> Post([FromBody]Activity activity) 
    { 

     if (activity.Type == ActivityTypes.Message) 
     { 
      var keyValuePair = Request.Headers.FirstOrDefault(h => h.Key.Equals("Authorization")); 
      token = keyValuePair.Value.First().Substring(7); 

      await Conversation.SendAsync(activity,() => new Dialogs.RootDialog(token)); 
     } 
     else 
     { 
      HandleSystemMessage(activity).ConfigureAwait(false); 
     } 
     var response = Request.CreateResponse(HttpStatusCode.OK); 
     return response; 
    } 

인증은 우리의 로봇을 식별하는 비밀을 제공합니다.

답변

0

나는 보낼 가치가있는 봇에 활동을 보냄으로써 이것을 달성 할 수 있었다. 이후에 객체를 deserialize하여 그 값을 C# 코드에서 얻었습니다.

BotChat.App({ 
     botConnection: 
     { 
      ...dl, 
      postActivity: activity => { 
       // Add some custom data 
       activity.channelData.MyKey = this.Id; 
       activity.channelData.token = this.token; 
       return dl.postActivity(activity) 
      } 
     }, 
      user: user, 
      bot: bot 
     }, document.getElementById("BotChatGoesHere")) 
1

ChannelData은 커넥터 서비스에서 제거되지 않습니다. 이 속성은 채널 특정 기능을 제공하기 위해 설계되었지만 봇 클라이언트의 추가 정보를 봇에 전달하는데도 사용할 수 있습니다. https://docs.microsoft.com/en-us/bot-framework/dotnet/bot-builder-dotnet-channeldata

+0

나는 모든 사용자 응답에서 ChanelData가 내 봇에 데이터를 보낼 수있는 방법을 찾지 못했습니다. 이것이 내가 봇에 요청할 때마다 사용자를 인증해야한다는 것이 주요 문제입니다. 나는 DirectLine을 사용하고있다. –

0

토큰 또는 모든 종류의 문자열을 id에 전달하고이를 concatinate 할 수 있습니다 식별자를 사용하여 내부 코드를 분할하여 배열로 가져올 수 있습니다. 이처럼 봇 C# 코드의 값을 얻을 수 있습니다

<div id="bot"></div> 
<script> 
    var spCOntext; 
    var FirstName; 
    var emailaddress; 
    var Environment; 
    try{ 
     spCOntext = "your context"; 
     FirstName = _spPageContextInfo.userDisplayName; 
     emailaddress = "your email"; 
     Environment= "application URL"; 
    } 
    catch(ex) 
    { 
     spCOntext = 'You'; 
     Environment = 'Local System'; 

    } 

    BotChat.App({ 

     directLine: { secret: 'Your secret' }, 
     //directLine: { secret: 'Your secret' }, 
     user: { id: FirstName ,Name: spCOntext+'*'+Environment}, 
     bot: { id: 'your bot id' }, 
     resize: 'detect' 
    }, document.getElementById("bot")); 

</script> 

과 : 코드 아래

사용

public async Task AltairQueryResponse(IDialogContext context, IAwaitable<IMessageActivity> response) 
    { 
     var message = await response; 
     var getContext = message.From.Name.Split('*')[0];// get context 
     var Environment= message.From.Name.Split('*')[0];// get Environment 
     await context.PostAsync(getContext); 
     await context.PostAsync(Environment); 
    } 

는 다른 도움이 필요하면 알려 할