Может ли пользователь отправить вложение вместе с сообщением в текстовой подсказке на этапе водопада? - PullRequest
1 голос
/ 06 мая 2020

Допустим, у нас есть следующие шаги в нашем диалоге водопада:

self.add_dialog(TextPrompt(TextPrompt.__name__))
    self.add_dialog(
        WaterfallDialog(
            WaterfallDialog.__name__,
            [
                self.project_step,
                self.name_step,
                self.confirm_step,
                self.final_step,
            ],
        )
    )

async def project_step(
    self, step_context: WaterfallStepContext
) -> DialogTurnResult:
    """
    If a project name has not been provided, prompt for one.
    :param step_context:
    :return DialogTurnResult:
    """
    confluence_details = step_context.options

    if confluence_details.project is None:
        message_text = key.query_project_confluence_text.value + "?"
        prompt_message = MessageFactory.text(
            message_text, message_text, InputHints.expecting_input
        )
        return await step_context.prompt(
            TextPrompt.__name__, PromptOptions(prompt=prompt_message)
        )
    return await step_context.next(confluence_details.project)

Если пользователь отправляет вложение вместе с текстом боту в приглашении. Возможно ли получить оба в step_context.result .

In on_message_activity я мог бы проверить, используя TurnContext.activity.attachments для вложения, но как Я получаю то же самое, используя Waterfall step_context и текстовое сообщение на следующем шаге?

Тело запроса будет следующим:

{
    "text":"Hello there",
    "type":"message",
    "from":{
        "id":"xyz"
    },
    "attachments":{
        "contentType":"audio/wav",
        "name":"BabyElephantWalk60.wav",
        "contentUrl":"data:audio/wav;base64,UklGRvAEAgBXQVZFZm10IBAA
    }
}

Клиентская сторона, т.е. iOS Приложение будет использовать Directline Api https://directline.botframework.com/v3/directline/conversations/EdWGs8IdmjNIy5j2E93EHW-a/activities для отправки Activity.

iOS приложение использует набор речи.

По запросу, независимо от того, что говорит пользователь, сообщение вместе с аудиофайлом должно быть отправлено боту по прямой линии в теле запроса, как указано выше. И это будет сделано с помощью кнопки mi c.

Возможно ли это сделать?

1 Ответ

0 голосов
/ 12 мая 2020

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

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

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

text = step_context.context.activity.text
attachments = step_context.context.activity.attachments

Вы можете сделать это с помощью текстовой подсказки или подсказки вложения . Если вы хотите иметь доступ к этим вещам в step_context.result, вы можете создать свое собственное приглашение, которое помещает в результат все действие. Вы можете использовать ActivityPrompt в качестве базового класса, поскольку он был создан для этой цели.

Помимо отправки отдельных действий, другой альтернативой отправке текста и звука в одном действии может быть чтобы отправить только звук и заставить бота преобразовать звук в текст, используя Cognitive Speech Services . Это, вероятно, не будет идеальным вариантом, потому что тогда ваш клиент не сможет отображать текст, поскольку он не выполняет преобразование на своей стороне. Я предполагаю, что у вас есть возможность предоставить пользователю ввод звука с микрофона, а затем преобразовать его в текст, а не вводить текст, а затем преобразовывать его в звук.

Прямая речь - это встроенный способ использования Cognitive Speech Services, чтобы и ваш клиент, и бот могли получить доступ к тексту. И, в зависимости от ваших потребностей, вы можете рассмотреть возможность просмотра речи в веб-чате .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...