Twilio检测人是否回答

时间:2016-11-09 22:29:04

标签: c# twilio phone-call

我的用例如下:允许用户输入多个联系点。尝试第一个联系点,如果用户没有回答,请尝试第二个等等。

我遇到的问题是,Twilio似乎没有可靠的方法来确定一个人是否接听了电话。我尝试过三种不同的东西:

  1. IfMachine - 这种方法运行得相当可靠,但我在手机上进行了测试,使其认为它是人类。我真的需要100%的准确度。

  2. StatusCallbackEvents - 我将状态事件发布到公共端点。我希望这里有一些有用的信息,但似乎并非如此。

  3. 手动确定 - 我认为状态/持续时间的某种组合可行,但在人或语音邮件应答的某些情况下持续时间似乎相同。我的猜测是语音邮件正在回答,但Twilio认为它是一个人,所以它播放信息并获得与人类回答相同的持续时间。

  4. "呼叫筛选" AKA Reverse IfMachine - 我有这个工作,要求用户按一个键,按下该键后会收到另一条消息。但是,用户按下该键的事实不会记录在任何地方。不在响应对象或StatusCallbackEvents中。

  5. 目前我最大的希望是Call Screening在我可以访问的地方保存数据(用户按下键的事实)。

2 个答案:

答案 0 :(得分:2)

如果您不想依赖Twilio机器|人体检测,我相信拨号号码是最好的方法。

如果您使用的是TwiML,则可以在<gather>代码上设置回调。

https://www.twilio.com/docs/api/twiml/gather

  

&lt; Gather&gt;动词收集呼叫者输入他或她的电话键盘的数字。当调用者完成输入数据后,Twilio会将该数据提交给提供的“操作”URL

答案 1 :(得分:1)

Twilio开发者传道者在这里。

感谢西蒙的回答。我只想提供更多细节。

要使用<Gather>并获取用户输入的数字,您确实需要将action attribute设置为您的应用可以响应的网址。

public class ServiceReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(final Context context, Intent intent) {
        TelephonyManager telephony = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
        telephony.listen(new PhoneStateListener(){
            @Override
            public void onCallStateChanged(int state, String incomingNumber)            {
       if(state.equals(TelephonyManager.EXTRA_STATE_RINGING)){
    // Run the flash in that line
        }

            }
        },PhoneStateListener.LISTEN_CALL_STATE);
    }
}

然后,您的操作将像电话对话中的其他网络连接一样收到HTTP请求,但还包括一个参数Digits,其中包含用户按下的数字。

让我知道这是否有帮助。