我是这个领域的新手。来质问。我想在电话会议期间拨打一个电话号码,并将该与会者加入当前的会议。我已经尝试了一个给出这里的Java的会议示例代码。是否有任何方法收集输入,然后拨打号码,并将参与者添加到同一会议。
这是我试过的。我已经创建了一个会议,它将返回以下响应
<Response>
<Dial hangupOnStar="true">
<Conference startConferenceOnEnter="true" endConferenceOnExit="true">My Conference</Conference>
</Dial>
<Gather timeout="10" action="/twilio-tut/add/participant?confName=My%20Conference" finishOnKey="#">
<Say>Please enter the number you want to connect followed by hash key.</Say></Gather>
</Response>现在,会议的一位与会者说,A press *,并拨打了一些他想要加入会议的另一个人。
现在,关于Gather动词的动作,我正在拨一个数字--代码如下所示
Number number =
new Number.Builder(some_valid_phone_number)
.statusCallback("https://xxxxxxx.ngrok.io/twilio-tut/to/conference")
.statusCallbackMethod(Method.POST)
.statusCallbackEvents(Arrays.asList(Event.ANSWERED))
.build();
Dial dial = new Dial.Builder()
.number(number)
.conference(new Conference.Builder(conferenceName).build())
.build();
twiml = new VoiceResponse.Builder().dial(dial)
.build();在some_valid_phone_number.上,我正在更新呼叫,以便将呼叫者和被叫者重定向到会议,其中来电者是通过按*离开会议的人,即A和被调用者是*。代码如下所示
Call callee = Call.updater(callSid)
.setUrl("https://xxxxx.ngrok.io/twilio-tut/voice").setMethod(HttpMethod.POST).update();
Call caller = Call.updater(parentCallSid)
.setUrl("https://xxxxx.ngrok.io/twilio-tut/voice").setMethod(HttpMethod.POST).update();上面的代码传输被调用者,并在异常情况下断开调用者。
com.twilio.exception.ApiException: Call is not in-progress. Cannot redirect.我想做的是A打电话给其他号码,最后他们会连接到同一个会议。而A应该能够调用其他号码并将它们添加到同一个会议中。我正在用手机连接这些号码。
提前谢谢。
发布于 2017-11-26 23:00:58
两位开发人员在这里传道。
您所遇到的问题是,您正在尝试在TwiML中执行两个拨号,以响应。与其将与连接到您与<Gather>所拨打的号码,不如使用使用REST创建该调用并使用TwiML将电话中的人引导回原来的会议。
要明确地采取这一步骤,应该是这样的:
我不是Java开发人员,所以这可能是错误的,但是您需要的东西看起来有点像这样:
@WebServlet("/dial/participant")
public class AddParticipantToConference extends HttpServlet {
public static final String MODERATOR = System.getenv("MY_PHONE_NUMBER");
public static final String ACCOUNT_SID = System.getenv("TWILIO_ACCOUNT_SID");
public static final String AUTH_TOKEN = System.getenv("TWILIO_AUTH_TOKEN");
@Override
protected void doPost(HttpServletRequest servletRequest, HttpServletResponse servletResponse)
throws IOException {
String selectedOption = servletRequest.getParameter("Digits");
VoiceResponse twiml;
if(selectedOption != null){
Call call = Call.creator(new PhoneNumber("+" + selectedOption), new PhoneNumber(MODERATOR),
new URI("https://example.com/conference")).create();
}
twiml = new VoiceResponse.Builder().redirect("/conference").build();
servletResponse.setContentType("text/xml");
try {
servletResponse.getWriter().print(twiml.toXml());
} catch (Exception e) {
e.printStackTrace();
}
}
}你现在不需要statusCallback了。
如果这有帮助,请告诉我。
发布于 2017-11-18 00:51:13
这里有两名员工。
你可以的!您可以做的是使用REST进行出站呼叫,并让该调用返回带有会议动词的TwiML,并且具有相同的会议名称-例如,如果您创建了一个名为conference1的电话会议,您需要使用类似于以下内容的TwiML响应:
<Response>
<Dial>
<Conference>conference1</Conference>
</Dial>
</Response>将出站调用连接到现有会议,或创建该会议的。
如果在现有调用中使用<Gather>谓词进行输入,那么也可以使用此解决方案。您希望重定向调用流,而不是创建一个全新的调用,所以只需在this回调中返回此TwiML即可。
如果您已经跟踪了Conference,还可以通过创建出站会议调用(这里的示例代码)以编程方式添加它们。类似于TwiML,如果电话会议不存在,Twilio将创建它;如果它确实存在,Twilio将向其添加人员。
https://stackoverflow.com/questions/47352223
复制相似问题