1

私はログインを使って認証されたクライアントを持っています。その要求に応じてそのuserIdとトークンをボットに渡す必要があります。私は、この情報が必要な私のサーバーのWeb APIを打つために使用することができます。ヘッダーに入っている認可を取得しようとしましたが、秘密を保持しています。ヘッダーにIDとトークンを付けることができれば私にとっては役に立ちます。私のクライアントからトークンを私のクライアントからBotボットフレームワークに直接送ることができます

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, 
}); 

はその後。メッセージコントローラ内のトークンを取得しようとしているbotから

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

私は送信する必要がある値を含むボットにアクティビティを送信することでこれを達成することができました。私は後でオブジェクトを逆シリアル化して、その値を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に渡して、識別子を使用して、内部コードを分割して配列として取得することができます。あなたはこのようなあなたのボット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); 
    } 

は、あなたが他の助けが必要な場合は私に知らせてください

関連する問題