如何从Twilio Voice JavaScript SDK设置呼叫状态回调



我正在尝试使用Twilio可编程语音JavaScript SDK进行带有statusCallback和statusCallbackEvent的出站呼叫,以便在呼叫完成后更新另一个系统。

这是我的密码。

async function makeOutgoingCall() {
const params = {
// get the phone number to call from the DOM
To: phoneNumberInput.value,
CallerId: myCallerId,
statusCallback: OutBoundCallbackURL,
statusCallbackEvent: 'completed'
};
console.log(params);
if (device) {
log(`Attempting to call ${params.To} from caller id: ${params.CallerId} ...`);
// Twilio.Device.connect() returns a Call object
const call = await device.connect({ params });
dtmf_1.onclick = function(){call.sendDigits('1')};
dtmf_2.onclick = function(){call.sendDigits('2')};
dtmf_3.onclick = function(){call.sendDigits('3')};
dtmf_4.onclick = function(){call.sendDigits('4')};
dtmf_5.onclick = function(){call.sendDigits('5')};
dtmf_6.onclick = function(){call.sendDigits('6')};
dtmf_7.onclick = function(){call.sendDigits('7')};
dtmf_8.onclick = function(){call.sendDigits('8')};
dtmf_9.onclick = function(){call.sendDigits('9')};
dtmf_0.onclick = function(){call.sendDigits('0')};
dtmf_s.onclick = function(){call.sendDigits('*')};
dtmf_h.onclick = function(){call.sendDigits('#')};
/*
* add listeners to the Call
* "accepted" means the call has finished connecting and the state is now "open"
*/
call.on('accept', updateUIAcceptedOutgoingCall);
call.on('disconnect', updateUIDisconnectedOutgoingCall);
call.on('cancel', updateUIDisconnectedOutgoingCall);
call.on('reject', updateUIDisconnectedOutgoingCall);
outgoingCallHangupButton.onclick = () => {
log('Hanging up ...');
call.disconnect();
};
} else {
log('Unable to make call.');
}
}

我希望它像这样发回TwiML:

<Response>
<Dial answerOnBridge="true" callerId="+19876543210">
<Number
statusCallbackEvent="completed"
statusCallback="https://myapp.com/calls/events"
statusCallbackMethod="POST">
+12349013030
</Number>
</Dial>
</Response>

但它正在发回这个:

<Response>
<Dial answerOnBridge="true" callerId="+19876543210">
<Number>+1123456789</Number>
</Dial>
</Response>

我找不到device.connect((的可能参数列表。甚至不确定这是我需要编辑的。

有人能帮我吗?

更新此TwiML响应可能需要在服务器端完成,因此您可能需要从生成Twilio访问令牌(您的客户端最初用于向Twilio注册(的位置开始,并追溯到服务器和特定处理程序所在的位置。

因此,例如,如果在访问令牌中有一个用于创建语音授权的outgoingApplicationSid,您将希望在Twilio控制台中找到具有相应sid的TwiML应用程序,并按照其配置的语音请求URL查找服务器。然后,您应该能够从服务器中找到创建TwiML响应的位置。


对于基于几个假设的稍微更具体的答案:

  1. 根据您上面的一些代码片段,您可能使用了TwilioDevEd/voice javascript sdk节点作为项目的跳板
  2. 如果1为真,您可能会在Twilio控制台中设置一个TwiML应用程序,该应用程序指向语音请求URL,该URL使用ngrok通过隧道连接到您本地运行的节点服务器,就像它们在README中一样

如果这些都是真的,那么您需要在项目中查找voiceResponse处理程序,并更新twiml.dial()调用(生成响应TwiML(以创建所需的实际TwiML。

当Twilio向您的TwiML应用程序发出请求时,它会将您传递给connect方法的所有参数作为请求主体中的参数发送。因此,在现有程序中,似乎正在使用ToCallerId参数。因此,您需要调整dial以同时使用statusCallbackstatusCallbackEvent参数。这可能看起来有点像:

const { statusCallback, statusCallbackEvent, CallerId, To } = req.body;
const twiml = new VoiceResponse();
const dial = twiml.dial({ callerId: CallerId });
dial.number({ statusCallback, statusCallbackEvent }, To);

最新更新