我正在使用Twilio.Device Js构建自动拨号器

时间:2019-03-16 19:47:36

标签: javascript php jquery twilio

我正在用twilio构建自动拨号器,但有点麻烦。我成功地从浏览器中接到了2个出站呼叫,当第一个挂断或忙碌时,第二个挂断了。但是我想在我的sql Db中实现来自电话阵列的许多呼叫的实现。

这是我的代码-我首先连接到twilio并获得令牌,然后使用php代码对数据库进行AJAX调用来制作一系列电话,然后发出$ GetJson请求从Db拨出第一个电话和下一个电话(如果存在),最后我启动了一个twilio.device.connect,当第一个断开连接时,第二个开始了:

status_progress.php

                /********TWILIO **********/
            $.getJSON('../../twilio/token.php').done(function (data) {
            console.log('Token: ' + data.token);
            console.log('Identity: ' + data.identity);

            // Setup Twilio.Device
            Twilio.Device.setup(data.token);

            Twilio.Device.ready(function (device) {
            console.log('Twilio.Device Ready!');

            });

            Twilio.Device.error(function (error) {
            console.log('Twilio.Device Error: ' + error.message);
            });

            Twilio.Device.connect(function (conn) {
            console.log('Successfully established call!');
            });

            Twilio.Device.disconnect(function (conn) {
            console.log('Call ended.');

            });




            Twilio.Device.incoming(function (conn) {
            console.log('Incoming connection from ' + conn.parameters.From);
            var archEnemyPhoneNumber = '+12099517118';

            if (conn.parameters.From === archEnemyPhoneNumber) {
            conn.reject();
            console.log('It\'s your nemesis. Rejected call.');
            } else {
            // accept the incoming connection and start two-way audio
            conn.accept();
            }
            });



            //setClientNameUI(data.identity);
            })
            .fail(function () {
            console.log('Could not get a token from server!');
            });




            // Bind button to hangup call
            document.getElementById('closeCall').onclick = function () {
            console.log('Hanging up...');
            Twilio.Device.disconnectAll();
            };

            $("#phoneThem").live("click", function() { 

            var arr = [];
            var i =0;
            $('.checkDeal:checked').each(function () {
            arr[i++] = $(this).val();

            });

            var arr_value = JSON.stringify(arr);
            var conected = 'no';

            $.ajax({
            type: "POST",
            url: 'make_call_list.php',
            data: {arr_checked : arr_value}, // serializes the form's elements.
            success: function(calls)
            {

            $.getJSON('make_a_call.php').done(function (data) {

            var arr = data.arr;



            var params = {
            To: data.phone + '-' + data.crm

            };

            console.log('Calling ' + params.To + '...' );
            var connection = Twilio.Device.connect(params);



            connection.on('disconnect', function(conn) {
            console.log("the call has ended");
            var params2 = {
            To: data.phone_next + '-' + data.crm
            };


            console.log('Calling ' + params2.To + '...' );
            var connection_2 = Twilio.Device.connect(params2);

            });
            });





            }, // SUCCES MAKE A CALL LIST 

            });




            });

这是twiml代码:

<?php
 require_once 'twilio-php-master/Twilio/autoload.php';
 use Twilio\TwiML\VoiceResponse;

 $break = $_POST['To'];


 $break_arr = explode('-',$break);

 $prefix = '+972';

 $response = new VoiceResponse();
 $dial = $response->dial('', ['callerId' => '+972 50-225-8234']);
 $break_arr[0] = ltrim($break_arr[0] , '0');
 $break_arr[0] = $prefix.$break_arr[0] ;
 $dial->number($break_arr[0], ['statusCallbackEvent' => 'initiated 
 ringing answered completed',
 'statusCallback' => 
 'https://crm.unic.co.il/crm_test_zone/handleDialCallStatus.php? 
  crm='.$break_arr[1].'',
  'statusCallbackMethod' => 'POST']);


  echo $response;

 ?>

1 个答案:

答案 0 :(得分:0)

这里是Twilio开发人员的传播者。

您可以使用Twilio设备中的回调函数来触发下一个呼叫,而不必写代码来依次拨打所有号码。

我要做的是将要拨入的所有数字装入数组的前端。

然后,我将创建一个带有两个参数的函数。您正在拨打的号码的当前索引和号码数组。该函数将检查以确保当前索引仍在数组中,并且如果不返回(已拨出所有数字)。否则,它将生成对数组中数字的调用。它还将为该呼叫的断开连接事件设置一个侦听器。断开连接后,它将再次调用同一函数,但将索引移到1。

最后,使用初始索引0和数字数组调用该函数。像这样的东西:

const array = getArrayOfNumbers();

function dialNumber(index, array) {
  if (index > array.length) return; 

  const connection = Twilio.Device.connect({ number: array[index] });

  connection.on('disconnected', function() {
    dialNumber(index+1, array);
  });
}

dialNumber(0, array);

让我知道是否有帮助。