2016-07-28 64 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能夠接受圖像數據。