@talqing/mcp 0.6.0 → 0.8.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.
Files changed (4) hide show
  1. package/README.md +5 -6
  2. package/SKILL.md +72 -53
  3. package/package.json +1 -1
  4. package/tools.json +36 -78
package/README.md CHANGED
@@ -10,9 +10,8 @@ the CoPilot can build, your coding agent can build.
10
10
  ## What you get
11
11
 
12
12
  One operation for everything a workspace is built out of. Agents and agent
13
- tasks, tools and their operation trees, integrations and triggers, knowledge
14
- bases from crawl to ready, carrier accounts and phone numbers, secrets, provider
15
- keys and webhooks; then placing outbound calls, running call and email batches,
13
+ tasks, tools and their operation trees, integrations and triggers, carrier
14
+ accounts and phone numbers, secrets, provider keys and webhooks; then placing outbound calls, running call and email batches,
16
15
  talking to text agents, and reading back transcripts, cost and latency. Each one
17
16
  maps to a Talqing API endpoint, and its arguments mirror that HTTP call: path and
18
17
  query parameters at the top level, request body under `body`.
@@ -107,9 +106,9 @@ Four things are deliberately out of reach:
107
106
  where a human is in the loop.
108
107
  - **Buying credits.** Reading the balance would be harmless; starting a payment
109
108
  spends the workspace's money, and neither belongs on a coding agent's surface.
110
- - **Streaming endpoints**, which are not tool-shaped. Every one has a polling
111
- equivalent here — `list_conversation_items` for a conversation, `get_kb` for a
112
- knowledge build — so nothing is unreachable.
109
+ - **Streaming endpoints**, which are not tool-shaped. Each has a polling
110
+ equivalent here — `list_conversation_items` for a conversation — so nothing is
111
+ unreachable.
113
112
  - **Deleting a call or its recording.** Every other `delete_*` removes
114
113
  configuration you could write again; this one destroys the record of something
115
114
  that happened, and can take a contact's memory of past calls with it.
package/SKILL.md CHANGED
@@ -3,9 +3,9 @@ name: talqing
3
3
  description: >-
4
4
  Build, publish and operate Talqing AI voice, video and text agents — agent
5
5
  config and model stack, custom tools and their operation trees, MCP and
6
- messaging integrations, knowledge bases, phone numbers, secrets and webhooks,
7
- plus placing calls and reading back transcripts, cost and latency. Use
8
- whenever working against a Talqing workspace through the talqing MCP server.
6
+ messaging integrations, phone numbers, secrets and webhooks, plus placing
7
+ calls and reading back transcripts, cost and latency. Use whenever working
8
+ against a Talqing workspace through the talqing MCP server.
9
9
  ---
10
10
 
11
11
  <!-- Generated by openapi/export.py from backend/services/copilot/skill.md. Edit that file, then re-run the export. -->
@@ -14,7 +14,7 @@ description: >-
14
14
 
15
15
  Talqing is a no-code builder for AI voice, video and text agents. Everything you
16
16
  can build here you could otherwise have written as a LiveKit agent by hand: a
17
- model stack, a system prompt, callable tools, knowledge, and lifecycle hooks.
17
+ model stack, a system prompt, callable tools, and lifecycle hooks.
18
18
  The same machinery also runs **agent tasks** — an agent nobody talks to, which
19
19
  takes named inputs and returns a typed result.
20
20
 
@@ -156,13 +156,17 @@ An agent is a single object, `config`, plus what you attach to it:
156
156
  create it, publish v1 and store `{"tool_id": "..."}` in its place, so the
157
157
  agent and its tools can be built in one request. Use it for exactly that.
158
158
  Attaching an existing tool is still `tool_id`.
159
- - **`kb_ids`** — ready knowledge bases for grounded answers.
160
159
  - **`mcps`** — external MCP servers whose tools the agent may call, each
161
160
  `{"integration_id": "..."}` naming an active, MCP-capable integration. Which
162
161
  of a server's tools may be called is the integration's own `allowed_tools`,
163
162
  not this list. As with `tools`, an entry may instead carry `{"mcp": {name,
164
163
  url, headers, allowed_tools, tools_namespace}}`, which is created as a
165
164
  `custom_mcp` integration and replaced by its id.
165
+ - **`faqs`** — FAQs the agent answers from, each `{"faq_id": "..."}`, up to ten
166
+ (see FAQs below). As with `tools`, an entry may instead carry `{"faq": {name,
167
+ entries: [{question, answer}]}}`, which `create_agent` and `update_agent`
168
+ create as a stored FAQ and replace by its id — so an agent and its FAQ can be
169
+ built in one request.
166
170
  - **`tasks`** — jobs this agent can enter and come back from, each
167
171
  `{"name": "collect_shipping_address", "task_id": "...", "description": "...",
168
172
  "message": "..."}`. Each becomes one ordinary tool the model can call: the
@@ -337,9 +341,8 @@ starts that object over, so send its `voice` and settings with it. Unknown field
337
341
 
338
342
  The config is validated on every write. Unknown models, a model that does not
339
343
  support the channel, a language the model does not offer, a speed outside the
340
- model's range, an unpublished tool, a knowledge base that is not ready — all are
341
- refused with an explanation. Read the error and correct it; that is faster than
342
- guessing.
344
+ model's range, an unpublished tool — all are refused with an explanation. Read
345
+ the error and correct it; that is faster than guessing.
343
346
 
344
347
  Some fields are normalized for you. Switching to `text` clears `stt`, `tts`,
345
348
  `greeting`, `turn_handling` and `avatar`. Switching to `video` fills in an
@@ -579,7 +582,7 @@ of whatever the models cost.
579
582
  A tool is one capability the agent's LLM can call mid-conversation. It has:
580
583
 
581
584
  - **`name`** — the function name the LLM sees. A valid identifier, snake_case,
582
- describing the capability. `knowledge_fetch` is reserved.
585
+ describing the capability.
583
586
  - **`description`** — tells the LLM *when* to call it. This matters as much as
584
587
  the implementation.
585
588
  - **`json_schema`** — the arguments the LLM supplies. Declare only values the
@@ -871,9 +874,9 @@ Each hook points at a **published tool id**, or null.
871
874
  ## Agent tasks
872
875
 
873
876
  An **agent task** takes named inputs, does some work, and returns a **typed
874
- structured output**. Same prompt, same model, same tools, same MCP servers, same
875
- knowledge and same lifecycle hooks as an agent — minus everything that belongs
876
- to a *session*, because a task never owns one.
877
+ structured output**. Same prompt, same model, same tools, same MCP servers and
878
+ same lifecycle hooks as an agent — minus everything that belongs to a
879
+ *session*, because a task never owns one.
877
880
 
878
881
  **It runs two ways, and declares nothing that ties it to either.** On its own —
879
882
  `POST /v1/tasks/{task_id}/runs`, or an email batch drafting a row — it is an LLM
@@ -901,7 +904,7 @@ message, draft an opening line, take a shipping address mid-call.
901
904
  a step rather than as one, so it costs no steps and real seconds. It is the
902
905
  one media slot a task keeps, because an LLM is stateless per request and
903
906
  swapping one in rebuilds nothing.
904
- - **`kb_ids`**, **`on_enter`**, **`on_exit`**, **`on_user_turn_completed`** —
907
+ - **`on_enter`**, **`on_exit`**, **`on_user_turn_completed`** —
905
908
  exactly an agent's. `on_user_turn_completed` only ever fires when an agent
906
909
  entered the task; a standalone run has nobody to take a turn.
907
910
  - There is no `stt`, `tts`, `realtime`, `language`, `turn_handling`, `channel`,
@@ -913,6 +916,7 @@ message, draft an opening line, take a shipping address mid-call.
913
916
  - **`tools`** / **`mcps`** — exactly an agent's, attached by id or defined
914
917
  inline, and pinned by publish exactly as an agent's are: republishing a tool
915
918
  does not change a published task until that task is published again.
919
+ - **`faqs`** — exactly an agent's.
916
920
  - **`vars`** — the task's **inputs**, declared exactly as an agent's variables
917
921
  are: a `name`, a `description`, an optional `default` and `required`. A run
918
922
  supplies values by name; one it omits falls back to the `default`, and a
@@ -1048,14 +1052,42 @@ tell apart.
1048
1052
  Task runs are **not** in the Observability charts, which are built on calls and
1049
1053
  conversations. `list_task_runs` is where a task's own history lives.
1050
1054
 
1055
+ ## FAQs
1056
+
1057
+ An FAQ is a named list of question/answer pairs the business wrote. Attached
1058
+ through `faqs`, its **questions** are added to the agent's prompt and the agent
1059
+ gets one generated tool, `get_faq_answers`, that returns the written **answers**
1060
+ for the questions it picks — so what the agent says is the business's own text.
1061
+ Do not create a tool with that name; it is reserved.
1062
+
1063
+ - **Use one for stable facts people ask often and the business wants answered
1064
+ exactly**: opening hours, refund policy, delivery areas, pricing. Behaviour,
1065
+ tone and what to do next belong in the prompt; anything that changes per
1066
+ caller or needs a live lookup belongs in a tool.
1067
+ - **Edits are live.** Changing a question or an answer reaches every agent using
1068
+ the FAQ from its next session, with no republish. Attaching or detaching an
1069
+ FAQ is a config change and does take a publish.
1070
+ - **Phrase each question the way a caller would ask it** — "Do you deliver on
1071
+ Sundays?", not "Sunday delivery policy". The model matches what was asked
1072
+ against the question text, so paraphrases need no extra entries.
1073
+ - **Keep answers short and speakable on a voice agent**: one or two sentences,
1074
+ no lists, links or markdown, since the agent will say it aloud.
1075
+ - **Add many at once with `create_faq_entries`** (up to 500 per FAQ, all or
1076
+ nothing), and fix one with `update_faq_entry` rather than recreating the FAQ.
1077
+ A question may appear only once per FAQ.
1078
+ - Do not also paste the answers into the prompt, and do not tell the agent to
1079
+ refuse what the FAQ lacks unless the user asks for that.
1080
+
1081
+ `delete_faq` is refused with 409 while an agent or task attaches it; detach it
1082
+ there first.
1083
+
1051
1084
  ## Integrations
1052
1085
 
1053
1086
  Integrations are external services, and they come in two shapes.
1054
1087
 
1055
1088
  **MCP integrations** give an agent tools from an external server. Attach them
1056
- in the agent's own config, as `mcps` — the same place as `tools` and
1057
- `kb_ids`, written by `create_agent` or `update_agent`, and frozen at publish
1058
- like the rest of it. So attaching one **takes a publish** before a call sees it.
1089
+ in the agent's own config, as `mcps` — the same place as `tools`, written by
1090
+ `create_agent` or `update_agent`, and frozen at publish like the rest of it. So attaching one **takes a publish** before a call sees it.
1059
1091
  `list_integration_mcp_tools` connects to the server and lists everything it
1060
1092
  offers, which also proves the connection works.
1061
1093
 
@@ -1144,8 +1176,16 @@ overrides of anything else — one batch is one agent, one number, one clock.
1144
1176
  weekdays it may dial in, so a list uploaded at 23:00 can start at 11:00
1145
1177
  tomorrow, stop at 18:00 and resume at 10:00 on the next weekday untouched. A
1146
1178
  window may cross midnight; the days then name the evening it starts on.
1147
- `next_dial_at` on the batch says when it will dial next, which is how you tell
1148
- "waiting for Monday" apart from "stuck".
1179
+ `next_dial_at` on the batch says when it will dial next and `next_dial_reason`
1180
+ why (`start`, `window`, `daily_cap`), which is how you tell "waiting for Monday"
1181
+ apart from "stuck".
1182
+
1183
+ **Pace.** `dial_gap_seconds` is the minimum wait between starting two calls (0,
1184
+ the default, dials as slots free). `dial_daily_cap` limits calls placed per
1185
+ local day, retries included: `{kind: "fixed", limit}` or a ramp, `{kind: "ramp",
1186
+ start, end, step, interval_days}`, which rises by `step` every `interval_days`
1187
+ days the batch actually dialled. For a new caller ID suggest a ramp rather than
1188
+ a flat limit. `dialed_today` is measured against `dial_daily_cap_today`.
1149
1189
 
1150
1190
  **Say these two things before creating one**, because a user who discovers
1151
1191
  either from an invoice will not forgive us:
@@ -1242,7 +1282,10 @@ row. `create_email_send` takes a `scope` and returns a **send** you can steer:
1242
1282
  - `start_at` schedules it, `window` (on its own `timezone`) holds it to business
1243
1283
  hours, `send_gap_seconds` is the minimum wait between two emails of the
1244
1284
  **batch** (1 second to 1 hour) and `send_daily_cap` bounds how many the batch
1245
- may send per local day. Anything omitted comes from the batch.
1285
+ may send per local day: `{kind: "fixed", limit}`, or a ramp, `{kind: "ramp",
1286
+ start, end, step, interval_days}`, which rises by `step` every `interval_days`
1287
+ days the batch actually sent (a weekend or a pause earns nothing). Anything
1288
+ omitted comes from the batch.
1246
1289
  - A draft a live send covers reads `queued`, and is still a draft: it can be
1247
1290
  edited, skipped or redrafted until the send takes it.
1248
1291
  - `pause_email_send` stops on the next email; `resume_email_send` carries on.
@@ -1254,9 +1297,10 @@ row. `create_email_send` takes a `scope` and returns a **send** you can steer:
1254
1297
  within five minutes, so raising a spent cap or removing a window needs no
1255
1298
  cancel.
1256
1299
 
1257
- **The safeguard here is a RATE, not a row count.** `send_daily_cap` (200 by
1258
- default, per batch, `null` for uncapped) is what stands between a 5 000-row list
1259
- and a sending domain nobody trusts again. Before creating a send, say how many
1300
+ **The safeguard here is a RATE, not a row count.** `send_daily_cap` (a fixed
1301
+ 200 by default, per batch, `null` for uncapped) is what stands between a
1302
+ 5 000-row list and a sending domain nobody trusts again. For a new sending
1303
+ domain, suggest a ramp (say 10 rising to 50) rather than a flat cap. Before creating a send, say how many
1260
1304
  emails it is and roughly how long it will take at the pace it has — and if the
1261
1305
  user asks to raise or remove the cap, say what it is for rather than just doing
1262
1306
  it.
@@ -1301,7 +1345,7 @@ ours — Resend keeps one and auto-suppresses hard bounces and complaints.
1301
1345
 
1302
1346
  `get_email_batch` carries live counts, `skips` (why rows were skipped),
1303
1347
  `draft_failures` (why drafts failed, most common first), `failure_reason`,
1304
- `sent_today` (against `send_daily_cap`), `drafted_versions`,
1348
+ `sent_today` (against `send_daily_cap_today`), `drafted_versions`,
1305
1349
  `stale_redraftable` / `stale_sent` and the drafting cost so far. Measure
1306
1350
  progress against what can be reached: `unfillable` rows are never drafted, and
1307
1351
  skipped, failed or cancelled rows are never sent.
@@ -1325,7 +1369,9 @@ gives a sender's approved templates — header, body, footer, buttons and variab
1325
1369
  names; one with `unsupported_reason` cannot be used.
1326
1370
  `create_whatsapp_batch` maps `to_column` and every variable onto CSV columns. A
1327
1371
  row with a bad or repeated phone, or a blank mapped cell, is kept and skipped
1328
- with the reason, so read the returned `counts`.
1372
+ with the reason, so read the returned `counts`. `send_daily_cap` takes the same
1373
+ object an email batch's does (a fixed 250 by default); for a new sender suggest
1374
+ a ramp.
1329
1375
 
1330
1376
  **Say these before creating one:**
1331
1377
 
@@ -1343,33 +1389,6 @@ Replies are answered by the agent on the sender's
1343
1389
  `{{userdata.<column>}}` and the whole template, buttons included, as its own
1344
1390
  first message — so write that agent's prompt against the CSV's column names.
1345
1391
 
1346
- ## Knowledge bases
1347
-
1348
- A knowledge base gives an agent grounded answers over crawled content. Attach
1349
- it through the agent's `kb_ids`. A call reads only `ready` ones, so one still
1350
- building can be attached now and is used once it finishes.
1351
-
1352
- Building one runs in three stages and takes minutes, not seconds:
1353
-
1354
- 1. `create_kb` with the site URLs starts the crawl. It returns immediately at
1355
- `discovering` — poll `get_kb` until `status` is `review`.
1356
- 2. At `review`, `discovered` holds every URL the crawl found. Choose the ones
1357
- worth indexing and pass them to `build_kb`. This choice decides the quality
1358
- of the whole knowledge base: prefer pages that answer real questions over
1359
- everything the crawl happened to reach.
1360
- 3. The KB moves through `transcribing` and `generating` to `ready`. Keep
1361
- polling `get_kb`; `progress` says what stage it is in and `error` says if it
1362
- stopped.
1363
-
1364
- Once ready, `get_kb_prompt` is the table of contents exactly as the agent
1365
- receives it — read it to judge what the agent will actually be able to find,
1366
- since a vague entry is one it will never fetch. `list_pages` shows which URLs
1367
- failed to transcribe, `patch_node` corrects an entry by hand, and
1368
- `regenerate_toc` rebuilds the structure without crawling again.
1369
-
1370
- Tell the user a build is running rather than waiting silently through it, and
1371
- never poll a build in a tight loop.
1372
-
1373
1392
  ## Secrets, keys and webhooks
1374
1393
 
1375
1394
  **Secrets** are workspace values referenced as `{{secrets.NAME}}` from tool
@@ -1482,8 +1501,8 @@ and the final `userdata` usually name the cause.
1482
1501
  connected channel is a message they receive. Both are irreversible. Test
1483
1502
  against a number or thread the user has named, never one you picked.
1484
1503
  - **Delete only on an explicit request naming the target.** Agents, tools,
1485
- knowledge bases, carrier accounts, integrations, triggers, secrets, webhooks
1486
- and tokens are all permanent. Taking a phone number out of service stops real
1504
+ carrier accounts, integrations, triggers, secrets, webhooks and tokens are
1505
+ all permanent. Taking a phone number out of service stops real
1487
1506
  callers from reaching anyone — treat it the same way.
1488
1507
  - **Never echo a secret back.** Personal access tokens, webhook signing secrets
1489
1508
  and provider keys are shown once; repeating one puts it in the conversation
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@talqing/mcp",
3
- "version": "0.6.0",
3
+ "version": "0.8.0",
4
4
  "description": "MCP server for building Talqing AI voice, video and text agents from Claude Code, Codex, or any MCP client.",
5
5
  "license": "MIT",
6
6
  "homepage": "https://talqing.com",
package/tools.json CHANGED
@@ -591,156 +591,114 @@
591
591
  "role": "write"
592
592
  },
593
593
  {
594
- "description": "List the workspace's knowledge bases with their build status.",
594
+ "description": "List the workspace's FAQs by name, with how many questions each holds.",
595
595
  "method": "GET",
596
- "name": "list_kbs",
596
+ "name": "list_faqs",
597
597
  "parameters": {
598
598
  "additionalProperties": true,
599
- "description": "Arguments not inlined: call describe_function('list_kbs').",
599
+ "description": "Arguments not inlined: call describe_function('list_faqs').",
600
600
  "properties": {},
601
601
  "type": "object"
602
602
  },
603
- "path": "/v1/knowledge",
603
+ "path": "/v1/faqs",
604
604
  "read_only": true,
605
605
  "role": "read"
606
606
  },
607
607
  {
608
- "description": "Start a knowledge base by crawling one or more websites.",
608
+ "description": "Create an FAQ, optionally with its first question/answer entries.",
609
609
  "method": "POST",
610
- "name": "create_kb",
610
+ "name": "create_faq",
611
611
  "parameters": {
612
612
  "additionalProperties": true,
613
- "description": "Arguments not inlined: call describe_function('create_kb').",
613
+ "description": "Arguments not inlined: call describe_function('create_faq').",
614
614
  "properties": {},
615
615
  "type": "object"
616
616
  },
617
- "path": "/v1/knowledge",
617
+ "path": "/v1/faqs",
618
618
  "read_only": false,
619
619
  "role": "write"
620
620
  },
621
621
  {
622
- "description": "Read one knowledge base: build status, progress and content tree.",
622
+ "description": "Get one FAQ with every entry, in the order they were added.",
623
623
  "method": "GET",
624
- "name": "get_kb",
624
+ "name": "get_faq",
625
625
  "parameters": {
626
626
  "additionalProperties": true,
627
- "description": "Arguments not inlined: call describe_function('get_kb').",
627
+ "description": "Arguments not inlined: call describe_function('get_faq').",
628
628
  "properties": {},
629
629
  "type": "object"
630
630
  },
631
- "path": "/v1/knowledge/{kb_id}",
631
+ "path": "/v1/faqs/{faq_id}",
632
632
  "read_only": true,
633
633
  "role": "read"
634
634
  },
635
635
  {
636
- "description": "Index the chosen pages, then write the table of contents.",
637
- "method": "POST",
638
- "name": "build_kb",
636
+ "description": "Rename an FAQ.",
637
+ "method": "PATCH",
638
+ "name": "update_faq",
639
639
  "parameters": {
640
640
  "additionalProperties": true,
641
- "description": "Arguments not inlined: call describe_function('build_kb').",
641
+ "description": "Arguments not inlined: call describe_function('update_faq').",
642
642
  "properties": {},
643
643
  "type": "object"
644
644
  },
645
- "path": "/v1/knowledge/{kb_id}/build",
645
+ "path": "/v1/faqs/{faq_id}",
646
646
  "read_only": false,
647
647
  "role": "write"
648
648
  },
649
649
  {
650
- "description": "Rewrite the table of contents from the pages already indexed.",
651
- "method": "POST",
652
- "name": "regenerate_toc",
650
+ "description": "Delete an FAQ and its entries. Refused with 409 while an agent or task still attaches it.",
651
+ "method": "DELETE",
652
+ "name": "delete_faq",
653
653
  "parameters": {
654
654
  "additionalProperties": true,
655
- "description": "Arguments not inlined: call describe_function('regenerate_toc').",
655
+ "description": "Arguments not inlined: call describe_function('delete_faq').",
656
656
  "properties": {},
657
657
  "type": "object"
658
658
  },
659
- "path": "/v1/knowledge/{kb_id}/toc",
659
+ "path": "/v1/faqs/{faq_id}",
660
660
  "read_only": false,
661
661
  "role": "write"
662
662
  },
663
663
  {
664
- "description": "List the crawled pages and how each one transcribed.",
665
- "method": "GET",
666
- "name": "list_pages",
667
- "parameters": {
668
- "additionalProperties": true,
669
- "description": "Arguments not inlined: call describe_function('list_pages').",
670
- "properties": {},
671
- "type": "object"
672
- },
673
- "path": "/v1/knowledge/{kb_id}/pages",
674
- "read_only": true,
675
- "role": "read"
676
- },
677
- {
678
- "description": "The table of contents exactly as an agent using this KB is given it.",
679
- "method": "GET",
680
- "name": "get_kb_prompt",
681
- "parameters": {
682
- "additionalProperties": true,
683
- "description": "Arguments not inlined: call describe_function('get_kb_prompt').",
684
- "properties": {},
685
- "type": "object"
686
- },
687
- "path": "/v1/knowledge/{kb_id}/prompt",
688
- "read_only": true,
689
- "role": "read"
690
- },
691
- {
692
- "description": "Read one entry of the table of contents, with its full content.",
693
- "method": "GET",
694
- "name": "get_node",
695
- "parameters": {
696
- "additionalProperties": true,
697
- "description": "Arguments not inlined: call describe_function('get_node').",
698
- "properties": {},
699
- "type": "object"
700
- },
701
- "path": "/v1/knowledge/{kb_id}/nodes/{node_id}",
702
- "read_only": true,
703
- "role": "read"
704
- },
705
- {
706
- "description": "Correct one entry's title, summary or content by hand \u2014 the way to fix a fact the crawl got wrong without rebuilding.",
707
- "method": "PATCH",
708
- "name": "patch_node",
664
+ "description": "Append question/answer entries to an FAQ, all or nothing. Live at once: agents using the FAQ read them from their next session.",
665
+ "method": "POST",
666
+ "name": "create_faq_entries",
709
667
  "parameters": {
710
668
  "additionalProperties": true,
711
- "description": "Arguments not inlined: call describe_function('patch_node').",
669
+ "description": "Arguments not inlined: call describe_function('create_faq_entries').",
712
670
  "properties": {},
713
671
  "type": "object"
714
672
  },
715
- "path": "/v1/knowledge/{kb_id}/nodes/{node_id}",
673
+ "path": "/v1/faqs/{faq_id}/entries",
716
674
  "read_only": false,
717
675
  "role": "write"
718
676
  },
719
677
  {
720
- "description": "Drop one entry from the table of contents, permanently.",
721
- "method": "DELETE",
722
- "name": "delete_node",
678
+ "description": "Change one entry's question, answer or both. Live from the next session.",
679
+ "method": "PATCH",
680
+ "name": "update_faq_entry",
723
681
  "parameters": {
724
682
  "additionalProperties": true,
725
- "description": "Arguments not inlined: call describe_function('delete_node').",
683
+ "description": "Arguments not inlined: call describe_function('update_faq_entry').",
726
684
  "properties": {},
727
685
  "type": "object"
728
686
  },
729
- "path": "/v1/knowledge/{kb_id}/nodes/{node_id}",
687
+ "path": "/v1/faqs/{faq_id}/entries/{entry_id}",
730
688
  "read_only": false,
731
689
  "role": "write"
732
690
  },
733
691
  {
734
- "description": "Delete a knowledge base and everything crawled into it, permanently.",
692
+ "description": "Delete one entry from an FAQ.",
735
693
  "method": "DELETE",
736
- "name": "delete_kb",
694
+ "name": "delete_faq_entry",
737
695
  "parameters": {
738
696
  "additionalProperties": true,
739
- "description": "Arguments not inlined: call describe_function('delete_kb').",
697
+ "description": "Arguments not inlined: call describe_function('delete_faq_entry').",
740
698
  "properties": {},
741
699
  "type": "object"
742
700
  },
743
- "path": "/v1/knowledge/{kb_id}",
701
+ "path": "/v1/faqs/{faq_id}/entries/{entry_id}",
744
702
  "read_only": false,
745
703
  "role": "write"
746
704
  },