Twilio-<gather>多个语音回复并在呼出电话上抄录文本

时间:2018-10-25 02:38:32

标签: python twilio twilio-api

使用Twilio框架的目标:

  • 拨出电话
  • 提出3个问题并记录3个语音回复
  • 从3个语音回复的通话中转录文字
  • 使用#键表示每个问题的答案并向前推进

当前正在工作:

  • Python代码调用通过TWiML Bins托管的菊花链式TwiML

  • 问了3个问题

  • 该通话将被记录,并可以通过Twilio控制台收听

问题/无法解决的问题:

  1. 通话中没有抄录的文字。
  2. 通过TwiML容器调用TwiML时会明显延迟。
  3. #key不会进入下一个问题

任何建议表示赞赏:

from twilio.rest import Client
account_sid = 'XXXXXXXXXXXXXXXX'
auth_token = 'XXXXXXXXXXXXXXXX'
client = Client(account_sid, auth_token)

call = client.calls.create(
                        url='http://www.companyname.com/Auditor/MessageName.xml',
                        to="+61437231327",
                        from_='+61437231327',
                        record=True
                    )
print(call.sid)
print(call.status)
#print(call.transcription_text)
print(call.uri)


-------- TWIML hosted website MessageName.xml ---------------
<?xml version="1.0" encoding="UTF-8"?>
<Response>
  <Say voice="alice">Collecting Name </Say>
    <Gather input="speech" timeout="3" numDigits="1" action="https://handler.twilio.com/twiml/someTwilBinURLID">
        <Say>Please say Name. Press # when complete</Say>
    </Gather>
  </Response>


-------- TwimlBin TWIML - 2nd required voice response ---------------
<?xml version="1.0" encoding="UTF-8"?>
<Response>
    <Gather input="speech" finishOnKey="#" timeout="3" numDigits="1" action="https://handler.twilio.com/twiml/someTwilBinURLIDForNextVoice">
        <Say>Please say how old you are. Press # when complete</Say>
    </Gather>    
</Response>
-------- TwimlBin TWIML -3rd required voice response ---------------
<?xml version="1.0" encoding="UTF-8"?>
<Response>
    <Gather input="speech" finishOnKey="#" timeout="3" numDigits="1">
        <Say>Please say what your location is. Press # when complete</Say>
    </Gather>    
</Response>

1 个答案:

答案 0 :(得分:1)

这里是Twilio开发人员的传播者。

这里进展不错,但是您将不得不改变一些地方才能达到目标。

首先,finishOnKeynumDigits仅在<Gather>用于DTMF输入时才是适当的属性。对于语音输入,Twilio将听用户讲话,并且在他们停留timeout(或speechTimeout)时间后,将提交结果。因此,对于语音输入,您不能让用户在完成输入后按#,但对话应该只在超时时间内进行。

接下来,通过请求将抄录发送到<Gather>'s action attribute。要捕获转录的文本,您需要将操作设置到您控制的服务器上,以便您可以阅读文本。

如果您不想站立自己的应用程序,则可以使用Twilio Function来实现。以下代码将读取并记录结果,然后在调用中返回下一个TwiML:

exports.handler = function(context, event, callback) {
  console.log(event.SpeechResult); // SpeechResult is the transcribed text 
  const twiml = new Twilio.twiml.VoiceResponse();
  twiml.gather({ input: 'speech', timeout: 3 }).say('The next question');
  callback(null, twiml);
})

您可能希望将转录的文本保存到您自己的数据库中。

我注意到您正在用Python编写应用程序。您也可以在自己的Python服务器上执行此操作。

最后,我不确定是什么原因导致TwiML Bins延迟。可能值得使用timeout值来优化它。

让我知道是否有帮助。