我正在使用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的方式...
我知道现有的twimlet
执行项目1、2、3和5,但是我不知道如何实现项目4。
谢谢。
答案 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
源代码,那么我愿意自己编写这种逻辑。