当前位置: 首页 > 知识库问答 >
问题:

使用CallKit和Twilio-Video API触发传入VoIP呼叫

仲孙阳
2023-03-14

能否有人,请帮助我或指出我在正确的方向,如何触发一个来电在应用程序,当一个VoIP通知收到。

下面是我在viewcontroller.swift文件中的代码

 func pushRegistry(registry: PKPushRegistry!, didReceiveIncomingPushWithPayload payload: PKPushPayload!, forType type: String!) {
        // Process the received push

        self.reportIncomingCall(uuid: UUID(), roomName: "testRoom", completion: nil)
    } 

func reportIncomingCall(uuid: UUID, roomName: String?, completion: ((NSError?) -> Void)? = nil) {

    let callHandle = CXHandle(type: .generic, value: roomName ?? "")
    let callUpdate = CXCallUpdate()
    callUpdate.remoteHandle = callHandle
    callUpdate.supportsDTMF = false
    callUpdate.supportsHolding = true
    callUpdate.supportsGrouping = false
    callUpdate.supportsUngrouping = false
    callUpdate.hasVideo = true

    callKitProvider.reportNewIncomingCall(with: uuid, update: callUpdate) { error in
        if error == nil {
            NSLog("Incoming call successfully reported.")
        } else {
            NSLog("Failed to report incoming call successfully: \(error?.localizedDescription).")
        }
        completion?(error as? NSError)
    }
}

共有1个答案

邓欣德
2023-03-14

迟发答复,但可能对某人有帮助。

下面的代码我做了处理语音来电。

func pushRegistry(_ registry: PKPushRegistry, didReceiveIncomingPushWith payload: PKPushPayload, for type: PKPushType) {
    NSLog("pushRegistry:didReceiveIncomingPushWithPayload:forType:")
    print(payload)
    if (type == PKPushType.voIP) {
        TwilioVoice.handleNotification(payload.dictionaryPayload, delegate: self)

        pushKitPushReceivedWithPayload(payload: payload)
    }
}
func pushRegistry(_ registry: PKPushRegistry, didReceiveIncomingPushWith payload: PKPushPayload, for type: PKPushType, completion: @escaping () -> Void) {
    NSLog("pushRegistry:didReceiveIncomingPushWithPayload:forType:completion:")

    if (type == PKPushType.voIP) {
        TwilioVoice.handleNotification(payload.dictionaryPayload, delegate: self)

        pushKitPushReceivedWithPayload(payload: payload)
    }

    completion()
}

func pushKitPushReceivedWithPayload(payload: PKPushPayload){
    if UIApplication.shared.applicationState != .active{
        let msgType = payload.dictionaryPayload["twi_message_type"] as? String
        if let messageType = msgType{
            if messageType == "twilio.voice.call"{
                fireLocalNotificationForVoiceCall(didStart: true)
            }else if messageType == "twilio.voice.cancel"{
                fireLocalNotificationForVoiceCall(didStart: false)
            }
        }
    }
}

下面是我添加的call kit的委托方法

extension AppDelegate : TVONotificationDelegate, TVOCallDelegate
{
  func callInviteReceived(_ callInvite: TVOCallInvite) 
  {
   if (callInvite.state == .pending) 
   {
        //code
   } 
   else if (callInvite.state == .canceled) 
   {
        //code
   }
  }
  func handleCallInviteReceived(_ callInvite: TVOCallInvite) 
  {
        //code
  }

  func handleCallInviteCanceled(_ callInvite: TVOCallInvite) 
  {
        //code
  }
}
 类似资料:
  • 我想实现一个功能在VoIP呼叫使用Twilio。例如,如果有人打电话给客户服务号码,在这种情况下,他们必须拨一些号码来导航,比如拨一些号码,选择语言,拨一些号码来与代表交谈。 注意:我可以在这里获得活动连接。浏览之后,我发现需要在TWIML中提供关键字。但在这种情况下我需要通过这些吗?我认为在我描述的情况下不需要它。 我走对路了吗?这有可能实现吗?如果我错过了什么?

  • 我相信我可能不太了解Twilio通话的流程。我有两种情况——一种是从浏览器打电话给手机(传出),另一种是从手机打电话给浏览器(客户端)(传入)。 对于这两个调用,当请求到达我的twilio语音URL时,我将twilio发送的post数据记录在日志文件中。 在这两种情况下,“direction”post变量都表示“inbound”。我希望其中一个说“入站”,另一个说“出站”,或“出站拨号”(根据文档

  • 我知道实现类似的最简单的方法是使用拨号动词重定向来电,但原因与问题并不相关,这是不可能的。

  • 我正试着从我的twilio试用帐户拨出电话。我指的是这个链接。基于这个链接,我创建了一个名为hello-client-twiml.php的页面,代码如下: 有人能帮我解决这个问题吗?提前谢了。

  • 不幸的是,Twilio文档不够清晰,我无法回答我的问题,所以我在这里。 当我的应用程序在前台/后台运行时,当用户调用时,我能够接收Twilio传入连接,并且我能够正确地处理这一点(在应用程序中显示弹出窗口,或者如果应用程序在后台,则发送本地通知)。 有没有什么办法在app根本不运行的情况下实现Twilio来电呢?我想知道这种情况是否可能: 用户A:关闭已实现Twilio调用的应用程序 用户B:通过

  • 是否有一种方法可以获得从来电连接到运营商到使用Twilio应答之间的时间? null 有办法得到#5和#9之间的时间增量吗?