首页 > 解决方案 > 控制 Twilio 调用的事件

问题描述

在下一个示例代码中,Twilio 将对话 OPERATOR_PHONE_NUMBER 放入 CLIENT_PHONE_NUMBER,并记录通话。

但我不知道控制某些东西的代码应该是什么,一部或两部手机......:

  1. 不存在。

  2. 存在但沟通。

  3. 存在,不通信但不接听。

  4. 存在,不交流,拿起和对话发生。

    import com.twilio.Twilio;
    import com.twilio.rest.api.v2010.account.Call;
    import com.twilio.rest.api.v2010.account.CallCreator;
    import com.twilio.type.PhoneNumber;
    import com.twilio.type.Twiml;
    
    public class SimpleCallWithRecording2 {
    private static final String ACCOUNT_SID = "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
    private static final String AUTH_TOKEN  = "9ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ";
    
    private static final String ASSIGNED_PHONE_NUMBER = "+15999999999999";  
    
    //Must be verified numbers in trial account
    private static final String OPERATOR_PHONE_NUMBER = "+34888888888";
    private static final String CLIENT_PHONE_NUMBER   = "+34777777777";
    
    
    public static void main(String[] args) throws Exception {   
        Twilio.init(ACCOUNT_SID, AUTH_TOKEN);
    
        PhoneNumber to = new PhoneNumber(OPERATOR_PHONE_NUMBER);
    
        PhoneNumber from = new PhoneNumber(ASSIGNED_PHONE_NUMBER);
    
        Twiml twiml = new Twiml(
            "<?xml version=\"1.0\" encoding=\"UTF-8\"?>                    " +  
            "<Response>                                                    " +
            "   <Say voice=\"woman\">This is said by a robotic woman</Say> " +          
            "   <Dial>                                                     " +
            "      <Number> " + CLIENT_PHONE_NUMBER + "</Number>           " +
            "   </Dial>                                                    " +
            "</Response>                                                   " );
    
        CallCreator callCreator = Call.creator(to, from, twiml);
            callCreator.setRecord(true);
    
        Call call = callCreator.create();
        System.out.println(call);
    }
    

    }

在文档中,我看到可以做callCreator.setStatusCallback(URI.create("https://www.myapp.com/events"))一些事情,并对事件进行一些分类:“启动”、“响铃”、“回答”、“完成”。但我还没有找到“在另一边”的代码,我的意思是在https://www.myapp.com/events极端¿?

标签: javatwilio

解决方案


您需要设置一个休息端点并将其设置为状态回调 url。该 url 将接收来自 twilio 的事件。

参考这个

编辑:如果您还需要来自嵌套动词的事件,请为其定义属性“动作”。

IE

 <Dial action="//callbackURL">
 <Number>   CLIENT_PHONE_NUMBER  </Number> 
 </Dial>

这样你就会知道你的案例 1 ,2 ,3 ,4。

为了“控制”调用,您只需使用所需的 TwiML 响应回调请求。希望这可以澄清。

edit2:您需要执行以下操作:

//handles callback url
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
{  //...
   TwiMLResponse twiml = new TwiMLResponse();
   String callSid = request.getParameter("CallSid");
   //handle call specific data
   switch(request.getParameter("CallStatus")){
      case "no-answer": //construct twiML
      case "ringing" ://...
    }
    //...
   response.setContentType("application/xml");
   response.getWriter().print(twiml.toXML());
}

请参阅:IVR - 示例


推荐阅读