2016-07-28 24 views
4

Ich habe ein Bot mit Microsoft Bot-Framework entwickeln und in Debug laufen richtigBild hochladen zu Skype BOT

Nach der Installation von Skype, nach dem Upload das Bild habe ich einen Link wie diesen

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

Der Code ist sehr einfach und läuft ohne skype

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

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

} 
........ 

Wie kann ich das Bild, die ich geschickt habe?

+0

Was ist 'AnalyzeUrl'? Können Sie den Code dafür teilen? –

+0

@MartinKearn AnalyzeUrl ist eine Funktion, die CognitiveServices aufruft, diese Funktion wird korrekt ausgeführt. Ich denke, dass die Probleme in den Sicherheitsrichtlinien von Skype liegen – daniele3004

Antwort

3

Nach this comment, eine Anlage zu holen, sollte die GET-Anfrage JwtToken des Bot als Autorisierungsheader enthalten:

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

Das bedeutet, müssen Sie die AnalyzeUrl ändern, um die Bilddaten zu akzeptieren statt URL Ich glaube, dass CognitiveServices, die Sie verwenden, in der Lage sind, die Bilddaten zu akzeptieren.