/voc-source-calls — Pull Call Transcripts
Wraps scripts/fetch-calls.js. The script does the network work; this skill handles argument
resolution, verifies the result, and tells you plainly when the data came back incomplete.
Requires
| What | Value |
|---|---|
| Env vars | CALL_PROVIDER, CALL_API_KEY, CALL_API_SECRET (provider-dependent), CALL_API_BASE |
| Optional | INTERNAL_EMAIL_DOMAINS — comma-separated, used to label speakers internal vs external when your provider does not |
| Node | 18+ (uses global fetch) |
| Cost | Free. Call-recorder APIs are included in your existing subscription. |
If .env is missing or a variable is unset, the script exits with the exact list of what is
missing. Do not try to work around it by asking the user to paste a key into chat — tell them
which variable to set in .env.
Run it
node scripts/fetch-calls.js --window 7d
Other forms:
| Command | Use |
|---|---|
--window 30d |
Wider backfill |
--from 2026-01-01 --to 2026-01-07 |
Exact range |
--dry-run |
List what would be pulled, write nothing. Always do this first on a new setup. |
Calls already on disk are skipped before any transcript request is spent on them, so re-running an overlapping window is cheap and safe.
After the run — verify, do not assume
Read the JSON index at outputs/calls/index-<to-date>.json and check three things before
reporting success:
totalFoundis plausible. Zero on a week your team was selling means the date filter or the credential scope is wrong, not that nothing happened.hasSummaryis notfalsefor every row. If it is, the API credential is not requesting content fields. This is the single most common failure and it returns200 OKthe whole way.externalParticipantsis not0everywhere. If it is, either the provider does not label affiliation, orINTERNAL_EMAIL_DOMAINSis unset. Quote attribution depends on this — say so rather than letting the next skill silently treat your own reps' words as customer voice.
Report the run as a short table: calls found, filtered as too short, newly written, already on disk, and any warnings the script printed. If warnings appeared, quote them.
Adding a provider
scripts/providers/README.md documents the adapter interface. It is four functions. The Gong
adapter is tested against a live account; the Fireflies one is written to the published schema
but unverified, and the generic one is a template. Say which you are using when you report.
Operational notes
- The markdown index is for humans. Parse the JSON index, never the markdown table — call
titles containing a literal
|corrupt the table silently, and a corrupted row looks exactly like a call that did not happen. - Transcripts are customer conversations. They are personal data under GDPR and CCPA. Check
where
VOC_OUTPUT_DIRpoints before running: a synced Dropbox or iCloud folder means every transcript leaves your machine. Default it to a local, git-ignored path. - This skill only fetches. Classification and analysis live in
/voc-analyze-calls.