2017-02-15 10 views
0

Myボットはダイアログボックスに添付ファイルを要求し、ユーザーから画像を受信し、そのファイルのコンテンツ名、URL、およびタイプを変数に保存すると仮定します。しかし、私が受け取っているファイルは、ユーザーが送信したファイルではありません。ユーザーが添付ファイルで返信したときに不正なファイルが受信される

https://webchat.botframework.com/attachments/GkLhiqJcvH019mP0iGBKvo/0000052/0/blob?t=X5ICiUrhFas.dAA.RwBrAEwAaABpAHEASgBjAHYASAAwADEAOQBtAFAAMABpAEcAQgBLAHYAbwAtADAAMAAwADAAMAA1ADIA.mcEiHxuH0gE.VMcp6Yduqgc.4xT1ZTOvCX-B7A0nLto6eZNFrFi-0xSzGk5AKmA-EPE

含むファイル:代わりに、そのは、このリンクから「ブロブ」(拡張子なし)という名前のファイルを検索し

{"type":"message","from":{"id":"9n0I1ZqSrLF","name":"You"},"locale":"en-US","timestamp":"2017-02-14T21:12:32.074Z","channelData":{"clientActivityId":"1487106689866.9060198022610071.8"}} 

をここに添付ファイルプロンプトのコードです。このプロンプトはダイアログ内にあります:

private async Task getAttach(IDialogContext context, IAwaitable<IEnumerable<Attachment>> result) 
    { 
     IEnumerable<Attachment> list = await result; 
     Attachment attachment = list.FirstOrDefault(); 

     string filename = attachment.Name; 
     string url = attachment.ContentUrl; 
     string contentType = attachment.ContentType; 


     //Set attachmentFileNames 
     if (attachmentFileNames == null) 
     { 
      attachmentFileNames = ""; 
     } 

     attachmentFileNames += contentType; 
     attachmentFileNames += ","; 
     numberOfFiles++; 

     //Set attachmentFileURLs 
     if (attachmentFileURLs == null) 
     { 
      attachmentFileURLs = ""; 
     } 

     attachmentFileURLs += url; 
     attachmentFileURLs += ","; 

     attachmentHasBeenAdded = true; 
     await FirstMessageReceivedAsync(context, result); 

    } 

ここでは、メッセージコントローラの添付ファイルをどのように処理していますか。これはポストタスク内にある:

ConnectorClient connector = new ConnectorClient(new Uri(activity.ServiceUrl)); 

      if (activity.Attachments != null && activity.Attachments.Any()) 
      { 
       hasaAttachment = true; 
       var attachment = activity.Attachments.First(); 
       using (HttpClient httpClient = new HttpClient()) 
       { 
        // Skype & MS Teams attachment URLs are secured by a JwtToken, so we need to pass the token from our bot. 
        if ((activity.ChannelId.Equals("skype", StringComparison.InvariantCultureIgnoreCase) || activity.ChannelId.Equals("msteams", StringComparison.InvariantCultureIgnoreCase)) 
         && new Uri(attachment.ContentUrl).Host.EndsWith("skype.com")) 
        { 
         var token = await new MicrosoftAppCredentials().GetTokenAsync(); 
         httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token); 
        } 

        var responseMessage = await httpClient.GetAsync(attachment.ContentUrl); 

        var contentLenghtBytes = responseMessage.Content.Headers.ContentLength; 

        Activity reply = activity.CreateReply($"Attachment of {attachment.ContentType} type and size of {contentLenghtBytes} bytes received. URL: {attachment.ContentUrl}"); 

        await connector.Conversations.ReplyToActivityAsync(reply); 
       } 
      } 

私はこの例を以下しています:エミュレータで Receive Attachment Bot Sample

それが正常に動作しますが、紺碧の公開バージョンにはありません。コードは例に非常に似ていますので、ボットがユーザーのファイルを検出していない理由はわかりません。 正しいファイル(ユーザーが返信したファイル)を受け取るにはどうすればよいですか?

答えて

0

添付ファイルは要素1以降になります。例えば。

Attachment attachment = list.ElementAt(1); 

ウェブチャット(そしておそらく他のプラットフォーム)は、プロンプトと、ユーザーからの添付ファイルを取得するとき、それはIEnumerableを「結果」の開始時にBLOBファイルを追加する奇妙な癖を持っています。

private async Task getAttach(IDialogContext context, IAwaitable<IEnumerable<Attachment>> result) 
{...} 
関連する問題