Загрузить текстовый файл как вложение, используя Bot Framework, не работающий в канале Skype - PullRequest
0 голосов
/ 18 мая 2018

Я не могу загрузить текстовый файл в виде вложения с помощью платформы Bot (Bot.Builder v3.11.0) при попытке в канале Skype.Это работало в эмуляторе платформы Bot, хотяНиже приведен код, который загружает файл и возвращает действие с URL-адресом загруженного файла во вложении.Выдает исключение при использовании канала Skype.В качестве альтернативы есть ли другой способ добиться загрузки / присоединения текстового файла в канале Skype, который пользователь затем может загрузить из клиента?

public static async Task<Activity> GetTextAttachmentAsync(Activity message)
{
    var reply = message.CreateReply("Here is a text attachment");
    var serviceUrl = reply.ServiceUrl;
    var conversationId = reply.Conversation.Id;

    byte[] fileData = null;
    using (var wc = new System.Net.WebClient())
        fileData = wc.DownloadData("https://textfiles.com/100/adventur.txt");

    using (var connector = new ConnectorClient(new Uri(serviceUrl)))
    {
        var attachments = new Attachments(connector);
        var token = await (connector.Credentials as MicrosoftAppCredentials).GetTokenAsync();
        connector.HttpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
        var response = await attachments.Client.Conversations.UploadAttachmentAsync(
            conversationId,
            new AttachmentData
            {
                Name = "transcript.html",
                OriginalBase64 = fileData,
                Type = "text/html"
            });

        reply.Attachments = new List<Attachment>
        {
            new Attachment
            {
                Name = "transcript.html",
                ContentType = "text/html",
                ContentUrl = attachments.GetAttachmentUri(response.Id)
            }
        };

        return reply;
    }
}

Исключение, выброшенное из функции UploadAttachmentAsync() выше:

Microsoft.Rest.HttpOperationException: Not Found
   at Microsoft.Bot.Connector.ErrorHandling.<HandleErrorAsync>d__2`1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.Bot.Connector.ConversationsExtensions.<UploadAttachmentAsync>d__15.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Support.Services.Bot.Core.Utilities.AdaptiveCardsHelper.<GetTextAttachmentAsync>d__4.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Support.Services.Bot.Core.Dialogs.BotDialog.<HandleMessageAsync>d__3.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Support.Services.Bot.Core.Dialogs.DialogBase`1.<MessageReceivedAsync>d__8.MoveNext()

1 Ответ

0 голосов
/ 22 мая 2018

При запуске кода с включенными общеязыковыми ошибками времени выполнения в Visual Studio.Я получил следующую ошибку: error

Кажется, что адрес сайта https://textfiles.com/100/adventur.txt не имеет доверенного сертификата, и это делает .NET несчастным.Когда я пошел исследовать, я нашел ответ Переполнение стека , в котором предлагалось использовать приведенный ниже код для преодоления этого, но настоятельно рекомендуется не использовать его в работе.

ServicePointManager.ServerCertificateValidationCallback += (o, c, ch, er) => true;

Это продолжалосьбыть моим первоначальным предложением до того, как я запустил ваш код: многие каналы (включая Skype) ограничивают типы файлов, которые вы можете отправлять с бота при использовании base64 и / или локальных файлов.Например, я знаю, что вы не можете отправлять PDF-файлы как Base64 в Skype.Если память работает правильно, вы можете отправлять только графические и видеофайлы (возможно, и аудио), используя метод base64 в Skype.Так что даже если вы исправите эту ошибку, вы можете столкнуться с этим позже.Обходной путь для этого - использование размещенных файлов.Я не совсем уверен, что вы пытаетесь сделать со своим ботом, поэтому я не уверен, подходит ли вам этот вариант, но это вариант.

Так что, если вы обнаружите, что этот код неработая после решения проблемы с сертификатом, попробуйте отправить файл изображения и посмотреть, работает ли он, если он работает, но ваш HTML-файл все еще не работает, вы будете знать, почему.

...