Microsoft bot 框架 - Bot 频道注册。无法将录制的视频从 Skype 保存到 Azure 存储帐户

Posted

技术标签:

【中文标题】Microsoft bot 框架 - Bot 频道注册。无法将录制的视频从 Skype 保存到 Azure 存储帐户【英文标题】:Microsoft bot framework - Bot channel Registration. Unable to save the recorded video from skype to Azure storage account 【发布时间】:2020-01-10 06:52:57 【问题描述】:

对于我正在开发的 Microsoft Bot 框架聊天机器人应用程序,我已经配置了“Bot Channel Registration”并将其托管在 Azure 上。

其中一个场景要求用户在 Skype 上录制视频并将其作为答案发送。我有一个 Azure 功能,可以将录制的视频从 Skype 保存到 Azure 存储帐户。

我遇到的问题是,当我通过视频消息选项在 Skype () 上录制视频时。

为了从 Skype 访问上传的视频,我提供了适当的不记名令牌以及上述 URL,但无法访问它。

虽然文件是从 Skype 上传到队列(Azure 函数队列触发),但对该文件的访问被拒绝。

假设最新的补丁会有所帮助,我从今天起更新了所有对 .NET core 3.0.1 的引用。期待解决此问题的理想方法。

注意:此问题仅发生在“桌面版 Skype”中。

以下是供您参考的代码块。

private static async Task<HttpResponseMessage> RequestFile(string contentUrl, ILogger logger, string serviceUrl)

    var credentials = DIContainer.Instance.GetService<MicrosoftAppCredentials>();
    var token = await credentials.GetTokenAsync();
    using (var connectorClient = new ConnectorClient(new Uri(serviceUrl), credentials.MicrosoftAppId, credentials.MicrosoftAppPassword))
    
        using (var httpClient = new HttpClient())
        
            httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
            httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/octet-stream"));

            var test = await httpClient.GetAsync(uri, HttpCompletionOption.ResponseContentRead);

            return test;
        
    

添加更多代码sn-ps:

private async Task<(string, string)> TrySaveAndGetContentUrl(IMessageActivity activity, string user)
       
        var attachments = activity.Attachments;

        if (attachments?.Any() ?? false)
           
            var video = attachments.First();                              
            return (await _attachmentsService.Save(video, user), video.ContentUrl);
        
        return (null, null);
    

 ///_attachmentsService.Save method implementation
 public async Task<string> Save(Attachment attachment, string user)
    
        _logger.LogInformation("Enqueue save command. @Attachment", attachment);

        var blobName = $"user/Guid.NewGuid().ToString()-attachment.Name";
        var blob = _cloudBlobContainer.GetBlockBlobReference(blobName);

        await EnqueueSaveCommand(attachment.ContentUrl, blobName, user);

        return blob.Uri.ToString();
    

请参考以下代码块将附件保存到 Azure blob。

private async Task EnqueueSaveCommand(string contentUrl, string blobName, string user)
    
        var queue = _queueClient.GetQueueReference(RouteNames.MediaAttachmentQueue); //RouteNames.MediaAttachmentQueue is "media-attachment-queue"
        await queue.CreateIfNotExistsAsync();

        var serializedMessage = JsonConvert.SerializeObject(new SaveMediaAttachmentCommand
        
            FromUrl = contentUrl,
            AttachmentName = blobName,
            UserName = "userid@gmail.com",               
        );

        var queueMessage = new CloudQueueMessage(serializedMessage);

        await queue.AddMessageAsync(queueMessage);
    

请提出建议。

【问题讨论】:

这是您的问题吗? github.com/microsoft/botframework-sdk/issues/5710 凯尔,是的。 你还在做这个吗? 是的。根据我们的讨论,它不允许我将视频保存在 Skype 桌面上。你有什么建议吗? 就像我说的,我无法重现该问题。您可以考虑私下给我发消息,而不是在 cmets 中进行这么长时间的对话。 【参考方案1】:

Skype 频道配置包含以下消息:

自 2019 年 10 月 31 日起,Skype 频道不再接受新的 Bot 发布请求。这意味着您可以继续使用 Skype 频道开发机器人,但您的机器人将被限制为 100 个用户。您将无法将您的机器人发布给更多的受众。当前的 Skype 机器人将继续不间断地运行。 Learn more

许多 Skype 功能已被弃用。如果曾经有可能通过 Skype 向机器人发送视频,那么它可能不再可能了。建议您切换到 Direct Line 和 Microsoft Teams 等其他渠道。

【讨论】:

此问题仅发生在 Skype for Desktop 版本中!使用 Skype Microsoft 应用程序版本,视频按预期完美上传。我需要考虑使其适用于“桌面版 Skype”吗? @RajeshNagendra - 这可能是特定于客户端的功能。移动客户端和桌面客户端似乎有很大不同,它们处理附件的方式可能不同。您可以尝试使用“添加文件”而不是“视频消息”来上传视频文件,但我不知道这是否可行,通常您不应期望获得对已弃用频道的任何支持。 正如您所提到的,添加视频文件效果很好。但是当我们使用“视频消息”选项时,它无法上传录制的视频。内容类型被称为应用程序/八位字节流。 (我还尝试了视频/mp4,但没有成功)。问题仅在使用“视频消息”选项时出现。 那么你的机器人到底是在获取视频附件吗?你希望你的机器人对视频做什么?如果您不向我提供您实际想要做什么的信息,我将无法帮助您。 这里是场景.. 我为面试安排了初步筛选。因此,候选人将使用“视频消息”选项记录他的答案,并将其作为面试问题的答案发送。 (注:之前录制的视频不是回答面试问题的首选方式。)

以上是关于Microsoft bot 框架 - Bot 频道注册。无法将录制的视频从 Skype 保存到 Azure 存储帐户的主要内容,如果未能解决你的问题,请参考以下文章

如何将实时语音添加到 Microsoft bot 框架的文本数据(正是 google 语音所做的)

使用 Team 的附件按钮将文件上传到 bot 应用程序时,Microsoft Teams 返回错误

如何使用自适应卡操作从自适应卡获取用户响应。使用 Microsoft Bot Framework 从 MS Teams 频道提交操作?

如何在基于Bot framewok v4构建的团队聊天机器人中启用语音功能

具有多个 BOT 集成的 Microsoft Chat BOT

用户加入频道时的 Telegram Bot 事件