{"id":21319466,"url":"https://github.com/zoom/meetingbot-recall-sample","last_synced_at":"2025-03-31T06:01:18.444Z","repository":{"id":211147474,"uuid":"724334359","full_name":"zoom/meetingbot-recall-sample","owner":"zoom","description":"Zoom Meeting assistant built using Recall.ai, Anthropic's Claude API, and the Zoom Apps SDK","archived":false,"fork":false,"pushed_at":"2025-01-07T21:17:24.000Z","size":1202,"stargazers_count":73,"open_issues_count":2,"forks_count":20,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-03-24T05:06:05.310Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zoom.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-11-27T21:42:56.000Z","updated_at":"2025-03-23T03:18:57.000Z","dependencies_parsed_at":"2023-12-06T19:29:35.531Z","dependency_job_id":"f0be27cf-865c-42fb-9c6f-639eaae090d1","html_url":"https://github.com/zoom/meetingbot-recall-sample","commit_stats":{"total_commits":133,"total_committers":6,"mean_commits":"22.166666666666668","dds":"0.21804511278195493","last_synced_commit":"b7f280afb49bdf6803fdfbb30b14d95caf2b349c"},"previous_names":["zoom/meetingbot-recall-sample"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zoom%2Fmeetingbot-recall-sample","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zoom%2Fmeetingbot-recall-sample/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zoom%2Fmeetingbot-recall-sample/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zoom%2Fmeetingbot-recall-sample/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zoom","download_url":"https://codeload.github.com/zoom/meetingbot-recall-sample/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246423731,"owners_count":20774820,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-21T19:42:01.403Z","updated_at":"2025-03-31T06:01:18.398Z","avatar_url":"https://github.com/zoom.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Meeting Bot Starter Kit - Recall.ai\n\nThe Meeting Bot Starter Kit is a boilerplate Zoom Meeting assistant built using [Recall.ai](https://recall.ai), [Anthropic's Claude API](https://docs.anthropic.com/claude/reference/getting-started-with-the-api), and the [Zoom Apps SDK](https://developers.zoom.us/docs/zoom-apps/).\n\nUsing an automated Zoom Meeting client, it generates a transcript, requests a summary, and provides the summary back to the user in the Meeting in near real time.\n\nUse this sample to build your own Meeting assistant by customizing the Meeting participant tile, summarization, and Zoom App.\n\n## Demo\n\n[![Demo: Meeting bot starter kit with Recall.ai](https://img.youtube.com/vi/7h3rLJUMtS4/0.jpg)](https://www.youtube.com/watch?v=7h3rLJUMtS4 'Demo: Meeting bot starter kit with Recall.ai')\n\n## Features\n\n1. Meeting audio access and transcription using [Recall.ai](https://recall.ai) and an Express server\n2. Summarization using Anthropic’s Claude API\n3. In-meeting app built using React and the Zoom Apps SDK\n\n## Architecture\n\n![Architectural diagram of the Meeting bot starter kit](/docs/images/architecture.png)\n\nThis Meeting Bot Starter Kit app joins a Zoom Meeting using a virtual meeting participant powered by [Recall.ai](https://recall.ai).\n\nRecall receives local recording permission through a cloud-hosted Zoom client using the Zoom Meeting SDK and outputs a transcript of the meeting.\n\nThis transcript is passed to the Anthropic Claude API for summarization.\n\nSummary responses are handled and passed back back to the user in the Zoom Meeting using a Zoom App, built using the Zoom Apps SDK.\n\n## Prerequisites\n\n1. [Node.js](https://nodejs.org/en/)\n2. [Ngrok](https://ngrok.com/docs/getting-started)\n3. [Zoom Account](https://support.zoom.us/hc/en-us/articles/207278726-Plan-Types-)\n4. [Zoom App Credentials](#config:-app-credentials) (Instructions below)\n    1. Client ID\n    2. Client Secret\n    3. Redirect URI\n5. [Recall API Token](https://recall.ai)\n6. [Anthropic API Token](https://anthropic.ai)\n\n## Getting started\n\nOpen your terminal:\n\n```bash\n# Clone down this repository\ngit clone https://github.com/zoom/meetingbot-recall-sample\n\n# navigate into the cloned project directory\ncd meetingbot-recall-sample\n\n# run NPM to install the app dependencies\nnpm install\n\n# initialize your ngrok session\nngrok http 3001\n```\n\n### Create your Zoom App\n\nIn your web browser, navigate to the [Zoom Developer Portal](https://marketplace.zoom.us/develop/create) and register/log into your developer account.\n\n1. Click the \"Develop\" button on the top right of the page and click “Build App” in the dropdown that appears.\n2. Click “Create” on the \"Zoom Apps\" application type.\n3. Name your app\n4. Choose whether to list your app on the marketplace or not\n5. Click \"Create\"\n\nFor more information, you can follow [this guide](https://dev.to/zoom/introducing-zoom-apps-33he) check out [this video series](https://www.youtube.com/playlist?list=PLKpRxBfeD1kGN-0QgQ6XtSwtxI3GQM16R) on how to create and configure these sample Zoom Apps.\n\n### Config: App Credentials\n\nIn your terminal where you launched `ngrok`, find the `Forwarding` value and copy/paste that into the \"Home URL\" and \"\nRedirect URL for OAuth\" fields.\n\n```\nHome URL:               https://xxxxx.ngrok-free.app\nRedirect URL for OAuth: https://xxxxx.ngrok-free.app/auth\n```\n\n\u003e NOTE: ngrok URLs under ngrok's Free plan are ephemeral, meaning they will only live for up to a couple hours at most, and will change every time you reinitialize the application. This will require you to update these fields every time you restart your ngrok service.\n\n#### OAuth allow list\n\n-   `https://example.ngrok-free.app`\n\n#### Domain allow list\n\n-   `appssdk.zoom.us`\n-   `ngrok-free.app`\n-   `ngrok.io`\n\n### Config: Information\n\nThe following information is required to activate your application:\n\n-   Basic Information\n    -   App name\n    -   Short description\n    -   Long description (entering a short message here is fine for now)\n-   Developer Contact Information\n    -   Name\n    -   Email address\n\n\u003e NOTE: if you intend to publish your application on the Zoom Apps Marketplace, more information will be required in this section before submitting.\n\n### Config: App Features\n\nUnder the Zoom App SDK section, click the `+ Add APIs` button and enable the following options from their respective\nsections:\n\n#### APIs\n\n-   shareApp\n-   getRunningContext\n-   getAppContext\n-   getMeetingJoinUrl\n\n### Scopes\n\nEnsure that the following scope is selected on the Scopes tab:\n\n-   `zoomapp:inmeeting`\n\n### Config `.env`\n\nWhen building for Development, open the `server/.env` file in your text editor and enter the following information from the App Credentials section you just\nconfigured:\n\n```ini\n# Client ID for your Zoom App\nZM_CLIENT_ID=[app_client_id]\n\n# Client Secret for your Zoom app\nZM_CLIENT_SECRET=[app_client_secret]\n\n# Ngrok endpoint for your app in the Zoom Marketplace\nPUBLIC_URL=https://[xxxx-xx-xx-xxx-x].ngrok-free.app\n\n# Recall API token\nRECALL_API_TOKEN=[recall_api_token]\n\n# Anthropic API token\nANTHROPIC_API_TOKEN=[anthropic_api_token]\n\n# The name of the bot that joins the meeting\nBOT_NAME=\"[bot_name]\"\n```\n\n\u003e Note: If you are a [Zoom for Government (ZfG)](https://www.zoomgov.com/) customer you can use the `ZM_HOST` variable to change\n\u003e the base URL used for Zoom.\n\n## Start the App\n\n### Development\n\nRun the `dev` npm script to start in development mode using a Docker container.\n\n```shell\nnpm run dev\n```\n\nThe `dev` script will:\n\n1. Watch React files and build to the dist/ folder\n2. Watch Server files and build to the dist/ folder\n3. Start the server and webpack dev server\n\n### Production\n\nWhen running your application in production no logs are sent to the console by default and the server is not restarted\non file changes.\n\nWe use the `NODE_ENV` environment variable here to tell the application to start in prodcution mode.\n\n```shell\n# Mac/Linux\nNODE_ENV=production npm start\n\n# Windows\nset NODE_ENV=production \u0026\u0026 npm start\n```\n\n## Customization: Meeting participant tile\n\nEdit the experience of the participant joining the Meeting through configuration of the Recall API.\n\n**Name:** Add a recognizable name for your app to give user's context on what the participant is. To change the name, you can change the `bot_name` configured at the [following location](https://github.com/zoom/meetingbot-recall-sample/blob/d6e3920878206b435ed37eb7c95c43e70b404bba/server/routes/api.js#L60).\n\n**Profile image:** Uncomment this section\n\n**Join meeting sound:** To play audio when the app joins a Meeting, [uncomment this section](https://github.com/zoom/meetingbot-recall-sample/blob/8d9920543d667ecb196a6fb8bd0272fcc4aa1761/server/routes/api.js#L81-L90) and replace the the text with an MP3 that you have base64 encoded.\n\n**Chat messages:** [Uncomment this section](https://github.com/zoom/meetingbot-recall-sample/blob/8d9920543d667ecb196a6fb8bd0272fcc4aa1761/server/routes/api.js#L91-L98) to make the app send \"Hello world\" to everyone in the Meeting chat. Replace the text with your own message.\n\nReference the [Recall.ai API documentation](https://recallai.readme.io/reference/recall-overview) for additional customization options.\n\n## Customization: LLM summarization\n\nThis demo app uses Anthropic’s Claude API to summarize meeting transcripts in near real time.\n\n[Edit the prompt](https://github.com/zoom/meetingbot-recall-sample/blob/d6e3920878206b435ed37eb7c95c43e70b404bba/server/routes/api.js#L138-L157) sent to Claude in `/server/routes/api.js`.\n\nSwap this out for a different LLM by [editing the API call](https://github.com/zoom/meetingbot-recall-sample/blob/d6e3920878206b435ed37eb7c95c43e70b404bba/server/routes/api.js#L194-L201) made in in the summarize route.\n\nThe user is shown [prompt options](https://github.com/zoom/meetingbot-recall-sample/blob/8d9920543d667ecb196a6fb8bd0272fcc4aa1761/frontend/components/InMeeting/Summary/Summary.js#L34C4-L34C4) in the frontend that adjust the prompt sent to handle the meeting summarization done by the Claude API.\n\n## Customization: Zoom App\n\nThis sample is a basic example of a web app running inside the Zoom client.\n\nUsing the [Zoom Apps SDK](https://appssdk.zoom.us/classes/ZoomSdk.ZoomSdk.html), existing web apps can be modified to run in the Zoom desktop or mobile client.\n\nIn the InMeeting component, you’ll see two important components:\n\n-   [Transcript.js](https://github.com/zoom/meetingbot-recall-sample/blob/main/frontend/components/InMeeting/Transcript/Transcript.js) handles and displays a text transcript of the conversation generated by Recall using local recording access to the Meeting’s audio.\n-   [Summary.js](https://github.com/zoom/meetingbot-recall-sample/blob/main/frontend/components/InMeeting/Summary/Summary.js) handles a prompted response from the Claude API to display a summary to the user in the Meeting, providing prompt options to the user (ex: “Generate action items”) that [adjust the prompt](https://github.com/zoom/meetingbot-recall-sample/blob/8d9920543d667ecb196a6fb8bd0272fcc4aa1761/server/routes/api.js#L177) sent in the /api/summarize route.\n\nFor an additional example of a Zoom App running in a Meeting, reference the [Advanced Zoom Apps Sample](https://github.com/zoom/zoomapps-advancedsample-react) and the [Zoom Apps documentation](https://developers.zoom.us/docs/zoom-apps/).\n\nWhile this is one example of an in-meeting app, the implementation shown in the Transcript and Summary component can be reused in any existing or new web app running inside the Meeting.\n\n## Usage\n\nTo install the Zoom App, Navigate to the **Home URL** that you set in your browser and click the link to install.\n\nAfter you authorize the app, Zoom will automatically open the app within the client.\n\n### Keeping secrets secret\n\nThis application makes use of your Zoom App Client ID and Client Secret as well as a custom secret for signing session\ncookies. During development, the application will read from the .env file.\n\nIn order to align with security best practices, this application does not read from the .env file in production mode.\n\nThis means you'll want to set environment variables on the hosting platform that you'\nre using instead of within the .env file. This might include using a secret manager or a CI/CD pipeline.\n\n\u003e :warning: **Never commit your .env file to version control:** The file likely contains Zoom App Credentials and Session Secrets\n\n### Code Style\n\nThis project uses [prettier](https://prettier.io/) and [eslint](https://eslint.org/) to enforce style and protect\nagainst coding errors along with a pre-commit git hook(s) via [husky](https://typicode.github.io/husky/#/) to ensure\nfiles pass checks prior to commit.\n\n### Testing\n\nAt this time there are no e2e or unit tests.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzoom%2Fmeetingbot-recall-sample","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzoom%2Fmeetingbot-recall-sample","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzoom%2Fmeetingbot-recall-sample/lists"}