             NSLog("EndCallAction transaction request successful")
         }
     }
+    
+    func performVoiceCall(uuid: UUID, client: String?, completionHandler: @escaping (Bool) -> Swift.Void) {
+        guard let accessToken = fetchAccessToken() else {
+            completionHandler(false)
+            return
+        }
+        
+        call = TwilioVoice.sharedInstance().call(accessToken, params: [:], delegate: self)
+        
+        guard let call = call else {
+            NSLog("Failed to start outgoing call")
+            completionHandler(false)
+            return
+        }
+        
+        call.uuid = uuid
+        
+        self.callKitCompletionCallback = completionHandler
+    }
+    
+    func performAnswerVoiceCall(uuid: UUID, completionHandler: @escaping (Bool) -> Swift.Void) {
+        guard let call = self.callInvite?.accept(with: self) else {
+            completionHandler(false)
+            return
+        }
+        
+        call.uuid = uuid
+        
+        self.callInvite = nil
+        self.callKitCompletionCallback = completionHandler
+    }
 }

        //      completion block of the `reportNewIncomingCallWithUUID:update:completion:` method instead of in
        //      `provider:performAnswerCallAction:` per the WWDC examples.
        // TwilioVoice.sharedInstance().configureAudioSession()

        guard let call = self.callInvite?.accept(with: self) else {
            action.fail()
            return
        }
        
        self.callInvite = nil

        call.uuid = action.callUUID
        action.fulfill()
    }



    var callInvite:TVOCallInvite?
    var call:TVOCall?
    var callKitCompletionCallback: ((Bool)->Swift.Void?)? = nil

    let callKitProvider:CXProvider
    let callKitCallController:CXCallController
