簡體   English   中英

我們可以在Twilio的電話會議中打一個電話嗎?

[英]Can we call a number in middle of a conference call in Twilio?

我是這個領域的新手。 來質疑。 我想在電話會議中打一個電話,並將該參與者添加到當前會議中。 我已經嘗試過使用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*並撥打了他想添加到會議中的另一個人的號碼。

現在,在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();

在statusCallback上,我正在更新呼叫以將呼叫者和被呼叫者都重定向到會議,其中呼叫者是通過按*即離開會議的那個呼叫者,即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.

我想要做的是調用一些其他的號碼,最后他們將連接到同一個會議。 並且A應該能夠呼叫其他號碼並將其添加到同一會議中。 我正在用手機連接號碼。

提前致謝。

Twilio的員工在這里。

您可以! 您可以做的是使用REST API進行出站呼叫,並使該呼叫返回帶有會議動詞和相同會議名稱的TwiML,例如,如果您創建了一個名為conference1電話conference1 ,則需要使用TwiML看起來像:

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

這會將呼出電話連接到現有會議,或創建該會議。

如果將<Gather>動詞用於現有呼叫的輸入,則也可以使用此解決方案。 您要重定向呼叫流,而不是創建一個新的呼叫,因此只需在Gather回調中返回此TwiML。

如果您一直跟蹤會議SID,也可以通過創建呼出電話會議以編程方式添加它們( 此處為示例代碼 )。 與TwiML相似,如果電話會議不存在,Twilio將創建它。 如果確實存在,Twilio會將人員添加到其中。

Twilio開發人員布道者在這里。

您遇到的問題是,您試圖在TwiML中執行兩次撥號以響應<Gather> 與使用<Gather>撥打的號碼而不使用<Number> <Dial>相比,您應該使用REST API創建該呼叫,並使用TwiML將電話上的人引導回原始會議。

要將其分明,它應該是這樣的:

  1. 用戶撥打Twilio號碼
  2. TwiML響應,使用h​​angUpOnStar將用戶添加到會議中
  3. 用戶按星號,然后Gather要求撥一個號碼
  4. 在對來自Gather的電話號碼的響應中,使用REST API創建呼叫並將該呼叫定向到原始入站URL(“ /會議”)
  5. 在對“收集”操作的響應中,返回TwiML以將原始呼叫者返回到會議(重定向到原始入站URL)

我不是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。

讓我知道這是否有幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM