2017-01-13 1 views
0

Twilio 사용 가능 앱을 이전 SDK에서 새로운 Twilio Programmable Voice (베타 5)로 업그레이드 중이지만 몇 가지 문제가 있습니다. 그 중에서도 가장 중요한 것은 나가는 통화의 오디오 품질이 좋지 않으며 손실 된 패킷이 무엇처럼 들리는 지 기술 할 수 있습니다. Quickstart demo app을 실행할 때도 문제가 발생하여 문제가 내 Twiml에 있다고 결론 내릴 수 있습니다. 필자는 적절한 기능, 인 타이틀먼트, 프로비저닝 프로파일 설정 및 voip 푸시 자격 증명 업로드와 관련하여 "T"에 대한 지침을 수행했지만 새 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'으로 변경 하겠지만 한 번에 한 걸음 씩 취하고 있습니다.

resp = twilio.twiml.Response() 
    resp.dial(number = IDENTITY, callerId = CALLER_ID) 
    return str(resp) 

이 호출을,하지만 품질은 쓸모없는 렌더링하도록 가난 :

내 솔루션은 지금까지 그렇게처럼 dial 동사의 찬성 call = client.calls.create 도랑하고있다. (10 초 이상 묵음 한 후 간헐적으로 상대방의 소리를 들음). 이러한 방식으로 다이얼 동사를 사용하는 것은 내가 매번 두 번 전화 할 때 비용이 청구되므로 비효율적이기 때문에 받아 들일 수 없습니다.

다른 주요 문제는 연결되어 있는지 여부는 모르지만 수신 통화를 아직받을 수 없다는 사실입니다.하지만 별도로 질문해야 할 수도 있습니다.

이 줄을 어떻게 작동시킬 수 있습니까? 나는 너를 바라보고있어. 내 앱을 다시 멋지게 만들 수있게 도와주세요. :)

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과 연락하고 영향받는 통화에 대해 일부 통화 SID를 제공하는 것입니다. 가능하면 record an example call도 도움이 될 것입니다.

마지막으로, 수신 전화에 대해 다른 질문을 한 경우 아직 보지 못했지만 제발 도와주세요. 최선을 다해 도와 드리겠습니다.아마 우리가 할 수있는 코드 문제입니다.

+0

감사합니다. 필! Twilio와 함께 티켓을 열었고 통화 및 녹음 SID가 포함되었습니다. –

관련 문제