2017-09-20 91 views
0

我使用Twilio.js(1.4)和Twilio REST API創建了一個用於Twilio的軟電話。Twilio REST API無響應

在連接回調上,我需要獲取調用的childSid。爲了適應這種情況,我在Laravel應用程序中創建了一個路徑,使用Calls list資源並使用連接回調中的jQuery.get()將其傳入瀏覽器。

由於某些原因,如果我在初始連接後大約12秒後沒有等待,API根本沒有響應。在我的PHP函數中使用sleep(12)之後,我可以成功讀取調用併爲ParentSid過濾而不會出現問題。

是否有一個原因,如果太早的連接是通過Twilio.js作出後調用的API將不會響應?它似乎只在我使用$ client-> calls> read()時執行此操作。我沒有問題立即使用$ client-> calls($ callSid) - > fetch()從調用中檢索parentCallSid。

這裏是原代碼:

public function showChildCallSid(Request $request, Client $client) { 

    $callSid = $request->input('CallSid'); 
    sleep(12); // only works after waiting about 12 seconds 
    $call = $client->calls->read(['ParentCallSid' => $callSid])[0]; 

    return $call->sid; 

} 
+0

我懷疑呼叫列表「最終一致」。 – ceejayoz

+1

當你說「API根本沒有迴應」,你的意思是說你收到一個超時?你能分享你看到的確切的錯誤信息嗎? (如果你沒有看到錯誤信息,你能告訴我們你做了什麼*看到了嗎?) – smarx

+0

該函數實際上會產生500服務器錯誤。 – mcpacific

回答

1

我相信這個問題最終是語法問題。我修改的代碼,如下圖所示,現在工作得非常好(只需要1秒鐘的暫停通常情況下):

public function showChildCallSid(Request $request, Client $client) { 

    $callSid = $request->input('CallSid'); 
    $attempt = 1; 
    $maxAttempts = 15; 

    do { 

    $calls = $client->calls->read(['ParentCallSid' => $callSid]); 
    if (sizeof($calls) > 0) { 
     break; 
    } 
    sleep(1); 
    $attempt++; 

    } while ($attempt < $maxAttempts); 

    $childSid = $calls[0]->sid; 

    return $childSid; 

}