【问题标题】:twilio/python/flask: Timeouts for TWIMLET-implemented voice mail?twilio/python/flask: TWIMLET 实现的语音邮件超时?
【发布时间】:2018-09-19 20:20:58
【问题描述】:

我正在使用 python3 flask REST-ful 应用程序来控制我的基于 twilio 的电话服务。一切运行良好,但我有一个问题无法找到答案。

当我想将呼叫者重定向到语音邮件时,我从我的 REST 接口调用以下 voice_mail 函数,并通过 twimlet 管理语音邮件,如下所示...

def voice_mail():
    vmbase = 'http://twimlets.com/voicemail?Email=USER@DOMAIN.COM&Transcribe=False'
    vmurl = '... URL pointing to an mp3 with my voicemail greeting ...'
    return redirect(
        '{}&Message={}'.format(vmbase, vmurl),
        302
    )

这很好用,但似乎没有任何方法可以控制呼叫者的语音邮件可以持续多长时间。我想为该持续时间设置一个上限。

有没有办法通过这个twimlet(或者可能是不同的twimlet)在可配置的时间后强制切断语音邮件录音?

如果没有,此基于twimlet 的语音邮件录音是否有默认最长持续时间?

如果这些都不可用,有人可以指出我使用其他 twilio 功能的基于 python 的方式...

  1. 将呼叫者路由到语音邮件
  2. 播放指定录音
  3. 捕获来电者的消息。
  4. 在可配置的秒数后切断来电者的录音。
  5. 通过电子邮件将通话通知和录制消息的 URL 发送到指定的电子邮件地址。

我知道现有的twimlet执行第1、2、3和5项,但我不知道如何实现第4项。

谢谢。

【问题讨论】:

  • 我刚刚找到了以下,这表明在timlets中没有这样的时间限制:stackoverflow.com/questions/32911651/…。所以,我想我必须自己实现这个。但是在我“重新发明轮子”之前,有没有人已经在 python 中实现了这个功能?复杂的部分是生成带有转录消息的电子邮件。

标签: python-3.x flask twilio


【解决方案1】:

鉴于语音邮件twimlet 不允许指定录音时间限制,我可以通过以下方式在没有twimlet 的情况下解决此问题。通过flask_mail 包发送电子邮件变得很简单。

以下代码片段展示了我是如何做到的...

import phonenumbers
from flask import Flask, request, Response, url_for, send_file
from flask_mail import Mail, Message

app = Flask(__name__)

mail_settings = {
    'MAIL_SERVER'   : 'mailserver.example.com',
    'MAIL_PORT'     : 587,
    'MAIL_USE_TLS'  : False,
    'MAIL_USE_SSL'  : False,
    'MAIL_USERNAME' : 'USERNAME',
    'MAIL_PASSWORD' : 'PASSWORD'
}

app.config.update(mail_settings)
email = Mail(app)

# ... etc. ...

def voice_mail():
    vmurl = '... URL pointing to an mp3 with my voicemail greeting ...'
    resp = VoiceResponse()
    resp.play(vmurl, loop=1)
    resp.record(
        timeout=5,
        action=url_for('vmdone'),
        method='GET',
        maxLength=30, # maximum recording length
        playBeep=True
    )
    return Response(str(resp), 200, mimetype='application/xml')

@app.route('/vmdone', methods=['GET', 'POST'])
def vmdone():
    resp    = VoiceResponse()
    rcvurl  = request.args.get('RecordingUrl',      None)
    rcvtime = request.args.get('RecordingDuration', None)
    rcvfrom = request.args.get('From',              None)
    if not rcvurl or not rcvtime or not rcvfrom:
        resp.hangup()
        return Response(str(resp), 200, mimetype='application/xml')
    rcvurl  = '{}.mp3'.format(rcvurl)
    rcvfrom = phonenumbers.format_number(
        phonenumbers.parse(rcvfrom, None),
        phonenumbers.PhoneNumberFormat.NATIONAL
    )
    msg = Message(
        'Voicemail',
        sender='sender@example.com',
        recipients=['recipient@example.com']
    )
    msg.html = '''
<html>
<body>
<p>Voicemail from {0}</p>
<p>Duration: {1} sec</p>
<p>Message: <a href="{2}">{2}</a></p>
</body>
</html>
'''.format(rcvfrom, rcvtime, rcvurl)
    email.send(msg)
    return Response(str(resp), 200, mimetype='application/xml')

另外,如果有人可以在语音邮件twimlet 中添加一个参数来指定最长录音持续时间,那就太好了。它应该像使用该参数的值在 record() 动词的参数中设置 maxLength 一样简单。

如果有人可以将twimlets 源代码指向我,我愿意自己编写该逻辑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-28
    相关资源
    最近更新 更多