Microsoft Bot Builder: добавьте PDF-вложение и откройте его в веб-браузере - PullRequest
0 голосов
/ 03 мая 2018

Я пытаюсь создать бота, в котором мне нужно добавить pdf-файл в качестве вложения, и когда пользователь нажимает на него, он должен быть открыт в веб-браузере или загружен. Я пытался это сделать, но, как вы можете видеть в , введите описание изображения здесь , когда я нажимаю на него, ничего не происходит.

Код для добавления PDF-вложения:

  private static Attachment GetInlineAttachment()
            {
                var imagePath = System.Web.HttpContext.Current.Server.MapPath("~/Files/mutuelle.pdf");

              //  var imageData = Convert.ToBase64String(File.ReadAllBytes(imagePath));

                return new Attachment
                {
                    Name = "mutuelle.pdf",
                    ContentType = "application/pdf",
                    ContentUrl = imagePath
                };

            }
[LuisIntent("Mutuelle")]
        public async Task MutuelleIntent(IDialogContext context, LuisResult result)
        {


            var replyMessage = context.MakeMessage();
            try
            {

                Attachment attachment = GetInlineAttachment();
                replyMessage.Attachments = new List<Attachment> { attachment };
                await context.PostAsync(" Vous retrouverez dans le document ci-dessous toutes les prestations prise en charge par notre mutuelle.");

                await context.PostAsync(replyMessage);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }

            context.Wait(MessageReceived);
        }

Может кто-нибудь помочь мне, пожалуйста?

Ответы [ 2 ]

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

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

Похоже, что вы хотите отправить файлы PDF, которые хранятся в папке вашего приложения, как вложение пользователю. Если возможно, вы можете попытаться сохранить эти файлы PDF в хранилище BLOB-объектов Azure (а не в папке приложения) , к которому можно получить доступ из любой точки мира через HTTP или HTTPS. Затем вы можете отправить файл как вложение пользователю, например так:

var replyMessage = context.MakeMessage();

replyMessage.Attachments = new List<Attachment>
{
    new Attachment
    {
        Name = "mutuelle.pdf",
        ContentType = "application/pdf",
        ContentUrl = "https://{storageaccount}.blob.core.windows.net/files/mutuelle.pdf?st=2018-05-04T08%3A03%3A29Z&se=2018-05-05T08%3A03%3A29Z&sp=rl&sv=2017-04-17&sr=b&sig=sWYrbwPhgGeOEVNAAoRZXiIC%2B0sNtOMvokeRGkorDhM%3D"
    }
};

await context.PostAsync(" Vous retrouverez dans le document ci-dessous toutes les prestations prise en charge par notre mutuelle.");
await context.PostAsync(replyMessage);

Кроме того, некоторые каналы могут не разрешать ботам отправлять определенные типы файлов (например, .pdf) в виде вложений. В этом случае, если вы сохраняете файл в хранилище BLOB-объектов Azure, вы можете предоставить URL-адрес этого файла в виде простого текстового сообщения своему пользователю, а затем пользователь может скопировать этот URL-адрес и открыть его в браузере или загрузить его. А если вы хотите ограничить доступ к файлу, хранящемуся в хранилище BLOB-объектов Azure, хранилище BLOB-объектов Azure предоставляет SAS , которое можно использовать для предоставления ограниченного доступа к ресурсам хранилища.

Примечание: сообщается о проблемах в github о некоторых каналах, не поддерживающих отправку pdf-вложения

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

Мне удалось сделать это с помощью следующего кода, похоже, использование карты героя действительно помогает здесь. Потому что в какой-то момент я знаю, что в эмуляторе была ошибка, из-за которой бот делил ссылку, которую нельзя было кликнуть, потому что событие щелчка регистрировалось в пузыре чата, а не в самой ссылке. Не уверен, что это когда-нибудь исправили.

private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<object> result)
{
        var reply2 = await result as Activity;
        Activity reply = reply2.CreateReply();
        string image64;
        try
        {
            string base64String;
            var image = Convert.ToBase64String(File.ReadAllBytes(
                @"C:\Users\v-jassow\Documents\Visual Studio 2017\Projects\Bot Application6\Bot Application6\nachos.pdf"));
            image64 = "data:application/pdf;base64," + image; 
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
            throw;
        }

        HeroCard heroCard = new HeroCard()
        {
            Text = "Click me",
            Tap = new CardAction()
            {
                Value = @"http://localhost:3979/nachos.pdf",
                Type = "openUrl",
            }
        };

        reply.Attachments = new List<Attachment>
        {
            heroCard.ToAttachment()
        };
        await context.PostAsync(reply);
}
...