@talqing/mcp 0.7.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.
- package/README.md +5 -6
- package/SKILL.md +50 -45
- package/package.json +1 -1
- 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,
|
|
14
|
-
|
|
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.
|
|
111
|
-
equivalent here — `list_conversation_items` for a conversation
|
|
112
|
-
|
|
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,
|
|
7
|
-
|
|
8
|
-
|
|
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,
|
|
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
|
|
341
|
-
|
|
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.
|
|
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
|
|
875
|
-
|
|
876
|
-
|
|
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
|
-
- **`
|
|
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
|
|
1057
|
-
`
|
|
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
|
|
|
@@ -1357,33 +1389,6 @@ Replies are answered by the agent on the sender's
|
|
|
1357
1389
|
`{{userdata.<column>}}` and the whole template, buttons included, as its own
|
|
1358
1390
|
first message — so write that agent's prompt against the CSV's column names.
|
|
1359
1391
|
|
|
1360
|
-
## Knowledge bases
|
|
1361
|
-
|
|
1362
|
-
A knowledge base gives an agent grounded answers over crawled content. Attach
|
|
1363
|
-
it through the agent's `kb_ids`. A call reads only `ready` ones, so one still
|
|
1364
|
-
building can be attached now and is used once it finishes.
|
|
1365
|
-
|
|
1366
|
-
Building one runs in three stages and takes minutes, not seconds:
|
|
1367
|
-
|
|
1368
|
-
1. `create_kb` with the site URLs starts the crawl. It returns immediately at
|
|
1369
|
-
`discovering` — poll `get_kb` until `status` is `review`.
|
|
1370
|
-
2. At `review`, `discovered` holds every URL the crawl found. Choose the ones
|
|
1371
|
-
worth indexing and pass them to `build_kb`. This choice decides the quality
|
|
1372
|
-
of the whole knowledge base: prefer pages that answer real questions over
|
|
1373
|
-
everything the crawl happened to reach.
|
|
1374
|
-
3. The KB moves through `transcribing` and `generating` to `ready`. Keep
|
|
1375
|
-
polling `get_kb`; `progress` says what stage it is in and `error` says if it
|
|
1376
|
-
stopped.
|
|
1377
|
-
|
|
1378
|
-
Once ready, `get_kb_prompt` is the table of contents exactly as the agent
|
|
1379
|
-
receives it — read it to judge what the agent will actually be able to find,
|
|
1380
|
-
since a vague entry is one it will never fetch. `list_pages` shows which URLs
|
|
1381
|
-
failed to transcribe, `patch_node` corrects an entry by hand, and
|
|
1382
|
-
`regenerate_toc` rebuilds the structure without crawling again.
|
|
1383
|
-
|
|
1384
|
-
Tell the user a build is running rather than waiting silently through it, and
|
|
1385
|
-
never poll a build in a tight loop.
|
|
1386
|
-
|
|
1387
1392
|
## Secrets, keys and webhooks
|
|
1388
1393
|
|
|
1389
1394
|
**Secrets** are workspace values referenced as `{{secrets.NAME}}` from tool
|
|
@@ -1496,8 +1501,8 @@ and the final `userdata` usually name the cause.
|
|
|
1496
1501
|
connected channel is a message they receive. Both are irreversible. Test
|
|
1497
1502
|
against a number or thread the user has named, never one you picked.
|
|
1498
1503
|
- **Delete only on an explicit request naming the target.** Agents, tools,
|
|
1499
|
-
|
|
1500
|
-
|
|
1504
|
+
carrier accounts, integrations, triggers, secrets, webhooks and tokens are
|
|
1505
|
+
all permanent. Taking a phone number out of service stops real
|
|
1501
1506
|
callers from reaching anyone — treat it the same way.
|
|
1502
1507
|
- **Never echo a secret back.** Personal access tokens, webhook signing secrets
|
|
1503
1508
|
and provider keys are shown once; repeating one puts it in the conversation
|
package/package.json
CHANGED
package/tools.json
CHANGED
|
@@ -591,156 +591,114 @@
|
|
|
591
591
|
"role": "write"
|
|
592
592
|
},
|
|
593
593
|
{
|
|
594
|
-
"description": "List the workspace's
|
|
594
|
+
"description": "List the workspace's FAQs by name, with how many questions each holds.",
|
|
595
595
|
"method": "GET",
|
|
596
|
-
"name": "
|
|
596
|
+
"name": "list_faqs",
|
|
597
597
|
"parameters": {
|
|
598
598
|
"additionalProperties": true,
|
|
599
|
-
"description": "Arguments not inlined: call describe_function('
|
|
599
|
+
"description": "Arguments not inlined: call describe_function('list_faqs').",
|
|
600
600
|
"properties": {},
|
|
601
601
|
"type": "object"
|
|
602
602
|
},
|
|
603
|
-
"path": "/v1/
|
|
603
|
+
"path": "/v1/faqs",
|
|
604
604
|
"read_only": true,
|
|
605
605
|
"role": "read"
|
|
606
606
|
},
|
|
607
607
|
{
|
|
608
|
-
"description": "
|
|
608
|
+
"description": "Create an FAQ, optionally with its first question/answer entries.",
|
|
609
609
|
"method": "POST",
|
|
610
|
-
"name": "
|
|
610
|
+
"name": "create_faq",
|
|
611
611
|
"parameters": {
|
|
612
612
|
"additionalProperties": true,
|
|
613
|
-
"description": "Arguments not inlined: call describe_function('
|
|
613
|
+
"description": "Arguments not inlined: call describe_function('create_faq').",
|
|
614
614
|
"properties": {},
|
|
615
615
|
"type": "object"
|
|
616
616
|
},
|
|
617
|
-
"path": "/v1/
|
|
617
|
+
"path": "/v1/faqs",
|
|
618
618
|
"read_only": false,
|
|
619
619
|
"role": "write"
|
|
620
620
|
},
|
|
621
621
|
{
|
|
622
|
-
"description": "
|
|
622
|
+
"description": "Get one FAQ with every entry, in the order they were added.",
|
|
623
623
|
"method": "GET",
|
|
624
|
-
"name": "
|
|
624
|
+
"name": "get_faq",
|
|
625
625
|
"parameters": {
|
|
626
626
|
"additionalProperties": true,
|
|
627
|
-
"description": "Arguments not inlined: call describe_function('
|
|
627
|
+
"description": "Arguments not inlined: call describe_function('get_faq').",
|
|
628
628
|
"properties": {},
|
|
629
629
|
"type": "object"
|
|
630
630
|
},
|
|
631
|
-
"path": "/v1/
|
|
631
|
+
"path": "/v1/faqs/{faq_id}",
|
|
632
632
|
"read_only": true,
|
|
633
633
|
"role": "read"
|
|
634
634
|
},
|
|
635
635
|
{
|
|
636
|
-
"description": "
|
|
637
|
-
"method": "
|
|
638
|
-
"name": "
|
|
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('
|
|
641
|
+
"description": "Arguments not inlined: call describe_function('update_faq').",
|
|
642
642
|
"properties": {},
|
|
643
643
|
"type": "object"
|
|
644
644
|
},
|
|
645
|
-
"path": "/v1/
|
|
645
|
+
"path": "/v1/faqs/{faq_id}",
|
|
646
646
|
"read_only": false,
|
|
647
647
|
"role": "write"
|
|
648
648
|
},
|
|
649
649
|
{
|
|
650
|
-
"description": "
|
|
651
|
-
"method": "
|
|
652
|
-
"name": "
|
|
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('
|
|
655
|
+
"description": "Arguments not inlined: call describe_function('delete_faq').",
|
|
656
656
|
"properties": {},
|
|
657
657
|
"type": "object"
|
|
658
658
|
},
|
|
659
|
-
"path": "/v1/
|
|
659
|
+
"path": "/v1/faqs/{faq_id}",
|
|
660
660
|
"read_only": false,
|
|
661
661
|
"role": "write"
|
|
662
662
|
},
|
|
663
663
|
{
|
|
664
|
-
"description": "
|
|
665
|
-
"method": "
|
|
666
|
-
"name": "
|
|
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('
|
|
669
|
+
"description": "Arguments not inlined: call describe_function('create_faq_entries').",
|
|
712
670
|
"properties": {},
|
|
713
671
|
"type": "object"
|
|
714
672
|
},
|
|
715
|
-
"path": "/v1/
|
|
673
|
+
"path": "/v1/faqs/{faq_id}/entries",
|
|
716
674
|
"read_only": false,
|
|
717
675
|
"role": "write"
|
|
718
676
|
},
|
|
719
677
|
{
|
|
720
|
-
"description": "
|
|
721
|
-
"method": "
|
|
722
|
-
"name": "
|
|
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('
|
|
683
|
+
"description": "Arguments not inlined: call describe_function('update_faq_entry').",
|
|
726
684
|
"properties": {},
|
|
727
685
|
"type": "object"
|
|
728
686
|
},
|
|
729
|
-
"path": "/v1/
|
|
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
|
|
692
|
+
"description": "Delete one entry from an FAQ.",
|
|
735
693
|
"method": "DELETE",
|
|
736
|
-
"name": "
|
|
694
|
+
"name": "delete_faq_entry",
|
|
737
695
|
"parameters": {
|
|
738
696
|
"additionalProperties": true,
|
|
739
|
-
"description": "Arguments not inlined: call describe_function('
|
|
697
|
+
"description": "Arguments not inlined: call describe_function('delete_faq_entry').",
|
|
740
698
|
"properties": {},
|
|
741
699
|
"type": "object"
|
|
742
700
|
},
|
|
743
|
-
"path": "/v1/
|
|
701
|
+
"path": "/v1/faqs/{faq_id}/entries/{entry_id}",
|
|
744
702
|
"read_only": false,
|
|
745
703
|
"role": "write"
|
|
746
704
|
},
|