         return "QUICK_REPLY"
     }
     
+    /// Attempts to send trigger a VoIP push for the given event
+    /// - Parameter event: The call invite event.
     private func sendVoipPush(forEvent event: MXEvent) {
-        guard let token = pushNotificationManager.pushToken else {
-            return
-        }
+        guard let token = pushNotificationManager.pushKitToken else {
+            return
+        }
+        
+        pushNotificationManager.lastCallInvite = event
         
         let appId = BuildSettings.pushKitAppId
         
-        pushGatewayRestClient.notifyApp(withId: appId, pushToken: token, eventId: event.eventId, roomId: event.roomId, eventType: event.wireType, sender: event.sender, success: { (rejected) in
-            NSLog("[NotificationService] sendVoipPush succeeded, rejected token: \(rejected)")
+        pushGatewayRestClient.notifyApp(withId: appId, pushToken: token, eventId: event.eventId, roomId: event.roomId, eventType: nil, sender: event.sender, success: { (rejected) in
+            NSLog("[NotificationService] sendVoipPush succeeded, rejected tokens: \(rejected)")
         }) { (error) in
             NSLog("[NotificationService] sendVoipPush failed with error: \(error)")
         }

                    }
                }
                break
            case .callInvite:
                let offer = event.content["offer"] as? [AnyHashable: Any]
                let sdp = offer?["sdp"] as? String
                let isVideoCall = sdp?.contains("m=video") ?? false
                
                if isVideoCall {
                    notificationBody = NSString.localizedUserNotificationString(forKey: "VIDEO_CALL_FROM_USER", arguments: [eventSenderName as Any])
                } else {
                    notificationBody = NSString.localizedUserNotificationString(forKey: "VOICE_CALL_FROM_USER", arguments: [eventSenderName as Any])
                }
                
                // call notifications should stand out from normal messages, so we don't stack them
                threadIdentifier = nil
                self.sendVoipPush(forEvent: event)
            case .roomMember:
                let roomDisplayName = room.summary.displayname
                

            let pushRule = session.notificationCenter.rule(matching: event, roomState: roomState)
            
            switch event.eventType {
            case .callInvite:
                let offer = event.content["offer"] as? [AnyHashable: Any]
                let sdp = offer?["sdp"] as? String
                let isVideoCall = sdp?.contains("m=video") ?? false
                
                if isVideoCall {
                    notificationBody = NSString.localizedUserNotificationString(forKey: "VIDEO_CALL_FROM_USER", arguments: [eventSenderName as Any])
                } else {
                    notificationBody = NSString.localizedUserNotificationString(forKey: "VOICE_CALL_FROM_USER", arguments: [eventSenderName as Any])
                }
                
                // call notifications should stand out from normal messages, so we don't stack them
                threadIdentifier = nil
                self.sendVoipPush(forEvent: event)
            case .roomMessage, .roomEncrypted:
                if room.isMentionsOnly {
                    // A local notification will be displayed only for highlighted notification.
