@wokuapp/ai-toolkit 0.2.2 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/CHANGELOG.md +15 -0
- package/README.md +20 -0
- package/openclaw.plugin.json +1 -1
- package/package.json +1 -1
- package/skills/woku/SKILL.md +33 -0
- package/skills/woku-sdk-javascript/SKILL.md +39 -1
- package/skills/woku-sdk-python/SKILL.md +37 -1
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"name": "woku",
|
|
12
12
|
"source": "./",
|
|
13
13
|
"description": "Design a listening program for your customer journey, run the VoC instruments (NPS, CSAT, CES, wokus), and turn every signal into a support ticket or an action plan, through woku's MCP server.",
|
|
14
|
-
"version": "0.
|
|
14
|
+
"version": "0.4.0",
|
|
15
15
|
"author": { "name": "woku" },
|
|
16
16
|
"license": "MIT",
|
|
17
17
|
"homepage": "https://woku.app",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "woku",
|
|
3
3
|
"description": "Voice-of-customer for Claude Code. Design a listening program for your customer journey, run the fast VoC instruments (NPS, CSAT, CES, wokus), and turn every signal into a support ticket or an action plan, through woku's MCP server. Bundles the woku method so the agent acts as a CX consultant.",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.4.0",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "woku"
|
|
7
7
|
},
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "woku",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Voice-of-customer for OpenAI Codex. Design a listening program, run the VoC instruments (NPS, CSAT, CES, wokus), and turn every signal into a support ticket or an action plan, through woku's MCP server.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "woku"
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.4.0
|
|
4
|
+
|
|
5
|
+
Follow the admin period picker, search box and Sends tab. The woku skill documents `from`/`to` on `get_woku_report`, `get_folder_report` and `get_company_nps_report` (period reports generated on demand, with `periodFrom`/`periodTo`), the custom `from`/`to` range on `get_folder_tools_metrics`, the `q` text search on `list_woku_reviews`, `list_nps_responses`, `list_csat_responses` and `list_ces_responses`, and the read-only `invitations` toolset (`get_invitation_stats`, `list_invitations_by_tool`, `list_invitation_recipients`). It adds the reports the admin opens and the MCP now serves (`get_nps_tool_report`, `get_csat_report`, `get_ces_report`, `scope` on `get_company_nps_report`, `regenerate` on every report tool), and the SDK skills drop `quarantines`, which left the public API. Requires the server and SDK releases that ship them.
|
|
6
|
+
|
|
7
|
+
## 0.3.0
|
|
8
|
+
|
|
9
|
+
Also the per-tool metrics of a folder (`get_folder_tools_metrics`, `folders.metrics`), tracker chips on `search_voc_tools` and `tools.list` (`trackers`) and `integrationProvider` on integration folders.
|
|
10
|
+
|
|
11
|
+
Cover folders and the unified tools view: the woku skill documents the MCP tools
|
|
12
|
+
`search_voc_tools`, `get_voc_tools_stats`, `move_voc_tools`, `update_folder` (also sets the folder's `whatsappAlertRecipients`),
|
|
13
|
+
`delete_folder`, `get_folder_report` (`scope: "all"`, `format: "csv"`), `folderId`
|
|
14
|
+
on `create_nps_tool`, `create_csat_tool` and `create_ces_tool`, and the
|
|
15
|
+
`organize_listening` playbook, flows with ordered steps (`create_flow`, `update_flow`, `get_flow` with `steps`), and journeys in folders (`get_journey_folders_status`, `organize_journey_folders`, `folderId` and `momentFolders` on journeys). The JavaScript and Python SDK skills add the
|
|
16
|
+
`folders` and `tools` resources. Requires the server and SDK releases that ship them. The skills also cover the folder PDF in the SDKs (`folders.pdf`) and the folders paging (`foldersLimit`, `foldersCursor`) of `search_voc_tools` and `tools.list`.
|
|
17
|
+
|
|
3
18
|
## 0.2.2
|
|
4
19
|
|
|
5
20
|
Reconcile journey/MCP workflows, reviewed proposals, local media, SDK v4 methods,
|
package/README.md
CHANGED
|
@@ -100,6 +100,26 @@ Every connection is bound to one company, chosen when you approve access. Read t
|
|
|
100
100
|
|
|
101
101
|
MIT. See [LICENSE](./LICENSE).
|
|
102
102
|
|
|
103
|
+
### Periods, search and sends update (0.4.0)
|
|
104
|
+
|
|
105
|
+
The woku skill follows the admin period picker, search box and Sends tab: `from`/`to`
|
|
106
|
+
on `get_woku_report`, `get_folder_report` and `get_company_nps_report` (the period report
|
|
107
|
+
is generated on demand), a custom `from`/`to` range on `get_folder_tools_metrics`, `q`
|
|
108
|
+
text search on `list_woku_reviews`, `list_nps_responses`, `list_csat_responses` and
|
|
109
|
+
`list_ces_responses`, and the read-only `invitations` toolset (`get_invitation_stats`,
|
|
110
|
+
`list_invitations_by_tool`, `list_invitation_recipients`). The report tools add
|
|
111
|
+
`get_nps_tool_report`, `get_csat_report` and `get_ces_report`, and take `regenerate`.
|
|
112
|
+
The SDK skills drop `quarantines`. Verify the server and SDK releases before using them.
|
|
113
|
+
|
|
114
|
+
### Folders and tools update (0.3.0)
|
|
115
|
+
|
|
116
|
+
The skills now cover the folder tree that holds wokus and NPS, CSAT and CES tools:
|
|
117
|
+
the MCP tools `search_voc_tools` (with tracker chips), `get_voc_tools_stats`, `get_folder_tools_metrics`, `move_voc_tools`,
|
|
118
|
+
`update_folder`, `delete_folder`, `get_folder_report` (`scope: "all"`, `format: "csv"`),
|
|
119
|
+
`get_journey_folders_status`, `organize_journey_folders`, flow `steps` in `create_flow` and `update_flow`, `folderId` on the `create_*_tool` tools, the `organize_listening` playbook of
|
|
120
|
+
`woku_guide`, and the SDK `folders` and `tools` resources in JavaScript and Python.
|
|
121
|
+
Verify the installed SDK and server release before using them.
|
|
122
|
+
|
|
103
123
|
### Journey guidance update (0.2.2)
|
|
104
124
|
|
|
105
125
|
The bundled skills now route coordinated evaluations through journeys, preserve a
|
package/openclaw.plugin.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"id": "woku-ai-toolkit",
|
|
3
3
|
"name": "woku AI Toolkit",
|
|
4
4
|
"description": "Voice-of-customer for your agent. Design a listening program, run the VoC instruments (NPS, CSAT, CES, wokus), and turn every signal into a support ticket or an action plan, through woku's MCP server.",
|
|
5
|
-
"version": "0.
|
|
5
|
+
"version": "0.4.0",
|
|
6
6
|
"skills": [
|
|
7
7
|
"./skills"
|
|
8
8
|
],
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wokuapp/ai-toolkit",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "woku AI Toolkit: connect your agent to woku's voice-of-customer platform. Design VoC programs and turn customer feedback into support tickets and action plans, through woku's MCP server.",
|
|
5
5
|
"author": "woku",
|
|
6
6
|
"license": "MIT",
|
package/skills/woku/SKILL.md
CHANGED
|
@@ -56,6 +56,39 @@ Read tools need no special permission. Write tools require the `mcp:write` scope
|
|
|
56
56
|
reminders are enabled; a stopped or completed cycle may be followed by another,
|
|
57
57
|
but never two open evaluations for the same subject in the same journey.
|
|
58
58
|
|
|
59
|
+
## Flows with steps
|
|
60
|
+
|
|
61
|
+
A flow is an ordered sequence of steps a respondent answers one after another. `create_flow` and `update_flow` take `steps`: 1 to 20 `{ type, toolId }` where `type` is `woku`, `nps`, `csat` or `ces` (each tool once, all of the company; for the company-level NPS use the company id as `toolId`). The older `wokusIds` and `npsId` still work. `get_flow` and `list_flows` return `steps`. Flows live outside folders. Call `woku_guide` with topic `flows`.
|
|
62
|
+
|
|
63
|
+
## Organize the listening in folders
|
|
64
|
+
|
|
65
|
+
One folder tree holds wokus and NPS, CSAT and CES tools together. Call `woku_guide` with topic `organize_listening` first.
|
|
66
|
+
|
|
67
|
+
- `search_voc_tools` lists a folder level or searches the whole company (any type, case and accent insensitive, cursor paginated) and returns folders with stats, tools with their native-scale headline and counts per type.
|
|
68
|
+
- `search_voc_tools` also takes `trackers` (`"name:value"` chips, up to 10; a tool must have every one; the tracker name is matched exactly and the value partially and ignoring case, so `482` also matches `00482`; company-wide, no folders; a chip without name or value is an error) to find tools by tracker.
|
|
69
|
+
- `get_folder_tools_metrics` gives, for a folder and its subfolders, per-tool figures for 7, 30 (default) or 90 days, or a custom `from`/`to` range of days (`YYYY-MM-DD`, both inclusive, up to 731 days), against the period before (0 = whole history) and the histogram of scores. It returns `toolCount` and the busiest tools (`limit`, default 50); the daily sums only with `includeDaily: true`. Use it for trends and to find the weakest tools; never average across types.
|
|
70
|
+
- `get_voc_tools_stats` gives reviews and the headline of each type (woku stars, NPS score, CSAT satisfied %, CES mean) for the company or one folder. Never average across types: the scales differ.
|
|
71
|
+
- `create_folder`, `update_folder` (rename, recolor, or set `whatsappAlertRecipients`: the WhatsApp numbers alerted when a comment of any tool in the folder is an improvement) and `move_voc_tools` (items of mixed types, `folderId: null` for the root) organize the tree; `create_nps_tool`, `create_csat_tool` and `create_ces_tool` accept `folderId`.
|
|
72
|
+
- `get_folder_report` with `scope: "all"` returns the mixed AI report of a folder and its subfolders, and with `format: "csv"` the responses as CSV text. `search_voc_tools` accepts `foldersLimit` and `foldersCursor` to page the folders ("see more"; `foldersNextCursor` in the result). The folder PDF is binary, so it is only on the API and the SDKs (`GET /v1/folders/{id}/pdf`).
|
|
73
|
+
- Journeys can live in folders (`Viajes > journey > moment`): `get_journey_folders_status` shows whether the company organizes them and what is pending, and `organize_journey_folders` switches it on and runs a background pass that only moves tools without a folder (propose it and wait for approval; it returns a conflict while a pass is running). `get_journey` and `list_journeys` show `folderId` and `momentFolders`, and folders created by woku carry an `origin` (`journeys-root`, `journey`, `journey-moment`, `integration`; integration folders also carry `integrationProvider`, for example `shopify`); read `origin`, `integrationProvider` and the stats of a folder with `search_voc_tools`, not with `get_folder` or `list_folders`, which only count wokus.
|
|
74
|
+
- `delete_folder` needs `confirm: true`; nothing inside is deleted, the content moves up to the parent. Moving or deleting folders is a user decision: propose the new structure and wait for approval.
|
|
75
|
+
|
|
76
|
+
## Periods and text search
|
|
77
|
+
|
|
78
|
+
The tools follow the admin period picker and search box.
|
|
79
|
+
|
|
80
|
+
- The report tools return what the admin report page shows: `get_woku_report`, `get_folder_report` (also with `scope: "all"`), `get_company_nps_report` (`scope: "general"` keeps only the company's own NPS survey), `get_nps_tool_report`, and `get_csat_report` / `get_ces_report` (one tool with its id, the whole company without it). A report is generated when missing or stale and cached; `regenerate: true` rebuilds it like the admin "Regenerate report" button and needs the `mcp:write` scope.
|
|
81
|
+
- All of them take `from`/`to` (`YYYY-MM-DD`, UTC, both inclusive, given together) to restrict the AI report to the reviews of that period. A period report is generated on demand (it can take a few seconds), carries `periodFrom`/`periodTo`, and a period without reviews returns an empty report, not an error. The CSV ignores the period.
|
|
82
|
+
- `list_woku_reviews`, `list_nps_responses`, `list_csat_responses` and `list_ces_responses` take `q` to keep only the responses whose comment contains that text (case and accent insensitive, 2 to 100 characters), plus their `from`/`to` range.
|
|
83
|
+
|
|
84
|
+
## Sends
|
|
85
|
+
|
|
86
|
+
Read-only tools of the `invitations` toolset show the invitations the company sent by email and WhatsApp (admin, API, MCP and integrations):
|
|
87
|
+
|
|
88
|
+
- `get_invitation_stats` gives, for an optional `from`/`to` period, the sent, delivered and answered invitations, the response rate and the ones never sent by reason (`no_whatsapp_credits`, `notifications_disabled`, `provider_error`).
|
|
89
|
+
- `list_invitations_by_tool` gives, per tool, the invitations sent by email and by WhatsApp, the ones not sent and the answered ones.
|
|
90
|
+
- `list_invitation_recipients` lists who got a tool's invitations and what happened to each one; use `status: "invited"` to find who has not answered yet before proposing a reminder with the `send_*` tools.
|
|
91
|
+
|
|
59
92
|
Tickets use email destinations; plans use groups of platform users. Tickets and
|
|
60
93
|
Data Studio are Corporate capabilities. Do not expose retired reports, alerts,
|
|
61
94
|
goals, data-source or data-flow management through examples; instrument reports
|
|
@@ -71,7 +71,8 @@ await woku.actionPlans.complete('plan_123');
|
|
|
71
71
|
|
|
72
72
|
Namespaces: `trackers`, `npsTools` / `csatTools` / `cesTools`, `nps` / `csat` /
|
|
73
73
|
`ces`, `wokus`, `forms`, `flows`, `actionPlans`, `actionPlanGroups`, `tickets`,
|
|
74
|
-
`ticketDestinations`, `dispatches`, `reports`, `company`, `
|
|
74
|
+
`ticketDestinations`, `dispatches`, `reports`, `company`, `journeys`, `media`,
|
|
75
|
+
`folders`, `tools`, `journeyFolders`.
|
|
75
76
|
|
|
76
77
|
## Pagination, errors, retries
|
|
77
78
|
|
|
@@ -96,6 +97,43 @@ user to the SDK page at https://woku.app/docs/en/development/sdk-javascript and
|
|
|
96
97
|
API reference at https://woku.app/docs/en/development/api. There is an equivalent
|
|
97
98
|
Python SDK (`woku`) documented at /development/sdk-python.
|
|
98
99
|
|
|
100
|
+
## Folders and tools
|
|
101
|
+
|
|
102
|
+
One folder tree holds wokus and NPS, CSAT and CES tools. Needs the SDK release that ships `folders` and `tools`; verify the installed version.
|
|
103
|
+
|
|
104
|
+
```ts
|
|
105
|
+
const folder = await woku.folders.create({ name: 'Post-sale' });
|
|
106
|
+
await woku.csatTools.create({ name: 'Delivery', question: 'How satisfied are you?', folderId: folder.id });
|
|
107
|
+
|
|
108
|
+
for await (const tool of await woku.tools.list({ folderId: folder.id, types: ['csat', 'nps'] })) {
|
|
109
|
+
console.log(tool.type, tool.name, tool.headline.value);
|
|
110
|
+
}
|
|
111
|
+
const stats = await woku.tools.stats({ folderId: folder.id }); // native scales, never averaged across types
|
|
112
|
+
const tagged = await woku.tools.list({ trackers: ['TRR:00482'] }); // tracker chips 'name:value', company-wide
|
|
113
|
+
const metrics = await woku.folders.metrics(folder.id, { days: 30 }); // per tool, period vs the previous one; 0 = all history
|
|
114
|
+
await woku.tools.move({ items: [{ type: 'csat', id: toolId }], folderId: null }); // null = root
|
|
115
|
+
const csv: string = await woku.folders.csv(folder.id);
|
|
116
|
+
const pdf: Uint8Array = await woku.folders.pdf(folder.id, { lang: 'en' }); // folder report as PDF bytes
|
|
117
|
+
await woku.folders.delete(folder.id); // content moves up to the parent, nothing is deleted
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Journeys in folders: `await woku.journeyFolders.status()` and `await woku.journeyFolders.organize()` (background pass, 409 while running); `journeys.get` returns `folderId` and `momentFolders`, and folders expose `origin`.
|
|
121
|
+
|
|
122
|
+
`folders`: `list`, `get`, `create`, `update`, `move`, `delete`, `report`, `csv`, `pdf`. `tools`: `list` (cursor iterable; `foldersLimit` pages the folders with `page.hasMoreFolders()` / `page.getMoreFolders()`), `stats`, `move`. `npsTools` / `csatTools` / `cesTools` accept `folderId` on `create` and have `move(id, { folderId })`.
|
|
123
|
+
|
|
124
|
+
## Flows
|
|
125
|
+
|
|
126
|
+
```ts
|
|
127
|
+
const flow = await woku.flows.create({
|
|
128
|
+
name: 'Post-sale',
|
|
129
|
+
steps: [{ type: 'nps', toolId: npsToolId }, { type: 'csat', toolId: csatToolId }, { type: 'woku', toolId: wokuId }],
|
|
130
|
+
});
|
|
131
|
+
await woku.flows.update(flow._id, { steps: [{ type: 'csat', toolId: csatToolId }] });
|
|
132
|
+
await woku.flows.delete(flow._id); // its tools and responses stay
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
`flows`: `list`, `get`, `create`, `update`, `delete`. 1 to 20 steps, each tool once; for an `nps` step the company id as `toolId` is the company-level NPS. Needs the SDK release that ships flow writes.
|
|
136
|
+
|
|
99
137
|
## Customer journeys and media
|
|
100
138
|
|
|
101
139
|
Prefer an actual journey when the task coordinates several business moments.
|
|
@@ -73,7 +73,7 @@ woku.action_plans.complete("plan_123")
|
|
|
73
73
|
Namespaces: `trackers`, `nps_tools` / `csat_tools` / `ces_tools`, `nps` / `csat`
|
|
74
74
|
/ `ces`, `wokus`, `forms`, `flows`, `action_plans`, `action_plan_groups`,
|
|
75
75
|
`tickets`, `ticket_destinations`, `dispatches`, `reports`, `company`,
|
|
76
|
-
`
|
|
76
|
+
`folders`, `tools`, `journey_folders`.
|
|
77
77
|
|
|
78
78
|
## Async
|
|
79
79
|
|
|
@@ -119,6 +119,42 @@ user to the SDK page at https://woku.app/docs/en/development/sdk-python and the
|
|
|
119
119
|
reference at https://woku.app/docs/en/development/api. There is an equivalent
|
|
120
120
|
JavaScript SDK (`@wokuapp/sdk`) documented at /development/sdk-javascript.
|
|
121
121
|
|
|
122
|
+
## Folders and tools
|
|
123
|
+
|
|
124
|
+
One folder tree holds wokus and NPS, CSAT and CES tools. Needs the SDK release that ships `folders` and `tools`; verify the installed version.
|
|
125
|
+
|
|
126
|
+
```python
|
|
127
|
+
folder = woku.folders.create({"name": "Post-sale"})
|
|
128
|
+
woku.csat_tools.create({"name": "Delivery", "question": "How satisfied are you?", "folderId": folder["id"]})
|
|
129
|
+
|
|
130
|
+
for tool in woku.tools.list({"folderId": folder["id"], "types": ["csat", "nps"]}):
|
|
131
|
+
print(tool["type"], tool["name"], tool["headline"]["value"])
|
|
132
|
+
stats = woku.tools.stats({"folderId": folder["id"]}) # native scales, never averaged across types
|
|
133
|
+
tagged = woku.tools.list({"trackers": ["TRR:00482"]}) # tracker chips "name:value", company-wide
|
|
134
|
+
metrics = woku.folders.metrics(folder["id"], {"days": 30}) # per tool, period vs the previous one; 0 = all history
|
|
135
|
+
woku.tools.move({"items": [{"type": "csat", "id": tool_id}], "folderId": None}) # None = root
|
|
136
|
+
csv_text = woku.folders.csv(folder["id"])
|
|
137
|
+
pdf_bytes = woku.folders.pdf(folder["id"], {"lang": "en"}) # folder report as PDF bytes
|
|
138
|
+
woku.folders.delete(folder["id"]) # content moves up to the parent, nothing is deleted
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Journeys in folders: `woku.journey_folders.status()` and `woku.journey_folders.organize()` (background pass, `ConflictError` while running); `journeys.get` returns `folderId` and `momentFolders`, and folders expose `origin`.
|
|
142
|
+
|
|
143
|
+
`folders`: `list`, `get`, `create`, `update`, `move`, `delete`, `report`, `csv`, `pdf`. `tools`: `list` (iterates across cursor pages; `foldersLimit` pages the folders with `has_more_folders()` / `get_more_folders()`), `stats`, `move`. `nps_tools` / `csat_tools` / `ces_tools` accept `folderId` on `create` and have `move(tool_id, {"folderId": ...})`. `AsyncWoku` mirrors all of it.
|
|
144
|
+
|
|
145
|
+
## Flows
|
|
146
|
+
|
|
147
|
+
```python
|
|
148
|
+
flow = woku.flows.create({
|
|
149
|
+
"name": "Post-sale",
|
|
150
|
+
"steps": [{"type": "nps", "toolId": nps_tool_id}, {"type": "csat", "toolId": csat_tool_id}, {"type": "woku", "toolId": woku_id}],
|
|
151
|
+
})
|
|
152
|
+
woku.flows.update(flow["_id"], {"steps": [{"type": "csat", "toolId": csat_tool_id}]})
|
|
153
|
+
woku.flows.delete(flow["_id"]) # its tools and responses stay
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
`flows`: `list`, `get`, `create`, `update`, `delete`. 1 to 20 steps, each tool once; for an `nps` step the company id as `toolId` is the company-level NPS. `AsyncWoku` mirrors it. Needs the SDK release that ships flow writes.
|
|
157
|
+
|
|
122
158
|
## Customer journeys and media
|
|
123
159
|
|
|
124
160
|
Prefer an actual journey when the task coordinates several business moments.
|