Я обновляю свое приложение Twilio с старого SDK до нового Twilio Programmable Voice (бета 5), но столкнулся с несколькими проблемами. Главным среди них является плохое качество звука исходящих вызовов, в чем можно только назвать то, что должно звучать потерянные пакеты. Проблема существует, даже когда я запускаю Quickstart demo app, что приводит меня к выводу, что проблема лежит в моем Twiml. Я следил за инструкциями «T» в отношении установки соответствующих возможностей, прав доступа, профиля подготовки и загрузки учетных данных push vo push, но с небольшой документацией по новому SDK или версиям Python сервера я оставлен царапая мою голову.Плохое качество звонка с использованием Twilio Programmable Voice 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) в соответствующей конечной точке, как показано здесь:
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)
Thanks Phil! Я открыл билет Twilio и включил SID вызова и записи. –