2016-07-28 63 views
4

我有一个机器人与微软博特框架开发,并在调试正确上传图像到Skype的BOT

运行安装在Skype之后,上传图片后,我有这样的

https://df-apis.skype.com/v2/attachments/0-eus-d4-7e19a097c62f5fc21dd53eabfa19d85e/views/original 
链接

代码非常简单,没有Skype的运行

if ((activity.Attachments != null) && (activity.Attachments.Count > 0)) 
{ 

     analysisResult = await AnalyzeUrl(activity.Attachments[0].ContentUrl); 

} 
........ 

如何我发现我发的图片?

+0

什么是'AnalyzeUrl'?你可以分享代码吗? –

+0

@MartinKearn AnalyzeUrl是一个调用CognitiveServices的函数,该函数可以正确运行。我认为这些问题出现在Skype安全策略中 – daniele3004

回答

3

根据this comment,获取附件时,GET请求应当包含机器人作为授权报头的JwtToken

var attachment = activity.Attachments?.FirstOrDefault(); 
if (attachment?.ContentUrl != null) 
{ 
    using (var connectorClient = new ConnectorClient(new Uri(activity.ServiceUrl))) 
    { 
     var token = await (connectorClient.Credentials as MicrosoftAppCredentials).GetTokenAsync(); 
     var uri = new Uri(attachment.ContentUrl); 
     using (var httpClient = new HttpClient()) 
     { 
      if (uri.Host.EndsWith("skype.com") && uri.Scheme == Uri.UriSchemeHttps) 
      { 
       httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token); 
       httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/octet-stream")); 
      } 
      else 
      { 
       httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(attachment.ContentType)); 
      } 

      var attachmentData = await httpClient.GetByteArrayAsync(uri); 
      analysisResult = await AnalyzeUrl(attachmentData); 
     } 
    }  
} 

这意味着你必须改变AnalyzeUrl接受的图像数据,而不是URL。我相信您正在使用的CognitiveServices能够接受图像数据。