gpt4 book ai didi

twilio - 如果无人接听,将 twilio 调用转移到语音信箱

转载 作者:行者123 更新时间:2023-12-04 01:53:58 25 4
gpt4 key购买 nike

对于我正在尝试解决的问题,我很乐意为我的 twilio 设置提供一些建议。

概述:

我们系统中的每个用户都配备了一个 twilio 电话号码,他们可以将其分发给任何人以联系他们。

如果 personA 通过预置的 twilio 电话号码联系我们系统中的用户 (userB),如果他们可用,我们希望将他们与 userB 联系起来。如果 userB 不可用,我们希望将 personA 引导至语音信箱。换句话说,我们希望确保我们能够控制语音邮件体验和语音邮件本身,以便我们可以将其存储在我们的系统中,而不是将语音邮件留在用户 B 的设备上。

当前解决方案:

  • PersonA 的来电被添加到队列中。同时,系统拨出用户B。
  • UserB 被要求按 1 接听电话。 UserB 显式进入的原因是为了检测 UserB 是否可以接听电话。 (例如,如果对 UserB 的调用转到他们的个人语音信箱,则不会发生明确的数字输入,告诉我们他们无法接听。)
  • 如果 UserB 在指定时间内未输入 1,则将 PersonA 定向到语音信箱。
  • 如果 UserB 按 1,则修改对 UserB 的调用(通过 twilio rest api)以调用 PersonA 所在的队列以连接 UserB 和 PersonA。

  • 当前解决方案的问题:

    在此解决方案中,何时将 personA 的调用转移到语音邮件的控制由对 UserB 的调用结果控制,这似乎不是最理想的。例如,我们可能根本无法调用 UserB。在这种情况下,personA 将无限期地留在队列中。

    在这种情况下,我希望轮询 personA 所在的队列以检查队列中的时间,如果队列中的时间大于阈值,则将调用转移到语音信箱。但是,似乎不可能准确地知道调用在队列中无人看管的时间,因为:
  • 队列中调用的状态为 in-progress即使来电者正在听等待音乐。这与 PersonA 的调用已被应答的状态相同。
  • 如果 UserB 拨入队列,则只有在桥接方断开连接时,调用才会出队,而 PersonA 调用的调用状态不会改变,表明他们已连接到 UserB。

  • 问题
  • 我对为什么无法轮询调用队列以将调用转移到语音信箱的理解是否正确?
  • 我是否应该将 PersonA 调用到 session 中,如果 UserB 可用,将他/她连接到 PersonA 所在的 session ?
  • 如果我使用 session 设置,那么在用户 B 从未加入 session 的情况下,检测 PersonA 在 session 中等待多长时间以便将 PersonA 的调用转移到语音信箱的最简单方法是什么?
  • 最佳答案

    Twilio 开发人员布道者在这里。

    我认为您可能在队列中使事情变得过于复杂。您实际上可以在原始调用中提供消息并收集信息,而无需自己拨出并最终连接两个调用。

    就是这样:

    您的来电 TwiML 应如下所示:

    <Response>
    <Dial action="/call_complete" timeout="30">
    <Number url="/whisper">
    ONWARD DIAL NUMBER
    </Number>
    </Dial>
    </Response>

    <Number>名词 URL 将在连接两个调用之前播放该 URL 的 TwiML 内容。您可以使用 <Gather>在这里确保用户已接听电话而不是他们自己的语音邮件系统:
    /whisper

    <Response>
    <Gather numDigits="1" timeout="10" action="/gather_result">
    <Say voice="alice">You are receiving a call, press any key to accept</Say>
    </Gather>
    <Hangup/>
    </Response>
    /gather_result需要确定是否按下了某个键。如果它被按下,那么我们将继续调用,我们可以使用空响应来执行此操作,因为这会将控制权交还给原始 <Dial>。 .如果没有按下任何号码,我们会挂断此端,这会导致原始 <Dial>完成并直接访问其 action属性。 (我不确定您使用的是什么语言,但这里有一些 Rubyish 伪代码)
    /gather_result

    <Response>
    if params["Digits"] and params["Digits"].empty?
    <Hangup/>
    end
    </Response>
    /call_complete然后将被调用一次 <Dial>行动结束。如果此时通话状态为“已完成”或“已接听”,则用户已接听电话并正确响应耳语,我们可以挂断。如果还有其他问题,我们会将调用重定向到我们的语音信箱记录器。
    /call_complete

    <Response>
    if params["DialCallStatus"] == "completed" or params["DialCallStatus"] == "answered"
    <Hangup/>
    else
    <Say voice="alice">The call could not be answered this time, please leave a message</Say>
    <Record action="/record_complete" />
    end
    </Response>

    最后你的 /record_complete action 可以对录音 URL 做任何你想做的事情并挂断电话。
    /record_complete

    <Response>
    <Hangup/>
    </Response>

    正如 in this blog post 所述,这一切都可以通过 Twimlets 实现。 .让我知道这是否有帮助。

    关于twilio - 如果无人接听,将 twilio 调用转移到语音信箱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34145791/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com