使用Twilio可编程语音SDK的通话质量很差
我正在将支持Twilio的应用程序从旧SDK升级到新的Twilio Programmable Voice(beta 5),但遇到了几个问题。其中最主要的是传出呼叫的音频质量差,只能描述为丢失的数据包听起来像什么。即使当我运行Quickstart demo app时,问题依然存在,导致我的结论是问题在于我的Twiml。我已经按照“T”的说明来设置适当的功能,权利,配置文件和上传voip推送凭证,但是在新的SDK或Python版本的服务器上很少有文档,我离开了抓我的头。使用Twilio可编程语音SDK的通话质量很差
的唯一修改演示应用程序,我已经取得了对包括“到”和“从”我的呼叫请求参数,就像这样:
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
和通话记录显示一个完整的客户端调用。调试器的检查显示TwilioRestException: HTTP 400 error: Unable to create record
。正如你所看到的,我在请求中包含的URL可能会有问题,因为它只是进入了根目录,但是没有办法将url留空(我发现了)。我最终会将此更改为url=request.url_root + 'handleRecording'
用于通话记录,但现在我要一步一个脚印。
我的解决方案至今一直沟call = client.calls.create
赞成dial
动词,像这样:
resp = twilio.twiml.Response()
resp.dial(number = IDENTITY, callerId = CALLER_ID)
return str(resp)
这使得通话,但质量是如此之差,以使其无用。 (10秒钟以上的沉默,然后间歇地听到另一方的声音)。以这种方式使用拨号动词也是不可接受的,因为它的低效率,因为我现在每次收到两个电话的费用。
另一个我不确定是否连接的主要问题是,我还没有收到任何来电,但我怀疑我可能需要单独提出这个问题。
我怎样才能使这条线路工作?我在看你,@philnash。帮助我再次使我的应用程序更好。 :)
call = client.calls.create(url=request.url_root, to='client:' + IDENTITY, from_='client:' + CALLER_ID)
对不起,我花了一段时间才回到你的问题。
首先,从可编程语音SDK调用中进行连接的正确方法是使用TwiML <Dial>
。您是creating a call using the REST API,但是您已经在SDK中创建了通话的第一段,TwiML转发到通话的第二段,即您拨打的人。值得注意的是,您需要为每个通话段计费,而不是两个通话费用(例如,腿可以有不同的长度,例如,可以在拨入收件人之前将原始呼叫者通过菜单系统)。
其次,关于通话质量差,这不是我可以帮助堆栈溢出的东西。在这种情况下最好的做法是与Twilio support联系并为受影响的呼叫提供一些呼叫SID。如果你能record an example call那也会有帮助。
最后,我还没有看到你是否问过关于来电的另一个问题,但请做,我会尽我所能在那里帮助。这可能是我们可以在SO上覆盖的代码问题。
谢谢菲尔!我已经与Twilio开了一张票,包括一个Call和Recording SID。 –