4

我没有从 Twilio 文档中找到明确的答案。我正在尝试构建一个电话系统,该系统可以在通话时将对方置于保持状态,并且只能通过电话进行。示例:有两个特工在外地和我一起工作。我在手机上(远离电脑)接到一个电话,发现另一个座席需要与我正在通话的人通话。我希望能够在电话中输入一些东西,可以直接将对方转接给座席,或者将他们排在队列中。然后我可以打电话给另一个代理,他可以从队列中取回这个人。所有这些都需要通过我们的手机来完成。

我已经找到了一些关于此的文档,但似乎都要求我在电脑前,这是不可能的。

Twilio 甚至可以做到这一点吗?

4

2 回答 2

5

Twilio 布道者在这里。

这听起来可能是使用 some <Conference>s的好地方。

让我们在您的场景中定义参与者:Agent1、Agent2、Field。

假设 Field 调用 Agent1。<Dial>您可以将这两者直接与 a 连接起来,而不是直接将其连接<Dial>到 a <Conference>(我们称之为 ConferenceA),然后使用 REST API 发起对 Agent1 的出站调用。当他们回答<Dial>他们时,他们变成了相同的<Conference>。系统将需要获取 Agent1 和 Field 的 CallSid 以及 的 Sid,将<Conference>它们保存在某种类型的存储中以供以后使用。

<Conference>在这种情况下,您可以更灵活地独立操作呼叫的每个分支,而不是使用连接<Dial>Field 和 Agent1。

所以现在 Agent2 调用 Field。Agent2 将经历相同的过程,只是相反。Agent2 将被拨入<Conference>(我们称之为 ConferenceB),您的系统将使用 REST API 来调用 Field。当 Field 回答时,他们会被<Dial>编入与 Agent2 相同的会议。同样,系统将需要同时获取 Agent2 和 Field 的 CallSid,以及 的 Sid,将<Conference>它们保存在某种类型的存储中以供以后使用。

现在,Field 需要一种方法来告诉系统将 Agent2 与 Agent1 连接起来。为此,您可以<Dial>在将 Field 拨入 ConferenceB 时使用 TwiML 中的 s hangupOnStar 属性。<Dial>动词看起来像:

<Dial hangupOnStar="true" action="[process_hangup_url]">
    <Conference>ConferenceB</Conference>
</Dial>

hangupOnStar 告诉 Twilio 断开呼叫者(字段)与他们编辑的任何人(会议)的连接,但仍向动词操作属性<Dial>中定义的 URL 发出请求。<Dial>这很重要,因为当 Field 需要告诉系统将 Agent2 重定向到与 Agent1 的 ConferenceA 时,并且对 s action 属性中的 URL 的请求使系统有机会提示 Field 看他是否想要这样做。所以你可能会让 Twilio 像这样执行一些 TwiML:

<Response>
    <Gather action=[gather_handler]>
        <Say>Press 1 to connect this caller to another<Say>
    </Gather>
</Response>

如果 Field 按 1,则系统(知道此处涉及的所有各方的所有 CallSid 以及会议 sid)可以使用 REST API 将代理 2 从 ConferenceB 重定向到 ConferenceA。

它使系统变得更加复杂,但它应该适合您。

希望有帮助

于 2013-07-11T01:19:00.957 回答
0
Redirect an incoming call to new url:    

<?php
 // Get the PHP helper library from twilio.com/docs/php/install
 require_once '/path/to/vendor/autoload.php'; // Loads the library
 use Twilio\Rest\Client;
 // Your Account Sid and Auth Token from twilio.com/user/account
 $sid = "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
 $token = "your_auth_token";
 $client = new Client($sid, $token);
 // Get an object from its sid. If you do not have a sid,
 $call = $client
    ->calls("CAe1644a7eed5088b159577c5802d8be38")
    ->update(
        array(
            "url" => "your_url/test.xml",
            "method" => "POST"
        )
    );

 echo $call->to;

 XML Code: 
 ---------
 <Response>
    <Redirect method="POST">url goes here</Redirect>
 </Response>
于 2017-05-25T12:56:05.747 回答