Как сделать скачиваемый файл в ответ от бота

У меня также была эта проблема сегодня утром, пытаясь заполнить таблицы часовых поясов на нашем производственном сервере (используя CentOS).

Я работал над этой проблемой, экспортируя скрипт создания таблицы с моего компьютера разработки (заселяя таблицы на Windows просто требуют загрузки таблиц и копирования их в соответствующий каталог).

Я немного изменил скрипт создания, и теперь он работает для меня:

Я не могу опубликовать его в своих ответах, поскольку сценарий слишком длинный.

https://drive.google.com/file/d/0B7iwL5F-hwr_YkItRXk2Z1VZdlE/view?usp=sharing

Вот версия с комментарием (но это не похоже, работает, поэтому используйте версию без комментариев).

https://drive.google.com/file/d/0B7iwL5F-hwr_dWdjTDREcXNHQmM/view?usp=sharing

Для запуска сценария требуется не более нескольких секунд. Вероятно, вам нужно будет использовать пользователя root для его запуска.

Вы можете использовать этот запрос, чтобы проверить установку:

SELECT CONVERT_TZ(CURRENT_DATE(),'UTC','America/Montreal');

Если это возвращает NULL вместо datetime, это означает, что скрипт не удался.

Хороший успех

0
задан Gab 16 January 2019 в 07:03
поделиться

2 ответа

Есть несколько способов сделать это.

Использование карточек

Во-первых, карточки не позволяют напрямую загружать вложения. В лучшем случае они могут связать вас с изображением (или другим файлом), который вы хотите, чтобы ваш пользователь загрузил. Пример json для адаптивной карты, которая может сделать это:

{
    "type": "AdaptiveCard",
    "body": [
        {
            "type": "Image",
            "selectAction": {
                "type": "Action.OpenUrl",
                "url": "https://dev.botframework.com/Client/Images/ChatBot-BotFramework.png"
            },
            "url": "https://dev.botframework.com/Client/Images/ChatBot-BotFramework.png"
        },
        {
            "type": "TextBlock",
            "text": "This card's action will open an image"
        }
    ],
    "actions": [
        {
            "type": "Action.OpenUrl",
            "title": "Open Image",
            "url": "https://dev.botframework.com/Client/Images/ChatBot-BotFramework.png"
        }
    ],
    "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
    "version": "1.0"
}

И выглядит так:

Adaptive Card With Clickable Image

[1122 ] Эта карта отображает изображение и содержит ссылку для пользователя, чтобы открыть и загрузить его. Поскольку я добавил Action.OpenUrl непосредственно к изображению, пользователь может щелкнуть изображение, чтобы открыть его, а затем загрузить его - кнопка «Открыть изображение» предназначена только для демонстрации другого метода.

Вот отличный сайт для Adaptive Card Документация , Схема и удобный для пользователя дизайнер . Обратите внимание, что конструктор не позволяет вам легко добавлять Action в это время. Вы должны вручную добавить их в часть JSON.

Отправка вложений

Однако вы можете напрямую отправить сообщение с возможностью загрузки файлов.

Вы можете определить вложение с помощью:

const attachment = {
  name: 'PDF',
  contentType: 'application/pdf',
  contentUrl: 'https://media.readthedocs.org/pdf/microsoftbotframework/latest/microsoftbotframework.pdf',
}

и затем отправить его пользователю с помощью:

await step.context.sendActivity({
  text: 'Attachment',
  attachments: [attachment],
});

Два важных примечания:

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

  2. Ваш код может использовать что-то отличное от step.context. Это для отправки в рамках диалога водопада. Вам может понадобиться другая версия context.sendActivity для вашего бота.

Если вы нашли ответ на свой вопрос, отметьте его как «Отвечено», и я могу удалить его из моего трекера поддержки. В противном случае, не стесняйтесь комментировать, и я могу помочь вам в дальнейшем.

0
ответ дан mdrichardson - MSFT 16 January 2019 в 07:03
поделиться

[рекомендую удалить - я думаю, что вы хотели комментировать вместо ответа.]

0
ответ дан mdrichardson - MSFT 16 January 2019 в 07:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: