Overview
Meeting-bot core for AbsoluteJS. Join a call through a source adapter, transcribe it live with the @absolutejs/voice scribe, and surface diarized turns + participants for analysis (deal coaching, summaries, action items, …).
@absolutejs/meetingv0.0.1-beta.11betaVoice & MediaMeeting-bot core that joins calls through source adapters and surfaces live diarized turns and participants for analysis.
@absolutejs/meeting is the meeting-bot core for AbsoluteJS: join a call through a source adapter, transcribe it live with the @absolutejs/voice scribe, and surface diarized turns plus participants for downstream analysis such as deal coaching, summaries, or action items. The core is platform-agnostic — Recall.ai and Discord support live in separate adapter packages, and an in-memory buffer source ships in the box for testing without a real call.
bun add @absolutejs/meetingMeeting-bot core for AbsoluteJS. Join a call through a source adapter, transcribe it live with the @absolutejs/voice scribe, and surface diarized turns + participants for analysis (deal coaching, summaries, action items, …).
Platform-agnostic: the core only depends on the small MeetingSource contract, so each platform is a separate adapter under meeting-adapters (mirrors voice-adapters):
@absolutejs/meeting-recall — Recall.ai (Meet / Zoom / Teams)
@absolutejs/meeting-discord — native @discordjs/voice receive
For an application that joins dynamic calls, bind provider configuration once and use the multi-session manager. Installation itself never contacts a meeting platform:
Testing without a platform
createBufferMeetingSource streams an in-memory PCM buffer in real time — the reference MeetingSource implementation and a test harness.
createMeeting(options) → MeetingSession (on, start, stop,
getTranscript, getParticipants).
createMeetingManager(options) → dynamic, idempotent multi-session host
boundary (start, stop, get, list).
createBufferMeetingSource(options) → MeetingSource.
Types: MeetingSource, MeetingSourceEventMap, MeetingParticipant,
MeetingSession, MeetingTurn, CreateMeetingOptions.
createMeeting wires a source adapter to a speech-to-text scribe and emits diarized turns as the call happens.
Subscribe to turn events for streaming analysis, and receive the full diarized transcript on the end event.
The core depends only on the MeetingSource contract; Recall.ai and Discord ship as separate adapters, and you can implement your own.
MeetingSession exposes getTranscript and getParticipants so you can inspect state at any point during or after the call.
createBufferMeetingSource streams an in-memory PCM buffer in real time — the reference MeetingSource implementation and a test harness.
Outcomes
Meeting-bot core for AbsoluteJS. Join a call through a source adapter, transcribe it live with the @absolutejs/voice scribe, and surface diarized turns + participants for analysis (deal coaching, summaries, action items, …).
For an application that joins dynamic calls, bind provider configuration once and use the multi-session manager. Installation itself never contacts a meeting platform:
createMeeting(options) → MeetingSession (on, start, stop,
Hardening checklist
Follow in order
Working example for Usage.
import { createMeeting } from "@absolutejs/meeting";
import { deepgram } from "@absolutejs/voice-deepgram";
import { createRecallMeetingSource } from "@absolutejs/meeting-recall";
const meeting = await createMeeting({
source: createRecallMeetingSource({
apiKey: process.env.RECALL_API_KEY!,
meetingUrl,
websocketUrl: process.env.RECALL_WEBSOCKET_URL!,
}),
stt: deepgram({ apiKey: process.env.DEEPGRAM_API_KEY!, diarize: true }),
sessionId: "deal-123",
});
meeting.on("turn", ({ turn }) => {
// { speaker, text, participant? } — stream to your analyzer / UI
});
meeting.on("end", ({ transcript }) => {
// full diarized transcript — run your deal-call analysis
});
await meeting.start(); // bot joins the call
// ... later: await meeting.stop()For an application that joins dynamic calls, bind provider configuration once and use the multi-session manager. Installation itself never contacts a meeting platform:
import { createMeetingManager } from "@absolutejs/meeting";
import { createRecallMeetingSourceFactory } from "@absolutejs/meeting-recall";
const meetings = createMeetingManager({
source: createRecallMeetingSourceFactory({
apiKey: process.env.RECALL_API_KEY!,
websocketUrl: "wss://app.example.com/meeting/audio",
}),
stt: deepgram({ apiKey: process.env.DEEPGRAM_API_KEY!, diarize: true }),
});
await meetings.start({
sessionId: "deal-123",
target: "https://meet.google.com/abc-defg-hij",
});Join a Google Meet, Zoom, or Teams call through the Recall.ai adapter and stream diarized turns from Deepgram.
import { createMeeting } from '@absolutejs/meeting';
import { recall } from '@absolutejs/meeting-recall';
import { deepgram } from '@absolutejs/voice-deepgram';
const meeting = await createMeeting({
sessionId: 'deal-123',
source: recall({
apiKey: process.env.RECALL_API_KEY ?? '',
meetingUrl
}),
stt: deepgram({
apiKey: process.env.DEEPGRAM_API_KEY ?? '',
diarize: true
})
});
meeting.on('turn', ({ turn }) => {
// { speaker, text, participant? } — stream to your analyzer / UI
});
meeting.on('end', ({ transcript }) => {
// full diarized transcript — run your deal-call analysis
});
await meeting.start(); // bot joins the call
// ...later
await meeting.stop();Exercise the full pipeline against a recorded PCM buffer — useful in tests and CI where no live call exists.
import {
createBufferMeetingSource,
createMeeting
} from '@absolutejs/meeting';
import { deepgram } from '@absolutejs/voice-deepgram';
// Streams an in-memory PCM buffer in real time — no platform needed
const source = createBufferMeetingSource({
chunkMs: 40,
format: {
channels: 1,
container: 'raw',
encoding: 'pcm_s16le',
sampleRateHz: 16000
},
pcm: recordedCallBytes
});
const meeting = await createMeeting({
sessionId: 'fixture-run',
source,
stt: deepgram({
apiKey: process.env.DEEPGRAM_API_KEY ?? '',
diarize: true
})
});
await meeting.start();The core only depends on the small MeetingSource contract, so each platform ships as a separate adapter package (mirroring voice-adapters).
Search the declarations exported by the current package type files. Expand a symbol to inspect its source-backed signature.
Current package surface
Import surface · click to copy