2016-11-23 4 views
1

Ich versuche, einen an bot gesendeten Anhang von einem Benutzer an einen anderen zu routen. Es funktioniert gut, während ich versuche, etwas vom Emulator zu Emulator/Telegramm/Skype zu senden, aber überhaupt nicht funktioniert, wenn ich versuche, es von Skype/Telegramm zu senden (skype sagt nichts, Telegramm argumentiert: "POST zu mybot fehlgeschlagen: POST an den Endpunkt des Bot ist mit HTTP-Status 500 fehlgeschlagen "). Wo soll ich das Problem herausfinden?Routing-Anhänge

Hier ist mein Code:.

if (mes.Attachments != null && mes.Attachments.Any()) 
      { 
       var list = new List<Attachment>(); 
       foreach (var attachment in mes.Attachments) 
       { 
        using (HttpClient httpClient = new HttpClient()) 
        { 
         // Skype attachment URLs are secured by a JwtToken, so we need to pass the token from our bot. 
         if (mes.ChannelId.Equals("skype", StringComparison.InvariantCultureIgnoreCase) && 
          new Uri(attachment.ContentUrl).Host.EndsWith("skype.com")) 
         { 
          var mstoken = await new MicrosoftAppCredentials().GetTokenAsync(); 
          httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", 
          mstoken); 
         } 

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

         var ms = await ConvertContentToByteArray(responseMessage);  

         var sendAttachment = new Attachment() 
         { 
          ContentType = attachment.ContentType, 
          Name = attachment.Name, 
          ContentUrl = String.Format("data:image/png;base64,{1}", attachment.ContentType, 
          Convert.ToBase64String(ms)) 
         }; 

         list.Add(sendAttachment); 
        } 
       } 
       message.Attachments = list; 
       message.AttachmentLayout = mes.AttachmentLayout; 
      } 

await connector.Conversations.SendToConversationAsync((Activity)message); 

"mes" ist eingehende Nachricht, „Nachricht - outcoming

Sie für Ihre Antworten im Voraus Viele

UPDATE 1: Ich! Es ist mir gelungen, mein Problem mit dem Senden/Empfangen von Dateien zu lösen (siehe meine Antwort unten). Leider trat ein neues Problem mit einer Dateigrößenbeschränkung auf (siehe Useful post).

Einige Links, die nützlich für mich waren: Send Attachment Sample, Receive Attachment Sample, Useful post, Some other receiving example

+1

Die Fehlermeldung "POST an den Endpunkt des Bot ist mit HTTP-Status 500 fehlgeschlagen" bedeutet, dass Ihr Bot eine 500 wirft. Versuchen Sie, einen Debugger anzuhängen und zu sehen, ob Sie ihn fangen können? – Lars

+0

Danke für Ihre Antwort! Ich habe nicht erkannt, dass es möglich ist, eine Anwendung direkt in der Cloud (nicht im Emulator) zu debuggen. Hier ist ein Link, wie man das macht [Remote-Debugging von Web-Apps] (https://docs.microsoft.com/en-us/azure/app-service-web/web-sites-dotnet-troubleshoot-visual-studio). Ich musste auch einen Patch von [diese Antwort] (http://stackoverflow.com/questions/17659473/visual-studio-remote-debugger-invalid-access-to-memory-location-feature) anwenden, damit es funktioniert. – Sovan

Antwort

1

Der obige Code korrekt ist und funktioniert gut (wenn die Größe einer Anlage nicht zu groß ist). Mein Problem (und dummer Fehler) war mes.Text an einem anderen Ort ohne Nullprüfung zu verwenden. Anhänge in Skype/Telegramm haben mes.Text == null.