Twilio 将座席连接到队列中的呼叫

2024-02-07

我有 Twilio 的试用版(只允许使用 1 个电话号码)。

运行我的应用程序时,我通过 Twilio 进行身份验证。

然后,我使用我的个人电话拨打我的 Twilio 号码,该号码会自动添加到我的“支持”队列中。效果很好,可以听到等待音乐。

现在,在我的应用程序中,我想连接到队列中的呼叫。我在队列列表框上方创建了一个按钮,上面写着“连接到呼叫者”。单击时,它会执行以下 javascript:

document.getElementById('connect-to-queue-caller').onclick = function () {
    $.getJSON('/queue/connectagenttocall')
        .done(function (response) {
            log('Successfully connected to the first caller in the queue');
            log(response);
            log(JSON.stringify(response));
        })
        .fail(function (error) {
            log('Failed to connect to the first caller in the queue.');
            log(JSON.stringify(error));
        });
}

这会调用我网站上的一个端点,该端点位于此处:

public class QueueController : Controller
{
    public ActionResult ConnectAgentToCall()
    {
        var dial = new Dial();
        dial.Queue("Support");

        var response = new VoiceResponse();
        response.Say("You are being connected to the next caller in line.");
        response.Append(dial);

        var redirect = new Redirect(new Uri("http://localhost:54032/call?to=me"));
        response.Append(redirect);

        return Json(
            response,
            JsonRequestBehavior.AllowGet
        );
    }
}

我认为拥有重定向 url 会告诉 Twilio 到达该端点,并传入客户端“我”的名称。

这是 CallController:

public class CallController : Controller
{
    [HttpPost]
    public ActionResult Index(string to, string from)
    {
        var callerId = from;
        var response = new VoiceResponse();

        if (!string.IsNullOrEmpty(to))
        {
            var dial = new Dial(callerId: callerId);

            // wrap the phone number or client name in the appropriate TwiML verb
            // by checking if the number given has only digits and format symbols
            if (to.Contains("5551231234"))
            {
                //dial.Client("me");
                response.Say("You are being transferred to the support queue");
                response.Enqueue("Support");
            }
            else if (Regex.IsMatch(to, "^[\\d\\+\\-\\(\\) ]+$"))
            {
                dial.Number(to);
            }
            else
            {
                dial.Client(to);
            }

            response.Append(dial);
        }
        else
        {
            response.Say("Thanks for your call.");
        }

        return new TwiMLResult(response);
    }
}

但是,当执行所有这些操作时,它永远不会命中将来自 Twilio 的调用连接到我的 /call/index 端点(并且随后永远不会命中 javascript 中的 Twilio.Device.incoming 函数)。

我已经能够成功地拨打和接听电话。现在我只想把电话从我的队列中删除......

任何帮助表示赞赏!

EDIT:

好的,我记得在上面的过程中忘记做的一件事...实际上对 Twilio 进行 API 调用,告诉它连接到成员。

所以,我已经为此配置了服务,所以这里是更新的Controller action:

    [HttpGet]
    [Route("/queue/{queueSid}/dequeue/front")]
    public async Task<ActionResult> ConnectAgentToCall(string queueSid)
    {
        var frontMember = await _twilioQueueService.DequeueFirstMemberAsync(queueSid, "http://localhost:54032" + dequeueResponseXml);

        var dial = new Dial();
        dial.Queue("Support");

        var response = new VoiceResponse();
        response.Say("You are being connected to the next caller in line.");
        response.Append(dial);

        var redirect = new Redirect(new Uri("http://localhost:54032/call?to=me"));
        response.Append(redirect);

        return Json(
            response,
            JsonRequestBehavior.AllowGet
        );
    }

但是,我不知道该把它放在哪里MemberResource在响应中返回。另外,我不确定为该服务进行的 MemberResource.UpdateAsync 调用的 Uri 传递什么,如下所示:

    public async Task<MemberResource> DequeueFirstMemberAsync(string queueSid, string url)
    {
        return await MemberResource.UpdateAsync(
            url: new Uri(url),
            method: Twilio.Http.HttpMethod.Post,
            pathQueueSid: queueSid,
            pathCallSid: "Front"
        );
    }

因此,经过更多研究后,我现在可以使用它了。由于我已经开始赏金,我将更新对我有用的答案......

My javascript“连接代理进行呼叫”按钮不应该调用我自己的端点进行连接。这是它更改为的内容:

Twilio.Device.connect({ To: 'Support', From: 'Agent' });

然后,通过我的“呼叫”控制器将呼叫路由回,我必须在其中添加以下逻辑:

else if (to == "Support" && from == "Agent")
                {
                    response.Say("Connecting you to the first caller");
                    var queueDial = new Dial().Queue("Support");
                    response.Append(queueDial);
                }

这立即将我连接到支持队列中的我的个人手机。

顺便说一下,为了让按钮调用client支持,我必须将我的“Twiml App”名称保存到支持。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Twilio 将座席连接到队列中的呼叫 的相关文章

随机推荐

  • 如何在R中组合多个数据框列

    我有一个 csv 文件 其中包含参与者的人口统计数据 数据是从我的研究数据库 REDCap 中编码和下载的 每个种族都有自己单独的列 也就是说 每个参与者在每一列中都有一个值 如果认可则为 1 如果未认可则为 0 它看起来像这样 SubjI
  • 如何使用自定义消息 git stash 存储未跟踪的文件?

    我该如何表现git stash include untracked带有自定义消息 我试过了 git stash include untracked message Foo and git stash Foo include untracke
  • Python 的 url 请求超出了最大重试次数

    我正在尝试抓取此页面 我使用的代码是这样的 page get https www uobgroup com online rates gold and silver prices page 当我运行此代码时出现此错误 Traceback m
  • Sharpssh 目录列表

    我正在编写一个应用程序 允许我从远程服务器上传和下载文件 我使用 sftp 作为传输协议 我需要将所有文件和目录列出到列表视图中 我使用 Sharpssh 作为 sftp 有人能指出我正确的方向吗 感谢转发 巴斯 范 乌延 Sftp sft
  • Android:前台服务与wakeLock

    我对 Android 比较陌生 所以我问的问题可能看起来很明显 尽管我已经阅读了所有类似标题的问题 并且进行了广泛的搜索 我需要长时间连续监控加速度计 建议采用两种方法 1 获取在加速器被监控的整个过程中保持的部分唤醒锁 和 2 在前台服务
  • 在 Apache 和 WSGI 上部署 Django

    虽然我找到了很多使用 WSGI 在 Apache 上部署 Django 的技术支持 但不幸的是 事实上它们都让我感到困惑 我无法让 Django 运行 我希望这真的是一件容易的工作 但作为一个新人 我面临着困难 我的里面有两个 Django
  • PInvoke、指针和数组复制

    我们正在 c net 4 0 Win7 x64 上构建一个应用程序 目标为 x32 我们在我们的应用程序中使用第三方库 我们知道这个库是用C 编写的 然而 为了让 c 开发人员使用这个库 他们使用 P Invoke 对其进行了包装 这就是我
  • VS2019 中 ASP.NET Core 2.2 项目中的分析器警告

    我基本上有一个从默认 Razor Pages 模板创建的默认 ASP NET Core 2 2 项目 现在 在解决方案资源管理器 gt 依赖项中有一个名为 Analyzers 的节点 首先 一开始我并不知道它是用来做什么的 我想我现在知道了
  • 使用 live() 进行验证并通过 ajax() 提交

    我在 JQuery 中有这个 form validate rules captcha required true remote url gb include captcha php type post messages captcha Co
  • 如何使按钮在引导程序中响应?

    我有这个代码
  • ASP.NET视图状态加密问题

    我正在尝试打开视图状态加密Always作为我在 IIS6 中托管的 ASP NET 3 5 网站的安全措施 我们已关闭视图状态 但仍在此字符串中看到一些 控制状态 在测试环境中 我可以简单地在 web config 中设置以下内容 并且我无
  • 如何围绕现有的 Javascript 库创建 Angular 包装器?

    我有一个纯 JavaScript 库 用户可以通过 npm 安装 我想向该库添加 创建一个 Angular 包装器 以便可以在 Angular 项目中无缝使用它 但我不确定如何执行此操作 我正在使用 Angular cli v6 这非常类似
  • Stringify 删除了具有 Symbol 属性的 JavaScript 对象

    我正在尝试通过 Express 发送 React 组件树 我的组件数组包括关键的 typeof Symbol for react element 财产 我在用着res send 除了该属性之外 对象的其余部分都会通过 有人告诉我这可能与 S
  • 如何动态投射对象?

    我很确定以前有人问过这个问题 但不幸的是我发现的唯一的就是this https stackoverflow com questions 2903450 c sharp how to dynamically cast an object这对我
  • 在同一个项目中使用@jest-environment jsdom和@jest-environment节点[Jest-ReactJS]

    我们在项目中使用 Jest with React Testing Library 进行单元测试 在同一个项目中 我们有一些情况需要 jest environment jsdom 有些情况需要 jest environment节点 我们如何在
  • 确保 ASP.Net 文件上传安全

    我正在创建一个带有文件上传控件的 ASP Net 表单 然后该控件会将表单和文件的详细信息通过电子邮件发送给另一个管理员 我想确保这一点的安全 对于服务器和收件人 附件应该是简历 因此我将其限制为典型的文本文档 据我所知 最好的办法是检查文
  • Matplotlib savefig() 在多个图表上不断保存相同的图表

    所以我有一个函数generategraph file 它根据参数中的数据正确创建条形图 然后保存它 这是保存它的部分 plt show savefile file split txt 0 png plt savefig savefile 然
  • 如何在 Rails 中跳过记录未捕获的异常?

    使用自定义时exceptions app and rescue responses 应用程序可以更好地控制未捕获的异常和过多的日志记录DebugExceptions中间件变成噪音 例如 应用程序知道如何处理ActionPolicy Unau
  • Ruby on Rails:使用 post 方法链接,但参数位于 URL 中

    我在用着 link to My link path arg1 gt session arg1 arg2 gt session arg2 arg3 gt anyobject id method gt post 但生成的 HTML 链接包括 a
  • Twilio 将座席连接到队列中的呼叫

    我有 Twilio 的试用版 只允许使用 1 个电话号码 运行我的应用程序时 我通过 Twilio 进行身份验证 然后 我使用我的个人电话拨打我的 Twilio 号码 该号码会自动添加到我的 支持 队列中 效果很好 可以听到等待音乐 现在