跳到主要内容

WebSocket API

连接 RustPBX

RustPBX 使用 WebSocket 连接

地址

RustPBX 的监听地址,在 RustPBX 的 config.toml 中配置:

config.toml
http_addr = "0.0.0.0:8080"

路径

不同的路径对应不同的语音通话类型:

  • /call: 音频流通过 WebSocket 传输
  • /call/sip: 音频流通过 SIP/RTP 传输
  • /call/webrtc: 音频流通过 WebRTC RTP 传输

参数

  • id (可选,字符串): 会话 ID。默认由服务端生成 UUID。(接听时应设置为 dialogId
  • dump (可选, bool, 默认: true):是否启用 dump
  • pingInterval (可选, int, 单位:秒,默认:20): WebSocket Ping 周期,开启后会定时收到 SessionEvent::Ping 事件
  • serverSideTrack (可选, 字符串, 默认: serverSideTrack): 设置服务端 TrackID

示例

  • ws://localhost:8080/call/sip?id=session123&dump=true

命令

命令通过 WebSocket 连接以 JSON 消息形式发送,command 字段指示命令类型。

Invite - 发起呼叫

用途: 发起新的呼叫。

信息
  • SIP 通话需要设置 option.calleroption.callee 分别主叫和被叫的 SIP 地址
  • WebRTC 通话需要设置 option.offer 为呼叫的 SDP offer

示例:

{
"command": "invite",
"option": {
"denoise": true,
"callee": "sip:alice@192.168.3.197:12345",
"caller": "sip:192.168.3.197:3050",
` "vad": {
"type": "silero",
"silenceTimeout": 5000
},
"asr": {
"provider": "tencent"
},
"tts": {
"provider": "tencent",
"speaker": "601003"
},
"sip": {}`
}
}

参数:

字段类型必填描述
commandstring必须为 "invite"
optionCallOption通话配置参数,详见 CallOption

Accept - 接听来电

用途: 接听来电。

信息

接听电话需要设置连接 url 参数中的 iddialogIddialogId 由 webhook 请求给出。 参见:

示例:

{
"command": "accept",
"option": {
"denoise": true,
"vad": {
"type": "silero",
"silenceTimeout": 5000
},
"asr": {
"provider": "tencent"
},
"tts": {
"provider": "tencent",
"speaker": "601003"
}
}
}

参数:

字段类型必填描述
commandstring必须为 "accept"
optionCallOption通话配置参数,详见 CallOption

Reject - 拒绝来电

用途: 拒绝来电。

信息

请求失败响应码列表: Request Failure 4xx

示例:

{
"command": "reject",
"reason": "Busy Here",
"code": 486
}

参数:

字段类型必填默认值描述
commandstring-必须为 "reject"
reasonstring-拒绝原因
codenumber-SIP 响应代码

Ringing - 振铃

用途: 为来电发送振铃响应。(180 Ringing)

注意

如果在 Ringing 命令中设置了 recorder,后续 Accept 命令中的 recorder 选项将不会覆盖振铃阶段的录音设置。

示例:

{
"command": "ringing",
"recorder": {
"recorderFile": "/path/to/recording.wav",
"samplerate": 16000,
"ptime": 200
},
"earlyMedia": true,
"ringtone": "http://example.com/ringtone.wav"
}

参数:

字段类型必填默认值描述
commandstring-必须为 "ringing"
recorderRecorderOption-通话录音配置
earlyMediabooleanfalse在振铃期间启用早期媒体
ringtonestring-自定义铃声 URL

TTS - 文字转语音

用途: 将文本转换为语音并播放音频。

示例:

{
"command": "tts",
"text": "Hello, this is a test message",
"speaker": "xiaoyan",
"playId": "unique_play_id",
"autoHangup": false,
"streaming": false,
"endOfStream": false,
"waitInputTimeout": 30,
"option": {
"provider": "tencent",
"volume": 5,
"speed": 1.0
}
}

参数:

字段类型必填默认值描述
commandstring-必须为 "tts"
textstring-要合成的文本
speakerstring-音色类型,参见各提供商音色列表
playIdstring-TTS Track 的标识符。
autoHangupbooleanfalseTTS 播放完成后是否自动挂断通话
streamingbooleanfalse是否启用流式 tts
endOfStreambooleanfalse是否为当前同一 playId 的最后一条命令
waitInputTimeoutnumber-等待用户输入的最大时间,单位: 秒
optionSynthesisOption-TTS 提供商特定选项,可配置音色格式采样率等
base64booleanfalse是否使用 base64 编码
提示
  • 启用流式 TTS, TTS 命令将在同一个 websocket 连接中发送。
  • 设置 endOfStream = true, playId 的所有 TTS 命令已经发送完毕。TTS Track 将在所有命令结果播放完毕之后退出,并且发送 Track End 事件。
  • 设置 base64=true 通过 text 传如 base64 编码的 PCM 编码音频。
  • 如果设置了 playId,在该 TTS Track 发送的 Track End 事件会包含该 playId
  • 如果当前 playId 和之前的 TTS 命令 playId 相同,则会复用之前的 TTS Track,否则会终止之前的 TTS Track 并创建一个新的 TTS Track

详见 TTS(Text-to-Speech)

Play - 播放音频

用途: 从 URL 播放音频。

示例:

{
"command": "play",
"url": "http://example.com/audio.mp3",
"autoHangup": false,
"waitInputTimeout": 30
}

参数:

字段类型必填默认值描述
commandstring-必须为 "play"
urlstring-要播放的音频文件 URL(支持 HTTP/HTTPS)。此 URL 将在 trackEnd 事件中作为 playId 返回
autoHangupbooleanfalse如果为 true,播放完成后将自动挂断通话
waitInputTimeoutnumber-等待用户输入的最大时间,单位秒

Interrupt - 打断播放

用途: 中断当前的 TTS 或音频播放。

信息
  • 如果当前 TTS 结果未播放完毕,将触发 Interruption 事件,事件包含已播放时间和从 TTS 提供商收到音频的事件。如果提供商支持字幕,还会包含已播放文字的推算位置。
  • 如果设置 graceful = true,则会等待当前 tts 命令结果播放完毕才退出,参见 打断

示例:

{
"command": "interrupt",
"graceful": false
}

参数:

字段类型必填默认值描述
commandstring-必须为 "interrupt"
gracefulbooleanfalse是否优雅打断

Refer - 转接通话

用途: 将通话转移给另一方(SIP REFER)。

信息

示例:

{
"command": "refer",
"caller": "sip:alice@example.com",
"callee": "sip:charlie@example.com",
"options": {
"denoise": true,
"timeout": 30,
"moh": "http://example.com/hold_music.wav",
"autoHangup": true
}
}

参数:

字段类型必填描述
commandstring必须为 "refer"
callerstring转移的主叫 SIP 地址 (当前接通的本地 SIP 地址, 例如: sip:{本地ip}:13050)
calleestring转移目标的 SIP URI(例如,sip:bob@example.com
optionsReferOption转接配置,详见 ReferOption

Mute - 静音

用途: 静音所有或者指定的 Track。

信息

如果指定 trackId,静音对应的 Track,否则静音所有的 Track。

示例:

{
"command": "mute",
"trackId": "track-123"
}

参数:

字段类型必填描述
commandstring必须为 "mute"
trackIdstring要静音的轨道 ID(如果未指定,则静音所有轨道)

Unmute - 取消静音

用途: 取消被静音的 Track。

信息

如果指定 trackId,取消对应 Track 的静音,否则取消所有 Track 的静音。

示例:

{
"command": "unmute",
"trackId": "track-123"
}

参数:

字段类型必填描述
commandstring必须为 "unmute"
trackIdstring要取消静音的轨道 ID(如果未指定,则取消静音所有轨道)

Hangup - 挂断

用途: 结束通话。

示例:

{
"command": "hangup",
"reason": "user_requested",
"initiator": "user"
}

参数:

字段类型必填描述
commandstring必须为 "hangup"
reasonstring挂断原因
initiatorstring发起挂断的一方(user、system 等)

事件

事件以 JSON 格式从服务端接收,所有时间戳均以毫秒为单位,每个事件都包含一个 event 字段来表示事件类型,大多数事件还包括 trackId 字段来表示相关的 Track。

Incoming - 来电事件

触发时机: 接收到来电时(仅限 SIP 通话)。

示例:

{
"event": "incoming",
"trackId": "track-abc123",
"timestamp": 1640995200000,
"caller": "sip:alice@example.com",
"callee": "sip:bob@example.com",
"sdp": "v=0\r\no=- 1234567890 2 IN IP4 127.0.0.1\r\n..."
}

字段:

字段类型描述
eventstring始终为 "incoming"
trackIdstringTrack的唯一标识符
timestampnumber事件时间戳(毫秒)
callerstring主叫的 SIP 地址
calleestring被叫的 SIP 地址
sdpstring来自主叫的 SDP offer

Answer - 接听事件

触发时机: 通话被接听且 SDP 协商完成时。

信息

如果是 SIP 通话,当收到 200 OK 时,触发 Answer 事件。

示例:

{
"event": "answer",
"trackId": "track-abc123",
"timestamp": 1640995200000,
"sdp": "v=0\r\no=- 1234567890 2 IN IP4 127.0.0.1\r\n..."
}

字段:

字段类型描述
eventstring始终为 "answer"
trackIdstringTrack 的唯一标识符
timestampnumber事件时间戳(毫秒)
sdpstring来自被叫的 SDP answer

Reject - 拒绝事件

触发时机: 呼叫被拒绝时。

示例:

{
"event": "reject",
"trackId": "track-abc123",
"timestamp": 1640995200000,
"reason": "Busy",
"code": 486
}

字段:

字段类型描述
eventstring始终为 "reject"
trackIdstringTrack 的唯一标识符
timestampnumber事件时间戳(毫秒)
reasonstring拒绝原因
codenumberSIP 响应代码(可选)
信息

请求失败响应码列表: Request Failure 4xx

Ringing - 振铃事件

触发时机: 通话振铃时(仅限 SIP 通话)。

示例:

{
"event": "ringing",
"trackId": "track-abc123",
"timestamp": 1640995200000,
"earlyMedia": false
}

字段:

字段类型描述
eventstring始终为 "ringing"
trackIdstringTrack的唯一标识符
timestampnumber事件时间戳(毫秒)
earlyMediaboolean是否有早期媒体可用

Hangup - 挂断事件

触发时机: 通话结束时。

示例:

{
"event": "hangup",
"trackId": "track-abc123",
"timestamp": 1640995200000,
"reason": "user_requested",
"initiator": "user",
"startTime": "2024-01-01T12:00:00Z",
"hangupTime": "2024-01-01T12:05:30Z",
"answerTime": "2024-01-01T12:00:05Z",
"from": {
"username": "alice",
"realm": "example.com",
"source": "sip:alice@example.com"
}
}

字段:

字段类型描述
eventstring始终为 "hangup"
trackIdstringTrack的唯一标识符
timestampnumber事件时间戳(毫秒)
reasonstring挂断原因(可选)
initiatorstring发起挂断的一方(可选)
startTimestring通话开始的 ISO 8601 时间戳
hangupTimestring通话结束的 ISO 8601 时间戳
answerTimestring通话接听的 ISO 8601 时间戳(可选)
ringingTimestring通话开始振铃的 ISO 8601 时间戳(可选)
fromAttendee主叫信息(可选)
toAttendee被叫信息(可选)
extraobject额外的通话元数据(可选)

Speaking - 说话事件

触发时机: 当 VAD 检测到说话时。Call Option 需配置 VAD

示例:

{
"event": "speaking",
"trackId": "track-abc123",
"timestamp": 1640995200000,
"startTime": 1640995200000
}

字段:

字段类型描述
eventstring始终为 "speaking"
trackIdstringTrack的唯一标识符
timestampnumber事件时间戳(毫秒)
startTimenumber语音开始的时间(毫秒)

Silence - 静音事件

触发时机: 从当前语音开始超过 speechPadding 毫秒,且距离上一次触发 Silence 事件超过 silencePadding 毫秒 (如果有)。Call Option 需配置 VAD

示例:

{
"event": "silence",
"trackId": "track-abc123",
"timestamp": 1640995200000,
"startTime": 1640995195000,
"duration": 5000
}

字段:

字段类型描述
eventstring始终为 "silence"
trackIdstringTrack 的唯一标识符
timestampnumber事件时间戳(毫秒)
startTimenumber静音开始的时间(毫秒)
durationnumber静音持续时间(毫秒)

AsrFinal - ASR 最终事件

触发时机: 语音识别的稳定结果。

示例:

{
"event": "asrFinal",
"trackId": "track-abc123",
"timestamp": 1640995200000,
"index": 1,
"startTime": 1640995200000,
"endTime": 1640995205000,
"text": "Hello, how can I help you today?"
}

字段:

字段类型描述
eventstring始终为 "asrFinal"
trackIdstringTrack的唯一标识符
timestampnumber事件时间戳(毫秒)
indexnumberASR 结果序列号
startTimenumber语音开始时间(毫秒,可选)
endTimenumber语音结束时间(毫秒,可选)
textstring语音识别结果

AsrDelta - ASR 增量事件

触发时机: 语音识别的中间结果 (可能还会变动)。

示例:

{
"event": "asrDelta",
"trackId": "track-abc123",
"index": 1,
"timestamp": 1640995200000,
"text": "Hello, how can"
}

字段:

字段类型描述
eventstring始终为 "asrDelta"
trackIdstringTrack的唯一标识符
indexnumberASR 结果序列号
timestampnumber事件时间戳(毫秒)
startTimenumber语音开始时间(毫秒,可选)
endTimenumber语音结束时间(毫秒,可选)
textstring语音识别结果(会变动)

TrackStart - Track 开始事件

触发时机: Track开始时(RTP,TTS、文件播放等)。

示例:

{
"event": "trackStart",
"trackId": "track-tts-456",
"timestamp": 1640995200000,
"playId": "llm-001"
}

字段:

字段类型描述
eventstring始终为 "trackStart"
trackIdstringTrack的唯一标识符
timestampnumber事件时间戳(毫秒)
playIdstringTTS 命令的 playId (可选) 或者 Play 命令的 URL(可选)
信息

TTS 命令和 Play 命令都会创建对应的 Track。TrackStart 中的 playId 为:

  • TTS Track: TTS 命令的 playId (可选)
  • Play Track: Play 命令的 URL

TrackEnd - 轨道结束事件

触发时机: Track结束时(RTP 结束,TTS 完成、文件播放完成等)。

示例:

{
"event": "trackEnd",
"trackId": "track-tts-456",
"timestamp": 1640995230000,
"duration": 30000,
"ssrc": 1234567890,
"playId": "llm-001"
}

字段:

字段类型描述
eventstring始终为 "trackEnd"
trackIdstringTrack的唯一标识符
timestampnumber事件时间戳(毫秒)
durationnumber轨道持续时间(毫秒)
ssrcnumberRTP 同步源标识符
playIdstringTTS 命令的 playId (可选) 或者 Play 命令的 URL(可选)
信息

TTS 命令和 Play 命令都会创建对应的 Track。TrackEnd 中的 playId 为:

  • TTS Track: TTS 命令的 playId (可选)
  • Play Track: Play 命令的 URL

Interruption - 打断事件

触发时机: 当收到 Interrupt 命令,且有未播放完毕的 TTS 命令。

示例:

{
"event": "interruption",
"trackId": "track-tts-456",
"timestamp": 1640995215000,
"playId": "llm-001",
"subtitle": "Hello, this is a long message that was interrupted",
"position": 5,
"totalDuration": 30000,
"current": 15000
}

字段:

字段类型描述
eventstring始终为 "interruption"
trackIdstringTrack的唯一标识符
timestampnumber事件时间戳(毫秒)
playIdstring对于 TTS 命令,这是来自 TTS 命令的 playId(可选)
subtitlestring中断时正在播放的当前 TTS 文本(可选)
positionnumber中断时字幕中的单词索引位置(可选)
totalDurationnumberTTS 内容的总持续时间(毫秒)
currentnumber中断时自 TTS 开始以来经过的时间(毫秒)

Dtmf - DTMF 事件

触发时机: 检测到按键时。

示例:

{
"event": "dtmf",
"trackId": "track-abc123",
"timestamp": 1640995200000,
"digit": "1"
}

字段:

字段类型描述
eventstring始终为 "dtmf"
trackIdstringTrack的唯一标识符
timestampnumber事件时间戳(毫秒)
digitstringDTMF 数字(0-9, *, #, A-D)

Metrics - 指标事件

触发时机: 性能指标可用时。

示例:

{
"event": "metrics",
"timestamp": 1640995200000,
"key": "ttfb.asr.tencent",
"duration": 150,
"data": {
"index": 1,
"provider": "tencent"
}
}

字段:

字段类型描述
eventstring始终为 "metrics"
timestampnumber事件时间戳(毫秒)
keystring指标键(例如,"ttfb.asr.tencent")
durationnumber持续时间(毫秒)
dataobject额外的指标数据

Error - 错误事件

触发时机: 处理过程中发生错误时。

示例:

{
"event": "error",
"trackId": "track-abc123",
"timestamp": 1640995200000,
"sender": "asr",
"error": "Connection timeout to ASR service",
"code": 408
}

字段:

字段类型描述
eventstring始终为 "error"
trackIdstringTrack的唯一标识符
timestampnumber事件时间戳(毫秒)
senderstring生成错误的组件(asr、tts、media 等)
errorstring错误消息描述
codenumber错误代码(可选)

Binary - 二进制事件

触发时机: 发送二进制音频数据时(仅限 WebSocket 通话)。

示例:

{
"event": "binary",
"trackId": "track-abc123",
"timestamp": 1640995200000,
"data": []
}

字段:

字段类型描述
eventstring始终为 "binary"
trackIdstringTrack的唯一标识符
timestampnumber事件时间戳(毫秒)
dataarray二进制音频数据字节

Ping - Ping 事件

触发时机: 定时发送 Ping 消息时(如果在连接 url 中设置了 pingInterval 参数),参见 连接 RustPBX

示例:

{
"event": "ping",
"timestamp": 1640995200000,
"payload": "optional_payload"
}

字段:

字段类型描述
eventstring始终为 "ping"
timestampnumber事件时间戳(毫秒)
payloadstring可选的载荷数据(可选)

Other - 其他事件

触发时机: 生成自定义或扩展事件时。

示例:

{
"event": "other",
"trackId": "track-abc123",
"timestamp": 1640995200000,
"sender": "custom_plugin",
"extra": {
"custom_field": "custom_value"
}
}

字段:

字段类型描述
eventstring始终为 "other"
trackIdstringTrack的唯一标识符
timestampnumber事件时间戳(毫秒)
senderstring生成事件的组件
extraobject额外事件数据(可选)

选项

CallOption

CallOption 对象用于 InviteAccept 命令,包含通话的配置。

示例:

{
"denoise": true,
"offer": "SDP offer string",
"callee": "sip:callee@example.com",
"caller": "sip:caller@example.com",
"codec": "g722",
"recorder": {
"recorderFile": "/path/to/recording.wav",
"samplerate": 16000
},
"asr": {
"provider": "tencent",
"language": "zh-CN"
},
"tts": {
"provider": "tencent",
"speaker": "xiaoyan"
}
}

字段:

字段类型必填默认值描述
denoisebooleanfalse启用音频处理降噪
offerstring-用于 WebRTC/SIP 协商的 SDP offer 字符串
calleestring-被叫的 SIP URI 或电话号码(例如,"sip:bob@example.com")
callerstring-主叫的 SIP URI 或电话号码(例如,"sip:alice@example.com")
codecstring"pcmu"音频编解码器:"pcmu", "pcma", "g722", "pcm"(仅用于 WebSocket 通话)
recorderRecorderOption-通话录音配置
vadVADOption-语音活动检测配置
asrTranscriptionOption-语音识别 (ASR)配置
ttsSynthesisOption-文字转语音配置
mediaPassMediaPassOption-Media Pass 配置
handshakeTimeoutstring-连接握手超时(例如,"30s")
enableIpv6booleanfalse启用 IPv6 支持
sipSipOption-SIP 注册账号、密码和域配置
extraobject-补充参数

RecorderOption

通话录音配置选项。

示例:

{
"recorderFile": "/path/to/recording.wav",
"samplerate": 16000,
"ptime": 200
}

字段:

字段类型必填默认值描述
recorderFilestring-录音文件路径
sampleratenumber16000录音采样率,单位 Hz
ptimenumber200数据包时间,单位毫秒

TranscriptionOption

语音识别 (ASR) 配置选项。

示例:

{
"provider": "tencent",
"language": "zh-CN",
"appId": "app_id",
"secretId": "your_secret_id",
"secretKey": "your_secret_key",
"modelType": "16k_zh",
"samplerate": 16000,
"startWhenAnswer": true
}

字段:

字段类型必填默认值描述
providerstring-ASR 提供商:tencent, aliyun, Deepgram
languagestring-语言(例如,"zh-CN", "en-US") (具体参见对应提供商文档)
appIdstring-腾讯云的 appId
secretIdstring-腾讯云的 secretId
secretKeystring-腾讯云的 secretKey,或者其他提供商的 API Key
modelTypestring-ASR 模型类型(例如,"16k_zh", "8k_en"),具体参见提供商的文档
bufferSizenumber-音频缓冲区大小,单位:字节
sampleratenumber16000采样率
endpointstring-自定义服务端点 URL
extraobject-提供商特定参数
startWhenAnswerbooleanfalse呼叫接通后再请求 ASR 服务

SynthesisOption

文字转语音(TTS) 配置选项。

示例:

{
"provider": "tencent",
"speaker": "xiaoyan",
"volume": 5,
"speed": 1.0,
"emotion": "neutral",
"samplerate": 16000
}

字段:

字段类型必填默认值描述
providerstring-TTS 提供商:"tencent", "aliyun", "deepgram", "voiceapi"
speakerstring-音色,参见提供商文档
volumenumber5音量(1-10)
speednumber1.0语速
sampleratenumber16000采样率,单位:hz
appIdstring-腾讯云的 appId
secretIdstring-腾讯云的 secretId
secretKeystring-腾讯云的 secretKey,或者其他提供商的 API Key
codecstring-编码格式
subtitlebooleanfalse是否启用字幕
endpointstring-自定义 TTS 服务端点 URL
extraobject-额外的提供商特定参数
maxConcurrentTasksnumber-非流式 TTS 命令的最大并发任务数,默认为 1

VADOption

语音活动检测(VAD)配置选项。

示例:

{
"type": "webrtc",
"samplerate": 16000,
"speechPadding": 250,
"silencePadding": 100,
"voiceThreshold": 0.5,
"maxBufferDurationSecs": 50
}

字段:

字段类型必填默认值描述
typestring"webrtc"VAD 算法类型:"silero" , "ten""webrtc"
sampleratenumber16000采样率
speechPaddingnumber250语音开始 speechPadding 毫秒后开始检测
silencePaddingnumber100Silence 事件触发间隔,单位毫秒
rationumber0.5语音检测比率阈值
voiceThresholdnumber0.5语音能量阈值
maxBufferDurationSecsnumber50最大缓冲区持续时间,单位秒
silenceTimeoutnumber-静音检测超时,单位毫秒
endpointstring-自定义 VAD 服务端点
secretKeystring-VAD 服务身份验证密钥
secretIdstring-VAD 服务身份验证 ID

MediaPassOption

媒体透传配置选项,使用 WebSocket 服务完全接管语音处理。

RustPBX 会将所有语音数据发送到配置的 WebSocket 服务,并将从该服务接受到的语音播放到语音连接对方。

参见:Media Pass

示例:

{
"url": "ws://localhost:9090/media",
"inputSampleRate": 16000,
"outputSampleRate": 16000,
"packetSize": 2560
}

字段:

字段类型必填默认值描述
urlstring-用于媒体流的 WebSocket 连接 URL
inputSampleRatenumber-从 WebSocket 服务器接收的音频采样率(也是轨道的采样率)
outputSampleRatenumber-发送到 WebSocket 服务器的音频采样率
packetSizenumber2560发送到 WebSocket 服务器的数据包大小,单位字节

ReferOption

转接配置选项。

示例:

{
"denoise": true,
"timeout": 30,
"moh": "http://example.com/hold_music.wav",
"asr": {
"provider": "tencent",
"language": "zh-CN"
},
"autoHangup": true,
"sip": {
"username": "transfer_user",
"password": "transfer_password"
}
}

字段:

字段类型必填默认值描述
denoisebooleanfalse在转接期间启用降噪
timeoutnumber-转接超时时间,单位秒
mohstring-转接期间播放的等待音乐 URL
asrTranscriptionOption-自动语音识别配置
autoHangupbooleanfalse转接完成后自动挂断
sipSipOption-SIP 配置

SipOption

SIP 协议配置选项。

示例:

{
"username": "user",
"password": "password",
"realm": "example.com",
"headers": {
"X-Custom-Header": "value"
}
}

字段:

字段类型必填默认值描述
usernamestring-SIP 用户名,用于身份验证
passwordstring-SIP 密码,用于身份验证
realmstring-SIP 域/领域,用于身份验证
headersobject-额外的 SIP 协议头(键值对)

Attendee

通话参与者信息。

示例:

{
"username": "alice",
"realm": "example.com",
"source": "sip:alice@example.com"
}

字段:

字段类型描述
usernamestringSIP URI 的用户名部分
realmstringSIP URI 的域/领域部分
sourcestring完整的 SIP URI 或电话号码

REST API 端点

列出活跃通话

端点: GET /call/lists

描述: 返回活跃通话的列表。

响应:

{
"calls": [
{
"id": "session-id",
"call_type": "webrtc",
"created_at": "2024-01-01T12:00:00Z",
"option": {
"caller": "1234567890",
"callee": "0987654321"
}
}
]
}

用法:

curl http://localhost:8080/call/lists

终止通话

端点: POST /call/kill/{id}

描述: 终止特定的活跃通话。

参数:

  • id(路径参数,字符串):要终止的通话的会话 ID

响应:

true

用法:

curl -X POST http://localhost:8080/call/kill/session123

获取 ICE 服务器

端点: GET /iceservers

描述: 返回 WebRTC 连接的 ICE 服务器配置。

响应:

[
{
"urls": ["stun:restsend.com:3478"],
"username": null,
"credential": null
},
{
"urls": ["turn:restsend.com:3478"],
"username": "username",
"credential": "password"
}
]

用法:

curl http://localhost:8080/iceservers

错误处理

所有端点都返回适当的 HTTP 状态代码:

  • 200 OK:成功
  • 400 Bad Request:无效参数
  • 404 Not Found:资源未找到
  • 500 Internal Server Error:服务器错误

注意事项

  • 所有 WebSocket 端点都支持实时双向通信
  • 当 WebSocket 连接关闭时,通话会话会自动清理
  • 可以通过设置 dump=false 参数来禁用事件转储
  • ICE 服务器根据环境变量自动配置
  • 音频编解码器根据功能自动协商
  • VAD(语音活动检测)事件用于语音检测
  • ASR(自动语音识别)提供实时转录
  • TTS(文本转语音)支持流式合成
  • 所有时间戳均以毫秒为单位
  • trackId 用于标识哪个Track生成了事件
  • playId 在使用相同 ID 时防止中断之前的 TTS 播放。对于 TTS 命令,playId 是指定的标识符;对于播放命令,playId 是 URL
  • autoHangup 在 TTS/Play 完成后自动结束通话