2016-09-02 5 views
0

나는 마이크로 소프트 BotFramework 봇 코드를 다운로드하려고 할 때 내가 직면하고 문제가얻기 403 (금지), 마이크로 소프트 봇은 웹 클라이언트 만들려고 - 다운로드 데이터 통화

를 사용하여 로봇을 만들려고 오전 Facebook 메신저/Skype/Slack과 같은 채널을 통해 데이터 (사용자가 봇에 업로드 한 이미지). 다운로드 할 코드는 WebClient를 만들고 첨부 파일 URL을 전달하여 DownloadData 호출을 만드는 것입니다.

업로드 된 이미지 URL을 탐색 할 수 있습니다. 또한 웹 클라이언트를 통해 데이터를 다운로드하는 코드는 Bot 응용 프로그램보다는 콘솔 응용 프로그램을 작성하면 잘 작동합니다.

C# 코드는 친절이 문제에 대한 해결책이 될해야하는지 제안
WebClient wc = new WebClient(); 
byte[] bytes = wc.DownloadData(imageUrl); // This line gives 403 error 

스 니펫.

private async Task<IEnumerable<byte[]>> GetAttachmentsAsByteArrayAsync(Activity activity) 
    { 
     var attachments = activity?.Attachments? 
     .Where(attachment => attachment.ContentUrl != null) 
     .Select(c => Tuple.Create(c.ContentType, c.ContentUrl)); 
     if (attachments != null && attachments.Any()) 
     { 
      var contentBytes = new List<byte[]>(); 
      using (var connectorClient = new ConnectorClient(new Uri(activity.ServiceUrl))) 
      { 
       var token = await (connectorClient.Credentials as MicrosoftAppCredentials).GetTokenAsync(); 
       foreach (var content in attachments) 
       { 
        var uri = new Uri(content.Item2); 
        using (var httpClient = new HttpClient()) 
        { 
         if (uri.Host.EndsWith("skype.com") && uri.Scheme == "https") 
         { 
          httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token); 
          httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/octet-stream")); 
         } 
         else 
         { 
          httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(content.Item1)); 
         } 
         contentBytes.Add(await httpClient.GetByteArrayAsync(uri)); 
        } 
       } 
      } 
      return contentBytes; 
     } 
     return null; 
    } 
+1

데이터 다운로드가 정상적으로 작동하지만 이미지가 메신저를 통해 업로드되면 [동일한] 동일한 이미지를 다운로드하는 경우 HTTP 403 오류가 발생합니다 .- 같은 파일을 어떻게 동시에 업로드하고 다운로드 할 수 있습니까? – stuartd

+0

사용자는 첨부 파일 (이미지)을 봇 채널에 업로드 한 다음 동일한 이미지에서 처리하기 위해 봇 코드가 업로드 된 URL에서 데이터를 다운로드하려고합니다. Http 403은 봇이 데이터를 다운로드하려고 할 때 나타납니다. –

+1

Skype의 경우 DefaultRequestHeaders.Authorization을 ("Bearer", token), DefaultRequestHeaders.Accept를 "application/octet-stream"으로 추가해야합니다. 다른 채널의 경우 DefaultRequestHeaders.Accept를 컨텐츠 유형 –

답변

1

여기에 문제의 완전한 해결은? 이 방법이 효과가 있었습니까?

0

Node.js에서 BotFramework를 사용하고 있으며 동일한 오류가 발생했습니다. 마지막으로 해결 방법을 찾았습니다. 나는 ChatConnector.js의 줄 아래에 주석을 달았으며, 이제는 나를 위해 잘 작동한다. (! isEmulator & & decoded_1.payload.appid = this.settings.appId)

if (isEmulator && decoded_1.payload.appid != this.settings.appId) { 
 
     logger.error('ChatConnector: receive - invalid token. Requested by unexpected app ID.'); 
 
     res.status(403); 
 
     res.end(); 
 
     return; 
 
    }

경우 { logger.error는 ('ChatConnector는 : 수신 - 유효하지 않은 토큰을 예상치 못한 응용 프로그램 ID에 의해 요청. '); res.status (403); res.end(); 반환; }