2017-01-13 38 views
0

我正在將支持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) 

回答

1

對不起,我花了一段時間纔回到你的問題。

首先,從可編程語音SDK調用中進行連接的正確方法是使用TwiML <Dial>。您是creating a call using the REST API,但是您已經在SDK中創建了通話的第一段,TwiML轉發到通話的第二段,即您撥打的人。值得注意的是,您需要爲每個通話段計費,而不是兩個通話費用(例如,腿可以有不同的長度,例如,可以在撥入收件人之前將原始呼叫者通過菜單系統)。

其次,關於通話質量差,這不是我可以幫助堆棧溢出的東西。在這種情況下最好的做法是與Twilio support聯繫併爲受影響的呼叫提供一些呼叫SID。如果你能record an example call那也會有幫助。

最後,我還沒有看到你是否問過關於來電的另一個問題,但請做,我會盡我所能在那裏幫助。這可能是我們可以在SO上覆蓋的代碼問題。

+0

謝謝菲爾!我已經與Twilio開了一張票,包括一個Call和Recording SID。 –

相關問題