2017-01-13 3 views
0

Я обновляю свое приложение 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) 

ответ

1

Извините, мне потребовалось некоторое время, чтобы вернуться к вашему вопросу.

Во-первых, правильный способ сделать текущее соединение с вашим запрограммированным голосовым SDK вызовом - TwiML <Dial>. Вы были creating a call using the REST API, однако вы уже создали первый этап вызова в SDK и TwiML вперед на второй этап вызова - человека, которого вы набрали. Примечательно, что вам выставляется счет за каждую ноту вызова, а не за два звонка (ножки могут быть разной длины, например, вы можете поместить оригинального вызывающего абонента через систему меню до набора на получателя).

Во-вторых, что касается плохого качества связи, это не то, что я могу помочь в переполнении стека. Лучше всего в этой ситуации - связаться с Twilio support и предоставить некоторые идентификаторы вызовов для затронутых вызовов. Если вы можете использовать record an example call, это тоже поможет.

Наконец, я не видел, если вы еще раз задали еще вопрос о входящих звонках, но, пожалуйста, сделайте, и я сделаю все возможное, чтобы помочь там.Вероятно, это вопрос кода, который мы можем рассмотреть на SO.

+0

Thanks Phil! Я открыл билет Twilio и включил SID вызова и записи. –