{
  "schemaVersion": "1.0",
  "item": {
    "slug": "helpscout",
    "name": "Helpscout",
    "source": "tencent",
    "type": "skill",
    "category": "通讯协作",
    "sourceUrl": "https://clawhub.ai/fabiensebban/helpscout",
    "canonicalUrl": "https://clawhub.ai/fabiensebban/helpscout",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/helpscout",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=helpscout",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "__mocks__/openclaw-config.js",
      "config.schema.json",
      "index.js",
      "jest.config.js",
      "package-lock.json"
    ],
    "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",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-23T16:43:11.935Z",
      "expiresAt": "2026-04-30T16:43:11.935Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
        "contentDisposition": "attachment; filename=\"4claw-imageboard-1.0.1.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/helpscout"
    },
    "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/helpscout",
    "agentPageUrl": "https://openagent3.xyz/skills/helpscout/agent",
    "manifestUrl": "https://openagent3.xyz/skills/helpscout/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/helpscout/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": "Description",
        "body": "This skill interacts with Helpscout to fetch conversations from specific inboxes and send replies. It is designed to streamline customer support operations directly from OpenClaw."
      },
      {
        "title": "Features",
        "body": "Fetch conversations from multiple Helpscout inboxes\nSend replies to conversations (customer-visible or internal notes)\nFilter by status, folder, assignee, customer, tags, and more\nSort conversations by various fields\nEmbed thread data directly in the response\nSecurely authenticate using an API key and App Secret\nHandle potential errors like invalid credentials or network issues gracefully"
      },
      {
        "title": "Setup Instructions",
        "body": "To use this skill, you need to configure Helpscout credentials and specify the IDs of the inboxes you want to fetch conversations from."
      },
      {
        "title": "1. Retrieve Helpscout API Key & App Secret",
        "body": "Go to your Helpscout account.\nNavigate to Manage > Apps.\nCreate or open your app to retrieve the following details:\n\nAPI Key\nApp Secret"
      },
      {
        "title": "2. Collect Inbox IDs",
        "body": "Retrieve the IDs of the inboxes you want to fetch conversations from using Helpscout's API documentation."
      },
      {
        "title": "3. Save Credentials in OpenClaw",
        "body": "Use the following command to save your Helpscout credentials:\n\ncat ~/.openclaw/openclaw.json | jq '.skills.entries.helpscout = {\n  enabled: true,\n  env: {\n    API_KEY: \"your-api-key\",\n    APP_SECRET: \"your-app-secret\",\n    INBOX_IDS: [\"inbox-id-1\", \"inbox-id-2\"]\n  }\n}' | openclaw gateway config.apply"
      },
      {
        "title": "4. Verify Configuration",
        "body": "To ensure the credentials are properly set, check your configuration:\n\nopenclaw gateway config.get\n\nMake sure the helpscout object looks correct (avoid sharing the API_KEY or APP_SECRET)."
      },
      {
        "title": "Basic Usage",
        "body": "Fetch all active conversations from configured inboxes:\n\nconst { fetchAllInboxes } = require('./index.js');\n\n// Fetch all active conversations (default)\nconst results = await fetchAllInboxes();"
      },
      {
        "title": "Advanced Filtering",
        "body": "const { fetchConversations } = require('./index.js');\n\n// Fetch closed conversations from a specific inbox\nconst conversations = await fetchConversations(321755, {\n  status: 'closed',\n  sortField: 'modifiedAt',\n  sortOrder: 'desc',\n  page: 1\n});\n\n// Fetch conversations assigned to a specific user\nconst assigned = await fetchConversations(321755, {\n  assignedTo: 782728,\n  status: 'active'\n});\n\n// Fetch conversations with a specific tag\nconst tagged = await fetchConversations(321755, {\n  tag: 'urgent',\n  status: 'active'\n});\n\n// Fetch conversations with embedded threads\nconst withThreads = await fetchConversations(321755, {\n  embed: 'threads',\n  status: 'active'\n});\n\n// Advanced search query\nconst searched = await fetchConversations(321755, {\n  query: '(customerEmail:user@example.com)',\n  status: 'all'\n});"
      },
      {
        "title": "Sending Replies",
        "body": "const { sendReply } = require('./index.js');\n\n// Send a customer-visible reply (will send email)\nawait sendReply(3227506031, {\n  text: 'Hi there,\\n\\nThanks for your message!\\n\\nBest regards,',\n  inboxId: 321755  // Required to auto-fetch customer ID\n});\n\n// Send a reply without emailing the customer (imported)\nawait sendReply(3227506031, {\n  text: 'Draft reply - not sent to customer yet',\n  customerId: 856475517,  // Or provide inboxId to auto-fetch\n  imported: true\n});\n\n// Send a reply and close the conversation\nawait sendReply(3227506031, {\n  text: 'All done! Let me know if you need anything else.',\n  inboxId: 321755,\n  status: 'closed'\n});\n\n// Create an internal note\nconst { createNote } = require('./index.js');\nawait createNote(3227506031, 'Internal note: Customer called, issue resolved.');"
      },
      {
        "title": "sendReply Options",
        "body": "ParameterTypeDescriptiontextstringRequired. The reply text (HTML supported)inboxIdnumberInbox ID - required if customerId not provided (auto-fetches customer)customerIdnumberCustomer ID - if not provided, will be auto-fetched using inboxIdimportedbooleanMark as imported (won't email customer). Default: falsestatusstringConversation status after reply: active, pending, closed. Optional.userIdnumberUser ID sending the reply. Optional (defaults to authenticated user)."
      },
      {
        "title": "createNote",
        "body": "ParameterTypeDescriptiontextstringRequired. The note text (HTML supported)"
      },
      {
        "title": "Available Options (fetchConversations)",
        "body": "ParameterTypeDescriptionstatusstringFilter by status: active, pending, closed, spam, or all (default: active)folderIdnumberFilter by folder IDassignedTonumberFilter by user IDcustomerIdnumberFilter by customer IDnumbernumberFilter by conversation numbermodifiedSincestringISO8601 date to filter conversations modified after this datesortFieldstringSort field: createdAt, mailboxId, modifiedAt, number, score, status, subject (default: createdAt)sortOrderstringSort order: asc or desc (default: desc)tagstringFilter by tag namequerystringAdvanced search query in fieldId:value formatembedstringComma-separated list of resources to embed: threadspagenumberPage number for pagination (default: 1)"
      },
      {
        "title": "Security Best Practices",
        "body": "Never hardcode credentials into your codebase.\nUse OpenClaw's config.apply system for securely managing sensitive details.\nAvoid sharing sensitive parts of your configuration output (API_KEY and APP_SECRET) with others."
      },
      {
        "title": "Contribution Guidelines",
        "body": "Ensure compliance with Helpscout's API usage policies.\nAdd documentation for any new features added."
      }
    ],
    "body": "Helpscout Skill\nDescription\n\nThis skill interacts with Helpscout to fetch conversations from specific inboxes and send replies. It is designed to streamline customer support operations directly from OpenClaw.\n\nFeatures\nFetch conversations from multiple Helpscout inboxes\nSend replies to conversations (customer-visible or internal notes)\nFilter by status, folder, assignee, customer, tags, and more\nSort conversations by various fields\nEmbed thread data directly in the response\nSecurely authenticate using an API key and App Secret\nHandle potential errors like invalid credentials or network issues gracefully\nSetup Instructions\n\nTo use this skill, you need to configure Helpscout credentials and specify the IDs of the inboxes you want to fetch conversations from.\n\n1. Retrieve Helpscout API Key & App Secret\nGo to your Helpscout account.\nNavigate to Manage > Apps.\nCreate or open your app to retrieve the following details:\nAPI Key\nApp Secret\n2. Collect Inbox IDs\nRetrieve the IDs of the inboxes you want to fetch conversations from using Helpscout's API documentation.\n3. Save Credentials in OpenClaw\n\nUse the following command to save your Helpscout credentials:\n\ncat ~/.openclaw/openclaw.json | jq '.skills.entries.helpscout = {\n  enabled: true,\n  env: {\n    API_KEY: \"your-api-key\",\n    APP_SECRET: \"your-app-secret\",\n    INBOX_IDS: [\"inbox-id-1\", \"inbox-id-2\"]\n  }\n}' | openclaw gateway config.apply\n\n4. Verify Configuration\n\nTo ensure the credentials are properly set, check your configuration:\n\nopenclaw gateway config.get\n\n\nMake sure the helpscout object looks correct (avoid sharing the API_KEY or APP_SECRET).\n\nUsage\nBasic Usage\n\nFetch all active conversations from configured inboxes:\n\nconst { fetchAllInboxes } = require('./index.js');\n\n// Fetch all active conversations (default)\nconst results = await fetchAllInboxes();\n\nAdvanced Filtering\nconst { fetchConversations } = require('./index.js');\n\n// Fetch closed conversations from a specific inbox\nconst conversations = await fetchConversations(321755, {\n  status: 'closed',\n  sortField: 'modifiedAt',\n  sortOrder: 'desc',\n  page: 1\n});\n\n// Fetch conversations assigned to a specific user\nconst assigned = await fetchConversations(321755, {\n  assignedTo: 782728,\n  status: 'active'\n});\n\n// Fetch conversations with a specific tag\nconst tagged = await fetchConversations(321755, {\n  tag: 'urgent',\n  status: 'active'\n});\n\n// Fetch conversations with embedded threads\nconst withThreads = await fetchConversations(321755, {\n  embed: 'threads',\n  status: 'active'\n});\n\n// Advanced search query\nconst searched = await fetchConversations(321755, {\n  query: '(customerEmail:user@example.com)',\n  status: 'all'\n});\n\nSending Replies\nconst { sendReply } = require('./index.js');\n\n// Send a customer-visible reply (will send email)\nawait sendReply(3227506031, {\n  text: 'Hi there,\\n\\nThanks for your message!\\n\\nBest regards,',\n  inboxId: 321755  // Required to auto-fetch customer ID\n});\n\n// Send a reply without emailing the customer (imported)\nawait sendReply(3227506031, {\n  text: 'Draft reply - not sent to customer yet',\n  customerId: 856475517,  // Or provide inboxId to auto-fetch\n  imported: true\n});\n\n// Send a reply and close the conversation\nawait sendReply(3227506031, {\n  text: 'All done! Let me know if you need anything else.',\n  inboxId: 321755,\n  status: 'closed'\n});\n\n// Create an internal note\nconst { createNote } = require('./index.js');\nawait createNote(3227506031, 'Internal note: Customer called, issue resolved.');\n\nsendReply Options\nParameter\tType\tDescription\ntext\tstring\tRequired. The reply text (HTML supported)\ninboxId\tnumber\tInbox ID - required if customerId not provided (auto-fetches customer)\ncustomerId\tnumber\tCustomer ID - if not provided, will be auto-fetched using inboxId\nimported\tboolean\tMark as imported (won't email customer). Default: false\nstatus\tstring\tConversation status after reply: active, pending, closed. Optional.\nuserId\tnumber\tUser ID sending the reply. Optional (defaults to authenticated user).\ncreateNote\nParameter\tType\tDescription\ntext\tstring\tRequired. The note text (HTML supported)\nAvailable Options (fetchConversations)\nParameter\tType\tDescription\nstatus\tstring\tFilter by status: active, pending, closed, spam, or all (default: active)\nfolderId\tnumber\tFilter by folder ID\nassignedTo\tnumber\tFilter by user ID\ncustomerId\tnumber\tFilter by customer ID\nnumber\tnumber\tFilter by conversation number\nmodifiedSince\tstring\tISO8601 date to filter conversations modified after this date\nsortField\tstring\tSort field: createdAt, mailboxId, modifiedAt, number, score, status, subject (default: createdAt)\nsortOrder\tstring\tSort order: asc or desc (default: desc)\ntag\tstring\tFilter by tag name\nquery\tstring\tAdvanced search query in fieldId:value format\nembed\tstring\tComma-separated list of resources to embed: threads\npage\tnumber\tPage number for pagination (default: 1)\nSecurity Best Practices\nNever hardcode credentials into your codebase.\nUse OpenClaw's config.apply system for securely managing sensitive details.\nAvoid sharing sensitive parts of your configuration output (API_KEY and APP_SECRET) with others.\nContribution Guidelines\nEnsure compliance with Helpscout's API usage policies.\nAdd documentation for any new features added."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/fabiensebban/helpscout",
    "publisherUrl": "https://clawhub.ai/fabiensebban/helpscout",
    "owner": "fabiensebban",
    "version": "1.0.2",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/helpscout",
    "downloadUrl": "https://openagent3.xyz/downloads/helpscout",
    "agentUrl": "https://openagent3.xyz/skills/helpscout/agent",
    "manifestUrl": "https://openagent3.xyz/skills/helpscout/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/helpscout/agent.md"
  }
}