【问题标题】:Twilio - How to move an existing call to a conferenceTwilio - 如何将现有呼叫移至会议
【发布时间】:2014-05-03 20:09:48
【问题描述】:

使用 twilio,在现有呼叫(2 条腿 - 呼叫者腿和被叫腿)上,我想将呼叫移动到会议室。双腿必须出现在房间里 如何在不失去一条或另一条腿的情况下架起双腿?

谢谢

问候

【问题讨论】:

    标签: twilio conference


    【解决方案1】:

    这个帖子很有帮助,但有一个建议可以添加到 am1704 所说的内容中-

    如果您想避免使用 am1704 使用的 action= 方法,您还可以移动子分支,然后使用第二个 HTTP (curl) 请求移动父分支。请注意,呼叫的方向在这里很重要:父支路是首先拨打的支路。同样重要的是,您要一个接一个地执行每个 curl 请求,而不是同时执行。

    这是一个如何在 node.js 中发送 HTTP 请求的示例,该请求将更新其中一条腿。您需要执行两次。

    var ACCTSID = process.env.ACCTSID;  // Twilio Account SID
    var AUTHTOKEN = process.env.AUTHTOKEN;  // Twilio Auth Token
    var request = require('request');
    
    function parentFunction() { // update a call in progress to move it to a conference
    
      console.log('parameter: ' + parent); // log param
    
      SID = parent.SID ; console.log('SID to add to conf: ' + SID); // The SID of the parent call
      end = parent.end ; console.log('end call on exit: ' + end) // end conference on exit - true or false
      xml = '<Response><Dial><Conference endConferenceOnExit=\"' + end + '\" beep=\"' + beep +'\">' + key + '</Conference></Dial></Response>'; console.log('xml: ' + xml); //xml
    
      formData = {
        Twiml: xml
        }
    
       options = { 
         method: 'POST',
         auth: {
           user: ACCTSID,
           pass: AUTHTOKEN
         },
         url: 'https://api.twilio.com/2010-04-01/Accounts/' + ACCTSID + '/Calls/' + SID + '.json',
         headers:
         { 
           'cache-control': 'no-cache',
           'Content-Type': 'text/plain'
         },
         form: formData //your payload
       };
    
       request(options, function (error, response, body) {
         if (error) throw new Error(error);
         console.log('response body for: ' + SID + ':' + body);
    
      });
    }
    

    【讨论】:

      【解决方案2】:

      这里是 Twilio 员工。

      为了补充 am1704 的答案,同一主题的变体是在 &lt;Dial&gt; 之后使用 &lt;Redirect&gt; 动词:

      <Response>
        <Dial>
          <Number>+44xxxxxxxx</Number>
        </Dial>
        <Redirect method="GET">http://www.mocky.io/v2/584ac0f81000002b14fb0205</Redirect>
      </Response>
      

      一旦子呼叫移至会议,TwiML 将继续使用&lt;Dial&gt; 之后的动词。

      这两种技术都需要了解调用状态。在某些呼叫中,所需的下一步可能是&lt;Hangup&gt;。在其他情况下,可能希望将父分支移至会议。

      【讨论】:

      • 我们如何使用呼叫状态的知识来确定是挂断还是拨入会议的父分支?
      • 你需要知道调用者的意图。默认情况下,我想您会想挂断电话;但如果呼叫者想要添加第三方,他们首先必须将 1:1 呼叫推广为会议,并且该操作将导致控制呼叫流程的应用程序返回适当的 TwiML。
      【解决方案3】:

      防止呼叫被挂断的技巧是使用父分支的“操作”url 拨入会议并修改子分支以在同一个会议中移动。

      这是在 2 人之间开始通话然后将其升级为会议的详细流程

      (1) 创建一个 TwiML 响应 API 以在会议中拨打电话(基于适合您的业务逻辑)。这是一个简单的 TwiML 示例 (http://www.mocky.io/v2/584ac0f81000002b14fb0205)

      <Response>
      <Dial>
      <Conference>letItGoSimple</Conference>
      </Dial>
      </Response>
      

      (2) 当您发起呼叫时,您的 Url 参数应设置为返回 TwiML,如下所示(例如 Twiml:http://www.mocky.io/v2/584ac8a3100000c914fb0214

      <Response>
      <Dial action="http://www.mocky.io/v2/584ac0f81000002b14fb0205" method="GET">
      <Number>+44xxxxxxxx</Number>
      </Dial>
      </Response>
      

      请注意,action 网址已从第一步设置为 TwiML。这在此流程中非常重要,因为这将防止您在修改呼叫的子分支时掉线。

      (3) 执行步骤2后,双方直接通话(无会议)

      (4) 当您想将呼叫升级为会议时,POST 到子呼叫 SID 并将 Url 设置为 Twiml To Dial into meeting ,

      Example : 
      curl -XPOST https://api.twilio.com/2010-04-01/Accounts/ACxxxxxxxxxxxx/Calls/CAyyyyyyyyyyyyyy -d "Url=http://www.mocky.io/v2/584ac0f81000002b14fb0205" -d "Method=GET"  -u ‘accountSID:authToken'
      

      修改调用的子分支很重要。

      (5) 这是执行第 4 步时会发生的情况

      • 子呼叫将被重定向到 URL 并被拨入会议
      • 家长电话将转为行动,并将在同一会议中拨打

      希望这会有所帮助。

      【讨论】:

      • 但是不是每次被叫挂机都会向action url发送请求吗?您能否使用 DialCallStatus 参数来确定通话是否因被叫方拨入会议而结束?
      • 非常感谢 @am1704 在答案的步骤 5) 中添加解释。文档中的这一点信息并不完全清楚,并且是我根据我的情况进行这项工作所需的帮助。
      • @siannopollo 很高兴你发现它有用!
      • 很棒的帖子。谢谢。 def 帮助了我们。没有找到有关此问题的其他文档。问题:我们如何在整个通话过程中保持相同的录音。目前,直接为1,会议部分为1。任何帮助表示赞赏。谢谢!
      【解决方案4】:

      Twilio 布道者在这里。

      因此,最好的答案是将两个电话都放入会议开始。它有点困难,因为您必须使用 API 来启动第二条腿,但它为您提供了更大的灵活性来移动呼叫腿。

      如果那不可能,那么它会变得更具挑战性,因为今天没有很好的方法来获取第二个调用的 SID。您可能需要做的是使用 REST API 中的 Calls list resource 来查找第二次调用的 SID。您可以使用list filter parameters ToStatus 来查找特定的呼叫。一旦你有了第二段的呼叫资源,它就会包含一个名为 parent_call_sid 的参数,它是原始传入呼叫的​​ SID。

      现在您拥有两个呼叫段的 SID,您可以使用 REST API 到 redirect both calls 到返回包含 &lt;Conference&gt; 名词的 TwiML 的新语音 URL。

      希望对您有所帮助。

      【讨论】:

      • 当我将呼入呼叫更新为会议一时,它会结束呼出呼叫,如果我将呼出呼叫更新为会议一,它会结束呼入呼叫,如何同时更新两个呼叫?
      • Devin,所以发起呼叫的始终是父母,谁接听的是孩子 SID?谢谢!
      • @Brayan,正确的。来电被认为是“父母”,而通过&lt;Dial&gt; 动词发出的去电是“孩子”
      • 我想知道在过去的几年里是否有任何关于这种情况的更新。上述蒂莫所说的是正确的,也是一个问题。如果您在两个呼叫者之间建立了使用 Dial 动词的呼叫,并且这些呼叫者希望添加一方,则需要先将他们转移到会议室。但是,当第一方被移动到会议室时,另一方(无论是哪一方)立即断开连接。
      • @KeithB,请看我下面的回复。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-09
      • 1970-01-01
      • 1970-01-01
      • 2022-10-05
      • 1970-01-01
      • 2021-04-17
      相关资源
      最近更新 更多