AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
SKILL verified MIT Self-run

Mute Recording

skill-voicenterteam-claude-marketplace-mute-recording · by VoicenterTeam

Mute or unmute call recording in real time via the Voicenter Mute Call Recording API

No reviews yet
0 installs
12 views
0.0% view→install

Install

$ agentstack add skill-voicenterteam-claude-marketplace-mute-recording

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets Used
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-voicenterteam-claude-marketplace-mute-recording)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
1mo ago

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Mute Recording? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

> Language. Reply in the user's language: detect what they write — Hebrew→Hebrew, English→English — and mirror it, switching if they switch mid-conversation. This shapes your prose, your questions, and your AskUserQuestion option labels only. It does not change the artifacts you produce — identifiers, JSON keys, BCP-47 language codes, API field names, and other data stay exactly as specified.

Help the developer integrate real-time recording mute/unmute into their CRM — so agents can pause recording when a customer provides sensitive information (credit card, ID number, etc.).

When to use this skill

Use this skill when the user wants to:

  • Add a "Pause Recording" button in their CRM for PCI-DSS compliance
  • Automatically pause recording when an agent opens a payment form
  • Mute recording for a specific call by its ID (ivrid)
  • Mute all calls on an extension (when the agent enters a sensitive mode)
  • Resume recording after sensitive data entry is complete

Environment Variables

VOICENTER_MONITOR_SERVER=https://monitor1.voicenter.co
# Replace "monitor1" with your account's actual monitor server.
# Get the dynamic server from the Real-Time API connection URL, or contact Voicenter support.

How it works

  • Send a mute request by extension to mute all active calls on that extension.
  • Send a mute request by call ID (ivrid) to mute one specific call.
  • Set state: "0" to unmute and resume recording.

⚠️ Dynamic Monitor Server

The endpoint uses a dynamic monitor server assigned to your account. URL format: https://.voicenter.co/api/MuteUnmuteCalls

To get your account's monitor server:

  • From the Real-Time API: the socket connection URL contains your monitor server hostname
  • Or contact Voicenter support to get your static monitor server name (e.g. monitor1, monitor2)

Mute by Extension

Mutes all active calls on the given extension SIP code.

Note: If the agent makes a new call after this request, that new call will not be muted automatically — send another mute request.

POST-JSON

{
  "extension": "SIPSIP",
  "state": "1"
}

GET

https://YOUR_MONITOR.voicenter.co/api/MuteUnmuteCalls?extension=SIPSIP&state=1

| Field | Required | Values | |---|---|---| | extension | ✅ | SIP code of the extension | | state | ✅ | "1" = Mute, "0" = Unmute |


Mute by Call ID (ivrid)

Mutes one specific call by its unique Voicenter call ID.

POST-JSON

{
  "ivrid": "202406011200abc123def456",
  "state": "1"
}

GET

https://YOUR_MONITOR.voicenter.co/api/MuteUnmuteCalls?ivrid=202406011200abc123def456&state=1

| Field | Required | Values | |---|---|---| | ivrid | ✅ | Unique call ID from Click2Call response, CDR Notification, or Real-Time events | | state | ✅ | "1" = Mute, "0" = Unmute |


Response

{
  "ErrorCode": "200",
  "Message": "Success",
  "ActionID": "14d3b31988b247be8ff5818d1cadc3d3"
}

| Field | Description | |---|---| | ErrorCode | "200" = success | | Message | "Success" on success; "UniqueIvrID not found" if ivrid is wrong; "Parameters are not valid..." if params are malformed | | ActionID | Unique ID of this mute action |


TypeScript Implementation

const MONITOR_SERVER = process.env.VOICENTER_MONITOR_SERVER!; // e.g. 'https://monitor1.voicenter.co'

interface MuteResponse {
  ErrorCode: string;
  Message: string;
  ActionID: string;
}

async function muteByExtension(extension: string, mute: boolean): Promise {
  const res = await fetch(`${MONITOR_SERVER}/api/MuteUnmuteCalls`, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ extension, state: mute ? '1' : '0' }),
  });
  if (!res.ok) throw new Error(`HTTP ${res.status}`);
  const data: MuteResponse = await res.json();
  if (data.ErrorCode !== '200') throw new Error(`Mute failed: ${data.Message}`);
  return data;
}

async function muteByCallId(ivrid: string, mute: boolean): Promise {
  const res = await fetch(`${MONITOR_SERVER}/api/MuteUnmuteCalls`, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ ivrid, state: mute ? '1' : '0' }),
  });
  if (!res.ok) throw new Error(`HTTP ${res.status}`);
  const data: MuteResponse = await res.json();
  if (data.ErrorCode !== '200') throw new Error(`Mute failed: ${data.Message}`);
  return data;
}

PCI-DSS Payment Flow Pattern

// 1. Agent clicks "Enter Payment Details" in CRM
async function onPaymentFormOpen(agentExtension: string) {
  await muteByExtension(agentExtension, true);
  console.log('Recording paused — payment data not recorded');
}

// 2. Agent collects credit card info (this portion is not recorded)

// 3. Agent clicks "Done" in CRM
async function onPaymentFormClose(agentExtension: string) {
  await muteByExtension(agentExtension, false);
  console.log('Recording resumed');
}

Tips

  • Use mute by ivrid for precision when an agent has multiple concurrent calls (conference, attended transfer).
  • Use mute by extension for simple single-call scenarios where you don't have the ivrid handy.
  • The ivrid for a live call is available from the Real-Time API (ExtensionEvent) or from the Click2Call response CALLID.
  • Mute state is reflected in:
  • recording.IsMuted field in Real-Time ExtensionEvent
  • isMuted field in Pop-Up Screen webhook payload
  • The CDR recording metadata after the call ends
  • Compliant with PCI-DSS requirements for protecting cardholder data during voice transactions.

Related Skills

  • Real-Time API — Get ivrid of the current live call and monitor mute state changes
  • Click2Call — The CALLID returned is the same as ivrid for mute requests
  • Active Callsrecording.IsMuted field shows current mute state per extension
  • Pop-Up ScreenisMuted field in the popup payload reflects real-time recording state

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.