Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Twilio-如何将现有呼叫移动到会议_Twilio_Conference - Fatal编程技术网

Twilio-如何将现有呼叫移动到会议

Twilio-如何将现有呼叫移动到会议,twilio,conference,Twilio,Conference,使用twilio,在现有通话中(两段通话-主叫通话和被叫通话),我想将通话转移到会议室。双腿都必须进入房间 如何在不失去一条腿或另一条腿的情况下桥接两条腿 多谢各位 向这里的Twilio福音传道者致意 所以最好的答案就是把两个电话都放到一个会议上开始。这有点困难,因为您必须使用API来启动第二个分支,但它为您提供了更大的灵活性来移动调用分支 如果这是不可能的,那么它会变得更具挑战性,因为现在没有一个很好的方法来获得第二次呼叫的SID。您可能需要做的是在RESTAPI中使用查找第二个调用的SID。

使用twilio,在现有通话中(两段通话-主叫通话和被叫通话),我想将通话转移到会议室。双腿都必须进入房间 如何在不失去一条腿或另一条腿的情况下桥接两条腿

多谢各位


向这里的Twilio福音传道者致意

所以最好的答案就是把两个电话都放到一个会议上开始。这有点困难,因为您必须使用API来启动第二个分支,但它为您提供了更大的灵活性来移动调用分支

如果这是不可能的,那么它会变得更具挑战性,因为现在没有一个很好的方法来获得第二次呼叫的SID。您可能需要做的是在RESTAPI中使用查找第二个调用的SID。您可以使用To和Status查找特定呼叫。拥有第二段的呼叫资源后,它将包含一个名为parent_call_sid的参数,该参数是原始传入呼叫的sid

现在您已经有了两个调用分支的SID,您可以使用RESTAPI来创建新的语音URL,这些URL返回包含
名词的TwiML


希望这能有所帮助。

防止电话掉线的诀窍是使用父分支的“操作”url拨入会议,并修改子分支以在同一会议中移动

下面是两人之间开始通话的详细流程,然后将其升级为会议

(1) 创建TwiML响应API以在会议中拨打电话(基于适合您的业务逻辑)。下面是一个简单的示例TwiML()

修改调用的子段非常重要

(5) 下面是执行步骤4时将发生的情况

  • 子呼叫将重定向到Url,并将拨入会议
  • 家长电话将转到行动,并将在同一会议中拨打
希望这有帮助

Twilio的员工在这里

为了补充am1704的答案,同一主题的一个变体是在
之后使用
动词:


+44xxxxxxxx
http://www.mocky.io/v2/584ac0f81000002b14fb0205
将子呼叫移动到会议后,TwiML将继续使用
后面的动词


这两种技术都需要了解调用状态。在某些调用中,所需的下一步可能是
。在其他情况下,您可能希望将父分支转移到会议上。

此线程很有帮助,但有一个建议需要补充am1704所说的内容-

如果要避免使用action=am1704方法,还可以移动子分支,然后使用第二个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);

  });
}
var ACCTSID=process.env.ACCTSID;//Twilio帐户SID
var AUTHTOKEN=process.env.AUTHTOKEN;//Twilio身份验证令牌
var请求=要求(“请求”);
函数parentFunction(){//更新正在进行的调用以将其移动到会议
console.log('参数:'+parent);//log参数
SID=parent.SID;console.log('SID to add to conf:'+SID);//父调用的SID
end=parent.end;console.log('退出时结束调用:'+end)//退出时结束会议-true或false
xml=''+key+'';console.log('xml:'+xml);//xml
formData={
Twiml:xml
}
选项={
方法:“POST”,
认证:{
用户:ACCTSID,
通行证:AUTHTOKEN
},
网址:'https://api.twilio.com/2010-04-01/Accounts/“+ACCTSID+”/Calls/“+SID+'.json”,
标题:
{ 
“缓存控制”:“无缓存”,
“内容类型”:“文本/普通”
},
form:formData//您的有效负载
};
请求(选项、功能(错误、响应、正文){
如果(错误)抛出新错误(错误);
log('的响应主体:'+SID+':'+body);
});
}

当我将呼入呼叫更新为会议1时,它将结束呼出呼叫,如果我将呼出呼叫更新为会议1,它将结束呼入呼叫,我如何可以同时更新两个呼叫?Devin,那么谁开始呼叫始终是父级,谁接收是子级SID?谢谢@布莱恩,对。传入呼叫被视为“家长”,通过
动词发出的传出呼叫被视为“孩子”。我想知道在过去几年中,是否有任何关于这种情况的更新。Timo上面所说的是正确的,这是一个问题。如果您在两个呼叫者之间建立了一个拨号动词呼叫,并且这些呼叫者希望添加一个参与方,则需要首先将其移动到会议室。但是,当第一方移动到会议室时,另一方(无论是哪一方)会立即断开连接。@KeithB,请参阅下面的我的响应。但是,不是每次被叫方挂断时都会向操作url发送请求吗?您能否使用DialCallStatus参数来确定呼叫是否因为被叫方被拨入会议而结束?非常感谢@am1704在回答的第5)步中添加了解释。文档中的这一点信息并不完全清楚,我需要它来帮助我解决我的问题。@Siannopolo很高兴你发现它很有用!棒极了。谢谢def帮助了我们。未找到有关此问题的其他文档。问题:我们如何在整个通话过程中保持相同的录音。目前,直接部分为1,会议部分为1。谢谢你的帮助。谢谢我们如何利用对通话状态的了解来决定是挂断电话还是将上级分支拨入会议?您需要知道来电者的意图。由d
<Response>
<Dial action="http://www.mocky.io/v2/584ac0f81000002b14fb0205" method="GET">
<Number>+44xxxxxxxx</Number>
</Dial>
</Response>
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'
<Response>
  <Dial>
    <Number>+44xxxxxxxx</Number>
  </Dial>
  <Redirect method="GET">http://www.mocky.io/v2/584ac0f81000002b14fb0205</Redirect>
</Response>
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);

  });
}