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

如何将Azure语音服务的转录文本直接发送至其他端点或Azure函数?

可行方案实现

要在浏览器的recognized事件触发前发送转录文本,核心是利用Azure语音SDK的中间转录结果事件,或通过Azure函数作为转发层处理请求,以下是具体实现方式:

1. 监听recognizing事件获取实时中间结果

Azure语音SDK的SpeechRecognizer提供了recognizing事件,该事件会在最终的recognized事件(返回最终转录结果)之前触发,实时返回正在生成的中间转录文本。你可以在这个事件回调里直接将文本发送到目标端点,或者先转发到Azure函数。

浏览器端代码示例

// 初始化语音SDK配置
const speechConfig = SpeechSDK.SpeechConfig.fromSubscription("你的订阅密钥", "你的区域");
const audioConfig = SpeechSDK.AudioConfig.fromDefaultMicrophoneInput();
const recognizer = new SpeechSDK.SpeechRecognizer(speechConfig, audioConfig);

// 监听中间转录结果事件(在最终recognized事件前触发)
recognizer.recognizing = (sender, eventArgs) => {
    if (eventArgs.result.reason === SpeechSDK.ResultReason.RecognizingSpeech) {
        const interimTranscript = eventArgs.result.text;
        // 发送文本到目标端点或Azure函数
        sendTranscript(interimTranscript);
    }
};

// 可选:监听最终转录结果
recognizer.recognized = (sender, eventArgs) => {
    if (eventArgs.result.reason === SpeechSDK.ResultReason.RecognizedSpeech) {
        const finalTranscript = eventArgs.result.text;
        sendTranscript(finalTranscript);
    }
};

// 发送转录文本的函数
function sendTranscript(text) {
    // 替换为你的目标端点或Azure函数URL
    const targetUrl = "https://your-azure-function-url/api/forward-transcript";
    
    fetch(targetUrl, {
        method: "POST",
        headers: {
            "Content-Type": "application/json",
            // 如果是Azure函数,需要添加函数密钥(若设置了授权)
            "x-functions-key": "你的Azure函数密钥"
        },
        body: JSON.stringify({ transcript: text })
    })
    .catch(err => console.error("发送转录文本失败:", err));
}

// 启动持续识别
recognizer.startContinuousRecognitionAsync();

2. 用Azure函数作为转发中间层

如果目标端点存在CORS限制、需要额外处理(比如格式转换、缓存、重试),可以用Azure函数作为中间层,接收浏览器发送的转录文本,再转发到目标端点。

Azure函数(C#)示例

using System.Net;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using Microsoft.Extensions.Logging;
using System.Text.Json;

public class TranscriptForwarder
{
    private readonly ILogger<TranscriptForwarder> _logger;
    private readonly HttpClient _httpClient;

    public TranscriptForwarder(ILogger<TranscriptForwarder> logger, HttpClient httpClient)
    {
        _logger = logger;
        _httpClient = httpClient;
    }

    [Function("ForwardTranscript")]
    public async Task<HttpResponseData> Run([HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequestData req)
    {
        _logger.LogInformation("收到待转发的转录文本");

        // 解析浏览器发送的请求体
        var requestBody = await new StreamReader(req.Body).ReadToEndAsync();
        var transcriptData = JsonSerializer.Deserialize<TranscriptPayload>(requestBody);

        // 转发到目标端点
        var forwardResponse = await _httpClient.PostAsJsonAsync(
            "https://your-target-endpoint.com/receive-transcript", 
            transcriptData
        );

        // 返回响应给浏览器
        var response = req.CreateResponse(forwardResponse.StatusCode);
        await response.WriteAsJsonAsync(new { Success = forwardResponse.IsSuccessStatusCode });
        return response;
    }

    // 定义请求体模型
    private class TranscriptPayload
    {
        public string Transcript { get; set; }
    }
}

关键注意事项

  • CORS配置:如果浏览器直接调用目标端点,需要目标端点允许你的前端域名;如果用Azure函数,只需在Azure函数的CORS设置里添加前端域名即可,函数端调用目标端点不受浏览器CORS限制。
  • 请求节流:recognizing事件触发频率很高(通常每秒多次),可以添加节流逻辑(比如每500ms发送一次最新文本),避免请求过载。
  • 错误处理:添加请求重试机制,避免因网络波动丢失转录文本;同时可以记录失败的请求,方便后续排查。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 13:32:07