com um clique
login-logout
Set agent login/logout and status via the Voicenter Login/Logout API
Instalar com Codex ou Claude Copie este prompt, cole no Codex, Claude ou outro assistente e deixe que ele revise a página da skill e instale para você.
Menu
Set agent login/logout and status via the Voicenter Login/Logout API
Instalar com Codex ou Claude Copie este prompt, cole no Codex, Claude ou outro assistente e deixe que ele revise a página da skill e instale para você.
Baseado na classificação ocupacional 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 | login-logout |
| description | Set agent login/logout and status via the Voicenter Login/Logout 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 agent status management — log agents in/out and set their work status (Login, Logout, Lunch, etc.) directly from a CRM, HR system, or workforce management tool.
Use this skill when the user wants to:
VOICENTER_API_CODE=your_api_token_here
https://api.voicenter.com/UserLogin/SetStatusFromAPI
Accepts: GET or POST-JSON
Response: JSON
Code field in the request body (your API token from Voicenter back office).
| Field | Required | Description |
|---|---|---|
Code | ✅ | API authentication token |
UserId | ✅ | Voicenter user ID (from CPanel or provided by Voicenter support) |
ExtensionUser | ✅ | SIP code of the extension to log into — use SIP field from Extension List API |
Status | ✅ | Status code (see table below) |
| Code | Status | Typical use |
|---|---|---|
| 1 | Login | Start of shift — agent is ready to take calls |
| 2 | Logout | End of shift — agent goes offline |
| 3 | Lunch | Agent on lunch break |
| 5 | Administrative | Agent doing admin work, not taking calls |
| 7 | Private | Personal time |
| 9 | Other | Custom unavailable state |
| 11 | Training | Agent in training |
| 12 | Team meeting | Agent in a team meeting |
| 13 | Brief | Agent in a briefing |
Status names can be customized in the Voicenter CPanel.
https://api.voicenter.com/UserLogin/SetStatusFromAPI?Code=XXXXXXXX&UserId=123456789&ExtensionUser=SIPSIP&Status=1
{
"Code": "XXXXXXXXXXX",
"UserId": "123456789",
"ExtensionUser": "SIPSIP1",
"Status": 1
}
{
"Status": 1,
"StatusError": 1,
"StatusErroMessage": "OK"
}
| Field | Description |
|---|---|
Status | 1 = success, 2 = invalid Code or UserId, 3 = invalid Extension, 4 = status not supported |
StatusError | 0 = request format error, 1 = success, 4 = internal error, 6 = missing parameters |
StatusErroMessage | "OK", "Authorization Failed", "No extension found", "Extension is already in use", "Status not support", "Error on update" |
const LOGIN_URL = 'https://api.voicenter.com/UserLogin/SetStatusFromAPI';
const CODE = process.env.VOICENTER_API_CODE!;
interface LoginResponse {
Status: number;
StatusError: number;
StatusErroMessage: string;
}
const AgentStatus = {
LOGIN: 1,
LOGOUT: 2,
LUNCH: 3,
ADMINISTRATIVE: 5,
PRIVATE: 7,
OTHER: 9,
TRAINING: 11,
TEAM_MEETING: 12,
BRIEF: 13,
} as const;
type AgentStatusCode = typeof AgentStatus[keyof typeof AgentStatus];
async function setAgentStatus(
userId: string,
extensionUser: string,
status: AgentStatusCode
): Promise<LoginResponse> {
const res = await fetch(LOGIN_URL, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ Code: CODE, UserId: userId, ExtensionUser: extensionUser, Status: status }),
});
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const data: LoginResponse = await res.json();
if (data.Status !== 1) throw new Error(`Login API: ${data.StatusErroMessage}`);
return data;
}
// Agent clicks "Start Shift" in CRM
async function onShiftStart(agent: { voicenterId: string; extension: string }) {
await setAgentStatus(agent.voicenterId, agent.extension, AgentStatus.LOGIN);
await crm.shiftLog.create({ userId: agent.voicenterId, type: 'login', time: new Date() });
}
// Agent clicks "Take Lunch"
async function onLunchBreak(agent: { voicenterId: string; extension: string }) {
await setAgentStatus(agent.voicenterId, agent.extension, AgentStatus.LUNCH);
}
// CRM session expires → auto logout
async function onSessionTimeout(agent: { voicenterId: string; extension: string }) {
await setAgentStatus(agent.voicenterId, agent.extension, AgentStatus.LOGOUT);
}
UserId values from Voicenter support or from CPanel → Users. ExtensionUser (SIP code) comes from the Extension List API."Extension is already in use" means another user is already logged into that extension. Log out the current user first, or choose a different extension.userStatusUpdate event to confirm the status change propagated and update your UI.StatusErroMessage (not StatusErrorMessage) — this is intentional in the API.SIP codes to use as ExtensionUseruserStatusUpdate events to confirm and reflect status changes in your UIonlineUserStatus field to see the current agent status without calling this API