一键导入
click2call
Initiate or terminate outgoing calls using the Voicenter Click2Call API
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Initiate or terminate outgoing calls using the Voicenter Click2Call 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
Implement a Pop-Up Screen endpoint that Voicenter calls during incoming calls to display caller CRM data to agents
| name | click2call |
| description | Initiate or terminate outgoing calls using the Voicenter Click2Call 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.
CRM integration context. When the user is building a full CRM integration — not just this API in isolation — always invoke the
crm-onboardingskill alongside this one and frame the answer covering all three core services: Click2Call, Screen Pop, and Call History.
Help the developer integrate Click2Call — initiate outbound calls directly from a CRM or web application with a single API request.
Use this skill when the user wants to:
VOICENTER_API_CODE=your_api_token_here
# The server's IP must be authorized in Voicenter CPanel
Click2Call creates two sequential call legs:
phone param). The agent picks up.target param) and bridges both legs.https://api.voicenter.com/ForwardDialer/click2call.aspx
Accepts: GET or POST-JSON
Response: XML by default, or JSON when format=json is included (always use format=json)
| Parameter | Required | Description |
|---|---|---|
code | ✅ | API authentication token |
phone | ✅ | Agent's extension SIP code or phone number (E.164 without +). For login-dependent extension: phone=logincode&phonelogincode=XXXX |
target | ✅ | Customer phone number (E.164 without +) or extension SIP |
action | ✅ | call to initiate, terminate to hang up |
format | ✅ | Always set to json to get JSON response instead of XML |
record | ❌ | true / false — enable call recording (default: false) |
phonecallerid | ❌ | Caller ID shown on agent's phone |
targetcallerid | ❌ | Caller ID shown to the customer |
phonemaxdialtime | ❌ | Leg 1 max ring time in seconds (default: 60) |
targetmaxdialtime | ❌ | Leg 2 max ring time in seconds (default: 60) |
maxduration | ❌ | Max call duration in seconds (default: 7200) |
phoneautoanswer | ❌ | true / 1 — auto-answer Leg 1 (Voicenter extensions only) |
checkphonedevicestate | ❌ | Block call if agent extension is offline |
checktargetdevicestate | ❌ | Block call if target extension is offline |
language | ❌ | Language for system prompts: he, en, ru, etc. |
var_* | ❌ | Up to 10 custom CRM params (e.g. var_clientID=123). Appear in CDR and Pop-Up Screen. |
ignoredncstatus | ❌ | 1=ignore DNC on phone, 2=ignore on target, 3=both |
{
"code": "XXXXXXXXXXXX",
"phone": "SIPSIP",
"target": "0501234567",
"action": "call",
"format": "json",
"record": "true",
"var_clientID": "CRM-9876",
"var_campaignID": "SUMMER2024"
}
https://api.voicenter.com/ForwardDialer/click2call.aspx?phone=SIPSIP&target=0501234567&code=XXXX&action=call&format=json&record=true
{
"ERRORCODE": 0,
"ERRORMESSAGE": "OK",
"CALLID": "20240601abc123def456"
}
| ERRORCODE | Meaning |
|---|---|
| 0 | Success |
| 1 | Invalid request parameters |
| 2 | Application error |
| 3 | Agent extension is offline |
| 4 | Extension blocked for Click2Call |
To hang up an active call on an extension:
{
"code": "XXXXXXXXXXXX",
"phone": "SIPSIP",
"action": "terminate",
"format": "json"
}
const C2C_URL = 'https://api.voicenter.com/ForwardDialer/click2call.aspx';
const CODE = process.env.VOICENTER_API_CODE!;
interface Click2CallResponse {
ERRORCODE: number;
ERRORMESSAGE: string;
CALLID: string;
}
async function click2call(
phone: string,
target: string,
options?: {
record?: boolean;
phonecallerid?: string;
targetcallerid?: string;
maxduration?: number;
customData?: Record<string, string>; // keys must start with var_
}
): Promise<Click2CallResponse> {
const body: Record<string, unknown> = {
code: CODE,
phone,
target,
action: 'call',
format: 'json',
record: options?.record ? 'true' : 'false',
...(options?.phonecallerid && { phonecallerid: options.phonecallerid }),
...(options?.targetcallerid && { targetcallerid: options.targetcallerid }),
...(options?.maxduration && { maxduration: options.maxduration }),
...options?.customData,
};
const res = await fetch(C2C_URL, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(body),
});
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const data: Click2CallResponse = await res.json();
if (data.ERRORCODE !== 0) throw new Error(`Click2Call error ${data.ERRORCODE}: ${data.ERRORMESSAGE}`);
return data;
}
async function terminateCall(phone: string): Promise<void> {
await fetch(C2C_URL, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ code: CODE, phone, action: 'terminate', format: 'json' }),
});
}
// CRM "Call" button — agent clicks to dial customer
const result = await click2call('SIPSIP', '0501234567', {
record: true,
customData: { var_clientID: 'CRM-9876', var_campaignID: 'SUMMER2024' },
});
console.log('Call started, CALLID:', result.CALLID);
format=json — without it the response is XML.CALLID — use it to correlate CDR records (Call Log API) and real-time events (Real-Time API).var_* custom params to surface CRM data in the Pop-Up Screen and CDR Notification webhook.checkphonedevicestate=true to avoid Leg 1 failures when agents are offline.+ — e.g. 972501234567 not +972501234567.CALLIDvar_* params you pass here appear in the Pop-Up Screen responseCALLID as ivrid to mute recording on this specific callphone parameter