Twilio,如何取消保持通话
Twilio,How to unhold the call
我需要帮助 call.I 已经尝试了两种方法。
1。当我按下保持按钮时使用排队动词我有用户更新调用方法
<Response>
<Enqueue waitUrl="urltoplaytheholdmusic">1111</Enqueue>
</Response>
(当我按下取消保持按钮时,我使用了相同的更新方法并使用了。)
<Response>
<Queue >1111</Queue>
</Response>
但是当使用队列动词调用时会断开连接。
2。所以我尝试了另一种方式,当我按下保持按钮时只播放音乐。
<Response><Say>We are putting you on hold Please wait!</Say><Play loop="0">https://api.twilio.com/cowbell.mp3</Play></Response>
现在我不知道该怎么做才能取消通话。
问题:reference question
这就是我所做的。
当我打电话时,我为此使用了 js liberay 并使用了这个函数
function call(dial_number, from_phone) {
params = {
"to_phone": to_phone,
"from_phone": from_phone,
"from_id": current_user_id,
"to_id": user_id
};
connection = Twilio.Device.connect(params);
connection._onAnswer = function(conn) {
console.log(conn.callsid);
/*get parentcall sid when make the call*/
Sid = {
parent_callSid: conn.callsid,
type: 'outgoing'
};
};
}
为了保持通话我使用了这行代码
function holdaction() {
jQuery.ajax({
url: 'url',
type: 'POST',
data: 'sid=' + parentSid + '&admin_no=' + encodeURIComponent(jQuery('#twilio_from_number').val()) + '&action=' + hold_action,
dataType: 'json',
success: function(data) {}
});
}
这通过使用我的数据库中的父呼叫 ID 来获取呼叫 ID 调用此函数以保持呼叫
function update_call($callSid, $action, $admin_no = '') {
$rr = array(
"url" => "holdactionurl?type=".$action.
'&admin_no='.$admin_no,
"method" => "POST"
);
$call = $this->client->calls($callSid)->update($rr);
return $call->to;
}
我在 holdactionurl 上使用了这个-
<Response>
<Enqueue waitUrl="wait_url">first_queue</Enqueue>
</Response>
在 wait_url 我用过这个-
<Response>
<Say>You are on hold </Say>
<Redirect>wait_url</Redirect>
</Response>
为了取消保持呼叫,我(表示保持呼叫的同一号码)使用相同的 holdaction 方法,但参数不同,xml代码是-
<Response>
<Dial>
<Queue>first_queue1</Queue>
</Dial>
</Response>
我知道我做错了,但我想不出正确的方法,所以如果你能帮我弄清楚我做错了什么,我将不胜感激
此处为 Twilio 开发人员布道师。
感谢您在评论中回答我的问题。我想我知道我们现在在哪里。
如您所说,您已关注。在这种情况下,呼叫者被放入他们所呼叫的代理唯一的队列中。与此同时,代理被重定向到一个循环(在我的示例中,它只是一遍又一遍地说 "You have a caller on hold")。
在这里的问题中,您谈到将已排队的呼叫者重定向到以下 TwiML:
<Response>
<Queue>1111</Queue>
</Response>
<Queue>
动词用于从队列外的人拨给队列中的下一个人。因此,在这种情况下,您试图让排队的呼叫者自己拨打电话,但这是行不通的。
相反,您需要对代理进行重定向,将他们引导出他们已进入的循环,并将该人叫出队列。
因此,您不会通过将呼叫者从 <Enqueue>
移动到 <Queue>
来使呼叫者出队,而是通过让其他人拨打 <Queue>
来使呼叫者出队
如果有帮助请告诉我。
更新
根据你的代码,我相信这就是正在发生的事情。
在您的服务器 update_call
功能中,您正在将呼出电话移入队列,有效地让您的座席等待。我认为这意味着另一端正在失去连接,这是你的问题。如果不是这样,请告诉我。
无论如何,我们需要做的是找到 child 调用并将其推入队列。我会拆分你的 update_call
函数来执行两件不同的事情。首先,获取 childCallSid 并将其重定向到 holdactionurl
.
function holdChildCall($parentCallSid, $action, $admin_no = '') {
$childCalls = $this->client->calls->read(array("ParentCallSid" => $parentCallSid));
$childCallSid = $childCalls[0]->sid;
$rr = array(
"url" => "holdactionurl?type=".$action.
'&admin_no='.$admin_no,
"method" => "POST"
);
$call = $this->client->calls($childCallSid)->update($rr);
return $call->to;
}
如果您现在尝试此操作,那么被叫端 child 呼叫将被重定向到您的队列,但您的呼叫者,您的代理,parent 呼叫将被切断。我们需要阻止这种情况的发生,我们可以通过调整初始 TwiML 来做到这一点。您在下面的评论表明,目前您的 TwiML 看起来像这样:
<Response>
<Dial callerId="callerid">
<Number statusCallbackEvent="initiated ringing answered completed" statusCallback="urltohadlestatus">user_number</Number>
</Dial>
</Response>
您需要在此处更新 <Dial>
,以便在 child 呼叫中断后为其提供更多 TwiML。在 <Dial>
.
之后添加重定向
<Response>
<Dial callerId="callerid">
<Number statusCallbackEvent="initiated ringing answered completed" statusCallback="urltohadlestatus">user_number</Number>
</Dial>
<Redirect>/admin_on_hold</Redirect>
</Response>
你可以随便叫url,我暂时叫它/admin_on_hold
。您需要一些 URL 的 TwiML 来保持呼叫者在线。您可以使用类似于现有保留通知的内容:
<Response>
<Say>You have a caller on hold. </Say>
<Pause length="5"></Pause>
<Redirect>wait_url</Redirect>
</Response>
现在,当您按下保持您的 child 呼叫时,被叫方将排队等待并等待一条保持消息。您的代理人,即呼叫者,parent 呼叫,也会听到一条消息,表明他们正在保留呼叫者。
现在我们需要重新连接两个来电者。为此,我们将代理呼叫 parent 呼叫重定向到 <Queue>
,这会将 child 呼叫从队列中弹出并重新连接它们。我们实际上可以为此使用现有的 update_call
函数。确保您正在传递 parent 调用 SID 和从 holdactionurl
生成 <Queue>
TwiML 的 $action
具有与您用于 <Enqueue>
相同的队列名称首先是来电者。
function update_call($parentCallSid, $action, $admin_no = '') {
$rr = array(
"url" => "holdactionurl?type=".$action.
'&admin_no='.$admin_no,
"method" => "POST"
);
$call = $this->client->calls($parentCallSid)->update($rr);
return $call->to;
}
这有意义吗?您需要确保将 child 调用 重定向到使用 <Enqueue>
的 TwiML,在 <Dial>
之后添加额外的 <Redirect>
以便你的 agent 没有挂断,然后当你取消挂断时,将 agent 呼叫 重定向到使用 <Queue>
.[=39 的 TwiML =]
我需要帮助 call.I 已经尝试了两种方法。
1。当我按下保持按钮时使用排队动词我有用户更新调用方法
<Response>
<Enqueue waitUrl="urltoplaytheholdmusic">1111</Enqueue>
</Response>
(当我按下取消保持按钮时,我使用了相同的更新方法并使用了。)
<Response>
<Queue >1111</Queue>
</Response>
但是当使用队列动词调用时会断开连接。
2。所以我尝试了另一种方式,当我按下保持按钮时只播放音乐。
<Response><Say>We are putting you on hold Please wait!</Say><Play loop="0">https://api.twilio.com/cowbell.mp3</Play></Response>
现在我不知道该怎么做才能取消通话。
问题:reference question
这就是我所做的。 当我打电话时,我为此使用了 js liberay 并使用了这个函数
function call(dial_number, from_phone) {
params = {
"to_phone": to_phone,
"from_phone": from_phone,
"from_id": current_user_id,
"to_id": user_id
};
connection = Twilio.Device.connect(params);
connection._onAnswer = function(conn) {
console.log(conn.callsid);
/*get parentcall sid when make the call*/
Sid = {
parent_callSid: conn.callsid,
type: 'outgoing'
};
};
}
为了保持通话我使用了这行代码
function holdaction() {
jQuery.ajax({
url: 'url',
type: 'POST',
data: 'sid=' + parentSid + '&admin_no=' + encodeURIComponent(jQuery('#twilio_from_number').val()) + '&action=' + hold_action,
dataType: 'json',
success: function(data) {}
});
}
这通过使用我的数据库中的父呼叫 ID 来获取呼叫 ID 调用此函数以保持呼叫
function update_call($callSid, $action, $admin_no = '') {
$rr = array(
"url" => "holdactionurl?type=".$action.
'&admin_no='.$admin_no,
"method" => "POST"
);
$call = $this->client->calls($callSid)->update($rr);
return $call->to;
}
我在 holdactionurl 上使用了这个-
<Response>
<Enqueue waitUrl="wait_url">first_queue</Enqueue>
</Response>
在 wait_url 我用过这个-
<Response>
<Say>You are on hold </Say>
<Redirect>wait_url</Redirect>
</Response>
为了取消保持呼叫,我(表示保持呼叫的同一号码)使用相同的 holdaction 方法,但参数不同,xml代码是-
<Response>
<Dial>
<Queue>first_queue1</Queue>
</Dial>
</Response>
我知道我做错了,但我想不出正确的方法,所以如果你能帮我弄清楚我做错了什么,我将不胜感激
此处为 Twilio 开发人员布道师。
感谢您在评论中回答我的问题。我想我知道我们现在在哪里。
如您所说,您已关注
在这里的问题中,您谈到将已排队的呼叫者重定向到以下 TwiML:
<Response>
<Queue>1111</Queue>
</Response>
<Queue>
动词用于从队列外的人拨给队列中的下一个人。因此,在这种情况下,您试图让排队的呼叫者自己拨打电话,但这是行不通的。
相反,您需要对代理进行重定向,将他们引导出他们已进入的循环,并将该人叫出队列。
因此,您不会通过将呼叫者从 <Enqueue>
移动到 <Queue>
来使呼叫者出队,而是通过让其他人拨打 <Queue>
如果有帮助请告诉我。
更新
根据你的代码,我相信这就是正在发生的事情。
在您的服务器 update_call
功能中,您正在将呼出电话移入队列,有效地让您的座席等待。我认为这意味着另一端正在失去连接,这是你的问题。如果不是这样,请告诉我。
无论如何,我们需要做的是找到 child 调用并将其推入队列。我会拆分你的 update_call
函数来执行两件不同的事情。首先,获取 childCallSid 并将其重定向到 holdactionurl
.
function holdChildCall($parentCallSid, $action, $admin_no = '') {
$childCalls = $this->client->calls->read(array("ParentCallSid" => $parentCallSid));
$childCallSid = $childCalls[0]->sid;
$rr = array(
"url" => "holdactionurl?type=".$action.
'&admin_no='.$admin_no,
"method" => "POST"
);
$call = $this->client->calls($childCallSid)->update($rr);
return $call->to;
}
如果您现在尝试此操作,那么被叫端 child 呼叫将被重定向到您的队列,但您的呼叫者,您的代理,parent 呼叫将被切断。我们需要阻止这种情况的发生,我们可以通过调整初始 TwiML 来做到这一点。您在下面的评论表明,目前您的 TwiML 看起来像这样:
<Response>
<Dial callerId="callerid">
<Number statusCallbackEvent="initiated ringing answered completed" statusCallback="urltohadlestatus">user_number</Number>
</Dial>
</Response>
您需要在此处更新 <Dial>
,以便在 child 呼叫中断后为其提供更多 TwiML。在 <Dial>
.
<Response>
<Dial callerId="callerid">
<Number statusCallbackEvent="initiated ringing answered completed" statusCallback="urltohadlestatus">user_number</Number>
</Dial>
<Redirect>/admin_on_hold</Redirect>
</Response>
你可以随便叫url,我暂时叫它/admin_on_hold
。您需要一些 URL 的 TwiML 来保持呼叫者在线。您可以使用类似于现有保留通知的内容:
<Response>
<Say>You have a caller on hold. </Say>
<Pause length="5"></Pause>
<Redirect>wait_url</Redirect>
</Response>
现在,当您按下保持您的 child 呼叫时,被叫方将排队等待并等待一条保持消息。您的代理人,即呼叫者,parent 呼叫,也会听到一条消息,表明他们正在保留呼叫者。
现在我们需要重新连接两个来电者。为此,我们将代理呼叫 parent 呼叫重定向到 <Queue>
,这会将 child 呼叫从队列中弹出并重新连接它们。我们实际上可以为此使用现有的 update_call
函数。确保您正在传递 parent 调用 SID 和从 holdactionurl
生成 <Queue>
TwiML 的 $action
具有与您用于 <Enqueue>
相同的队列名称首先是来电者。
function update_call($parentCallSid, $action, $admin_no = '') {
$rr = array(
"url" => "holdactionurl?type=".$action.
'&admin_no='.$admin_no,
"method" => "POST"
);
$call = $this->client->calls($parentCallSid)->update($rr);
return $call->to;
}
这有意义吗?您需要确保将 child 调用 重定向到使用 <Enqueue>
的 TwiML,在 <Dial>
之后添加额外的 <Redirect>
以便你的 agent 没有挂断,然后当你取消挂断时,将 agent 呼叫 重定向到使用 <Queue>
.[=39 的 TwiML =]