Best practice for SIP noise cancellation in LiveKit Cloud

This question originally came up in our Slack community and the thread has been consolidated here for long-term reference.

What is the best practice for setting up noise cancellation in SIP with LiveKit Cloud?

Should I turn on both Krisp config on the SIP Trunk AND use BVCTelephony in code?

from livekit.plugins import noise_cancellation

await session.start(
    room_input_options=room_io.RoomInputOptions(
        noise_cancellation=noise_cancellation.BVCTelephony(),
    ),
)

Only use one noise cancellation method, not both.

For 1:1 calls (one user and one agent): Use BVCTelephony in your agent code. This is the recommended approach.

For multi-participant calls: Enable Krisp NC on the SIP trunk so it applies to the audio shared between all participants.

Both options use Krisp - the trunk setting is Krisp NC, and BVCTelephony is the telephony-optimized model.

About running both: There are no known actual issues if noise cancellation runs twice, but since the models aren’t designed for it, there may be negative effects in edge cases.

About echo cancellation: Echo cancellation is currently handled by the phone device itself. Results depend on specific hardware and OS. BVCTelephony may help a little with preventing the agent from hearing echoes, but it’s not designed for echo cancellation.