使用python转发Twilio中的未应答呼叫

k5hmc34c  于 2023-02-10  发布在  Python
关注(0)|答案(2)|浏览(118)

有人能够捕获Twilio DialCallStatus吗?在许多Twilio在线文档中都提到了它,但我在调试python脚本时从未见过它。我只在以下request. values转储中看到CallStatus。
请求值〉〉〉CombinedMultiDict([不可变多字典([]),不可变多字典([('帐户ID','帐户xxxxxxx'),(“Api版本”,“2010-04- 01”),(“呼叫方”,“呼叫方”),('呼叫状态','进行中'),(“已呼叫”,“+1785xxxxxxx”),(“被叫城市”、“TOPEKA”),(“被叫国”,“美国”),(“被呼叫状态”、“KS”),(“被叫邮编”、"66603“),(“呼叫方”,“+1630xxxxxxx”),(“呼叫者城市”、“罗塞尔”),(“呼叫方国家”、“美国”),(“呼叫者状态”,“IL”),(“呼叫方邮编”、“60193”),(“数字”、“1”),(“方向”、“入站”),('按键完成',''),(“发件人”,“+1630xxxxxxx”),(“来自城市”,“罗塞尔”),(“来自国家”,“美国”),(“来自州”,“IL”),(“来自邮政编码”,“60193”),(“收件人”,“+1785xxxxxxx”),(“收件人城市”,“TOPEKA”),(“收件人国家”,“美国”),("收件人州“,”KS“),(”收件人邮政编码“," 66603”),(“邮件”,“收集结束”)]]]
实际上,我需要将一个未应答的来电转接到另一个电话号码,当回拨事件中报告“无应答”时,这似乎是一个很好的时机。然而,在这一点上,似乎呼叫流程已经结束,response.dial.number(“next-number”)不再工作。
以前有人这么做过吗?

#This is the route where the initial incoming call is answered
@app.route('/gather', methods=['GET', 'POST'])  
def gather():
    resp = VoiceResponse()
    dial = Dial(timeout=30)
    dial.number(
        '+1-initial-called-number',
        status_callback_event='initiated ringing answered completed busy failed no-answer canceled',
        status_callback='https://my.ngrok.io/response',
        status_callback_method='POST',
    )
    resp.append(dial)
    return str(resp)

@app.route('/response', methods=['POST'])        #This is the call back route
def outbound():
    status=request.values.get('CallStatus', None)
    resp = VoiceResponse()
    if (status=='no-answer'):
        resp.dial(timeout=20).number('+1-next-number')
    return str(resp)
yfjy0ee7

yfjy0ee71#

是的,我收到一个DialCallStatus参数。这是在拨号完成并执行操作URL之后。下面是一些Twiml:

<?xml version="1.0" encoding="utf-8"?>
<Response>
    <Dial action="https:XXXXXX/api/twilio/voice/noanswer" timeout="20">
        <Sip>sip:XXXXXX.sip.us1.twilio.com</Sip>
    </Dial>
</Response>

https:XXXXXX/API/twilio/voice/nobanswer端点在拨号完成时接收DialCallCstatus。示例中的Sip部分实际上并不重要-号码、客户端和会议操作也是如此。一旦Sip、号码、客户端或会议完成,拨号操作URL将被调用,并将具有该参数。文档说明这是拨号命令的终端状态。
我对Python不是很了解,但是您的示例代码似乎缺少Action url。Twilio for Python的示例代码位于"Specify an action URL and method"

from twilio.twiml.voice_response import Dial, VoiceResponse, Say

response = VoiceResponse()
response.dial('415-123-4567', action='/api/twilio/voice/noanswer', method='GET')
response.say('I am unreachable')

print(response)
smtd7mpg

smtd7mpg2#

你把TwiML部分放进TwiML Bin了吗?你用Webhook了吗?我添加了action属性和一个“/nobanswer”路由,但是没有命中。我做错了什么吗?我会把更新后的代码作为答案发布,因为在这个评论框中发布代码不容易

这是应答初始传入呼叫的路由

@应用程序路径('/gather',方法=['GET','POST'])
def聚集():

resp = VoiceResponse()
dial = Dial(timeout=30)
dial.number(
    '+1-initial-called-number',
    status_callback_event='initiated ringing answered completed busy failed no-answer canceled',
    status_callback_method='POST',
    action='/handleDialCallStatus'
)
resp.append(dial)
return str(resp)

@应用程序.路由('/noanswer',方法=['GET','POST'])
定义句柄_无应答():

print("NO ANSWER!!!")

相关问题