원클릭으로
mute-recording
Mute or unmute call recording in real time via the Voicenter Mute Call Recording API
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Mute or unmute call recording in real time via the Voicenter Mute Call Recording API
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Designs the structural skeleton of a Voicenter Bot via interview. Use this skill when the user wants to create, design, scope, or modify a Voicenter voice/chat bot — phrases like "design a bot", "create an agent spec", "build a Voicenter bot", "patch this bot", "add an intent", "change the bot's persona", "modify the flow graph", or any reference to the Agent Spec Designer / Skill 1 in the Voicenter bot generation pipeline. Produces an Agent Spec markdown file (sections 1-4, 4.5, section 5 stubs, section 6 initial, section 7 init). Two named entry modes — greenfield (no spec attached) and patch (spec attached). Does NOT author per-intent language content (validationPrompt, post-execution intentInstructions) — that's Skill 2 (Intent Detail Author). Does NOT emit wire-format JSON — that's Skill 3 (JSON Assembler).
Assembles a fully-detailed Voicenter Agent Spec into Bot JSON wire format — the final mechanical step in the three-skill pipeline. Use this skill when an Agent Spec exists with all section 5 entries marked `[detailed]` and the user wants the deployable JSON. Trigger phrases include "run Skill 3", "assemble the JSON", "emit the bot JSON", "publish the bot", "build the wire-format", "Skill 3 (JSON Assembler)", or any direct continuation from Skill 2's completion handoff. Produces a single `bot-<name>-<date>.json` file plus a banner identifying every fail-loud sentinel and any drift between spec section 6 and what Skill 3 regenerated. Refuses to assemble if any intent is still `[structural]` or `[detailed-revisit]`, or if the spec deviates from the strict template (Doc 2 §3.7). Runs the §15.4 cross-reference pass — 23 checks (8 §15.4 + 3 Compass + 3 botIntents-role + 1 duplicate-global-intent + 8 field-placement doctrine), checks 1–7, 11–13, 15, and 16–21 blocking. Does NOT author any text content (Skills 1 and
Authors the per-intent language content of a Voicenter Agent Spec — slot descriptions, validationPrompt, post-execution intentInstructions, and RT-specific Configuration text. Use this skill when an Agent Spec exists with section 5 entries marked `[structural]` or `[detailed-revisit]`, and the user wants to fill them in. Trigger phrases include "run Skill 2", "detail the intents", "fill in the per-intent fields", "Skill 2 (Intent Detail Author)", or any direct continuation from Skill 1's handoff hint. Walks intents in user-confirmed batches with a checkpoint after each batch. Reactivable — invoke as many times as needed; spec state is the resume point. Does NOT modify the structural skeleton (sections 1, 2, 3, 4, 4.5.1/.2/.4) — that's Skill 1 (Agent Spec Designer). Does NOT emit wire-format JSON — that's Skill 3 (JSON Assembler).
Pull call detail records (CDR) from Voicenter using the Call Log API
Receive and handle CDR push notifications from Voicenter after every call ends
Initiate or terminate outgoing calls using the Voicenter Click2Call API
| name | mute-recording |
| description | Mute or unmute call recording in real time via the Voicenter Mute Call Recording API |
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
AskUserQuestionoption 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.).
Use this skill when the user wants to:
ivrid)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.
ivrid) to mute one specific call.state: "0" to unmute and resume recording.The endpoint uses a dynamic monitor server assigned to your account.
URL format: https://<monitorX>.voicenter.co/api/MuteUnmuteCalls
To get your account's monitor server:
monitor1, monitor2)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.
{
"extension": "SIPSIP",
"state": "1"
}
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 |
Mutes one specific call by its unique Voicenter call ID.
{
"ivrid": "202406011200abc123def456",
"state": "1"
}
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 |
{
"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 |
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<MuteResponse> {
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<MuteResponse> {
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;
}
// 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');
}
ivrid for a live call is available from the Real-Time API (ExtensionEvent) or from the Click2Call response CALLID.recording.IsMuted field in Real-Time ExtensionEventisMuted field in Pop-Up Screen webhook payloadivrid of the current live call and monitor mute state changesCALLID returned is the same as ivrid for mute requestsrecording.IsMuted field shows current mute state per extensionisMuted field in the popup payload reflects real-time recording state