You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Linphone SDK的Android SIP来电跨应用转接可行性及实现方案咨询

使用Linphone SDK实现SIP来电转接(Kotlin/Android)

当然可以实现SIP来电转接至其他SIP客户端,Linphone SDK原生支持SIP呼叫转接能力,下面是具体的实现方案和代码示例:

前置条件

  • 确保Linphone SDK已完成初始化,当前存在处于IncomingReceived或Connected状态的来电Call对象
  • 目标转接地址为合法的SIP URI(格式示例:sip:target_user@sip_domain.com)

核心实现逻辑

Linphone的Call类提供了两种转接方式:盲转(无需对方确认)和咨询转(先与目标通话再转接),可根据业务场景选择:

1. 盲转(Blind Transfer)

直接将来电转至目标地址,无需中间确认步骤:

// 获取当前活跃的来电实例
val incomingCall = LinphoneManager.core.currentCall
// 替换为实际要转接的SIP地址
val targetSipUri = "sip:target_user@your_sip_domain.com"

incomingCall?.let { call ->
    // 执行盲转操作
    call.transfer(targetSipUri)
    // 监听转接状态
    call.addListener(object : CallListener() {
        override fun onTransferStateChanged(call: Call, state: Call.State) {
            when(state) {
                Call.State.TransferInProgress -> {
                    // 转接中,可更新UI提示
                }
                Call.State.TransferDone -> {
                    // 转接成功,可结束原来电流程
                }
                Call.State.TransferFailed -> {
                    // 转接失败,提示用户并恢复原来电状态
                }
                else -> {}
            }
        }
    })
}

2. 咨询转(Attended Transfer)

先与目标地址建立通话,确认后再完成转接,适合需要提前沟通的场景:

val incomingCall = LinphoneManager.core.currentCall
val targetSipUri = "sip:target_user@your_sip_domain.com"

incomingCall?.let { originalCall ->
    // 先保持原来电
    originalCall.pause()

    // 发起向目标地址的新呼叫
    val callParams = LinphoneManager.core.createCallParams(null)
    val targetAddress = LinphoneManager.core.createAddress(targetSipUri)
    val outgoingCall = LinphoneManager.core.inviteAddressWithParams(targetAddress, callParams)

    outgoingCall?.addListener(object : CallListener() {
        override fun onCallStateChanged(call: Call, state: Call.State, message: String) {
            when(state) {
                Call.State.Connected -> {
                    // 目标已接通,执行咨询转
                    originalCall.transferToAnotherCall(outgoingCall)
                }
                Call.State.Failed -> {
                    // 呼叫目标失败,恢复原来电
                    originalCall.resume()
                }
                else -> {}
            }
        }
    })
}

注意事项

  • 确认你的SIP服务器支持呼叫转接功能,部分服务器需配置对应权限
  • 转接操作需在来电处于可交互状态时执行(如已接听或已接通)
  • 需处理转接失败的异常场景(如目标地址无效、服务器拒绝等),给用户明确的反馈

内容的提问来源于stack exchange,提问作者Avi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 17:11:12