我的用例如下:允许用户输入多个联系点。尝试第一个联系点,如果用户没有回答,请尝试第二个等等。
我遇到的问题是,Twilio似乎没有可靠的方法来确定一个人是否接听了电话。我尝试过三种不同的东西:
IfMachine - 这种方法运行得相当可靠,但我在手机上进行了测试,使其认为它是人类。我真的需要100%的准确度。
StatusCallbackEvents - 我将状态事件发布到公共端点。我希望这里有一些有用的信息,但似乎并非如此。
手动确定 - 我认为状态/持续时间的某种组合可行,但在人或语音邮件应答的某些情况下持续时间似乎相同。我的猜测是语音邮件正在回答,但Twilio认为它是一个人,所以它播放信息并获得与人类回答相同的持续时间。
"呼叫筛选" AKA Reverse IfMachine - 我有这个工作,要求用户按一个键,按下该键后会收到另一条消息。但是,用户按下该键的事实不会记录在任何地方。不在响应对象或StatusCallbackEvents中。
目前我最大的希望是Call Screening在我可以访问的地方保存数据(用户按下键的事实)。
答案 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
,其中包含用户按下的数字。
让我知道这是否有帮助。