C# Microsoft机器人程序框架-机器人程序通道注册。无法将录制的视频从skype保存到Azure存储帐户

C# Microsoft机器人程序框架-机器人程序通道注册。无法将录制的视频从skype保存到Azure存储帐户,c#,botframework,skypedeveloper,azure-function-app,C#,Botframework,Skypedeveloper,Azure Function App,对于我正在开发的Microsoft Bot framework chatbot应用程序,我已经配置了“Bot通道注册”并将其托管在Azure上 其中一个场景要求用户在skype上录制视频并将其作为答案发送。我有一个Azure功能,可以将录制的视频从skype保存到Azure存储帐户 我遇到的问题是,当我通过视频消息选项在skype()上录制视频时 为了从skype访问上传的视频,我提供了相应的承载令牌以及上述URL,但无法访问它 虽然从skype上载到队列的文件(Azure函数队列触发),但此文

对于我正在开发的Microsoft Bot framework chatbot应用程序,我已经配置了“Bot通道注册”并将其托管在Azure上

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

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

为了从skype访问上传的视频,我提供了相应的承载令牌以及上述URL,但无法访问它

虽然从skype上载到队列的文件(Azure函数队列触发),但此文件的可访问性被拒绝

假设最新的补丁会有所帮助,我今天更新了对.NETCore3.0.1的所有引用。期待着所需的方法来解决这一问题

注意:此问题仅在“Skype for Desktop”版本中发生

下面是代码块供您参考

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;
        }
    }
}

请建议。

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

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


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

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

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



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

这是您的问题吗?凯尔,是的。你还在做这个吗?是的。它不允许我根据我们的讨论在skype桌面上保存视频。你们有什么建议吗?就像我说的,我不能重复这个问题。你可能会考虑私下给我留言,而不是在评论中进行这么长的对话。这是你的问题吗?凯尔,是的。你还在做这个吗?是的。它不允许我根据我们的讨论在skype桌面上保存视频。你们有什么建议吗?就像我说的,我不能重复这个问题。您可能会考虑私下给我发消息,而不是在评论中进行这么长的对话。这个问题只发生在Skype的桌面版上!使用Skype Microsoft应用程序版本,视频的上传完全符合预期。我需要考虑的是让它为“Skype的桌面”工作吗?@ RaJeHnAgNeRDRA——这可能是客户端特有的特性。移动客户端和桌面客户端似乎非常不同,它们处理附件的方式可能不同。您可以尝试上载带有“添加文件”而不是“视频消息”的视频文件,但我不知道这是否有效,一般来说,您不应该期望获得对不推荐频道的任何支持。正如您所提到的,添加视频文件可以很好地工作。但当我们使用“视频消息”选项时,它无法上传录制的视频。内容类型称为应用程序/八位字节流。(我还尝试了视频/mp4,但不起作用)。问题只是在使用“视频消息”选项时出现的。那么,你的机器人到底是在获取视频附件吗?你想让你的机器人对视频做什么?如果你不告诉我你到底想做什么,我可能帮不了你。下面是一个场景。。我为面试安排了初步筛选。因此,应聘者会用“视频信息”选项记录自己的答案,并将其作为面试问题的答案发送。(注意:先前录制的视频不是回答面试问题的首选方式。)此问题仅适用于桌面版Skype!使用Skype Microsoft应用程序版本,视频的上传完全符合预期。我需要考虑的是让它为“Skype的桌面”工作吗?@ RaJeHnAgNeRDRA——这可能是客户端特有的特性。移动客户端和桌面客户端似乎非常不同,它们处理附件的方式可能不同。您可以尝试上载带有“添加文件”而不是“视频消息”的视频文件,但我不知道这是否有效,一般来说,您不应该期望获得对不推荐频道的任何支持。正如您所提到的,添加视频文件可以很好地工作。但当我们使用“视频消息”选项时,它无法上传录制的视频。内容类型称为应用程序/八位字节流。(我还尝试了视频/mp4,但不起作用)。问题只是在使用“视频消息”选项时出现的。那么,你的机器人到底是在获取视频附件吗?你想让你的机器人对视频做什么?如果你不告诉我你到底想做什么,我可能帮不了你。下面是一个场景。。我为面试安排了初步筛选。因此,应聘者会用“视频信息”选项记录自己的答案,并将其作为面试问题的答案发送。(注意:先前录制的视频不是回答面试问题的首选方式。)
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();
    }
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);
    }