【问题标题】:Twilio IVR for Virtual Call Center用于虚拟呼叫中心的 Twilio IVR
【发布时间】:2020-05-26 08:58:59
【问题描述】:

我需要为带有一些基本请求的虚拟呼叫中心创建 Twilio IVR。

  1. 来电连接并请求主叫方输入。
  2. 根据数字输入或语音输入,创建到代理的出站呼叫。这可以是同时调用或通过 TaskRouter 先进先出。
  3. 呼叫需要有机器检测或收集输入以确保代理连接。主要目的是避免应答机,因为虚拟代表可能会忽略导致个人 VM 接听的呼叫。
  4. 如果在超时时间内没有座席连接,则将入站呼叫定向到语音邮件,语音邮件会被转录并通过电子邮件发送到群组电子邮件。

最初我们通过 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-response

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'
        });
    }
};

因此,当前呼叫会通过机器检测发送给代理。我无法弄清楚如何将出站代理调用与排队的 TaskRouter 调用出列/连接。

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

谢谢!

【问题讨论】:

    标签: twilio twilio-twiml


    【解决方案1】:

    这是一种方法,我如何才能看到你的修复:

    1) 您不需要使用TaskRoute Workflow callback is: /assignment。您可以在工作流配置页面上设置所有需要的东西:

    2) 将呼叫排入正确队列后,您将使用 Reservations for agent(您可以阅读更多相关信息here

    worker.on("reservation.created", function (reservation) {
    
                reservation.conference(reservation.task.attributes.from, 
    

    // 此处使用会议,但您可以使用 Dequeue 或 Call 代替。

                    "IDLE ActivitySid",
                    undefined,
                    `client:${Current Agent Client Key}`,
                    undefined,
                    {
    

    一些通话配置设置

                    }); 
            });
    

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

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

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

    【讨论】:

    • 谢谢尼古拉! TaskRouter 已经在处理预留创建和分配。我这样说是因为我可以创建任务路由器工作流回调来响应“出队”,从而导致代理“接受”任务并连接到调用者。此方法不会验证代理是否将呼叫者发送到个人语音信箱。目标是在创建和分配预留后创建呼叫,启用机器检测以拒绝通过语音邮件应答的任务,或者在连接到预留之前从代理收集输入的呼叫。
    • call that gathers an input from the agent prior to connecting to the reservation - 你想使用什么样的输入?例如,当代理单击Available 按钮并将代理activitySid 设置为特定于接听电话时,我制定了仅将呼叫分配给代理的逻辑。然后我们使用 Workflow 表达式将呼叫仅与准备接听电话的座席联系起来。
    • 在来电时创建呼出电话对我来说看起来没有必要而且浪费金钱,但也许我不知道整个想法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-12
    相关资源
    最近更新 更多