Как я могу получить аудио-вложение, отправленное пользователем боту? - PullRequest
0 голосов
/ 05 мая 2020

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

self.add_dialog(
        WaterfallDialog(
            WaterfallDialog.__name__,
            [
                self.project_step,
                self.name_step,
                self.description_step,
                **self.attachment_step**,
                self.confirm_step,
                self.final_step,
            ],
        )
    )

Ниже приведен код для шага прикрепления :

async def attachment_step(self, step_context: WaterfallStepContext) -> DialogTurnResult:
    confluence_details = step_context.options

    # Capture the results of the previous step
    confluence_details.description = step_context.result
    message_text = "please add an attachment"
    prompt_options = PromptOptions(
        prompt=MessageFactory.text(
            "add an attachment"
        ),
        retry_prompt=MessageFactory.text(
            "The attachment must be a mp4/wav audio file."
        ),
    )


    return await step_context.prompt(AttachmentPrompt.__name__, prompt_options)





async def confirm_step(
    self, step_context: WaterfallStepContext
) -> DialogTurnResult:

    confluence_details = step_context.options

    confluence_details.audioFile = (
        None if not step_context.result else step_context.result[0]
    )
    if confluence_details.audioFile:
            await step_context.context.send_activity(
                MessageFactory.attachment(
                    confluence_details.audioFile, "This is your audio file."
                )
            )

@staticmethod
async def file_prompt_validator(prompt_context: PromptValidatorContext) -> bool:
    if not prompt_context.recognized.succeeded:
        await prompt_context.context.send_activity(
            "No attachments received. Proceeding without attachment..."
        )

        # We can return true from a validator function even if recognized.succeeded is false.
        return True

    attachments = prompt_context.recognized.value

    valid_file = [
        attachment
        for attachment in attachments
        if attachment.content_type in ["audio/mp3", "audio/mp4","audio/wav"]
    ]

    prompt_context.recognized.value = valid_file

    # If none of the attachments are valid images, the retry prompt should be sent.
    return len(valid_file) > 0

Код отлично работает в эмуляторе.

Я не понимаю, как отправить аудиофайл из пользовательского приложения боту? Могу ли я отправить аудиофайл в виде строки в кодировке base64. Если да, какие изменения мне нужно внести в конце бота.

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

Я прилагаю для справки снимок экрана с цепочкой беседы. converstaion flow

enter image description here

Изменить : - Предыдущая проблема была решена. Мне удалось получить аудиофайл в виде строки в кодировке Base64. Проблема заключалась в отправке JSON. В contentUrl это должен быть массив вложений. Мое плохое

Edit1 : - При попытке отправить аудиофайл в виде строки в кодировке base64 выдает ошибку для некоторых файлов:

{
    "error": {
        "code": "MessageSizeTooBig",
        "message": "Activity body too large for storage. Try using attachments to reduce the activity size."
    }
}

Что это на самом деле означает?

Как я мог видеть из этого ссылка есть верхний предел размера активности. Может ли кто-нибудь предложить наиболее реальный способ отправки аудиофайлов боту?

1 Ответ

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

Когда вы получаете сообщение об ошибке «слишком большой размер сообщения», это означает то, что написано. Когда предлагается использовать вложения, это означает, что вложения ссылаются на удаленные местоположения HTTP / HTTPS, а не встраивают данные. Вам следует попробовать загрузить файл или использовать службу, предназначенную для передачи звука, например канал Direct Line Speech .

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