Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions examples/460-webex-recording-transcription-node/.env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# Deepgram — https://console.deepgram.com/
DEEPGRAM_API_KEY=

# Webex — https://developer.webex.com/my-apps
WEBEX_BOT_TOKEN=
WEBEX_WEBHOOK_SECRET=
1 change: 1 addition & 0 deletions examples/460-webex-recording-transcription-node/.npmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
save-exact=true
71 changes: 71 additions & 0 deletions examples/460-webex-recording-transcription-node/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
# Webex Recording Transcription with Deepgram

Automatically transcribe Cisco Webex meeting recordings using Deepgram's nova-3 speech-to-text model. When a Webex meeting recording becomes available, this server receives a webhook, downloads the audio, transcribes it with Deepgram, and optionally posts the transcript back to a Webex space.

## What you'll build

A Node.js Express server that listens for Webex `meetingRecording.ready` webhooks, downloads the recording audio via the Webex REST API, sends it to Deepgram for transcription with speaker diarization, and logs the formatted transcript.

## Prerequisites

- Node.js 18+
- pnpm
- Deepgram account — [get a free API key](https://console.deepgram.com/)
- Webex account — [create a bot](https://developer.webex.com/my-apps/new/bot)

## Environment variables

| Variable | Where to find it |
|----------|-----------------|
| `DEEPGRAM_API_KEY` | [Deepgram console](https://console.deepgram.com/) |
| `WEBEX_BOT_TOKEN` | [Webex Developer Portal → My Apps](https://developer.webex.com/my-apps) — copy the Bot Access Token |
| `WEBEX_WEBHOOK_SECRET` | You choose this value when creating the webhook via the Webex API |

## Install and run

```bash
cp .env.example .env
# Fill in your credentials in .env

pnpm install
pnpm start
```

Then register a Webex webhook pointing to your server:

```bash
curl -X POST https://webexapis.com/v1/webhooks \
-H "Authorization: Bearer $WEBEX_BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Recording Transcription",
"targetUrl": "https://your-server.example.com/webhook",
"resource": "meetingRecordings",
"event": "ready",
"secret": "your-webhook-secret"
}'
```

## Key parameters

| Parameter | Value | Description |
|-----------|-------|-------------|
| `model` | `nova-3` | Deepgram's most accurate general-purpose model |
| `diarize` | `true` | Enables speaker labels for multi-speaker meetings |
| `smart_format` | `true` | Adds punctuation, capitalization, and number formatting |
| `paragraphs` | `true` | Groups transcript into readable paragraphs |

## How it works

1. A Webex meeting ends and the recording is processed by Webex
2. Webex sends a `meetingRecording.ready` webhook to this server
3. The server verifies the webhook signature (HMAC-SHA1)
4. It fetches the recording metadata from the Webex Recordings API
5. It downloads the audio file using the temporary direct download link
6. The audio buffer is sent to Deepgram's pre-recorded transcription API
7. The transcript is logged, with speaker labels and paragraph formatting
8. Optionally, the transcript is posted back to a Webex space

## Starter templates

[deepgram-starters](https://github.com/orgs/deepgram-starters/repositories)
24 changes: 24 additions & 0 deletions examples/460-webex-recording-transcription-node/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
{
"name": "webex-recording-transcription-node",
"version": "1.0.0",
"description": "Transcribe Webex meeting recordings using Deepgram nova-3",
"main": "src/server.js",
"packageManager": "pnpm@9.6.0",
"scripts": {
"start": "node src/server.js",
"test": "node tests/test.js"
},
"dependencies": {
"@deepgram/sdk": "5.0.0",
"dotenv": "16.4.7",
"express": "4.22.1"
},
"pnpm": {
"overrides": {
"path-to-regexp": "0.1.13"
}
},
"engines": {
"node": ">=18"
}
}
Loading