Skill: jdrhyne/gong (version 1.1.0)

--- name: gong description: Gong API for searching calls, transcripts, and conversation intelligence. Use when working with Gong call recordings, sales conversations, transcripts, meeting data, or conversation analytics. Supports listing calls, fetching transcripts, user management, and activity stats. metadata: { "openclaw": { "emoji": "🎙️", "requires": { "config": ["~/.config/gong/credentials.json"], }, }, } --- # Gong Access Gong conversation intelligence - calls, transcripts, users, and analytics. ## Setup Store credentials in `~/.config/gong/credentials.json`: ```json { "base_url": "https://us-XXXXX.api.gong.io", "access_key": "YOUR_ACCESS_KEY", "secret_key": "YOUR_SECRET_KEY" } ``` Get credentials from Gong: Settings → Ecosystem → API → Create API Key. ## Authentication ```bash GONG_CREDS=~/.config/gong/credentials.json GONG_BASE=$(jq -r '.base_url' $GONG_CREDS) GONG_AUTH=$(jq -r '"\(.access_key):\(.secret_key)"' $GONG_CREDS | base64) curl -s "$GONG_BASE/v2/endpoint" \ -H "Authorization: Basic $GONG_AUTH" \ -H "Content-Type: application/json" ``` ## Core Operations ### List Users ```bash curl -s "$GONG_BASE/v2/users" -H "Authorization: Basic $GONG_AUTH" | \ jq '[.users[] | {id, email: .emailAddress, name: "\(.firstName) \(.lastName)"}]' ``` ### List Calls (with date range) ```bash curl -s -X POST "$GONG_BASE/v2/calls/extensive" \ -H "Authorization: Basic $GONG_AUTH" \ -H "Content-Type: application/json" \ -d '{ "filter": { "fromDateTime": "2025-01-01T00:00:00Z", "toDateTime": "2025-01-31T23:59:59Z" }, "contentSelector": {} }' | jq '{ total: .records.totalRecords, calls: [.calls[] | { id: .metaData.id, title: .metaData.title, started: .metaData.started, duration_min: ((.metaData.duration // 0) / 60 | floor), url: .metaData.url }] }' ``` ### Get Call Transcript ```bash curl -s -X POST "$GONG_BASE/v2/calls/transcript" \ -H "Authorization: Basic $GONG_AUTH" \ -H "Content-Type: application/json" \ -d '{"filter": {"callIds": ["CALL_ID"]}}' | \ jq '.callTranscripts[0].transcript[] | "\(.speakerName // "Speaker"): \(.sentences[].text)"' -r ``` ### Get Call Details ```bash curl -s -X POST "$GONG_BASE/v2/calls/extensive" \ -H "Authorization: Basic $GONG_AUTH" \ -H "Content-Type: application/json" \ -d '{ "filter": {"callIds": ["CALL_ID"]}, "contentSelector": {"exposedFields": {"content": true, "parties": true}} }' | jq '.calls[0]' ``` ### Activity Stats ```bash curl -s -X POST "$GONG_BASE/v2/stats/activity/aggregate" \ -H "Authorization: Basic $GONG_AUTH" \ -H "Content-Type: application/json" \ -d '{ "filter": { "fromDateTime": "2025-01-01T00:00:00Z", "toDateTime": "2025-01-31T23:59:59Z" } }' ``` ## Endpoints Reference | Endpoint | Method | Use | |----------|--------|-----| | `/v2/users` | GET | List users | | `/v2/calls/extensive` | POST | List/filter calls | | `/v2/calls/transcript` | POST | Get transcripts | | `/v2/stats/activity/aggregate` | POST | Activity stats | | `/v2/meetings` | GET | Scheduled meetings | ## Pagination Responses include cursor for pagination: ```json {"records": {"totalRecords": 233, "cursor": "eyJ..."}} ``` Include cursor in next request: `{"cursor": "eyJ..."}` ## Date Helpers ```bash # Last 7 days FROM=$(date -v-7d +%Y-%m-%dT00:00:00Z 2>/dev/null || date -d "7 days ago" +%Y-%m-%dT00:00:00Z) TO=$(date +%Y-%m-%dT23:59:59Z) ``` ## Notes - Rate limit: ~3 requests/second - Call IDs are large integers as strings - Transcripts may take time to process after call ends - Date format: ISO 8601 (e.g., `2025-01-15T00:00:00Z`)

path: _meta.json
content: ownerId: kn73ft5fmjrf1h9n78fc61tgfs7yp8ez
slug: gong
version: 1.0.0
publishedAt: 1768792699743

path: scripts/gong.sh
content: #!/bin/bash
# Gong CLI - Helper script for common Gong API operations
# Usage: gong.sh <command> [args]

set -e

CREDS=${GONG_CREDS:-~/.config/gong/credentials.json}

if [ ! -f "$CREDS" ]; then
  echo "Error: Credentials not found at $CREDS"
  echo "Create with: {\"base_url\": \"https://us-XXXXX.api.gong.io\", \"access_key\": \"...\", \"secret_key\": \"...\"}"
  exit 1
fi

BASE=$(jq -r '.base_url' "$CREDS")
AUTH=$(jq -r '"\(.access_key):\(.secret_key)"' "$CREDS" | base64)

cmd=${1:-help}
shift 2>/dev/null || true

api() {
  curl -s "$BASE$1" -H "Authorization: Basic $AUTH" -H "Content-Type: application/json" "${@:2}"
}

case $cmd in
  users)
    api "/v2/users" | jq '[.users[] | {id, email: .emailAddress, name: "\(.firstName) \(.lastName)", active}]'
    ;;

  calls)
    DAYS=${1:-7}
    FROM=$(date -v-${DAYS}d +%Y-%m-%dT00:00:00Z 2>/dev/null || date -d "$DAYS days ago" +%Y-%m-%dT00:00:00Z)
    TO=$(date +%Y-%m-%dT23:59:59Z)
    api "/v2/calls/extensive" -X POST \
      -d "{\"filter\":{\"fromDateTime\":\"$FROM\",\"toDateTime\":\"$TO\"},\"contentSelector\":{}}" | \
      jq '{total:.records.totalRecords, calls:[.calls[]|{id:.metaData.id,title:.metaData.title,started:.metaData.started,duration_min:((.metaData.duration//0)/60|floor),url:.metaData.url}]}'
    ;;

  call)
    [ -z "$1" ] && echo "Usage: gong.sh call <call_id>" && exit 1
    api "/v2/calls/extensive" -X POST \
      -d "{\"filter\":{\"callIds\":[\"$1\"]},\"contentSelector\":{\"exposedFields\":{\"content\":true,\"parties\":true}}}" | \
      jq '.calls[0]'
    ;;

  transcript)
    [ -z "$1" ] && echo "Usage: gong.sh transcript <call_id>" && exit 1
    api "/v2/calls/transcript" -X POST -d "{\"filter\":{\"callIds\":[\"$1\"]}}" | \
      jq -r '.callTranscripts[0].transcript[]? | "\(.speakerName // "Speaker"): \(.sentences[]?.text)"' 2>/dev/null || \
      api "/v2/calls/transcript" -X POST -d "{\"filter\":{\"callIds\":[\"$1\"]}}"
    ;;

  stats)
    DAYS=${1:-30}
    FROM=$(date -v-${DAYS}d +%Y-%m-%dT00:00:00Z 2>/dev/null || date -d "$DAYS days ago" +%Y-%m-%dT00:00:00Z)
    TO=$(date +%Y-%m-%dT23:59:59Z)
    api "/v2/stats/activity/aggregate" -X POST \
      -d "{\"filter\":{\"fromDateTime\":\"$FROM\",\"toDateTime\":\"$TO\"}}"
    ;;

  test)
    echo "Testing Gong API connection..."
    RESULT=$(api "/v2/users" | jq '{connected: (.users | length > 0), users: (.users | length)}')
    echo "$RESULT"
    ;;

  help|*)
    cat <<EOF
Gong CLI Helper

Commands:
  users              List all users
  calls [days]       List calls from last N days (default: 7)
  call <id>          Get call details
  transcript <id>    Get call transcript
  stats [days]       Activity stats for last N days (default: 30)
  test               Test API connection

Environment:
  GONG_CREDS         Path to credentials JSON (default: ~/.config/gong/credentials.json)

Examples:
  gong.sh calls 14
  gong.sh transcript 4746011978819076085
  gong.sh stats 7
EOF
    ;;
esac


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (MEDIUM)