如何从Agora RTC客户端获取OpenAI实时API返回的文本?
解决Agora集成OpenAI实时API后客户端接收返回文本的问题
核心说明
你后端代码里的self.channel.chat.send_message是依托Agora RTC场景的内置实时消息通道发送数据的,不需要单独集成Chat或Signaling SDK,直接用Agora RTC SDK就能监听接收。
各平台实现步骤
1. Android端
- 确保已集成Agora RTC SDK并成功加入目标频道
- 重写
RtcEventHandler的消息接收方法解析文本:
rtcEngine.setEventHandler(new RtcEventHandler() { @Override public void onChatMessageReceived(String userId, String message) { try { JSONObject jsonObj = new JSONObject(message); String transcript = jsonObj.optString("transcript"); String msgType = jsonObj.optString("type"); if ("ResponseAudioTranscriptDelta".equals(msgType)) { // 处理增量文本(比如实时追加到UI) } else if ("ResponseAudioTranscriptDone".equals(msgType)) { // 处理完整文本(比如展示最终回复) } } catch (JSONException e) { e.printStackTrace(); } } });
2. iOS端
- 集成Agora RTC SDK并加入频道后,实现
AgoraRtcEngineDelegate代理方法:
func rtcEngine(_ engine: AgoraRtcEngineKit, didReceiveChatMessage message: String, fromUserId userId: String) { guard let data = message.data(using: .utf8), let jsonObj = try? JSONSerialization.jsonObject(with: data) as? [String: Any] else { return } let transcript = jsonObj["transcript"] as? String ?? "" let msgType = jsonObj["type"] as? String ?? "" if msgType == "ResponseAudioTranscriptDelta" { // 处理增量文本 } else if msgType == "ResponseAudioTranscriptDone" { // 处理完整文本 } }
3. Web端
- 集成Agora RTC Web SDK并加入频道后,监听
chat-message事件:
client.on('chat-message', (msg) => { const jsonData = JSON.parse(msg.text); const transcript = jsonData.transcript; const msgType = jsonData.type; if (msgType === 'ResponseAudioTranscriptDelta') { // 实时追加增量文本 } else if (msgType === 'ResponseAudioTranscriptDone') { // 展示完整回复内容 } });
注意事项
- 客户端加入的频道ID必须和后端使用的频道ID完全一致
- 后端发送的
message是JSON格式字符串,需根据OpenAI实时API的ResponseAudioTranscriptDelta/ResponseAudioTranscriptDone结构解析字段(核心是transcript文本字段和type类型字段) - 无需额外集成Chat/Signaling SDK,直接用RTC SDK即可完成消息监听
内容的提问来源于stack exchange,提问作者Hejia Geng




