问题描述
我正在尝试在其中创建一个Web应用程序:
-
我通过twilio将来自浏览器应用程序的去电打到电话号码。我正在将Twilio Client(js)v 1.10.1用于浏览器应用程序。 后端Webhook使用Twilio的Dial and Number动词用Java编写。我能够使用twilio的可编程语音来实现它。
伪代码如下所示
前端代码
let device = require('twilio-client').Device; let outboundCall = ''; const twilioInit = () => { // twilio client initialization logic goes here } // on phone icon click i am calling the below method const makeOutboundCall = () => { outboundCall = device.connect({ To: TO_NUMBER // The first to number }); }
后端代码-服务器端(webhook)
@RequestMapping(value="/callCustomers",produces= "text/xml") public String callBybrowserToMobile(@RequestParam String ApplicationSid,@RequestParam String ApiVersion,@RequestParam String Called,@RequestParam String Caller,@RequestParam String CallStatus,@RequestParam String To,@RequestParam String From,@RequestParam String CallSid,@RequestParam String Direction,@RequestParam String AccountSid) { Number number = new Number.Builder(To).build(); Dial dial = new Dial.Builder().answerOnBridge(true).number(number).callerId(myTwilioNumber).build(); VoiceResponse response = new VoiceResponse.Builder().dial(dial).build(); logger.info(response.toXml()); return response.toXml(); }
如何达到第二要求?
已编辑: 我尝试使用下面的电话会议代码:
@RequestMapping(value = "/callMobile",produces = "text/xml")
public String callBybrowserToMobile(@RequestParam String ApplicationSid,@RequestParam String AccountSid) {
LOG.info("Call by browser to mobile");
String voiceCallBackUri = new StringBuilder(
env.getProperty("twilio.exposed.uri").concat("/conferenceCallBack")).toString();
String joinConferenceUri = new StringBuilder(
env.getProperty("twilio.exposed.uri").concat("/joinConference")).toString();
String fromNumber = "+xxxxxxxxx35"; // Bought Twilio Number
Call call = Call.creator(
new com.twilio.type.PhoneNumber("+"+To),new com.twilio.type.PhoneNumber(fromNumber),URI.create(joinConferenceUri))
.setMethod(HttpMethod.GET)
.setStatusCallback(URI.create(voiceCallBackUri))
.setStatusCallbackMethod(HttpMethod.POST)
.create();
Conference.Builder conferenceBuilder = new Conference.Builder("My Conference");
Dial dial = new Dial.Builder().conference(conferenceBuilder.build()).build();
VoiceResponse twiml = new VoiceResponse.Builder().dial(dial).build();
return twiml.toXml();
}
@RequestMapping("/joinConference")
public String joinConference() {
LOG.info("joinConference");
Conference.Builder conferenceBuilder = new Conference.Builder("My Conference");
Dial dial = new Dial.Builder().conference(conferenceBuilder.build()).build();
VoiceResponse twiml = new VoiceResponse.Builder().dial(dial).build();
return twiml.toXml();
}
@RequestMapping("/conferenceCallBack")
public void conferenceCallBack(@RequestParam String Called,@RequestParam String ToState,@RequestParam String CallerCountry,@RequestParam String Timestamp,@RequestParam String CallbackSource,@RequestParam String SipResponseCode,@RequestParam String CallerState,@RequestParam String ToZip,@RequestParam String SequenceNumber,@RequestParam String ToCountry,@RequestParam String CallerZip,@RequestParam String CalledZip,@RequestParam String CalledCity,@RequestParam String Duration,@RequestParam String CallDuration,@RequestParam String AccountSid,@RequestParam String CalledCountry,@RequestParam String CallerCity,@RequestParam String FromCountry,@RequestParam String ToCity,@RequestParam String FromCity,@RequestParam String CalledState,@RequestParam String FromZip,@RequestParam String FromState) {
LOG.info("conferenceCallBack");
}
使用上面的会议代码,呼叫者(浏览器应用程序)听到等待电话会议的音乐,被呼叫者接听电话,但被选中时仅听到会议名称,而被呼叫者的电话断开。请指导找到问题。
解决方法
这里是Twilio开发人员的传播者。
您没有将/joinConference
路由用作text/xml
,因此Twilio将其读为text/plain
,并将其视为<Say>
。
我认为您需要将produces = 'text/xml'
添加到RequestMapping
,就像这样:
@RequestMapping("/joinConference",produces = "text/xml")
让我知道是否有帮助。
,您可以使用座席会议。 这是示例代码和如何工作的高级图片 https://www.twilio.com/blog/multi-party-calls-voip-gsm-programmable-voice