← 返回 Skills 市场
olegantonov

Limesurvey Openclaw Skill

作者 Daniel Marques · GitHub ↗ · v1.2.2 · MIT-0
cross-platform ✓ 安全检测通过
395
总下载
0
收藏
1
当前安装
5
版本数
在 OpenClaw 中安装
/install limesurvey-openclaw-skill
功能描述
Automate LimeSurvey operations via RemoteControl 2 API. Use when: (1) managing surveys, questions, groups, or participants, (2) exporting responses or statis...
使用说明 (SKILL.md)

LimeSurvey RemoteControl 2 API

Automate LimeSurvey survey management via the RemoteControl 2 JSON-RPC API.

Prerequisites

Required Environment Variables:

  • LIMESURVEY_URL — Full URL to RemoteControl endpoint (e.g., https://survey.example.com/index.php/admin/remotecontrol)
  • LIMESURVEY_USER — Service account username
  • LIMESURVEY_PASSWORD — Service account password

Security Recommendations:

  1. Use a least-privilege service account, not your full admin credentials
  2. Create a dedicated LimeSurvey user with minimal required permissions (survey management only, no system administration)
  3. Use a strong, unique password; rotate periodically after initial use
  4. Never commit credentials to version control — use environment variables or secure vaults only
  5. Verify the RemoteControl API is accessible only from trusted networks

Setup:

export LIMESURVEY_URL='https://survey.example.com/index.php/admin/remotecontrol'
export LIMESURVEY_USER='service_account_username'
export LIMESURVEY_PASSWORD='secure_service_password'

Quick Start

Setup

Set environment variables:

export LIMESURVEY_URL='https://survey.example.com/index.php/admin/remotecontrol'
export LIMESURVEY_USER='admin'
export LIMESURVEY_PASSWORD='your_password'

CLI Usage

# List all surveys
python3 scripts/limesurvey.py list-surveys

# Export responses
python3 scripts/limesurvey.py export-responses 123456 --format csv -o responses.csv

# List participants
python3 scripts/limesurvey.py list-participants 123456 --limit 100

# Add participants from JSON
python3 scripts/limesurvey.py add-participants 123456 --file participants.json

# Send invitations
python3 scripts/limesurvey.py invite-participants 123456

# Activate survey
python3 scripts/limesurvey.py activate-survey 123456

# Get survey statistics
python3 scripts/limesurvey.py get-summary 123456

Python API Usage

from scripts.limesurvey_client import LimeSurveySession

url = 'https://survey.example.com/index.php/admin/remotecontrol'

with LimeSurveySession(url, 'admin', 'password') as client:
    # List surveys
    surveys = client.call('list_surveys', client.session_key)
    
    # Export responses
    encoded = client.call('export_responses', client.session_key, 
                         survey_id, 'csv')
    csv_data = client.decode_base64(encoded)

Common Workflows

Survey Management

List all surveys:

surveys = client.call('list_surveys', client.session_key)

Activate a survey:

result = client.call('activate_survey', client.session_key, survey_id)

Get survey statistics:

stats = client.call('get_summary', client.session_key, survey_id, 'all')
# Returns: completed_responses, incomplete_responses, token_count, etc.

Copy a survey:

result = client.call('copy_survey', client.session_key, 
                    source_id, "New Survey Name")
new_id = result['newsid']

Participant Management

Initialize participant table:

# Create table with custom attributes
client.call('activate_tokens', client.session_key, survey_id, [1, 2, 3])

Add participants:

participants = [
    {"email": "[email protected]", "firstname": "John", "lastname": "Doe"},
    {"email": "[email protected]", "firstname": "Jane", "lastname": "Smith"}
]
result = client.call('add_participants', client.session_key, 
                    survey_id, participants, True)

Send invitations:

# Send to specific tokens
token_ids = [1, 2, 3]
result = client.call('invite_participants', client.session_key, 
                    survey_id, token_ids)

# Or send to all pending
result = client.call('invite_participants', client.session_key, 
                    survey_id, None)

List participants with filters:

# Find unused tokens
participants = client.call('list_participants', client.session_key,
                          survey_id, 0, 100, True)

# Find by custom attribute
participants = client.call('list_participants', client.session_key,
                          survey_id, 0, 1000, False, False,
                          {'attribute_1': 'ACME Corp'})

Response Operations

Export all responses:

encoded = client.call('export_responses', client.session_key,
                     survey_id, 'csv')
csv_data = client.decode_base64(encoded)

with open('responses.csv', 'w') as f:
    f.write(csv_data)

Export only completed responses:

encoded = client.call('export_responses', client.session_key,
                     survey_id, 'csv', None, 'complete')

Export by token:

encoded = client.call('export_responses_by_token', client.session_key,
                     survey_id, 'json', ['token1', 'token2'])

Add a response programmatically:

response_data = {
    'G1Q1': 'Answer text',
    'G1Q2': '3',  # Multiple choice value
    'token': 'xyz123'
}
response_id = client.call('add_response', client.session_key, 
                         survey_id, response_data)

Question & Group Operations

List groups:

groups = client.call('list_groups', client.session_key, survey_id)

Add a question group:

group_id = client.call('add_group', client.session_key, survey_id,
                      'Demographics', 'Basic information')

List questions:

# All questions in survey
questions = client.call('list_questions', client.session_key, survey_id)

# Questions in specific group
questions = client.call('list_questions', client.session_key, 
                       survey_id, group_id)

Get question details:

props = client.call('get_question_properties', client.session_key,
                   question_id, ['question', 'type', 'mandatory'])

Export & Reporting

Generate statistics PDF:

encoded = client.call('export_statistics', client.session_key,
                     survey_id, 'pdf', None, '1')  # With graphs

import base64
pdf_data = base64.b64decode(encoded)

with open('stats.pdf', 'wb') as f:
    f.write(pdf_data)

Get submission timeline:

timeline = client.call('export_timeline', client.session_key,
                      survey_id, 'day', '2024-01-01', '2024-12-31')

for entry in timeline:
    print(f"{entry['period']}: {entry['count']} submissions")

Get survey fieldmap:

fieldmap = client.call('get_fieldmap', client.session_key, survey_id)
# Maps question codes to metadata

Error Handling

All API functions return status objects on error:

result = client.call('activate_survey', client.session_key, survey_id)

if isinstance(result, dict) and 'status' in result:
    print(f"Error: {result['status']}")
    # Common errors:
    # - Invalid session key
    # - No permission
    # - Invalid survey ID
    # - Survey already active
else:
    print("Success!")

Use try/except for connection errors:

from scripts.limesurvey_client import LimeSurveyError

try:
    with LimeSurveySession(url, username, password) as client:
        result = client.call('list_surveys', client.session_key)
except LimeSurveyError as e:
    print(f"API error: {e}")

Reference Documentation

  • API Reference - Complete function reference with parameters and return values
  • Examples - Practical code examples for common tasks

Available Functions

Session

  • get_session_key(username, password) - Create session
  • release_session_key(session_key) - Close session

Surveys

  • list_surveys(session_key) - List all surveys
  • get_survey_properties(session_key, survey_id, properties) - Get properties
  • set_survey_properties(session_key, survey_id, properties) - Update properties
  • activate_survey(session_key, survey_id) - Activate survey
  • delete_survey(session_key, survey_id) - Delete survey
  • copy_survey(session_key, source_id, new_name) - Duplicate survey
  • import_survey(session_key, data, type) - Import from file
  • get_summary(session_key, survey_id, stat) - Get statistics

Participants

  • activate_tokens(session_key, survey_id, attributes) - Initialize table
  • list_participants(session_key, survey_id, start, limit, unused, attributes, conditions) - List participants
  • add_participants(session_key, survey_id, data, create_token) - Add participants
  • delete_participants(session_key, survey_id, token_ids) - Delete participants
  • get_participant_properties(session_key, survey_id, query, properties) - Get properties
  • set_participant_properties(session_key, survey_id, query, properties) - Update properties
  • invite_participants(session_key, survey_id, token_ids) - Send invitations
  • remind_participants(session_key, survey_id, token_ids) - Send reminders

Responses

  • export_responses(session_key, survey_id, format, ...) - Export responses
  • export_responses_by_token(session_key, survey_id, format, tokens) - Export by token
  • add_response(session_key, survey_id, data) - Add response
  • update_response(session_key, survey_id, data) - Update response
  • delete_response(session_key, survey_id, response_id) - Delete response
  • get_response_ids(session_key, survey_id, token) - Find response IDs

Questions & Groups

  • list_groups(session_key, survey_id) - List groups
  • add_group(session_key, survey_id, title, description) - Create group
  • delete_group(session_key, survey_id, group_id) - Delete group
  • get_group_properties(session_key, group_id, properties) - Get properties
  • set_group_properties(session_key, group_id, properties) - Update properties
  • list_questions(session_key, survey_id, group_id) - List questions
  • get_question_properties(session_key, question_id, properties) - Get properties
  • set_question_properties(session_key, question_id, properties) - Update properties
  • import_question(session_key, survey_id, group_id, data, type) - Import question
  • delete_question(session_key, question_id) - Delete question

Export & Reporting

  • export_statistics(session_key, survey_id, doc_type, language, graph) - Export statistics
  • export_timeline(session_key, survey_id, type, start, end) - Submission timeline
  • get_fieldmap(session_key, survey_id) - Get question codes

Notes

  • Session management: Always close sessions with release_session_key or use LimeSurveySession context manager
  • Base64 encoding: Export functions return base64-encoded data — use client.decode_base64() or base64.b64decode()
  • Permissions: API calls respect user permissions — same as logging into admin interface
  • Rate limiting: LimeSurvey has brute-force protection on authentication
  • JSON-RPC: Content-Type must be application/json (handled automatically by client)

Full API Documentation

Official LimeSurvey API: https://api.limesurvey.org/classes/remotecontrol-handle.html

Manual: https://www.limesurvey.org/manual/RemoteControl_2_API

安全使用建议
This skill appears coherent: it needs your LimeSurvey URL and a LimeSurvey service account (username/password) to call the RemoteControl API. Before installing, create a dedicated least-privilege LimeSurvey user, restrict the RemoteControl endpoint to trusted networks, and provide credentials via environment variables or a vault (not version control). Review the included scripts if you need to confirm how exports (base64-decoded output) are handled for binary formats (PDF/XLS) and ensure any exported files are written with appropriate permissions. If you need higher assurance, run the scripts in a sandboxed environment and inspect network traffic to confirm calls go only to your configured LIMESURVEY_URL.
功能分析
Type: OpenClaw Skill Name: limesurvey-openclaw-skill Version: 1.2.2 The skill is a legitimate automation tool for the LimeSurvey RemoteControl 2 API. It provides a CLI and Python client for managing surveys, participants, and responses using standard JSON-RPC calls via the Python standard library (urllib). The documentation in SKILL.md and README.md correctly identifies required credentials and emphasizes security best practices, such as using least-privilege service accounts. No evidence of malicious intent, unauthorized data exfiltration, or prompt injection was found in scripts/limesurvey.py or scripts/limesurvey_client.py.
能力评估
Purpose & Capability
The skill name/description (LimeSurvey RemoteControl API automation) aligns with required environment variables (LIMESURVEY_URL, LIMESURVEY_USER, LIMESURVEY_PASSWORD), the included CLI and client code, and the documented API calls. No unrelated binaries, services, or credentials are requested.
Instruction Scope
SKILL.md instructs the agent to use only the declared env vars and the RemoteControl endpoint to perform survey/participant/response operations. Examples and CLI usage are limited to the LimeSurvey API and file I/O for exports; there are no instructions to read unrelated system files, search user data, or send data to external endpoints other than the configured LIMESURVEY_URL.
Install Mechanism
No install spec is provided (instruction-only install), and included code uses only Python standard library. Nothing is downloaded from arbitrary URLs or written to unexpected system locations during installation.
Credentials
The three required environment variables are appropriate for the stated purpose. The SKILL.md explicitly recommends a least-privilege service account and advises not storing credentials in version control. There are no other unrelated secrets or config paths requested.
Persistence & Privilege
The skill does not request always:true or any persistent elevated platform privileges. It does not attempt to modify other skills or system-wide configuration. Autonomous invocation is allowed by default (platform normal) but is not combined with other red flags.
如何使用
  1. 确保已安装 OpenClaw(本地或 Docker 部署)
  2. 在对话框中输入安装命令:/install limesurvey-openclaw-skill
  3. 安装完成后,直接呼叫该 Skill 的名称或使用 /limesurvey-openclaw-skill 触发
  4. 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
版本历史
v1.2.2
- Added version, author, and license fields to SKILL.md metadata. - No changes to code or features; documentation/metadata update only.
v1.2.1
## limesurvey-openclaw-skill 1.2.1 Changelog - No code or documentation changes in this version. - Version increment only; functionality remains unchanged.
v1.2.0
Fix metadata mismatch: declare required environment variables (LIMESURVEY_URL, LIMESURVEY_USER, LIMESURVEY_PASSWORD) in SKILL.md metadata, add credentials section, and link GitHub repository for provenance verification
v1.1.1
Force metadata refresh: ensure description with environment variable requirements is visible in ClawHub registry
v1.1.0
Improved security metadata: clarify required environment variables (LIMESURVEY_URL, LIMESURVEY_USER, LIMESURVEY_PASSWORD), add Prerequisites section with least-privilege security recommendations
元数据
Slug limesurvey-openclaw-skill
版本 1.2.2
许可证 MIT-0
累计安装 1
当前安装数 1
历史版本数 5
常见问题

Limesurvey Openclaw Skill 是什么?

Automate LimeSurvey operations via RemoteControl 2 API. Use when: (1) managing surveys, questions, groups, or participants, (2) exporting responses or statis... 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 395 次。

如何安装 Limesurvey Openclaw Skill?

在 OpenClaw 或 Claude Code 对话框中运行命令「/install limesurvey-openclaw-skill」即可一键安装,无需额外配置。

Limesurvey Openclaw Skill 是免费的吗?

是的,Limesurvey Openclaw Skill 完全免费,采用 MIT-0 许可证,可自由下载、安装和使用。

Limesurvey Openclaw Skill 支持哪些平台?

Limesurvey Openclaw Skill 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。

谁开发了 Limesurvey Openclaw Skill?

由 Daniel Marques(@olegantonov)开发并维护,当前版本 v1.2.2。

💬 留言讨论