【问题标题】:Calling at the users at once and disconnect other calls if any one of the user receives the call如果任何一个用户接到呼叫,立即呼叫用户并断开其他呼叫
【发布时间】:2021-08-19 21:38:07
【问题描述】:

我想拥有使用 twilio 的循环呼叫功能。

让我们说。我有 100 个用户和他们的电话号码。

我想同时给他们打电话。

然后,无论第一个人接到电话,我都会将该电话连接到我的销售部门,并立即切断或断开其他电话。

我通过 twiML 知道我可以拨打我的销售团队,并且我还知道我可以检查正在进行的事件以查看呼叫是否已连接。

但是,我坚持同时呼叫所有用户,并在第一个用户连接到呼叫后断开连接,这是我的第一步。

我正在做更多更新,因为我的场景发生了一些变化。

在这种情况下,我首先打电话给填写了我的潜在客户表单的用户。一旦主要用户接到电话,我将致电销售团队的 10 名座席,但我想跟踪哪个座席收到了主导电话,并希望将座席信息保存到我的数据库中并切断其他呼叫。

在我的计数器中

<?php

namespace App\Http\Controllers;

use App\Listing;
use App\User;
use Illuminate\Http\Request;
use Twilio\Rest\Client;
use Twilio\TwiML\VoiceResponse;
use Twilio\Twiml;


class TwilioController extends Controller
{
    public function leadCall(Request $request)
    {
        // Lead user
        $lead = Lead::where('id', $request->lead_id)->first();
    
        $country_code = "+1";
        $visitor_phone = $country_code . $lead->details_phone;
        $url = "https://www.samplewebsite.com/outbound?multi_call=true";

        // Twilio Credentials
        $AccountSid = 'xyz';
        $AuthToken = 'xyz';
        
        $twilio_number = "123";

        $client = new Client($AccountSid, $AuthToken);

        
    
        // Calling the lead visitor first
        try {
            $call = $client->account->calls->create($visitor_phone, $twilio_number,
                array(
                    "url" =>  $url
                )
            );
        } catch (Exception $e) {
            echo "Error: " . $e->getMessage();
        }

    }

    if($request->multi_call)
    {
        // Fetch 10 agents
        $users = User::all()->take(10);

        // Calling Twilio
        $twiml = new VoiceResponse();
        $twiml->say('Please hold, we are connecting your call to one of our agent.', array('voice' => 'alice'));
        
        $dial = $twiml->dial();
        
        foreach ($users as $user) {
            if($user->phone && $user->live_call)
            {
                $dial->number($user->phone,
                ['statusCallbackEvent' => 'answered',
                'statusCallback' => 'https://www.samplewebsite.com/outbound?agent_call=true',
                'statusCallbackMethod' => 'GET']);
            }
        }


        $response = response()->make($twiml, 200);
        $response->header('Content-Type', 'text/xml');
        return $response;
    }

    if($request->agent_call)
    {
        return "Call was made to: " . $request->to;
    }


}

这就是我目前所做的

在路由文件中

Route::post('lead-call', 'TwilioController@leadCall')->name('leadCall');

Route::get('outbound', 'TwilioController@outboundMultiCall');

和 TwiML 共鸣

<Response>
<Say voice="alice">Please hold, we are connecting your call to one of our agent.</Say>
<Dial>
<Number statusCallbackEvent="answered" statusCallback="https://www.samplewebsite.com/outbound?agent_call=true" statusCallbackMethod="GET">xxx-xxx-xxxx</Number>
<Number statusCallbackEvent="answered" statusCallback="https://www.samplewebsite.com/outbound?agent_call=true" statusCallbackMethod="GET">xxx-xxx-xxxx</Number>
<Number statusCallbackEvent="answered" statusCallback="https://www.samplewebsite.com/outbound?agent_call=true" statusCallbackMethod="GET">xxx-xxx-xxxx</Number>
</Dial>
</Response>

我有两个问题。当我在 webhook 中添加像 multi_call=true 这样的 get 参数时,我得到应用程序错误。所以我不能给我的代理拨打 10 次电话。

另外我想跟踪哪个用户首先参加了电话会议,以便我可以维护到我的数据库并提高他们的评分。

谢谢

【问题讨论】:

  • 到目前为止你尝试过什么?什么有效,什么无效?
  • @philnash up 能够呼叫一位用户并连接到我的销售团队。我已经更新了我的问题。如果有任何一个用户接听电话,我就会同时打电话给用户并断开所有其他电话。

标签: laravel twilio twilio-php


【解决方案1】:

这里是 Twilio 开发者宣传员。

首先,我只需要警告您,默认情况下 Twilio 帐户有一个 limit of creating 1 call per second,因此对于任何代码,您的调用仍将按顺序放置。

如果您可以拨打一个电话,那么您一次可以拨打多个电话。您需要遍历要拨打电话的号码,并为要创建的每个电话发出 API 请求。

下一部分是在一个呼叫连接后取消其他呼叫。创建调用时,您将收到来自 API 的带有调用 SID 的响应。一旦您的第一个呼叫连接,您将收到一个指向您的应用程序的 webhook。参数将包括呼叫 SID。因此,要取消其他呼叫,您需要从您创建的呼叫 SID 列表中删除已连接的呼叫,然后拨打API calls to update the the other calls to the "completed" status,这将挂断呼叫。

编辑:

我看到您首先连接出站呼叫,然后使用 TwiML 进行多拨号。这应该可行,只是你做错了几件事。

首先,您在&lt;Dial&gt; 中使用多个&lt;Dial&gt;s 而不是多个&lt;Number&gt;s 来进行多重调用。请尝试以下操作:

    public function outboundMultiCall(Request $request)
    {
        if($request->multi_call)
        {
            // Fetch 10 agents
            $users = User::all()->take(10);

            // Calling Twilio
            $twiml = new VoiceResponse();
            $twiml->say('Please hold, we are connecting your call to one of our agent.', array('voice' => 'alice'));
            
            $dial = $twiml->dial();
            
            foreach ($users as $user) {
                $dial->number($user->phone);
            }

            $response = response()->make($twiml, 200);
            $response->header('Content-Type', 'text/xml');
            return $response;
        }

        return 'Some other action based on GET URL paramter';
    }

其次,Twilio webhook 默认是POST 请求。所以,你应该把你的路线变成POST

Route::post('outbound', 'TwilioController@outboundMultiCall');

或者,您可以在创建调用时传递method 参数:

$call = $client->account->calls->create($visitor_phone, $twilio_number,
    array(
        "url" =>  $url,
        "method" => "GET"
    )
);

最后,要记录谁接听了电话,您可以使用statusCallback URL attribute on the &lt;Number&gt;。当调用转换到新状态时,Twilio 将发送一个 webhook。 The events 是“已启动”、“正在响铃”、“已应答”和“已完成”。 webhook 将包含所有正常的voice call parameters,因此您可以使用To 参数来判断呼叫的对象。还有extra parameters,可能有用。

【讨论】:

  • 我的场景发生了一些变化。这次我先打电话给我的主要用户,然后再打电话给我的 10 个代理。其中一个收到它然后断开其他呼叫。但我想跟踪哪个代理收到了电话。
  • 您在构建该功能时遇到了什么问题?
  • 我已将我的代码添加到帖子中,以便更容易看到我在这里做错了什么。我相信我很接近,但不确定这里出了什么问题。
  • 让我知道您对此的看法。我已经发布了我的代码
  • 感谢分享您的代码@Jonib,我已经更新了我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-24
  • 1970-01-01
  • 1970-01-01
  • 2012-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多