# 发起语音通话

请求方式:POST

请求地址:https://$basehost/gateway/eaopen/VoiceCall

body参数

{
    "robot_id":"accbTDTOEBMHReE3gCQ4uMW",
    "contact_id":"acchT2ewXQ5xjtWkTIh4Kqh",
    "customer_service_open_id":"accuRNmdnmiDrZ9DYdVbql1",
    "customer_service_account_device":"d7400da3-526f-4551-aac5-e766ec07913e",
    "sdp":"v=0o=- 571009938461545524 2 IN IP4 127.0.0.1s=-t=0 0a=group:BUNDLE 0a=extmap-allow-mixeda=msid-semantic: WMS f6d06b96-e869-4587-94ca-4030f0252953m=audio 9 UDP/TLS/RTP/SAVPF 111 63 9 0 8 13 110 126c=IN IP4 0.0.0.0a=rtcp:9 IN IP4 0.0.0.0a=ice-ufrag:HSH4a=ice-pwd:ILhxZOgz7T9rSFj7xlYskuSAa=ice-options:tricklea=fingerprint:sha-256 2E:26:B1:26:CE:35:A2:69:63:48:F6:53:6E:36:3F:37:F8:3E:00:E5:0A:16:E2:B6:BA:41:0A:D7:DC:18:7D:2Ba=setup:actpassa=mid:0a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-levela=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-timea=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mida=sendrecva=msid:f6d06b96-e869-4587-94ca-4030f0252953 d190c4b8-8588-4e73-9d67-ebcba61f897aa=rtcp-muxa=rtcp-rsizea=rtpmap:111 opus/48000/2a=rtcp-fb:111 transport-cca=fmtp:111 minptime=10;useinbandfec=1a=rtpmap:63 red/48000/2a=fmtp:63 111/111a=rtpmap:9 G722/8000a=rtpmap:0 PCMU/8000a=rtpmap:8 PCMA/8000a=rtpmap:13 CN/8000a=rtpmap:110 telephone-event/48000a=rtpmap:126 telephone-event/8000a=ssrc:891539812 cname:WWeo3fzqA7zrUsLNa=ssrc:891539812 msid:f6d06b96-e869-4587-94ca-4030f0252953 d190c4b8-8588-4e73-9d67-ebcba61f897a"
}
字段 类型 必填 说明
robot_id string 机器人open id
contact_id string 会话id (私聊为account_id)
customer_service_open_id string 客服open id
customer_service_account_device string 浏览器指纹,影响设备是否占线,同一个设备在同一时间仅能接听或呼入一通语音通话
sdp string 客服设备 webrtc sdp

返回值:

{
    "data": {
        "call_id": "8e01fef963008facfb947934423cdd3b",
        "expire_at": 1782120986,
        "sdp": "v=0\r\no=rtc 1375458748 0 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE 0\r\na=group:LS 0\r\na=msid-semantic:WMS *\r\na=ice-options:ice2,trickle\r\na=fingerprint:sha-256 8A:42:95:91:5A:8E:62:E8:C9:E8:34:88:4D:97:82:23:C9:31:2A:83:F6:A8:CC:C6:FD:85:F0:94:BB:01:49:2E\r\nm=audio 9 UDP/TLS/RTP/SAVPF 111\r\nc=IN IP4 0.0.0.0\r\na=mid:0\r\na=sendrecv\r\na=ssrc:4189216610 cname:voipserver\r\na=ssrc:4189216610 msid:stream_8e01fef963008facfb947934423cdd3b track_8e01fef963008facfb947934423cdd3b\r\na=msid:stream_8e01fef963008facfb947934423cdd3b track_8e01fef963008facfb947934423cdd3b\r\na=rtcp-mux\r\na=rtpmap:111 opus/48000/2\r\na=fmtp:111 maxaveragebitrate=16000;minptime=10;useinbandfec=1;stereo=0;sprop-stereo=0\r\na=setup:active\r\na=ice-ufrag:iZ2m\r\na=ice-pwd:BXxgAoG3y/ZilKOskJq3I7\r\na=candidate:1 1 UDP 2114977791 10.138.113.56 21000 typ host\r\na=candidate:2 1 UDP 2114977535 10.138.113.56 21000 typ host\r\na=end-of-candidates\r\n"
    },
    "errcode": 0,
    "errmsg": "",
    "hint": "RNRdEhKXphi7XZRuyqAA"
}

返回说明

字段 类型 说明
errcode int 状态码,0为正常,非0代表错误
errmsg string 错误信息
hint string 请求日志ID
data.call_id string 请求通话id
data.expire_at int 请求通话id过期时间
data.sdp int 目标设备 webrtc sdp

完整请求示例:

curl --location --request POST 'http://$basehost/gateway/eaopen/VoiceCall' \
--header 'Token: token' \
--header 'Content-Type: application/json' \
--data-raw '{
    "robot_id":"accbTDTOEBMHReE3gCQ4uMW",
    "contact_id":"acchT2ewXQ5xjtWkTIh4Kqh",
    "customer_service_open_id":"accuRNmdnmiDrZ9DYdVbql1",
    "customer_service_account_device":"d7400da3-526f-4551-aac5-e766ec07913e",
    "sdp":"v=0o=- 571009938461545524 2 IN IP4 127.0.0.1s=-t=0 0a=group:BUNDLE 0a=extmap-allow-mixeda=msid-semantic: WMS f6d06b96-e869-4587-94ca-4030f0252953m=audio 9 UDP/TLS/RTP/SAVPF 111 63 9 0 8 13 110 126c=IN IP4 0.0.0.0a=rtcp:9 IN IP4 0.0.0.0a=ice-ufrag:HSH4a=ice-pwd:ILhxZOgz7T9rSFj7xlYskuSAa=ice-options:tricklea=fingerprint:sha-256 2E:26:B1:26:CE:35:A2:69:63:48:F6:53:6E:36:3F:37:F8:3E:00:E5:0A:16:E2:B6:BA:41:0A:D7:DC:18:7D:2Ba=setup:actpassa=mid:0a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-levela=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-timea=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mida=sendrecva=msid:f6d06b96-e869-4587-94ca-4030f0252953 d190c4b8-8588-4e73-9d67-ebcba61f897aa=rtcp-muxa=rtcp-rsizea=rtpmap:111 opus/48000/2a=rtcp-fb:111 transport-cca=fmtp:111 minptime=10;useinbandfec=1a=rtpmap:63 red/48000/2a=fmtp:63 111/111a=rtpmap:9 G722/8000a=rtpmap:0 PCMU/8000a=rtpmap:8 PCMA/8000a=rtpmap:13 CN/8000a=rtpmap:110 telephone-event/48000a=rtpmap:126 telephone-event/8000a=ssrc:891539812 cname:WWeo3fzqA7zrUsLNa=ssrc:891539812 msid:f6d06b96-e869-4587-94ca-4030f0252953 d190c4b8-8588-4e73-9d67-ebcba61f897a"
}'

获取sdp示例

// 初始化
const pc = new RTCPeerConnection({ iceServers: [] });
// 打开本地音频采集,添加track
const localStream = navigator.mediaDevices
                        .getUserMedia({
                            audio: {
                                echoCancellation: { ideal: true },
                                noiseSuppression: { ideal: true },
                                autoGainControl: { ideal: true },
                                channelCount: { ideal: 1 },
                            },
                            video: false,
                        })
for (const track of stream.getAudioTracks()) {
  pc.addTrack(track, stream);
}
// local sdp, type=offer
const offer = await pc.createOffer({ offerToReceiveAudio: true });
pc.setLocalDescription(offer);
const localSdp = pc.localDescription && pc.localDescription.sdp ? pc.localDescription.sdp : offer.sdp;
最后更新时间: 2026/6/25 14:50:29