This shows how to use the Attendee API to implement an AI Sales Coach that uses Zoom RTMS. It will process the meeting transcript in real-time and provide coaching tips within the Zoom client.
-
Ngrok Since Zoom RTMS needs to send webhooks to your local application, you'll need ngrok to create a secure tunnel to your localhost. Ngrok is free for basic usage. If you are deploying this application on the cloud, then you do not need ngrok.
-
Node version 22+: This demo uses Node.js version 22 or higher.
-
OpenAI API Key: You need an OpenAI API key to generate the sales coach insights.
For a video showing these steps, see here.
git clone https://github.com/attendee-labs/rtms-sales-coach-example
cd rtms-sales-coach-examplenpm install-
Install ngrok: Download from ngrok.com or install via package manager:
# On macOS with Homebrew brew install ngrok # On Ubuntu/Debian snap install ngrok
-
Start ngrok tunnel: In a separate terminal, run:
ngrok http 5005
-
Copy the public URL: Ngrok will display something like:
Forwarding https://abc123.ngrok.io -> http://localhost:5005Copy the
https://abc123.ngrok.ioURL - you'll need this for webhook configuration.
-
Go to the Zoom Developer Portal and create a new General app.
-
On the sidebar select 'Basic Information'.
-
For the OAuth redirect URLs, you can write https://zoom.us or any other URL. Because we are not using OAuth.
-
On the sidebar select 'Access'.
-
Click 'Add new Event Subscription'.
-
Subscribe to the 'RTMS started' and 'RTMS stopped' events.
-
Set the 'Event notification endpoint URL' to the ngrok URL you copied earlier.
-
Save the changes.
-
On the sidebar select 'Surface'.
-
For home url, enter the url in this format:
https://<YOUR NGROK DOMAIN>/sales_coach?meetingId={meetingUUID}. -
For 'Select where to use your app', select 'Meetings'.
-
For 'In-client App Features', select 'Zoom App SDK'.
-
On the sidebar select 'Scopes'.
-
Add the following scopes:
- meeting:read:meeting_audio
- meeting:read:meeting_transcript
- meeting:read:meeting_chat
- meeting:read:meeting_video
-
On the sidebar select 'Local test'.
-
Click the 'Add app now' button and authorize the app.
-
Go to your Zoom App Settings at https://zoom.us/profile/setting?tab=zoomapps
-
Enable share realtime meeting content with apps
-
Under "Auto-start apps that access shared realtime meeting content" click the "Choose an app to auto-start" button and select your app.
- Sign into your Attendee account
- Navigate to the API Keys section and create a new API key, save this in the .env file as ATTENDEE_API_KEY
- Navigate to the Settings -> Credentials section and click the button to add Zoom credentials.
- Enter the Client ID and Client Secret of your Zoom RTMS app.
- Navigate to the Settings -> Webhooks section and create a new webhook. Have it point to
https://<YOUR NGROK DOMAIN>/attendee-webhook. - Subscribe to the
transcript.updateandbot.state_changeevents. - Save the webhook.
Set the following environment variables in the .env file:
- ATTENDEE_API_KEY=
<YOUR ATTENDEE API KEY> - ATTENDEE_BASE_URL=
<YOUR ATTENDEE BASE URL>(defaults to https://app.attendee.dev) - OPENAI_API_KEY=
<YOUR OPENAI API KEY> - ZOOM_WEBHOOK_SECRET_TOKEN=
<YOUR ZOOM WEBHOOK SECRET TOKEN>(only needed if your Zoom app is in the production mode)
node index.jsJoin a meeting in Zoom and open your RTMS app. Your RTMS app should automatically start streaming the meeting transcript to the Zoom client and providing coaching tips.