Twilio呼出电话-将更多人添加到现有电话

问题描述

我正在尝试在其中创建一个Web应用程序:

  1. 我通过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();    
    }
    
  2. 第二,当呼出电话接通后,我想向正在进行的通话中添加更多人。

如何达到第二要求?

已编辑: 我尝试使用下面的电话会议代码

@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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...