繁体   English   中英

Twilio 媒体 stream 与 Speech to Text (Twilio Say) 同时使用

[英]Twilio media stream used simultaneously with Speech to Text (Twilio Say)

我正在开发一个使用 twilio 媒体 stream(Google STT)的语音机器人,处理文本并使用 TwiML Say Object 将响应返回给用户。我使用的端点在用户开始呼叫时触发(状态呼叫是铃声):

@app.route("/twilio_call", methods=['POST'])
def voice(request):
    """Respond to incoming phone calls with a greet message"""
    call_status = request.form.get("CallStatus")

    if call_status == "ringing":
       voice_respond = VoiceResponse()
       voice_respond.say("hello! how can I help!", voice='women')

       return response.text(str(voice_response), content_type="text/xml")

将此消息传递给用户后,我想用媒体 stream 直接触发 websocket 服务器。

@app.websockets('/media')
def transcribe_media(request, ws):
    while True:
        message = ws.recv()
        if message is None:
            continue

    data = json.loads(message)
    if data['event'] == "media":

                    ....
#here I'm sending data to google and getting the transcription back

我无法像文档中的此处那样修改正在进行的呼叫: https://www.twilio.com/docs/voice/tutorials/how-to-modify-calls-in-progress-python

我已经尝试过:

client = Client(ACCOUNT_SID, AUTH_TOKEN)
        call = client.calls(conversation_id).update(
            twiml='<Response><Say voice="woman" language="de-DE">' + msg_text + '</Say></Response>')

但是我收到一个错误,状态调用未在进行中(它正在“响铃”)。

我还尝试使用 TwiML“STREAM”Object,但是当它与 TwiML“Say”object 一起使用时它没有启动服务器(当我仅通过 STREAM 时它触发服务器):

 voice_response = VoiceResponse()
 start = Start()
 start.stream(url='wss://<NGROK_IP>.ngrok.io/webhooks/twilio_voice/media')
 voice_response.say("Hello, how can I help?", language="en-GB")
 voice_response.append(start)
response.text(str(voice_response), content_type="text/xml")

有谁知道我该如何解决这个问题? 在 Twiml"Say" object 传递给用户后,如何触发 websocket 服务器?

Twilio 开发者布道师在这里。

实现此目的的正确方法是通过Stream TwiML 元素 我建议将 stream 放在 TwiML 响应的开头,以便它可以及时建立,以便您开始接收用户的语音。 另外,一旦TwiML完成,Twilio就会挂断电话,即使有stream在线。所以你应该暂停等待用户的语音响应。

因此,我会将您的 webhook 端点更改为:

@app.route("/twilio_call", methods=['POST'])
def voice(request):
"""Respond to incoming phone calls with a greet message"""
call_status = request.form.get("CallStatus")

voice_respond = VoiceResponse()

start = Start()
start.stream(url='wss://<NGROK_IP>.ngrok.io/webhooks/twilio_voice/media')
voice_respond.append(start)

voice_respond.say("hello! how can I help!", voice='women')
voice_respond.pause(length=60)

return response.text(str(voice_response), content_type="text/xml")

现在您的 stream 应该连接到您的 websocket 端点,您的用户将听到问候语。 通话不会挂断,因为有 60 秒的暂停,当用户说话时,您可以使用 websocket 端点将语音发送到 STT 服务,当您收到响应时,重定向呼叫并使用<Say>说话结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM