Python 使用Twilio可编程语音SDK时通话质量差

Python 使用Twilio可编程语音SDK时通话质量差,python,ios,objective-c,heroku,twilio,Python,Ios,Objective C,Heroku,Twilio,我正在将支持Twilio的应用程序从旧SDK升级到新的Twilio可编程语音(beta 5),但遇到了几个问题。其中最主要的是传出电话的音频质量差,这只能用丢失的数据包听起来的样子来形容。即使在我运行Twiml时,问题仍然存在,这使我得出结论:问题在于我的Twiml。关于设置适当的功能、授权、配置文件和上传voip推送凭证,我已经按照“T”的说明进行了操作,但是对于新的SDK或服务器的Python版本,几乎没有文档,我只能挠头了 我对演示应用程序所做的唯一修改是在我的通话请求中包括“to”和“f

我正在将支持Twilio的应用程序从旧SDK升级到新的Twilio可编程语音(beta 5),但遇到了几个问题。其中最主要的是传出电话的音频质量差,这只能用丢失的数据包听起来的样子来形容。即使在我运行Twiml时,问题仍然存在,这使我得出结论:问题在于我的Twiml。关于设置适当的功能、授权、配置文件和上传voip推送凭证,我已经按照“T”的说明进行了操作,但是对于新的SDK或服务器的Python版本,几乎没有文档,我只能挠头了

我对演示应用程序所做的唯一修改是在我的通话请求中包括“to”和“from”参数,如下所示:

NSDictionary *params = @{@"To" : self.phoneTextField.text, @"From": @"+16462332222",};
[[VoiceClient sharedInstance] configureAudioSession];
self.outgoingCall = [[VoiceClient sharedInstance] call:[self fetchAccessToken] params:params delegate:self];
调用将在适当的端点处发送到我的Twiml服务器(Heroku上的python部署),如下所示:

import os
from flask import Flask, request
from twilio.jwt.access_token import AccessToken, VoiceGrant
from twilio.rest import Client
import twilio.twiml

ACCOUNT_SID = 'ACblahblahblahblahblahblah'
API_KEY = 'SKblahblahblahblahblahblah'
API_KEY_SECRET = 'blahblahblahblahblahblah'
PUSH_CREDENTIAL_SID = 'CRblahblahblahblahblahblah'
APP_SID = 'APblahblahblahblahblahblah'

IDENTITY = 'My_App'
CALLER_ID = '+15551111' # my actual number

app = Flask(__name__)
@app.route('/makeTheDamnCall', methods=['GET', 'POST'])
def makeTheDamnCall():
    account_sid = os.environ.get("ACCOUNT_SID", ACCOUNT_SID)
    api_key = os.environ.get("API_KEY", API_KEY)
    api_key_secret = os.environ.get("API_KEY_SECRET", API_KEY_SECRET)
    CALLER_ID = request.values.get('From')
    IDENTITY = request.values.get('To')
    client = Client(api_key, api_key_secret, account_sid)
    call = client.calls.create(url=request.url_root, to='client:' + IDENTITY, from_='client:' + CALLER_ID)

    return str(call.sid)
控制台输出
outgoingCall:didFailWithError:Twilio Services Error
,呼叫日志显示已完成的客户端呼叫。对调试器的检查显示
TwiIORestException:HTTP 400错误:无法创建记录
。正如您所看到的,我在请求中包含的url可能会有问题,因为它只会进入根目录,但无法将url留空(我已经找到)。我最终会将其更改为一个
url=request.url\u root+“handleRecording”
,用于通话记录,但我现在一步一步地做

到目前为止,我的解决方案是放弃
call=client.calls.create
,转而使用
dial
动词,如下所示:

    resp = twilio.twiml.Response()
    resp.dial(number = IDENTITY, callerId = CALLER_ID)
    return str(resp)
这会发出呼叫,但质量太差,无法使用。(10秒以上的沉默,然后断断续续地听到对方的声音)。以这种方式使用拨号动词也是不可接受的,因为它效率低下,因为我现在每次要打两个电话

另一个主要问题,我不确定是否连接,是我还没有接到任何来电,尽管我怀疑我可能需要单独问这个问题

我怎样才能让这条线路工作?“我看着你,”菲尔纳什说。帮助我使我的应用程序再次伟大起来。:)


对不起,我花了一些时间才回到你的问题上来

首先,从可编程语音SDK调用建立持续连接的正确方法是使用。但是,您已经在SDK中创建了呼叫的第一段,TwiML将转发到呼叫的第二段,即您拨打的人。值得注意的是,您会为通话的每个通话段付费,而不是两个通话段(通话段的长度可能不同,例如,您可以在拨号给收件人之前通过菜单系统将原始呼叫者放入)

其次,关于糟糕的调用质量,我不能帮助解决堆栈溢出问题。在这种情况下,最好的办法是联系并为受影响的呼叫提供一些呼叫SID。如果你能,那也会有帮助的


最后,我还不知道你是否还问了另一个关于来电的问题,但请问,我会尽力帮助你。这可能是我们可以讨论的一个代码问题。

谢谢菲尔!我在Twilio开了一张票,里面有一个电话和录音SID。我今天才花了8个小时终于开始工作,我对质量如此糟糕感到震惊。它对我的付费客户不可用。我开了一张支持票。嗨,瑞安,很高兴听到你开了一张支持票。希望团队能够调查导致质量差的原因并解决问题。hi@philnash因为我正在使用rest api从子帐户进行调用,所以我得到了不同的调用Sid,这是我假设的子腿。由于父调用sid和子分支sid彼此不同,我无法使用RESTAPI记录调用。如何在不改变航段的情况下有效地从子账户拨打电话,以便我也可以记录通话。请让我知道。我使用的是快速入门语音swift。TIAHi@A_Rush,恐怕我需要更多的上下文,而评论不是最好的回答方式。你能问一个尽可能详细的新问题,然后把链接发给我吗?
call = client.calls.create(url=request.url_root, to='client:' + IDENTITY, from_='client:' + CALLER_ID)