*** id: 1ec2c976-81b0-4c74-8931-39e3bffd8bcf title: tap slug: /node/reference/voice/call/tap description: tap method for the Call class. max-toc-depth: 3 ---------------- [calltap-onstarted]: /docs/server-sdk/v4/node/reference/voice/call-tap#onstarted [calltap]: /docs/server-sdk/v4/node/reference/voice/call-tap [tapaudio]: /docs/server-sdk/v4/node/reference/voice/call/tap-audio [tapdevice]: /docs/server-sdk/v4/node/reference/voice/types#tapdevice ### tap * **tap**(`params`): `Promise`\<[`CallTap`][calltap]> Intercept call media and stream it to the specified WebSocket endpoint. Prefer using [tapAudio][tapaudio] if you only need to tap audio. This is an experimental method. The destination must be a hosted WebSocket/RTP server, with an address that SignalWire can reach. A current limitation of this method is that the destination device does not receive any metadata regarding the origin of the stream. #### Parameters Object containing the parameters for tapping the call. Destination device. Can be either WebSocket or RTP. See [`TapDevice`][tapdevice]. An object with the configuration for audio tapping. See audio parameters below. Direction to tap. Can be `"listen"` (what the caller hears), `"speak"` (what the caller says), or `"both"`. Callback to listen for events. List of tap events can be found [here][calltap]. Example event: [`onStarted`][calltap-onstarted]. #### Returns `Promise`\<[`CallTap`][calltap]> A promise that resolves to a [`CallTap`][calltap] object that you can use to view the current state and results of the `tap` session. #### Example In this example, we dial a phone number and tap the call audio to a WebSocket endpoint. After the call is tapped, we play a TTS message to the caller, and then stop the tap and hangup the call. ```js import { SignalWire } from "@signalwire/realtime-api"; const client = await SignalWire({ project: "ProjectID Here", token: "Token Here" }) const voiceClient = client.voice; // Listen for incoming calls await voiceClient.listen({ topics: ["office"], onCallReceived: async (call) => { console.log("Call received"); // Answer the call await call.answer(); // Start a tap const callTap = await call.tap({ device: { type: "ws", uri: "wss://example.domain.com/websocket_endpoint" }, audio: { direction: "both", }, listen: { onStarted: () => { console.log("Tap started"); }, onEnded: () => { console.log("Tap ended"); }, } }).onStarted(); await call.playTTS({ text: "We are currently tapping the call audio." }); // Stop the tap await callTap.stop(); call.hangup(); } }); ```