2017-11-17 10 views
0

こんにちは、こんにちは。疑問に迫る会議通話中に番号に電話をかけ、その参加者を現在の会議に追加したいと思います。 私は会議hereのJavaのサンプルコードを試しました。入力を集めて番号を呼び出し、参加者を同じ会議に追加する方法はありますか?Twilioで電話会議の途中で電話をかけることはできますか?

ここは私が試したものです。私は会議を作成しているし、今会議の参加者の一つを次の応答

<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> 

を返しますどのプレス*を言うと、他の人の番号をダイヤルし、彼は会議に追加したい人へ。

Gather動詞の行動に、私はstatusCallbackオン

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(); 

以下のように、私は、呼び出し元が一つであり、呼び出し元と呼び出し先の両方のための会議にリダイレクトするようにコールを更新しています数のコードをダイヤルしています*、つまりAを押して会議を終了した人は、some_valid_phone_numberです。コードは

コード転送上記
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. 

と、発信者の接続を切断します会議。 は、他の番号を呼び出して同じ会議で追加できる必要があります。私は数字を接続するために携帯電話を使用しています。

ありがとうございます。

答えて

1

ここではTwilioの開発者エバンジェリストです。

問題は、<Gather>への応答でTwiML内で2つのダイヤルを実行しようとしていることです。の電話番号を<Gather>でダイヤルする番号に<Dial>を代入するのではなく、create that call using the REST APIとし、TwiMLを使用して電話の相手を元の会議に戻すようにします。

が、それはこのようなものである必要があり、明確なステップにそれを置くために:

  1. ユーザーが呼び出すTwilio番号TwiMLが応答
  2. 、hangUpOnStarで
  3. ユーザープレスの星を会議やを要求収集するためにユーザーを追加します
  4. Gatherからの番号に対する応答では、REST APIを使用して呼び出しを作成し、その呼び出しを元の受信URL( "/ conference")に転送します。
  5. t彼は私がJava開発者じゃないので、これは間違っているかもしれませんが、あなたは少し、このように見える何かをしたい

(元インバウンドURLへのリダイレクトして)会議に元の発信者を返すようにTwiMLを返し、アクションを収集します:

@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は必要ありません。

助けてもらえたら教えてください

+0

ありがとう、フィル。私は会議に参加者を追加することができます。 :) –

2

ここTwilio従業員。

することができます!あなたができることは、REST APIを使用してアウトバウンドコールを行い、そのコールにConference動詞を含むTwiMLと同じ会議名を返すことです - たとえば、conference1という名前の会議通話を作成した場合は、 TwiMLは次のようになります。

<Response> 
    <Dial> 
     <Conference>conference1</Conference> 
    </Dial> 
</Response> 

これは、アウトバウンドコールを既存の会議に接続するか、作成します。

既存のコールの入力に<Gather>動詞を使用している場合は、このソリューションも使用できます。コールフローをリダイレクトして、新しいコールをまったく作成しないようにしたいので、このTwiMLをGatherコールバックに返してください。

Conference SIDを把握している場合は、アウトバウンド電話会議コール(sample code here)を作成してプログラムSIDをプログラムで追加することもできます。 TwiMLと同様に、会議通話が存在しない場合、Twilioはそれを作成します。それが存在する場合、Twilioはその人をそれに追加します。

+0

ありがとう、リッキー、ご返信ありがとうございます。あなたの努力を本当に感謝します。 –

関連する問題