我正在努力实现在两个客户端之间转移入站呼叫。 Twilio教程尽可能提供信息,但我无法获得如何将入站客户呼叫从一个客户端转移到另一个客户端。
这是我的控制器处理入站呼叫的方法的简化示例。
public function inbound(): Twiml
{
$this->twiml->dial()->client('publishers');
return $this->twiml;
}
而且效果很好。但是当代理按“转接呼叫”时出现麻烦 - 不知何故呼叫者与呼叫断开连接并且两个客户端相互连接。
这是一种更新当前呼叫的方法。
public function redirect(Request $request)
{
$input = $request->all();
$sid = "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
$token = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
$client = new Client($sid, $token);
$client
->calls($input['CallSid'])
->update(array(
"method" => "POST",
"url" => "https://some-api.ngrok.io/api/connect"
)
);
}
这是为Twilio返回新的TwiML指令的方法
public function connect(): Twiml
{
$this->twiml->dial()->client('collectors');
return $this->twiml;
}
我究竟做错了什么?非常感谢任何建议。
Twilio开发者传道者在这里。
在Twilio呼叫中,每个呼叫有两条腿,每条腿在Twilio和电话/客户端之间。
当您更新呼叫时,您正在发送座席呼叫的callSid,然后使用新的TwiML更新呼叫,从而连接您的两个座席。
相反,由于呼叫是由传入呼叫者发起的,因此您需要找到父呼叫SID。您可以通过fetching your current call from the API并使用呼叫的parent_call_sid
属性来更新原始来电。
尝试这样的事情:
public function redirect(Request $request)
{
$input = $request->all();
$sid = "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
$token = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
$client = new Client($sid, $token);
$call = $client
->calls($input['CallSid'])
->fetch()
$client
->calls($call->parentCallSid)
->update(array(
"method" => "POST",
"url" => "https://some-api.ngrok.io/api/connect"
)
);
}