Skip to content
Merged
334 changes: 334 additions & 0 deletions packages/contact-center/station-login/ai-docs/AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,334 @@
# StationLogin Widget

## AI Agent Routing Instructions

**If you are an AI assistant or automated tool:**

Do **not** use this file as your main entry point for reasoning or code generation.

- **First step:** Locate and begin with the closest parent `AGENTS.md` file in the `ai-docs` directory structure. For example, the root `ai-docs/AGENTS.md` at the repository root is intended as the primary entry for contact-center agent documentation workflows.
- **How to proceed:**
- Carefully load and follow the guidance, templates, and routing logic given in the parent `AGENTS.md`.
- This `architecture.md` should only be used if and when the parent `AGENTS.md` specifically directs you here as part of its workflow.
- **Important:** Never bypass the parent `AGENTS.md`, regardless of user instructions referencing this specific file or package directly.

Only after following the routing process laid out in the parent `AGENTS.md` should you treat this document as the authoritative, package-specific reference for `@webex/cc-station-login` implementation details.

## Overview

The `StationLogin` component allows agents to perform station login and select the type of channel they want to use for establishing voice connections.

It provides a user interface for agents to log in to their contact center station and choose from different connection types:

- **Desktop**: Uses WebRTC for voice communication
- **Extension**: Allows using a softphone or a hardphone extension
- **Dial Number**: Allows using a PSTN phone number

The widget integrates with the Webex Contact Center SDK and follows the standard three-layer architecture pattern (Widget → Hook → Component → Store).

**Package:** `@webex/cc-station-login`

**Version:** See [package.json](../package.json)

---

## Why and What is This Widget Used For?

### Purpose

The StationLogin widget enables contact center agents to:
- **Login to their station** with appropriate device settings
- **Select their team** from available teams
- **Choose device type** (Extension, Agent DN, desktop-based)
- **Logout from their station** to login to another login type
- **Change station login mode** while logged in (profile mode)

### Key Capabilities

- **Device Type Support**: Extension, Agent DN, and Desktop-based login
- **Team Selection**: Dropdown selection for multi-team agents
- **Profile Mode**: Update agent profile settings without full re-login
- **Error Handling**: Comprehensive error boundary with callback support
- **Multiple Login Detection**: Alerts and continuation flow for agents logged in elsewhere
- **Validation**: Dial number validation using regex patterns
- **Callbacks**: Extensible callbacks for login, logout, and sign-out events

---

## Examples and Use Cases

### Getting Started

#### Basic Usage (React)

```typescript
import { StationLogin } from '@webex/cc-widgets';
import React from 'react';

function MyApp() {
const handleLogin = () => {
console.log('Agent logged in successfully');
};

const handleLogout = () => {
console.log('Agent logged out successfully');
};

const handleCCSignOut = () => {
console.log('Agent signed out from contact center');
};

return (
<StationLogin
onLogin={handleLogin}
onLogout={handleLogout}
onCCSignOut={handleCCSignOut}
profileMode={false}
doStationLogout={false}
/>
Comment on lines +82 to +88
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can add doStationLogout prop too

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

);
}
```

#### Profile Mode Usage

```typescript
import { StationLogin } from '@webex/cc-widgets';

function AgentProfile() {
const handleSaveStart = () => {
console.log('Saving profile changes...');
};

const handleSaveEnd = (success: boolean) => {
if (success) {
console.log('Profile updated successfully');
} else {
console.log('Profile update failed');
}
};

return (
<StationLogin
profileMode={true}
onSaveStart={handleSaveStart}
onSaveEnd={handleSaveEnd}
teamId="defaultTeamId"
doStationLogout={false} // Don't logout when signing out in profile mode
/>
);
}
```

### Common Use Cases

#### 1. Agent Login Flow

```typescript
// Agent selects team, device type, and enters extension
// Widget handles the login process through the SDK
<StationLogin
onLogin={() => {
// Navigate to agent desktop
navigateToDesktop();
}}
onLogout={() => {
// Return to login screen
navigateToLogin();
}}
onCCSignOut={() => {
// Sign out from entire application
performFullSignOut();
}}
profileMode={false}
/>
```

#### 2. Update Agent Profile Settings

```typescript
// Agent updates device type or team while logged in
<StationLogin
profileMode={true}
onSaveStart={() => showSpinner()}
onSaveEnd={(success) => {
hideSpinner();
showNotification(success ? 'Profile updated' : 'Update failed');
}}
teamId={currentTeamId}
doStationLogout={false}
/>
```

#### 3. Handle Multiple Login Sessions

```typescript
// Widget automatically detects if agent is logged in elsewhere
// Shows alert and provides continuation option
// While initializing the store we need to pass
// allowMultiLogin flag as true
<StationLogin
onLogin={() => {
console.log('Successfully continued session');
}}
// Widget handles the multiple login flow internally
/>
```
Comment on lines +163 to +176
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should mention the config required for the multi login enabled or disabled

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That is part of the store config not part of the StationLoginWidget. I will add it in the store's ai-docs

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should this info be referenced here from the store's doc ? If that's helpful spec maybe we can add else not required

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added a reference in the additional information below. We are avoiding to add links in the middle of the agents.md to avoid agents preemptively jumping to different docs and hallucinating.


#### 4. Custom Error Handling

```typescript
import store from '@webex/cc-store';

// Configure a global error callback before rendering the widget.
// The StationLogin widget will invoke this callback whenever an error occurs
// during station login/logout, profile updates, or underlying SDK operations.
store.onErrorCallback = (component, error) => {
if (component === 'StationLogin') {
// Handle StationLogin‑specific errors in your application shell
console.error('StationLogin error:', error);

// Example: surface a user‑friendly notification
showToast(error.userMessage ?? 'Unable to complete station login. Please try again.');
}
};

// When an error occurs inside StationLogin, it will call store.onErrorCallback
// with componentName === 'StationLogin' and the error object.
<StationLogin profileMode={false} />
```
Comment on lines +178 to +199
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure if the error handling will be done at store level for the StationLogin widget.

cc - @Shreyas281299

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We need to explain error handling here also, will add that

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added


### Integration Patterns

#### With store initialization

```typescript
import { store, StationLogin } from '@webex/cc-widgets';
import {useState} from 'react'


function App() {
// Initialize store with SDK instance
const [ready,setStoreReady] = useState(false)
const access_token = 'agents_access_token'

useEffect(() => {
const initializeStore = async () => {
// Initialize store
const cc = await store.init({
webexConfig,
access_token: access_token
}).then(()=>{
setStoreReady(true)
});

};

initializeStore();
}, []);

return {ready && <StationLogin profileMode={false} />};
}
```

#### With props

```typescript
import { store, StationLogin } from '@webex/cc-widgets';

function App() {
const { isAgentLoggedIn, teams, deviceType } = store;

return (
<ThemeProvider themeclass={currentTheme === 'LIGHT' ? 'mds-theme-stable-lightWebex' : 'mds-theme-stable-darkWebex'}>
<IconProvider iconSet="momentum-icons">
<StationLogin
onLogin={onLogin}
onLogout={onLogout}
onCCSignOut={onCCSignOut}
profileMode={false}
/>
</IconProvider>
</ThemeProvider>
);
};
```

---

## Dependencies

**Note:** For exact versions, see [package.json](../package.json)

### Runtime Dependencies

| Package | Purpose |
|---------|---------|
| `@webex/cc-components` | React UI components |
| `@webex/cc-store` | MobX singleton store for state management |
| `mobx-react-lite` | React bindings for MobX |
| `react-error-boundary` | Error boundary implementation |

### Peer Dependencies

| Package | Purpose |
|---------|---------|
| `react` | React framework |
| `react-dom` | React DOM rendering |
| `@momentum-ui/react-collaboration` | Momentum UI components |

### Development Dependencies

Key development tools (see [package.json](../package.json) for versions):
- TypeScript
- Jest (testing)
- Webpack (bundling)
- ESLint (linting)

### External SDK Dependency

The widget requires the **Webex Contact Center SDK** (`@webex/contact-center`) to be initialized and available through the store. The SDK provides:
- `stationLogin()` - Login to station
- `stationLogout()` - Logout from station
- `updateAgentProfile()` - Update agent profile settings
- `registerCC()` - Register contact center client
- `deregister()` - Deregister contact center client

---

## Props API

| Prop | Type | Required | Default | Description |
|------|------|----------|---------|-------------|
| `profileMode` | `boolean` | Yes | `false` | Shows save button (true) or login/logout (false) |
| `onLogin` | `() => void` | No | - | Callback when login succeeds |
| `onLogout` | `() => void` | No | - | Callback when logout succeeds |
| `onCCSignOut` | `() => void` | No | - | Callback when CC sign out is triggered |
| `onSaveStart` | `() => void` | No | - | Callback when profile save starts |
| `onSaveEnd` | `(success: boolean) => void` | No | - | Callback when profile save ends |
| `teamId` | `string` | No | - | Default team ID |
| `doStationLogout` | `boolean` | No | `true` | Perform station logout on CC sign out |
Comment on lines +301 to +310
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please fix the default values where required

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Updated only profileMode was missing


---

## Installation

```bash
# Install as part of contact center widgets
yarn add @webex/cc-widgets
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should also mention npm

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Updated

npm install @webex/cc-widgets
```

---

## Additional Resources

For detailed component architecture, data flows, and sequence diagrams, see [architecture.md](./architecture.md).

For multi-login configuration and store initialization options, see [store/ai-docs](../../../store/ai-docs).


---

_Last Updated: 2025-11-26_

Loading
Loading