You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Bot对接Skype:如何从音频附件获取流用于Bing Speech转文本

嘿,我来帮你搞定Skype音频附件流的获取问题!你已经找到音频附件这步走对了,接下来关键是要通过Skype提供的临时链接去下载音频流,而且还要带上身份验证令牌才行,不然会被拒绝访问。

给你补全并优化后的代码示例,直接就能用:

public async Task<string> GetText(IMessageActivity messageActivity) 
{
    var connector = new ConnectorClient(new Uri(messageActivity.ServiceUrl));
    try 
    {
        // 筛选出音频类型的附件
        var skypeAudioAttachment = messageActivity.Attachments
            .FirstOrDefault(a => a.ContentType.StartsWith("audio/"));
        
        if (skypeAudioAttachment == null)
        {
            return "未检测到音频附件";
        }

        // 获取Skype提供的音频临时访问链接
        var audioContentUrl = skypeAudioAttachment.ContentUrl;
        
        // 创建HttpClient来下载音频流,记得带上身份令牌
        using (var httpClient = new HttpClient())
        {
            // 获取ConnectorClient的访问令牌,用于访问Skype的附件链接
            var accessToken = await connector.Credentials.GetTokenAsync();
            httpClient.DefaultRequestHeaders.Authorization = 
                new AuthenticationHeaderValue("Bearer", accessToken);
            
            // 下载音频流
            var audioStream = await httpClient.GetStreamAsync(audioContentUrl);
            
            // 把流传给Bing Speech API做转文字,这里假设你有对应的处理方法
            var transcribedText = await ConvertAudioToTextWithBing(audioStream, skypeAudioAttachment.ContentType);
            
            return transcribedText;
        }
    }
    catch (Exception ex)
    {
        return $"处理音频时出现错误:{ex.Message}";
    }
}

// 示例:调用Bing Speech API的方法,你需要根据实际SDK/API调整
private async Task<string> ConvertAudioToTextWithBing(Stream audioStream, string audioContentType)
{
    // 这里替换成你实际调用Bing Speech的逻辑
    // 比如使用Microsoft.CognitiveServices.Speech SDK的话,代码大概是这样:
    var config = SpeechConfig.FromSubscription("你的Bing Speech密钥", "区域");
    using var audioInput = AudioConfig.FromStreamInput(audioStream);
    using var recognizer = new SpeechRecognizer(config, audioContentType, audioInput);
    
    var result = await recognizer.RecognizeOnceAsync();
    return result.Reason == ResultReason.RecognizedSpeech ? result.Text : "转写失败";
}

这里有几个要重点注意的地方:

  • 身份验证:Skype的附件链接是受保护的,必须带上ConnectorClient的令牌才能访问,不然会返回401 Unauthorized错误,这是很多人踩坑的点!
  • 音频格式匹配:要把Skype传来的ContentType(比如audio/wav、audio/mpeg)传给Bing Speech API,确保API能正确解析音频格式。
  • 资源释放:用using包裹HttpClient和各种SDK客户端,避免内存泄漏。

如果你的Bot用的是较新的Bot Framework版本(比如v4+),ConnectorClient的用法可能稍有不同,但核心逻辑还是一样的:获取附件的ContentUrl,带上令牌下载流,再传给语音转文字服务。

内容的提问来源于stack exchange,提问作者Zelestor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:07:38