convoai 1.0.13 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,2 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerAgentChat(program: Command): void;
@@ -0,0 +1,314 @@
1
+ import { createServer as createHttpServer } from 'node:http';
2
+ import { WebSocketServer } from 'ws';
3
+ import { readFileSync } from 'node:fs';
4
+ import { fileURLToPath } from 'node:url';
5
+ import { dirname, join } from 'node:path';
6
+ import chalk from 'chalk';
7
+ import { getAgentAPI } from './_helpers.js';
8
+ import { resolveConfig } from '../../config/manager.js';
9
+ import { getPreset } from '../../presets/defaults.js';
10
+ import { generateRtcToken } from '../../utils/token.js';
11
+ import { findChrome } from '../../utils/find-chrome.js';
12
+ import { withSpinner } from '../../ui/spinner.js';
13
+ import { printSuccess, printError } from '../../ui/output.js';
14
+ import { handleError } from '../../utils/errors.js';
15
+ import { track } from '../../utils/telemetry.js';
16
+ const __filename = fileURLToPath(import.meta.url);
17
+ const __dirname = dirname(__filename);
18
+ // ─── Greeting ───────────────────────────────────────────────────────────────
19
+ function getGreeting(lang) {
20
+ const m = {
21
+ 'zh-CN': '你好,我是声网 ConvoAI 语音助手,有什么可以帮你的吗?',
22
+ 'zh-HK': '你好,我是聲網 ConvoAI 語音助手,有什麼可以幫你的嗎?',
23
+ 'zh-TW': '你好,我是聲網 ConvoAI 語音助手,有什麼可以幫你的嗎?',
24
+ 'ja-JP': 'こんにちは、Agora ConvoAI 音声アシスタントです。何かお手伝いできますか?',
25
+ 'ko-KR': '안녕하세요, Agora ConvoAI 음성 어시스턴트입니다. 무엇을 도와드릴까요?',
26
+ };
27
+ return m[lang] ?? 'Hi, I\'m your Agora ConvoAI voice assistant. How can I help you?';
28
+ }
29
+ // ─── Find chat-client.html ──────────────────────────────────────────────────
30
+ function findChatHtml() {
31
+ let dir = __dirname;
32
+ for (let i = 0; i < 6; i++) {
33
+ const c = join(dir, 'src', 'web', 'chat-client.html');
34
+ try {
35
+ readFileSync(c);
36
+ return c;
37
+ }
38
+ catch { /* */ }
39
+ dir = dirname(dir);
40
+ }
41
+ throw new Error('Could not find chat-client.html');
42
+ }
43
+ // ─── Terminal UI ────────────────────────────────────────────────────────────
44
+ class TerminalUI {
45
+ messages = [];
46
+ status = 'Starting...';
47
+ agentSpeaking = false;
48
+ agentId = '';
49
+ channel = '';
50
+ setAgent(id, ch) { this.agentId = id; this.channel = ch; }
51
+ setStatus(s) { this.status = s; this.render(); }
52
+ setAgentSpeaking(s) { this.agentSpeaking = s; this.render(); }
53
+ updateMessages(entries) {
54
+ if (entries.length > this.messages.length) {
55
+ this.messages = entries.map(e => ({ role: e.role, content: e.content || '' }));
56
+ this.render();
57
+ }
58
+ }
59
+ render() {
60
+ const P = chalk.hex('#786af4');
61
+ const B = chalk.hex('#5b8eff');
62
+ const W = chalk.hex('#c8c8ff');
63
+ // Clear screen
64
+ process.stdout.write('\x1b[2J\x1b[H');
65
+ // Banner
66
+ console.log('');
67
+ console.log(` ${P('▗▄▄▄▄▄▄▄▄▄▄▄▄▄▖')}`);
68
+ console.log(` ${P('▐')}${B(' ')}${W('██')}${B(' ')}${W('██')}${B(' ')}${P('▌')} ${chalk.bold.hex('#786af4')('ConvoAI Voice Chat')}`);
69
+ console.log(` ${P('▐')}${B(' ')}${W('▀▀▀▀')}${B(' ')}${P('▌')} ${chalk.dim(`Channel: ${this.channel}`)}`);
70
+ console.log(` ${P('▝▀▀▀▀▀▀▀█▀▀▀▀▘')} ${chalk.dim(`Agent: ${this.agentId.slice(0, 12)}...`)}`);
71
+ console.log(` ${P(' ▀▚')}`);
72
+ console.log('');
73
+ console.log(chalk.dim(' ─────────────────────────────────────────'));
74
+ console.log('');
75
+ // Messages
76
+ if (this.messages.length === 0) {
77
+ console.log(chalk.dim(' Waiting for conversation...'));
78
+ }
79
+ else {
80
+ const show = this.messages.slice(-12); // show last 12 messages
81
+ for (const msg of show) {
82
+ if (msg.role === 'assistant') {
83
+ console.log(` ${chalk.green('[assistant]')} ${msg.content}`);
84
+ }
85
+ else {
86
+ console.log(` ${chalk.cyan('[you] ')} ${msg.content}`);
87
+ }
88
+ }
89
+ }
90
+ console.log('');
91
+ console.log(chalk.dim(' ─────────────────────────────────────────'));
92
+ // Status bar
93
+ if (this.agentSpeaking) {
94
+ console.log(` ${chalk.green('🔊 Agent speaking...')}`);
95
+ }
96
+ else {
97
+ console.log(` ${chalk.cyan('🎙 Listening...')} ${chalk.dim('(speak now)')}`);
98
+ }
99
+ console.log('');
100
+ console.log(chalk.dim(' Press Ctrl+C to exit'));
101
+ }
102
+ }
103
+ // ─── Command Registration ───────────────────────────────────────────────────
104
+ export function registerAgentChat(program) {
105
+ program
106
+ .command('chat')
107
+ .description('Voice chat with an AI agent directly in your terminal (no browser)')
108
+ .requiredOption('-c, --channel <name>', 'Channel name')
109
+ .option('--preset <name>', 'Use a built-in preset')
110
+ .option('--model <model>', 'LLM model name')
111
+ .option('--tts <vendor>', 'TTS vendor')
112
+ .option('--asr <vendor>', 'ASR vendor')
113
+ .option('--system-message <msg>', 'System prompt')
114
+ .option('--greeting <msg>', 'Greeting message')
115
+ .option('--idle-timeout <seconds>', 'Idle timeout', '300')
116
+ .option('--profile <name>', 'Config profile')
117
+ .action(async (opts) => {
118
+ try {
119
+ await chatAction(opts);
120
+ }
121
+ catch (error) {
122
+ handleError(error);
123
+ }
124
+ });
125
+ }
126
+ // ─── Action ─────────────────────────────────────────────────────────────────
127
+ async function chatAction(opts) {
128
+ // ── Check Chrome ─────────────────────────────────────────────────────────
129
+ const chromePath = findChrome();
130
+ if (!chromePath) {
131
+ printError('Chrome/Chromium not found on your system.');
132
+ console.log(chalk.dim(' Install Chrome: https://www.google.com/chrome'));
133
+ console.log(chalk.dim(' Or use browser mode: convoai agent join -c ' + opts.channel));
134
+ process.exit(1);
135
+ }
136
+ const config = resolveConfig(opts.profile);
137
+ const appId = config.app_id;
138
+ if (!appId) {
139
+ printError('App ID not configured. Run `convoai config init` first.');
140
+ process.exit(1);
141
+ }
142
+ // ── 1. Generate tokens ────────────────────────────────────────────────────
143
+ const agentUid = 0;
144
+ const clientUid = 12345;
145
+ const agentToken = await generateRtcToken(opts.channel, agentUid);
146
+ const clientToken = await generateRtcToken(opts.channel, clientUid);
147
+ if (!agentToken) {
148
+ printError('Token generation failed. Run `convoai config set app_certificate <cert>`.');
149
+ process.exit(1);
150
+ }
151
+ // ── 2. Start agent ────────────────────────────────────────────────────────
152
+ const presetProps = opts.preset ? getPreset(opts.preset) : undefined;
153
+ const llm = {
154
+ ...config.llm,
155
+ ...presetProps?.llm,
156
+ api_key: config.llm?.api_key ?? presetProps?.llm?.api_key,
157
+ url: config.llm?.url ?? presetProps?.llm?.url,
158
+ };
159
+ if (opts.model)
160
+ llm.model = opts.model;
161
+ if (opts.systemMessage)
162
+ llm.system_messages = [{ role: 'system', content: opts.systemMessage }];
163
+ const asrLang = config.asr?.language ?? 'en-US';
164
+ if (opts.greeting) {
165
+ llm.greeting_message = opts.greeting;
166
+ }
167
+ else {
168
+ llm.greeting_message = getGreeting(asrLang);
169
+ }
170
+ const request = {
171
+ name: `chat-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`,
172
+ properties: {
173
+ channel: opts.channel,
174
+ token: agentToken,
175
+ agent_rtc_uid: String(agentUid),
176
+ remote_rtc_uids: ['*'],
177
+ idle_timeout: parseInt(opts.idleTimeout, 10),
178
+ llm: Object.keys(llm).length > 0 ? llm : undefined,
179
+ tts: opts.tts
180
+ ? { ...config.tts, vendor: opts.tts, params: { ...config.tts?.params } }
181
+ : config.tts,
182
+ asr: opts.asr
183
+ ? { ...config.asr, vendor: opts.asr, params: { ...config.asr?.params } }
184
+ : config.asr?.vendor ? config.asr : { vendor: 'ares', language: 'zh-CN' },
185
+ },
186
+ };
187
+ const api = getAgentAPI(opts.profile);
188
+ const result = await withSpinner('Starting agent...', () => api.start(request));
189
+ track('agent_chat');
190
+ // ── 3. Start HTTP + WebSocket servers ──────────────────────────────────────
191
+ const httpPort = 3210;
192
+ const wsPort = 3211;
193
+ const htmlPath = findChatHtml();
194
+ const html = readFileSync(htmlPath, 'utf-8');
195
+ const httpServer = createHttpServer((_, res) => {
196
+ res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
197
+ res.end(html);
198
+ });
199
+ await new Promise((resolve, reject) => {
200
+ httpServer.listen(httpPort, () => resolve());
201
+ httpServer.on('error', reject);
202
+ });
203
+ const wss = new WebSocketServer({ port: wsPort });
204
+ const ui = new TerminalUI();
205
+ ui.setAgent(result.agent_id, opts.channel);
206
+ wss.on('connection', (ws) => {
207
+ ws.on('message', (raw) => {
208
+ try {
209
+ const msg = JSON.parse(raw.toString());
210
+ switch (msg.type) {
211
+ case 'ready':
212
+ ui.setStatus('Connected — speak now!');
213
+ break;
214
+ case 'agent_speaking':
215
+ ui.setAgentSpeaking(msg.speaking);
216
+ break;
217
+ case 'agent_left':
218
+ ui.setStatus('Agent disconnected');
219
+ break;
220
+ case 'error':
221
+ ui.setStatus(`Error: ${msg.text}`);
222
+ break;
223
+ }
224
+ }
225
+ catch { /* ignore */ }
226
+ });
227
+ });
228
+ // ── 4. Launch headless Chrome ──────────────────────────────────────────────
229
+ const puppeteer = await import('puppeteer-core');
230
+ const browser = await puppeteer.default.launch({
231
+ executablePath: chromePath,
232
+ headless: true,
233
+ args: [
234
+ '--use-fake-ui-for-media-stream', // auto-grant microphone
235
+ '--autoplay-policy=no-user-gesture-required',
236
+ '--no-sandbox',
237
+ ],
238
+ });
239
+ const page = await browser.newPage();
240
+ // Grant microphone permission
241
+ const context = browser.defaultBrowserContext();
242
+ await context.overridePermissions(`http://localhost:${httpPort}`, ['microphone']);
243
+ const params = new URLSearchParams({
244
+ appId: appId,
245
+ channel: opts.channel,
246
+ token: clientToken ?? '',
247
+ uid: String(clientUid),
248
+ wsPort: String(wsPort),
249
+ });
250
+ await page.goto(`http://localhost:${httpPort}?${params}`);
251
+ // ── 5. Poll history for transcription ──────────────────────────────────────
252
+ const historyTimer = setInterval(async () => {
253
+ try {
254
+ const h = await api.history(result.agent_id);
255
+ const entries = h.contents ?? [];
256
+ ui.updateMessages(entries);
257
+ }
258
+ catch { /* agent may have stopped */ }
259
+ }, 2000);
260
+ // Initial render
261
+ ui.setStatus('Connecting...');
262
+ // ── 6. Cleanup on exit ─────────────────────────────────────────────────────
263
+ const cleanup = async () => {
264
+ clearInterval(historyTimer);
265
+ // Tell headless page to leave channel
266
+ for (const client of wss.clients) {
267
+ try {
268
+ client.send(JSON.stringify({ type: 'stop' }));
269
+ }
270
+ catch { /* */ }
271
+ }
272
+ // Small delay for graceful disconnect
273
+ await new Promise(r => setTimeout(r, 500));
274
+ try {
275
+ await browser.close();
276
+ }
277
+ catch { /* */ }
278
+ wss.close();
279
+ httpServer.close();
280
+ // Show final conversation
281
+ process.stdout.write('\x1b[2J\x1b[H');
282
+ console.log('');
283
+ try {
284
+ const h = await api.history(result.agent_id);
285
+ const entries = h.contents ?? [];
286
+ if (entries.length > 0) {
287
+ console.log(chalk.bold(' Conversation:'));
288
+ console.log('');
289
+ for (const e of entries) {
290
+ const role = e.role === 'assistant'
291
+ ? chalk.green('[assistant]')
292
+ : chalk.cyan('[you] ');
293
+ console.log(` ${role} ${e.content || chalk.dim('(empty)')}`);
294
+ }
295
+ console.log('');
296
+ console.log(chalk.dim(` ${entries.length} messages`));
297
+ }
298
+ }
299
+ catch { /* */ }
300
+ try {
301
+ await withSpinner('Stopping agent...', () => api.stop(result.agent_id));
302
+ printSuccess('Session ended.');
303
+ }
304
+ catch {
305
+ printSuccess('Session ended.');
306
+ }
307
+ process.exit(0);
308
+ };
309
+ process.on('SIGINT', cleanup);
310
+ process.on('SIGTERM', cleanup);
311
+ // Keep alive
312
+ await new Promise(() => { });
313
+ }
314
+ //# sourceMappingURL=chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.js","sourceRoot":"","sources":["../../../../src/commands/agent/chat.ts"],"names":[],"mappings":"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"}
package/dist/src/index.js CHANGED
@@ -16,6 +16,7 @@ import { registerAgentHistory } from './commands/agent/history.js';
16
16
  import { registerAgentTurns } from './commands/agent/turns.js';
17
17
  import { registerAgentWatch } from './commands/agent/watch.js';
18
18
  import { registerAgentJoin } from './commands/agent/join.js';
19
+ import { registerAgentChat } from './commands/agent/chat.js';
19
20
  // ─── Config Commands ────────────────────────────────────────────────────────
20
21
  import { registerConfigInit } from './commands/config/init.js';
21
22
  import { registerConfigSet } from './commands/config/set.js';
@@ -99,6 +100,7 @@ export function run() {
99
100
  registerAgentTurns(agent);
100
101
  registerAgentWatch(agent);
101
102
  registerAgentJoin(agent);
103
+ registerAgentChat(agent);
102
104
  // ── call ────────────────────────────────────────────────────────────────
103
105
  const call = program
104
106
  .command('call')
@@ -133,6 +135,8 @@ export function run() {
133
135
  registerTemplateShow(template);
134
136
  registerTemplateDelete(template);
135
137
  registerTemplateUse(template);
138
+ // ── chat (top-level shortcut) ────────────────────────────────────────────
139
+ registerAgentChat(program);
136
140
  // ── quickstart ──────────────────────────────────────────────────────────
137
141
  registerQuickstart(program);
138
142
  // ── token ───────────────────────────────────────────────────────────────
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Find Chrome/Chromium executable on the system.
3
+ * Returns the path or null if not found.
4
+ */
5
+ export declare function findChrome(): string | null;
@@ -0,0 +1,47 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { execSync } from 'node:child_process';
3
+ /**
4
+ * Find Chrome/Chromium executable on the system.
5
+ * Returns the path or null if not found.
6
+ */
7
+ export function findChrome() {
8
+ const platform = process.platform;
9
+ if (platform === 'darwin') {
10
+ const paths = [
11
+ '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',
12
+ '/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary',
13
+ '/Applications/Chromium.app/Contents/MacOS/Chromium',
14
+ '/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge',
15
+ '/Applications/Brave Browser.app/Contents/MacOS/Brave Browser',
16
+ ];
17
+ for (const p of paths) {
18
+ if (existsSync(p))
19
+ return p;
20
+ }
21
+ }
22
+ if (platform === 'linux') {
23
+ const names = ['google-chrome', 'google-chrome-stable', 'chromium', 'chromium-browser', 'microsoft-edge'];
24
+ for (const name of names) {
25
+ try {
26
+ const path = execSync(`which ${name}`, { encoding: 'utf-8' }).trim();
27
+ if (path)
28
+ return path;
29
+ }
30
+ catch { /* not found */ }
31
+ }
32
+ }
33
+ if (platform === 'win32') {
34
+ const paths = [
35
+ `${process.env.PROGRAMFILES}\\Google\\Chrome\\Application\\chrome.exe`,
36
+ `${process.env['PROGRAMFILES(X86)']}\\Google\\Chrome\\Application\\chrome.exe`,
37
+ `${process.env.LOCALAPPDATA}\\Google\\Chrome\\Application\\chrome.exe`,
38
+ `${process.env.PROGRAMFILES}\\Microsoft\\Edge\\Application\\msedge.exe`,
39
+ ];
40
+ for (const p of paths) {
41
+ if (p && existsSync(p))
42
+ return p;
43
+ }
44
+ }
45
+ return null;
46
+ }
47
+ //# sourceMappingURL=find-chrome.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-chrome.js","sourceRoot":"","sources":["../../../src/utils/find-chrome.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C;;;GAGG;AACH,MAAM,UAAU,UAAU;IACxB,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAElC,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG;YACZ,8DAA8D;YAC9D,4EAA4E;YAC5E,oDAAoD;YACpD,gEAAgE;YAChE,8DAA8D;SAC/D,CAAC;QACF,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,IAAI,UAAU,CAAC,CAAC,CAAC;gBAAE,OAAO,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,CAAC,eAAe,EAAE,sBAAsB,EAAE,UAAU,EAAE,kBAAkB,EAAE,gBAAgB,CAAC,CAAC;QAC1G,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,QAAQ,CAAC,SAAS,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;gBACrE,IAAI,IAAI;oBAAE,OAAO,IAAI,CAAC;YACxB,CAAC;YAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG;YACZ,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,2CAA2C;YACtE,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,2CAA2C;YAC9E,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,2CAA2C;YACtE,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,4CAA4C;SACxE,CAAC;QACF,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,IAAI,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC;gBAAE,OAAO,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "convoai",
3
- "version": "1.0.13",
3
+ "version": "1.1.1",
4
4
  "description": "CLI for Agora ConvoAI Engine — start, manage, and monitor conversational AI agents",
5
5
  "type": "module",
6
6
  "bin": {
@@ -49,11 +49,14 @@
49
49
  "commander": "^12.1.0",
50
50
  "inquirer": "^9.3.0",
51
51
  "ora": "^8.1.0",
52
+ "puppeteer-core": "^24.40.0",
53
+ "ws": "^8.20.0",
52
54
  "zod": "^3.23.0"
53
55
  },
54
56
  "devDependencies": {
55
57
  "@types/inquirer": "^9.0.7",
56
58
  "@types/node": "^20.14.0",
59
+ "@types/ws": "^8.18.1",
57
60
  "@vitest/coverage-v8": "^4.1.2",
58
61
  "tsx": "^4.16.0",
59
62
  "typescript": "^5.5.0",
@@ -0,0 +1,67 @@
1
+ <!DOCTYPE html>
2
+ <html><head><title>ConvoAI Headless</title></head>
3
+ <body>
4
+ <script src="https://download.agora.io/sdk/release/AgoraRTC_N-4.22.0.js"></script>
5
+ <script>
6
+ const P = new URLSearchParams(location.search);
7
+ const appId = P.get('appId');
8
+ const channel = P.get('channel');
9
+ const token = P.get('token') || null;
10
+ const uid = Number(P.get('uid')) || 0;
11
+ const wsPort = P.get('wsPort') || '3211';
12
+
13
+ let ws, client, localTrack;
14
+
15
+ function send(msg) {
16
+ if (ws && ws.readyState === 1) ws.send(JSON.stringify(msg));
17
+ }
18
+
19
+ async function cleanup() {
20
+ try { if (localTrack) { localTrack.stop(); localTrack.close(); } } catch {}
21
+ try { if (client) await client.leave(); } catch {}
22
+ send({ type: 'stopped' });
23
+ }
24
+
25
+ async function start() {
26
+ ws = new WebSocket('ws://localhost:' + wsPort);
27
+ ws.onopen = () => send({ type: 'ws_connected' });
28
+ ws.onmessage = (e) => {
29
+ try {
30
+ const msg = JSON.parse(e.data);
31
+ if (msg.type === 'stop') cleanup();
32
+ } catch {}
33
+ };
34
+
35
+ try {
36
+ client = AgoraRTC.createClient({ mode: 'rtc', codec: 'vp8' });
37
+
38
+ client.on('user-published', async (user, mediaType) => {
39
+ await client.subscribe(user, mediaType);
40
+ if (mediaType === 'audio') {
41
+ user.audioTrack.play();
42
+ send({ type: 'agent_speaking', speaking: true });
43
+ }
44
+ });
45
+
46
+ client.on('user-unpublished', (user, mediaType) => {
47
+ if (mediaType === 'audio') send({ type: 'agent_speaking', speaking: false });
48
+ });
49
+
50
+ client.on('user-left', () => send({ type: 'agent_left' }));
51
+
52
+ send({ type: 'status', text: 'Joining channel...' });
53
+ await client.join(appId, channel, token, uid || null);
54
+ send({ type: 'status', text: 'Joined' });
55
+
56
+ localTrack = await AgoraRTC.createMicrophoneAudioTrack();
57
+ await client.publish([localTrack]);
58
+ send({ type: 'ready' });
59
+ } catch (err) {
60
+ send({ type: 'error', text: err.message });
61
+ }
62
+ }
63
+
64
+ start();
65
+ </script>
66
+ </body>
67
+ </html>