twilio / python / flask:TWIMLET实现的语音邮件超时?

时间:2018-09-17 23:47:46

标签: python-3.x flask twilio

我正在使用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。

谢谢。

1 个答案:

答案 0 :(得分:0)

鉴于语音邮件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添加参数以指定最大录音持续时间,那就太好了。它应该像使用该参数的值在maxLength动词的参数中设置record()一样简单。

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