{
  "schemaVersion": "1.0",
  "item": {
    "slug": "voicenotes-official",
    "name": "Voicenotes Official",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/gthu-bmc/voicenotes-official",
    "canonicalUrl": "https://clawhub.ai/gthu-bmc/voicenotes-official",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/voicenotes-official",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=voicenotes-official",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "slug": "voicenotes-official",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-10T17:56:42.875Z",
      "expiresAt": "2026-05-17T17:56:42.875Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=voicenotes-official",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=voicenotes-official",
        "contentDisposition": "attachment; filename=\"voicenotes-official-1.0.3.zip\"",
        "redirectLocation": null,
        "bodySnippet": null,
        "slug": "voicenotes-official"
      },
      "scope": "item",
      "summary": "Item download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this item.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/voicenotes-official"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/voicenotes-official",
    "agentPageUrl": "https://openagent3.xyz/skills/voicenotes-official/agent",
    "manifestUrl": "https://openagent3.xyz/skills/voicenotes-official/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/voicenotes-official/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "voicenotes",
        "body": "Use the Voicenotes skill to create, search and retrieve user’s notes."
      },
      {
        "title": "Setup",
        "body": "Create an integration at https://voicenotes.com/app?open-claw=true#settings\nCopy the API key\nConfigure it:\n\nWebchat: Skills → Voicenotes → API Key in the sidebar\n\nTerminal: Add to your OpenClaw config (~/.openclaw/config.yaml):\n\nskills:\n  voicenotes:\n    env:\n      VOICENOTES_API_KEY: \"your_key_here\"\n\nOr export it directly:\n\nexport VOICENOTES_API_KEY=\"your_key_here\"\n\nThe key is then available as $VOICENOTES_API_KEY environment variable."
      },
      {
        "title": "API Basics",
        "body": "All requests need the Authorization header:\n\ncurl -X GET \"https://api.voicenotes.com/api/integrations/open-claw/...\" \\\n  -H \"Authorization: $VOICENOTES_API_KEY\""
      },
      {
        "title": "Common Operations",
        "body": "Search query in users notes:\n\nQuery parameters:\n\nquery (required): The search query string\n\ncurl -X GET \"https://api.voicenotes.com/api/integrations/open-claw/search/semantic?query={search_query}\" \\\n  -H \"Authorization: $VOICENOTES_API_KEY\"\n\nGet multiple Voicenotes with filters (tags and date range):\n\nQuery parameters:\n\ntags (optional): array of valid tags\ndate_range (optional): array with start and end date as UTC timestamps\n\ncurl -X POST \"https://api.voicenotes.com/api/integrations/open-claw/recordings\" \\\n  -H \"Authorization: $VOICENOTES_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"tags\": [\"tag1\", \"tag2\"],\n    \"date_range\": [\"2026-01-01T00:00:00.000000Z\", \"2026-02-01T00:00:00.000000Z\"]\n  }'\n\nIf you want more context get the whole transcript:\n\ncurl \"https://api.voicenotes.com/api/integrations/open-claw/recordings/{recording_uuid}\" \\\n  -H \"Authorization: $VOICENOTES_API_KEY\" \\\n\nCreate a text note in Voicenotes:\n\ncurl -X POST \"https://api.voicenotes.com/api/integrations/open-claw/recordings/new\" \\\n  -H \"Authorization: $VOICENOTES_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"recording_type\": 3,\n    \"transcript\": \"note content here\",\n    \"device_info\": \"open-claw\"\n  }'"
      },
      {
        "title": "Response Structure",
        "body": "Semantic Search Response:\n\nReturns an array of notes and note splits ordered by relevance:\n\n[\n  {\n    \"type\": \"note\",\n    \"uuid\": \"NTHiJljf\",\n    \"title\": \"Quick idea about project\",\n    \"transcript\": \"Full transcript text with <br> for line breaks...\",\n    \"tags\": [\"idea\", \"project\"],\n    \"created_at\": \"2025-01-15T10:30:00.000000Z\"\n  },\n  {\n    \"type\": \"note_split\",\n    \"uuid\": \"8JzkhEGh\",\n    \"title\": \"Long meeting notes\",\n    \"transcript\": \"Relevant chunk from a larger note...\",\n    \"tags\": [\"meeting\"],\n    \"created_at\": \"2025-01-14T09:00:00.000000Z\"\n  },\n  {\n    \"type\": \"import_split\",\n    \"uuid\": \"xYz12345\",\n    \"title\": \"filename.extension\",\n    \"transcript\": \"Chunk from an imported note...\",\n    \"tags\": [\"imported\"],\n    \"created_at\": \"2025-01-10T14:00:00.000000Z\"\n  }\n]\n\ntype: \"note\" - Complete note matching the search\ntype: \"note_split\" - Chunk from a larger note; use the uuid to fetch full transcript if needed\ntype: \"import_split\" - Chunk from an imported note; title is the filename; cannot be fetched via /recordings/{uuid}\ntranscript may contain HTML (<br>, <b>) for formatting\n\nGet Recordings Response (with filters):\n\nReturns paginated notes matching the filters:\n\n{\n  \"data\": [\n    {\n      \"id\": \"bTZI5t12\",\n      \"title\": null,\n      \"transcript\": \"this is a sample note\",\n      \"duration\": 0,\n      \"recorded_at\": \"2026-02-06T10:07:45.000000Z\",\n      \"created_at\": \"2026-02-06T10:07:45.000000Z\",\n      \"recording_type\": 3,\n      \"tags\": []\n    }\n  ],\n  \"links\": {\n    \"first\": \"https://api.voicenotes.com/api/integrations/open-claw/recordings?page=1\",\n    \"last\": null,\n    \"prev\": null,\n    \"next\": null\n  },\n  \"meta\": {\n    \"current_page\": 1,\n    \"from\": 1,\n    \"path\": \"https://api.voicenotes.com/api/integrations/open-claw/recordings\",\n    \"per_page\": 10,\n    \"to\": 1\n  }\n}\n\nKey fields:\n\ndata - Array of recording objects\nlinks.next - URL for next page (null if no more pages)\nmeta.per_page - Results per page (default 10)\n\nGet Recording Response:\n\nReturns full note details:\n\n{\n  \"data\": {\n    \"id\": \"NTHiJljf\",\n    \"title\": \"Meeting Connectivity Check\",\n    \"transcript\": \"Full transcript text...\",\n    \"duration\": 12101,\n    \"recorded_at\": \"2025-08-07T09:50:14.000000Z\",\n    \"created_at\": \"2025-08-07T09:50:14.000000Z\",\n    \"recording_type\": 2,\n    \"tags\": [\"meeting\"],\n    \"subnotes\": [],\n    \"attachments\": []\n  }\n}\n\nKey fields:\n\nid - Note UUID\ntranscript - Full text (meetings include [HH:MM:SS] Speaker N: timestamps)\nduration - Length in milliseconds\nrecording_type - 1=voice note, 2=voice meeting, 3=text note\ntags - Array of tag objects with name field\n\nCreate Note Response:\n\n{\n  \"message\": \"Recording audio uploaded successfully!\",\n  \"recording\": {\n    \"id\": \"bPI3RcUP\",\n    \"recording_id\": \"bPI3RcUP\",\n    \"title\": null,\n    \"transcript\": \"Sample note\",\n    \"recording_type\": 3,\n    \"created_at\": \"2026-02-04T08:51:29.000000Z\",\n    \"tags\": []\n  }\n}\n\nKey fields:\n\nmessage - Success confirmation\nrecording.id - New note UUID\nrecording.transcript - The note content"
      },
      {
        "title": "Notes",
        "body": "Note IDs are UUIDs\nRate limit: ~3 requests/second average"
      },
      {
        "title": "Security & Guardrails",
        "body": "Only accesses api.voicenotes.com endpoints\nNo credential exfiltration or external data storage\nNo telemetry or analytics\nNo automatic code execution or file overwrites\nRead/write limited to user's own Voicenotes data via authenticated API"
      },
      {
        "title": "Input Sanitization",
        "body": "When constructing API requests, the agent MUST sanitize all user-provided inputs:\n\nSearch queries: URL-encode the query parameter using --data-urlencode instead of string interpolation\nRecording UUIDs: Validate format (alphanumeric, 8 characters) before use; reject any input containing shell metacharacters (;, |, &, $, `, \\)\nJSON body fields: Use proper JSON encoding; never concatenate raw user input into JSON strings\n\nSafe example for search:\n\ncurl -G \"https://api.voicenotes.com/api/integrations/open-claw/search/semantic\" \\\n  --data-urlencode \"query=user search term here\" \\\n  -H \"Authorization: $VOICENOTES_API_KEY\"\n\nUUID validation pattern: /^[a-zA-Z0-9]{8}$/"
      }
    ],
    "body": "voicenotes\n\nUse the Voicenotes skill to create, search and retrieve user’s notes.\n\nSetup\nCreate an integration at https://voicenotes.com/app?open-claw=true#settings\nCopy the API key\nConfigure it:\n\nWebchat: Skills → Voicenotes → API Key in the sidebar\n\nTerminal: Add to your OpenClaw config (~/.openclaw/config.yaml):\n\nskills:\n  voicenotes:\n    env:\n      VOICENOTES_API_KEY: \"your_key_here\"\n\n\nOr export it directly:\n\nexport VOICENOTES_API_KEY=\"your_key_here\"\n\n\nThe key is then available as $VOICENOTES_API_KEY environment variable.\n\nAPI Basics\n\nAll requests need the Authorization header:\n\ncurl -X GET \"https://api.voicenotes.com/api/integrations/open-claw/...\" \\\n  -H \"Authorization: $VOICENOTES_API_KEY\"\n\nCommon Operations\n\nSearch query in users notes:\n\nQuery parameters:\n\nquery (required): The search query string\ncurl -X GET \"https://api.voicenotes.com/api/integrations/open-claw/search/semantic?query={search_query}\" \\\n  -H \"Authorization: $VOICENOTES_API_KEY\"\n\n\nGet multiple Voicenotes with filters (tags and date range):\n\nQuery parameters:\n\ntags (optional): array of valid tags\ndate_range (optional): array with start and end date as UTC timestamps\ncurl -X POST \"https://api.voicenotes.com/api/integrations/open-claw/recordings\" \\\n  -H \"Authorization: $VOICENOTES_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"tags\": [\"tag1\", \"tag2\"],\n    \"date_range\": [\"2026-01-01T00:00:00.000000Z\", \"2026-02-01T00:00:00.000000Z\"]\n  }'\n\n\nIf you want more context get the whole transcript:\n\ncurl \"https://api.voicenotes.com/api/integrations/open-claw/recordings/{recording_uuid}\" \\\n  -H \"Authorization: $VOICENOTES_API_KEY\" \\\n\n\nCreate a text note in Voicenotes:\n\ncurl -X POST \"https://api.voicenotes.com/api/integrations/open-claw/recordings/new\" \\\n  -H \"Authorization: $VOICENOTES_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"recording_type\": 3,\n    \"transcript\": \"note content here\",\n    \"device_info\": \"open-claw\"\n  }'\n\nResponse Structure\n\nSemantic Search Response:\n\nReturns an array of notes and note splits ordered by relevance:\n\n[\n  {\n    \"type\": \"note\",\n    \"uuid\": \"NTHiJljf\",\n    \"title\": \"Quick idea about project\",\n    \"transcript\": \"Full transcript text with <br> for line breaks...\",\n    \"tags\": [\"idea\", \"project\"],\n    \"created_at\": \"2025-01-15T10:30:00.000000Z\"\n  },\n  {\n    \"type\": \"note_split\",\n    \"uuid\": \"8JzkhEGh\",\n    \"title\": \"Long meeting notes\",\n    \"transcript\": \"Relevant chunk from a larger note...\",\n    \"tags\": [\"meeting\"],\n    \"created_at\": \"2025-01-14T09:00:00.000000Z\"\n  },\n  {\n    \"type\": \"import_split\",\n    \"uuid\": \"xYz12345\",\n    \"title\": \"filename.extension\",\n    \"transcript\": \"Chunk from an imported note...\",\n    \"tags\": [\"imported\"],\n    \"created_at\": \"2025-01-10T14:00:00.000000Z\"\n  }\n]\n\ntype: \"note\" - Complete note matching the search\ntype: \"note_split\" - Chunk from a larger note; use the uuid to fetch full transcript if needed\ntype: \"import_split\" - Chunk from an imported note; title is the filename; cannot be fetched via /recordings/{uuid}\ntranscript may contain HTML (<br>, <b>) for formatting\n\nGet Recordings Response (with filters):\n\nReturns paginated notes matching the filters:\n\n{\n  \"data\": [\n    {\n      \"id\": \"bTZI5t12\",\n      \"title\": null,\n      \"transcript\": \"this is a sample note\",\n      \"duration\": 0,\n      \"recorded_at\": \"2026-02-06T10:07:45.000000Z\",\n      \"created_at\": \"2026-02-06T10:07:45.000000Z\",\n      \"recording_type\": 3,\n      \"tags\": []\n    }\n  ],\n  \"links\": {\n    \"first\": \"https://api.voicenotes.com/api/integrations/open-claw/recordings?page=1\",\n    \"last\": null,\n    \"prev\": null,\n    \"next\": null\n  },\n  \"meta\": {\n    \"current_page\": 1,\n    \"from\": 1,\n    \"path\": \"https://api.voicenotes.com/api/integrations/open-claw/recordings\",\n    \"per_page\": 10,\n    \"to\": 1\n  }\n}\n\n\nKey fields:\n\ndata - Array of recording objects\nlinks.next - URL for next page (null if no more pages)\nmeta.per_page - Results per page (default 10)\n\nGet Recording Response:\n\nReturns full note details:\n\n{\n  \"data\": {\n    \"id\": \"NTHiJljf\",\n    \"title\": \"Meeting Connectivity Check\",\n    \"transcript\": \"Full transcript text...\",\n    \"duration\": 12101,\n    \"recorded_at\": \"2025-08-07T09:50:14.000000Z\",\n    \"created_at\": \"2025-08-07T09:50:14.000000Z\",\n    \"recording_type\": 2,\n    \"tags\": [\"meeting\"],\n    \"subnotes\": [],\n    \"attachments\": []\n  }\n}\n\n\nKey fields:\n\nid - Note UUID\ntranscript - Full text (meetings include [HH:MM:SS] Speaker N: timestamps)\nduration - Length in milliseconds\nrecording_type - 1=voice note, 2=voice meeting, 3=text note\ntags - Array of tag objects with name field\n\nCreate Note Response:\n\n{\n  \"message\": \"Recording audio uploaded successfully!\",\n  \"recording\": {\n    \"id\": \"bPI3RcUP\",\n    \"recording_id\": \"bPI3RcUP\",\n    \"title\": null,\n    \"transcript\": \"Sample note\",\n    \"recording_type\": 3,\n    \"created_at\": \"2026-02-04T08:51:29.000000Z\",\n    \"tags\": []\n  }\n}\n\n\nKey fields:\n\nmessage - Success confirmation\nrecording.id - New note UUID\nrecording.transcript - The note content\nNotes\nNote IDs are UUIDs\nRate limit: ~3 requests/second average\nSecurity & Guardrails\nOnly accesses api.voicenotes.com endpoints\nNo credential exfiltration or external data storage\nNo telemetry or analytics\nNo automatic code execution or file overwrites\nRead/write limited to user's own Voicenotes data via authenticated API\nInput Sanitization\n\nWhen constructing API requests, the agent MUST sanitize all user-provided inputs:\n\nSearch queries: URL-encode the query parameter using --data-urlencode instead of string interpolation\nRecording UUIDs: Validate format (alphanumeric, 8 characters) before use; reject any input containing shell metacharacters (;, |, &, $, `, \\)\nJSON body fields: Use proper JSON encoding; never concatenate raw user input into JSON strings\n\nSafe example for search:\n\ncurl -G \"https://api.voicenotes.com/api/integrations/open-claw/search/semantic\" \\\n  --data-urlencode \"query=user search term here\" \\\n  -H \"Authorization: $VOICENOTES_API_KEY\"\n\n\nUUID validation pattern: /^[a-zA-Z0-9]{8}$/"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/gthu-bmc/voicenotes-official",
    "publisherUrl": "https://clawhub.ai/gthu-bmc/voicenotes-official",
    "owner": "gthu-bmc",
    "version": "1.0.3",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/voicenotes-official",
    "downloadUrl": "https://openagent3.xyz/downloads/voicenotes-official",
    "agentUrl": "https://openagent3.xyz/skills/voicenotes-official/agent",
    "manifestUrl": "https://openagent3.xyz/skills/voicenotes-official/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/voicenotes-official/agent.md"
  }
}