# Video request desk for HeyGen, with script review and approval

> Let anyone request a short avatar video, get the script drafted from your own document, and approve every take before it ships to Slack.

- Workflow type: app
- Services: HeyGen, Google Docs, Slack Bot
- Categories: Marketing, Operations
- Published: 2026-08-24

## What it does

- Anyone in the company can file a video request with the audience, the deadline, the point to get across, and a link to the source document.
- One button drafts the spoken script from that document, picks a fitting avatar and voice, and hands the draft back for a human to edit.
- Approved scripts render in the background and then play right on the card, so a reviewer can approve or send it back with notes.
- Approved videos get posted to the requesting team's Slack channel with a share link, and every rejected take stays on the card with its feedback.

## What you'll need

- A HeyGen account on a paid plan, which is what allows video generation from outside the HeyGen app
- A Google account that can open the documents your scripts are written from
- A Slack workspace where a bot can post into your team channels
- No enterprise plan required, since this board is the review and approval step

## Prompt

Build me an internal video request desk. Anyone in the company should be able to ask for a short avatar video and watch it move from request to approved, without the video team having to live inside HeyGen. HeyGen is only the rendering service here; all request state, scripts, takes and approvals live in the app's own storage so nothing is lost on reload.

The first surface is an intake form. It collects the requester's name, the requesting team and the Slack channel the finished video should be delivered to, the intended audience, the deadline, the single point the video needs to get across, the target length in seconds, and a link to a Google Doc source such as a policy, a release note or an FAQ. Populate the channel picker with Slack Bot List Channels. Submitting the form creates a card in the first column.

The second surface is a board with five columns: Requested, Script in review, Rendering, Needs approval, and Approved. Each card shows the requester and team, the deadline, the target length, the point to get across, a link to the source document, and a count of how many takes it has been through. Let me filter the board by requester or team and sort by deadline, and flag any card whose deadline has passed while it is not yet Approved.

A card in Requested has a Draft script button that kicks off a background agent. The agent reads the linked source with Google Docs Get Document, condenses it into a spoken script that fits the requested length, and picks a suitable avatar and voice by comparing the audience and tone against HeyGen List Avatars and HeyGen List Voices. It writes the draft script, the chosen avatar id, the chosen voice id and a one line reason for each choice back onto the card, then moves the card to Script in review. If the card already has rejected takes, the agent must be given every prior script along with its reviewer notes and told to address that feedback in the new draft.

In Script in review the script is editable inline, with the avatar and voice changeable from dropdowns backed by the same two list calls. As the script is edited, show a live estimated runtime calculated at roughly 150 spoken words per minute, displayed next to the length that was requested with a clear over or under indicator, and warn when the estimate runs more than ten percent past the ask. This is the mechanism that keeps requests coming back at the length people actually asked for. A Redraft button re-runs the agent with the current notes and history.

Approving the script calls HeyGen Generate Avatar Video with the edited script, the chosen avatar and the chosen voice, stores the returned video id on the card, and moves it to Rendering. While that card is open, poll HeyGen Retrieve Video Status every ten seconds or so and show render progress. When the status comes back completed, move the card to Needs approval and play the video inline from the returned URL. When it comes back failed, show the error message on the card and send it back to Script in review.

A reviewer watching the video in Needs approval can do one of two things. Send it back with notes, which records the take as rejected with its video, the reviewer's name, the notes and a timestamp, and returns the card to Script in review. Or approve it, which calls HeyGen Retrieve Shareable Video URL and posts the finished video to the requesting team's channel with Slack Bot Send a Message, including the video title, who requested it, a one line summary of the point it makes, and the share link. The card then moves to Approved and keeps both the share link and the Slack message permalink.

Two details matter. Keep every rejected take listed on the card forever with its notes and a playable video, both so reviewers can see what changed between versions and so the agent has that history on the next draft. And remember that the download URLs HeyGen returns expire after seven days, so re-fetch Retrieve Video Status to refresh playback rather than caching a URL and letting it go dead.

## How to customize

- Rename or add board columns to match how your team really reviews, such as a legal sign off before final approval.
- Change the speaking rate used for the runtime estimate if your presenters talk faster or slower than 150 words a minute.
- Pick which Slack channel each request delivers to, or send the finished video straight back to the requester instead.

## FAQ

### Do I need HeyGen's enterprise plan to review and approve videos?

No. HeyGen's built in review and approval workflow is only available to enterprise workspaces, which is exactly why this board exists. Every approval step lives in the app, so any paid HeyGen plan works.

### Does everyone requesting a video need a HeyGen login?

No. Requesters only ever touch the request form and the board. The HeyGen connection sits behind the app, so the video team stays the only group that needs an account there.

### How does it know how long the finished video will be?

While the script is being edited, the app estimates runtime at roughly 150 spoken words per minute and shows it against the length that was requested. A two minute ask stops coming back as a four minute video.

### What happens to takes that get rejected?

They stay on the card with the reviewer's notes and the video itself, so you can see what changed between versions, and the next draft is written with that feedback already in hand.

### Where does the script actually come from?

From whichever Google Doc the requester links, such as a policy, a release note or an FAQ. The app reads that document and condenses it into a spoken script at the requested length.

Use this prompt in General Input: https://www.generalinput.com/prompts/video-request-desk-for-heygen-with-script-review-and-approval