Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于虚拟呼叫中心的Twilio IVR_Twilio_Twilio Twiml - Fatal编程技术网

用于虚拟呼叫中心的Twilio IVR

用于虚拟呼叫中心的Twilio IVR,twilio,twilio-twiml,Twilio,Twilio Twiml,我需要为虚拟呼叫中心创建一个Twilio IVR,其中包含一些基本请求 传入呼叫连接并请求呼叫者的输入 根据数字输入或语音输入,将创建到代理的出站呼叫。这可以是同时呼叫,也可以是通过TaskRouter的先进先出 呼叫需要进行机器检测或收集输入,以确保代理连接。主要目的是避免使用答录机,因为虚拟代表可能会忽略个人虚拟机接听的电话 如果在超时时间内没有代理连接,则将入站呼叫直接发送到语音邮件,语音邮件将被转录并通过电子邮件发送到组电子邮件 最初,我们通过OpenVBX提供了一个解决方案,尽管我不认

我需要为虚拟呼叫中心创建一个Twilio IVR,其中包含一些基本请求

  • 传入呼叫连接并请求呼叫者的输入
  • 根据数字输入或语音输入,将创建到代理的出站呼叫。这可以是同时呼叫,也可以是通过TaskRouter的先进先出
  • 呼叫需要进行机器检测或收集输入,以确保代理连接。主要目的是避免使用答录机,因为虚拟代表可能会忽略个人虚拟机接听的电话
  • 如果在超时时间内没有代理连接,则将入站呼叫直接发送到语音邮件,语音邮件将被转录并通过电子邮件发送到组电子邮件
  • 最初,我们通过OpenVBX提供了一个解决方案,尽管我不认为这是支持(而且Twilio平台已经有了改进,从而产生了新的解决方案)。我尝试只使用Twilio托管的平台(StudioFlow)和函数

    下面是当前通向TaskRouter的StudioFlow流。然后,TaskRouter工作流将调用我尝试用于连接到排队调用方的函数

    TaskRoute工作流回调为:/assignment

    exports.handler = function(context, event, callback) {
        const taskAttributes = JSON.parse(event.TaskAttributes),
            workerAttributes = JSON.parse(event.WorkerAttributes),
            client = context.getTwilioClient();
    
        client.calls.create({
            machineDetection: 'Enable',
            url: 'https://' + context.DOMAIN_NAME + '/agent-response?ReservationSid='+event.ReservationSid+'&TaskSid='+event.TaskSid,
            from: taskAttributes.called,
            to: workerAttributes.contact_uri
        });
    };
    
    然后是/agent响应

    exports.handler = function(context, event, callback) {
        var status = '';
        console.log(JSON.stringify(event));
    
        if (event.AnsweredBy !== 'machine_start') {
            status = 'accepted';
        }
    
        if (status == 'accepted') {
            return callback(null, {
                'instruction': 'dequeue',
                'post_work_activity_sid': '<AVAILABLE-SID>'
            });
        } else {
            return callback(null,{
                'instruction': 'reject'
            });
        }
    };
    
    exports.handler=函数(上下文、事件、回调){
    var状态=“”;
    log(JSON.stringify(event));
    如果(event.AnsweredBy!=“机器启动”){
    状态='已接受';
    }
    如果(状态==“已接受”){
    返回回调(null{
    “指令”:“出列”,
    “工作后活动”sid:“”
    });
    }否则{
    返回回调(null{
    “说明”:“拒绝”
    });
    }
    };
    
    因此,当前呼叫通过机器检测发送给代理。我无法确定如何将出站代理调用与排队的TaskRouter调用进行出列/连接

    是否有人有1)如何更有效地执行此操作的建议和/或2)如何连接到排队的入站sid


    谢谢

    这里有一个方法,我可以看到您的修复:

    1) 您不需要使用
    任务路由工作流回调is:/assignment
    。您可以在工作流配置页面上设置所有需要的内容:

    2) 一旦您将呼叫排入正确的队列,您将使用代理的预订(您可以阅读更多信息)

    //在这里使用会议,但您可以使用出列或呼叫

    一些呼叫配置设置

    3) 最后一步是使用Twilio.Device(您可以阅读完整规范)通过以下方式获取并启动此调用:

    Twilio.Device.incoming(function (conn) {
                    // accept the incoming connection and start two-way audio
                    conn.accept();
            });
    

    如果您在建立Twilio呼叫中心方面需要更多支持,请告诉我。

    谢谢尼古拉!TaskRouter已在处理预订创建和分配。我之所以这样说,是因为我可以创建任务路由器工作流回调,以响应“出列”,从而使代理“接受”任务并连接到调用者。此方法不验证代理是否未将呼叫者发送到个人语音邮件。我们的目标是在创建和分配预订后创建一个呼叫,该呼叫启用了机器检测,拒绝语音邮件应答的任务,或者在连接到预订之前从代理收集输入。
    在连接到预订之前从代理收集输入的呼叫
    -什么您想使用哪种输入?例如,当代理单击
    Available
    按钮并将代理activitySid设置为特定于获取呼叫时,我对仅将呼叫分配给代理进行了逻辑设置。然后我们使用工作流表达式将呼叫仅与准备好接听呼叫的代理连接。在传入呼叫上创建出站呼叫对我来说是不必要的,也是浪费金钱,但可能我不知道整个想法。
                    "IDLE ActivitySid",
                    undefined,
                    `client:${Current Agent Client Key}`,
                    undefined,
                    {
    
                    }); 
            });
    
    Twilio.Device.incoming(function (conn) {
                    // accept the incoming connection and start two-way audio
                    conn.accept();
            });