Voice agent narrates a long task: poll a Sume video job meanwhile
Decagon Voice 3 narrates progress during long tasks. The same pattern for a voice agent that starts a Sume job: submit, speak, poll jobs_wait.

A voice agent should not leave a caller in silence while slow work runs. Decagon's Voice 3 narrates its progress and answers follow-up questions during a long-running task instead of putting the customer on hold, and an agent that starts a Sume job can do the same: submit, say what is happening, then check the job.
The pattern Decagon describes
Decagon's Dialogues 2026 post says conversation and task execution run in parallel in Voice 3. The agent keeps talking while work happens in the background, rather than going quiet.
Mapping it to a Sume job
Sume jobs are asynchronous. A paid create tool such as tts_create or generate_video returns a job id, and jobs_wait then jobs_result return the output. A voice agent's loop looks like this:
- Submit the job with a new idempotency key and note the job id.
- Tell the caller what is running and roughly how long it takes.
- Keep the conversation open for follow-up questions.
- Call jobs_wait in slices, shorter than the tool timeout.
- When the job completes, read the result URL and offer it.
Why slices
The hosted MCP tools run under a time limit, and script_run limits a call to 5 to 55 seconds. A video job usually outlasts one call, so the agent loops on jobs_wait and speaks between checks instead of blocking.
Idempotency keys also make retries safe: replaying the same key does not pay twice.
| Job state | What the agent does | What the caller hears |
|---|---|---|
| Submitted | Store the job id | We started it |
| Waiting | Call jobs_wait again | Still rendering, ask me anything meanwhile |
| Completed | jobs_result | It is ready, I sent the link |
| Failed | Read the error code | It did not work, here is why |
What this does not give you
Sume does not provide live speech for the agent itself. The agent's own voice comes from its voice layer. Sume supplies the media jobs the agent triggers, and the cost of those jobs is separate from the call. Use dry_run and max_spend_usd to keep an unattended agent inside a budget.
Sources
Related posts
More in Developers
- waitForJob for a 30-second Seedance clip: TypeScript SDK example
With @sume-com/sdk, submit a seedance-2.5 job through generateVideoRouter and let waitForJob poll it for up to 20 minutes. Idempotency key, onStatus, errors.
- waitForJob polls every 2 s: 600 reads in a 20-minute Sume video job
The SDK's waitForJob floor is a 2-second poll and a 20-minute timeout: at most 600 reads per job. The read budget by plan and why next_poll_after_seconds wins.
- Wan 3.0 30-second clip via API: request, poll and the $3.75 price
Ask for model wan-3.0 with duration 30 on Sume's POST /v1/videos. At 720p the clip prices at $3.75 on Sume; here is the request and a poll loop.
- Wan 3.0 API in Node: vertical image-to-video from a first frame
Call Wan 3.0 on Sume from Node with fetch: pin a first frame, ask for 9:16 at 720p, poll the job and save the MP4. Includes limits and the 8-second price.
Written by Sume