@contractspec/lib.support-bot 3.7.16 → 3.7.18

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 (55) hide show
  1. package/dist/bot/auto-responder.js +10 -732
  2. package/dist/bot/feedback-loop.js +5 -667
  3. package/dist/bot/index.js +11 -900
  4. package/dist/bot/tools.js +1 -131
  5. package/dist/browser/bot/auto-responder.js +10 -732
  6. package/dist/browser/bot/feedback-loop.js +5 -667
  7. package/dist/browser/bot/index.js +11 -900
  8. package/dist/browser/bot/tools.js +1 -131
  9. package/dist/browser/i18n/catalogs/en.js +2 -184
  10. package/dist/browser/i18n/catalogs/es.js +2 -184
  11. package/dist/browser/i18n/catalogs/fr.js +2 -184
  12. package/dist/browser/i18n/catalogs/index.js +4 -550
  13. package/dist/browser/i18n/index.js +4 -649
  14. package/dist/browser/i18n/keys.js +1 -71
  15. package/dist/browser/i18n/locale.js +1 -13
  16. package/dist/browser/i18n/messages.js +4 -564
  17. package/dist/browser/index.js +15 -1316
  18. package/dist/browser/rag/index.js +6 -701
  19. package/dist/browser/rag/ticket-resolver.js +6 -701
  20. package/dist/browser/spec.js +2 -32
  21. package/dist/browser/tickets/classifier.js +5 -944
  22. package/dist/browser/tickets/index.js +5 -944
  23. package/dist/i18n/catalogs/en.js +2 -184
  24. package/dist/i18n/catalogs/es.js +2 -184
  25. package/dist/i18n/catalogs/fr.js +2 -184
  26. package/dist/i18n/catalogs/index.js +4 -550
  27. package/dist/i18n/index.js +4 -649
  28. package/dist/i18n/keys.js +1 -71
  29. package/dist/i18n/locale.js +1 -13
  30. package/dist/i18n/messages.js +4 -564
  31. package/dist/index.js +15 -1316
  32. package/dist/node/bot/auto-responder.js +10 -732
  33. package/dist/node/bot/feedback-loop.js +5 -667
  34. package/dist/node/bot/index.js +11 -900
  35. package/dist/node/bot/tools.js +1 -131
  36. package/dist/node/i18n/catalogs/en.js +2 -184
  37. package/dist/node/i18n/catalogs/es.js +2 -184
  38. package/dist/node/i18n/catalogs/fr.js +2 -184
  39. package/dist/node/i18n/catalogs/index.js +4 -550
  40. package/dist/node/i18n/index.js +4 -649
  41. package/dist/node/i18n/keys.js +1 -71
  42. package/dist/node/i18n/locale.js +1 -13
  43. package/dist/node/i18n/messages.js +4 -564
  44. package/dist/node/index.js +15 -1316
  45. package/dist/node/rag/index.js +6 -701
  46. package/dist/node/rag/ticket-resolver.js +6 -701
  47. package/dist/node/spec.js +2 -32
  48. package/dist/node/tickets/classifier.js +5 -944
  49. package/dist/node/tickets/index.js +5 -944
  50. package/dist/rag/index.js +6 -701
  51. package/dist/rag/ticket-resolver.js +6 -701
  52. package/dist/spec.js +2 -32
  53. package/dist/tickets/classifier.js +5 -944
  54. package/dist/tickets/index.js +5 -944
  55. package/package.json +10 -10
@@ -1,131 +1 @@
1
- // src/bot/tools.ts
2
- import * as z from "zod";
3
- var ticketSchema = z.object({
4
- id: z.string(),
5
- subject: z.string(),
6
- body: z.string(),
7
- channel: z.enum(["email", "chat", "phone", "portal"]),
8
- customerName: z.string().optional(),
9
- customerEmail: z.string().optional(),
10
- metadata: z.object().optional()
11
- });
12
- var supportCitationSchema = z.object({
13
- label: z.string(),
14
- url: z.string().optional(),
15
- snippet: z.string().optional(),
16
- score: z.number().optional()
17
- });
18
- var supportActionSchema = z.object({
19
- type: z.enum(["respond", "escalate", "refund", "manual"]),
20
- label: z.string(),
21
- payload: z.record(z.string(), z.string())
22
- });
23
- var supportResolutionSchema = z.object({
24
- ticketId: z.string(),
25
- answer: z.string(),
26
- confidence: z.number(),
27
- citations: supportCitationSchema.array(),
28
- actions: supportActionSchema.array(),
29
- escalationReason: z.string().optional(),
30
- knowledgeUpdates: z.array(z.string()).optional()
31
- });
32
- var ticketClassificationSchema = z.object({
33
- ticketId: z.string(),
34
- category: z.enum([
35
- "billing",
36
- "technical",
37
- "product",
38
- "account",
39
- "compliance",
40
- "other"
41
- ]),
42
- priority: z.enum([
43
- "urgent",
44
- "high",
45
- "medium",
46
- "low"
47
- ]),
48
- sentiment: z.enum([
49
- "positive",
50
- "neutral",
51
- "negative",
52
- "frustrated"
53
- ]),
54
- intents: z.array(z.string()),
55
- tags: z.array(z.string()),
56
- confidence: z.number(),
57
- escalationRequired: z.boolean().optional()
58
- });
59
- function ensureTicket(input) {
60
- if (!input || typeof input !== "object" || !("ticket" in input)) {
61
- throw new Error("Input must include ticket");
62
- }
63
- const ticket = input.ticket;
64
- if (!ticket?.id)
65
- throw new Error("Ticket is missing id");
66
- return ticket;
67
- }
68
- function extractResolution(input) {
69
- if (!input || typeof input !== "object" || !("resolution" in input))
70
- return;
71
- return input.resolution;
72
- }
73
- function extractClassification(input) {
74
- if (!input || typeof input !== "object" || !("classification" in input))
75
- return;
76
- return input.classification;
77
- }
78
- function createSupportTools(options) {
79
- const classifyTool = {
80
- title: "support_classify_ticket",
81
- description: "Classify a ticket for priority, sentiment, and category",
82
- inputSchema: z.object({ ticket: ticketSchema }),
83
- execute: async (input) => {
84
- const ticket = ensureTicket(input);
85
- const classification = await options.classifier.classify(ticket);
86
- return {
87
- content: JSON.stringify(classification),
88
- metadata: { ticketId: ticket.id }
89
- };
90
- }
91
- };
92
- const resolveTool = {
93
- title: "support_resolve_ticket",
94
- description: "Generate a knowledge-grounded resolution for a ticket",
95
- inputSchema: z.object({ ticket: ticketSchema }),
96
- execute: async (input) => {
97
- const ticket = ensureTicket(input);
98
- const resolution = await options.resolver.resolve(ticket);
99
- return {
100
- content: JSON.stringify(resolution),
101
- metadata: { ticketId: ticket.id }
102
- };
103
- }
104
- };
105
- const responderTool = {
106
- title: "support_draft_response",
107
- description: "Draft a user-facing reply based on resolution + classification",
108
- inputSchema: z.object({
109
- ticket: ticketSchema,
110
- resolution: supportResolutionSchema,
111
- classification: ticketClassificationSchema
112
- }),
113
- execute: async (input) => {
114
- const ticket = ensureTicket(input);
115
- const resolution = extractResolution(input);
116
- const classification = extractClassification(input);
117
- if (!resolution || !classification) {
118
- throw new Error("resolution and classification are required");
119
- }
120
- const draft = await options.responder.draft(ticket, resolution, classification);
121
- return {
122
- content: JSON.stringify(draft),
123
- metadata: { ticketId: ticket.id }
124
- };
125
- }
126
- };
127
- return [classifyTool, resolveTool, responderTool];
128
- }
129
- export {
130
- createSupportTools
131
- };
1
+ import*as t from"zod";var r=t.object({id:t.string(),subject:t.string(),body:t.string(),channel:t.enum(["email","chat","phone","portal"]),customerName:t.string().optional(),customerEmail:t.string().optional(),metadata:t.object().optional()}),f=t.object({label:t.string(),url:t.string().optional(),snippet:t.string().optional(),score:t.number().optional()}),d=t.object({type:t.enum(["respond","escalate","refund","manual"]),label:t.string(),payload:t.record(t.string(),t.string())}),k=t.object({ticketId:t.string(),answer:t.string(),confidence:t.number(),citations:f.array(),actions:d.array(),escalationReason:t.string().optional(),knowledgeUpdates:t.array(t.string()).optional()}),z=t.object({ticketId:t.string(),category:t.enum(["billing","technical","product","account","compliance","other"]),priority:t.enum(["urgent","high","medium","low"]),sentiment:t.enum(["positive","neutral","negative","frustrated"]),intents:t.array(t.string()),tags:t.array(t.string()),confidence:t.number(),escalationRequired:t.boolean().optional()});function c(e){if(!e||typeof e!=="object"||!("ticket"in e))throw Error("Input must include ticket");let s=e.ticket;if(!s?.id)throw Error("Ticket is missing id");return s}function m(e){if(!e||typeof e!=="object"||!("resolution"in e))return;return e.resolution}function y(e){if(!e||typeof e!=="object"||!("classification"in e))return;return e.classification}function T(e){let s={title:"support_classify_ticket",description:"Classify a ticket for priority, sentiment, and category",inputSchema:t.object({ticket:r}),execute:async(o)=>{let i=c(o),n=await e.classifier.classify(i);return{content:JSON.stringify(n),metadata:{ticketId:i.id}}}},l={title:"support_resolve_ticket",description:"Generate a knowledge-grounded resolution for a ticket",inputSchema:t.object({ticket:r}),execute:async(o)=>{let i=c(o),n=await e.resolver.resolve(i);return{content:JSON.stringify(n),metadata:{ticketId:i.id}}}},p={title:"support_draft_response",description:"Draft a user-facing reply based on resolution + classification",inputSchema:t.object({ticket:r,resolution:k,classification:z}),execute:async(o)=>{let i=c(o),n=m(o),a=y(o);if(!n||!a)throw Error("resolution and classification are required");let u=await e.responder.draft(i,n,a);return{content:JSON.stringify(u),metadata:{ticketId:i.id}}}};return[s,l,p]}export{T as createSupportTools};
@@ -1,27 +1,4 @@
1
- // src/i18n/catalogs/en.ts
2
- import { defineTranslation } from "@contractspec/lib.contracts-spec/translations";
3
- var enMessages = defineTranslation({
4
- meta: {
5
- key: "support-bot.messages",
6
- version: "1.0.0",
7
- domain: "support-bot",
8
- description: "All user-facing, LLM-facing, and developer-facing strings for the support-bot package",
9
- owners: ["platform"],
10
- stability: "experimental"
11
- },
12
- locale: "en",
13
- fallback: "en",
14
- messages: {
15
- "prompt.classifier.system": {
16
- value: "Classify the support ticket.",
17
- description: "Classifier LLM system prompt"
18
- },
19
- "prompt.autoResponder.system": {
20
- value: "Write empathetic, accurate support replies that cite sources when relevant.",
21
- description: "Auto-responder LLM system prompt"
22
- },
23
- "prompt.autoResponder.user": {
24
- value: `Ticket #{ticketId} ({category}, {priority}, {sentiment})
1
+ import{defineTranslation as g}from"@contractspec/lib.contracts-spec/translations";var j=g({meta:{key:"support-bot.messages",version:"1.0.0",domain:"support-bot",description:"All user-facing, LLM-facing, and developer-facing strings for the support-bot package",owners:["platform"],stability:"experimental"},locale:"en",fallback:"en",messages:{"prompt.classifier.system":{value:"Classify the support ticket.",description:"Classifier LLM system prompt"},"prompt.autoResponder.system":{value:"Write empathetic, accurate support replies that cite sources when relevant.",description:"Auto-responder LLM system prompt"},"prompt.autoResponder.user":{value:`Ticket #{ticketId} ({category}, {priority}, {sentiment})
25
2
  Subject: {subject}
26
3
 
27
4
  {body}
@@ -29,163 +6,4 @@ Subject: {subject}
29
6
  Knowledge:
30
7
  {knowledge}
31
8
 
32
- Respond to the customer.`,
33
- description: "Auto-responder user prompt template",
34
- placeholders: [
35
- { name: "ticketId", type: "string" },
36
- { name: "category", type: "string" },
37
- { name: "priority", type: "string" },
38
- { name: "sentiment", type: "string" },
39
- { name: "subject", type: "string" },
40
- { name: "body", type: "string" },
41
- { name: "knowledge", type: "string" }
42
- ]
43
- },
44
- "responder.closing.friendly": {
45
- value: "We remain available if you need anything else.",
46
- description: "Friendly closing line for support responses"
47
- },
48
- "responder.closing.formal": {
49
- value: "Please let us know if you require additional assistance.",
50
- description: "Formal closing line for support responses"
51
- },
52
- "responder.greeting.named": {
53
- value: "Hi {name},",
54
- description: "Greeting with customer name",
55
- placeholders: [{ name: "name", type: "string" }]
56
- },
57
- "responder.greeting.anonymous": {
58
- value: "Hi there,",
59
- description: "Greeting without customer name"
60
- },
61
- "responder.intro.thanks": {
62
- value: 'Thanks for contacting us about "{subject}".',
63
- description: "Thank-you intro referencing the ticket subject",
64
- placeholders: [{ name: "subject", type: "string" }]
65
- },
66
- "responder.signature": {
67
- value: "— ContractSpec Support",
68
- description: "Email / response signature"
69
- },
70
- "responder.references.header": {
71
- value: "References:",
72
- description: "Header for the references section"
73
- },
74
- "responder.references.sourceLabel": {
75
- value: "Source {index}",
76
- description: "Label for a numbered source reference",
77
- placeholders: [{ name: "index", type: "number" }]
78
- },
79
- "responder.category.billing": {
80
- value: "I understand billing issues can be stressful, so let me clarify the situation.",
81
- description: "Category intro for billing tickets"
82
- },
83
- "responder.category.technical": {
84
- value: "I see you encountered a technical issue. Here is what happened and how to fix it.",
85
- description: "Category intro for technical tickets"
86
- },
87
- "responder.category.product": {
88
- value: "Thanks for sharing feedback about the product. Here are the next steps.",
89
- description: "Category intro for product tickets"
90
- },
91
- "responder.category.account": {
92
- value: "Account access is critical, so let me walk you through the resolution.",
93
- description: "Category intro for account tickets"
94
- },
95
- "responder.category.compliance": {
96
- value: "Compliance questions require precision. See the policy-aligned answer below.",
97
- description: "Category intro for compliance tickets"
98
- },
99
- "responder.category.other": {
100
- value: "Here is what we found after reviewing your request.",
101
- description: "Category intro for uncategorized tickets"
102
- },
103
- "responder.subject.replyPrefix": {
104
- value: "Re: {subject}",
105
- description: "Reply subject line prefix",
106
- placeholders: [{ name: "subject", type: "string" }]
107
- },
108
- "resolver.question.subjectLabel": {
109
- value: "Subject: {subject}",
110
- description: "Subject label in resolver question context",
111
- placeholders: [{ name: "subject", type: "string" }]
112
- },
113
- "resolver.question.channelLabel": {
114
- value: "Channel: {channel}",
115
- description: "Channel label in resolver question context",
116
- placeholders: [{ name: "channel", type: "string" }]
117
- },
118
- "resolver.question.customerLabel": {
119
- value: "Customer: {name}",
120
- description: "Customer label in resolver question context",
121
- placeholders: [{ name: "name", type: "string" }]
122
- },
123
- "resolver.action.escalate": {
124
- value: "Escalate for human review",
125
- description: "Action label for escalation"
126
- },
127
- "resolver.action.respond": {
128
- value: "Send automated response",
129
- description: "Action label for automated response"
130
- },
131
- "resolver.escalation.insufficientConfidence": {
132
- value: "Insufficient confidence or missing knowledge references",
133
- description: "Escalation reason when confidence is too low"
134
- },
135
- "tool.classify.title": {
136
- value: "support_classify_ticket",
137
- description: "MCP tool title for ticket classification"
138
- },
139
- "tool.classify.description": {
140
- value: "Classify a ticket for priority, sentiment, and category",
141
- description: "MCP tool description for ticket classification"
142
- },
143
- "tool.resolve.title": {
144
- value: "support_resolve_ticket",
145
- description: "MCP tool title for ticket resolution"
146
- },
147
- "tool.resolve.description": {
148
- value: "Generate a knowledge-grounded resolution for a ticket",
149
- description: "MCP tool description for ticket resolution"
150
- },
151
- "tool.draft.title": {
152
- value: "support_draft_response",
153
- description: "MCP tool title for response drafting"
154
- },
155
- "tool.draft.description": {
156
- value: "Draft a user-facing reply based on resolution + classification",
157
- description: "MCP tool description for response drafting"
158
- },
159
- "error.inputMustIncludeTicket": {
160
- value: "Input must include ticket",
161
- description: "Error when input payload is missing the ticket field"
162
- },
163
- "error.ticketMissingId": {
164
- value: "Ticket is missing id",
165
- description: "Error when ticket object lacks an id"
166
- },
167
- "error.resolutionClassificationRequired": {
168
- value: "resolution and classification are required",
169
- description: "Error when draft endpoint is called without resolution and classification"
170
- },
171
- "feedback.noRecords": {
172
- value: "No feedback recorded yet.",
173
- description: "Placeholder when no feedback entries exist"
174
- },
175
- "feedback.status.escalated": {
176
- value: "Escalated",
177
- description: "Status label for escalated tickets"
178
- },
179
- "feedback.status.autoResolved": {
180
- value: "Auto-resolved",
181
- description: "Status label for auto-resolved tickets"
182
- },
183
- "spec.instructionsAppendix": {
184
- value: "Always cite support knowledge sources and flag compliance/billing issues for human review when unsure.",
185
- description: "Instructions appendix appended to agent spec"
186
- }
187
- }
188
- });
189
- export {
190
- enMessages
191
- };
9
+ Respond to the customer.`,description:"Auto-responder user prompt template",placeholders:[{name:"ticketId",type:"string"},{name:"category",type:"string"},{name:"priority",type:"string"},{name:"sentiment",type:"string"},{name:"subject",type:"string"},{name:"body",type:"string"},{name:"knowledge",type:"string"}]},"responder.closing.friendly":{value:"We remain available if you need anything else.",description:"Friendly closing line for support responses"},"responder.closing.formal":{value:"Please let us know if you require additional assistance.",description:"Formal closing line for support responses"},"responder.greeting.named":{value:"Hi {name},",description:"Greeting with customer name",placeholders:[{name:"name",type:"string"}]},"responder.greeting.anonymous":{value:"Hi there,",description:"Greeting without customer name"},"responder.intro.thanks":{value:'Thanks for contacting us about "{subject}".',description:"Thank-you intro referencing the ticket subject",placeholders:[{name:"subject",type:"string"}]},"responder.signature":{value:"— ContractSpec Support",description:"Email / response signature"},"responder.references.header":{value:"References:",description:"Header for the references section"},"responder.references.sourceLabel":{value:"Source {index}",description:"Label for a numbered source reference",placeholders:[{name:"index",type:"number"}]},"responder.category.billing":{value:"I understand billing issues can be stressful, so let me clarify the situation.",description:"Category intro for billing tickets"},"responder.category.technical":{value:"I see you encountered a technical issue. Here is what happened and how to fix it.",description:"Category intro for technical tickets"},"responder.category.product":{value:"Thanks for sharing feedback about the product. Here are the next steps.",description:"Category intro for product tickets"},"responder.category.account":{value:"Account access is critical, so let me walk you through the resolution.",description:"Category intro for account tickets"},"responder.category.compliance":{value:"Compliance questions require precision. See the policy-aligned answer below.",description:"Category intro for compliance tickets"},"responder.category.other":{value:"Here is what we found after reviewing your request.",description:"Category intro for uncategorized tickets"},"responder.subject.replyPrefix":{value:"Re: {subject}",description:"Reply subject line prefix",placeholders:[{name:"subject",type:"string"}]},"resolver.question.subjectLabel":{value:"Subject: {subject}",description:"Subject label in resolver question context",placeholders:[{name:"subject",type:"string"}]},"resolver.question.channelLabel":{value:"Channel: {channel}",description:"Channel label in resolver question context",placeholders:[{name:"channel",type:"string"}]},"resolver.question.customerLabel":{value:"Customer: {name}",description:"Customer label in resolver question context",placeholders:[{name:"name",type:"string"}]},"resolver.action.escalate":{value:"Escalate for human review",description:"Action label for escalation"},"resolver.action.respond":{value:"Send automated response",description:"Action label for automated response"},"resolver.escalation.insufficientConfidence":{value:"Insufficient confidence or missing knowledge references",description:"Escalation reason when confidence is too low"},"tool.classify.title":{value:"support_classify_ticket",description:"MCP tool title for ticket classification"},"tool.classify.description":{value:"Classify a ticket for priority, sentiment, and category",description:"MCP tool description for ticket classification"},"tool.resolve.title":{value:"support_resolve_ticket",description:"MCP tool title for ticket resolution"},"tool.resolve.description":{value:"Generate a knowledge-grounded resolution for a ticket",description:"MCP tool description for ticket resolution"},"tool.draft.title":{value:"support_draft_response",description:"MCP tool title for response drafting"},"tool.draft.description":{value:"Draft a user-facing reply based on resolution + classification",description:"MCP tool description for response drafting"},"error.inputMustIncludeTicket":{value:"Input must include ticket",description:"Error when input payload is missing the ticket field"},"error.ticketMissingId":{value:"Ticket is missing id",description:"Error when ticket object lacks an id"},"error.resolutionClassificationRequired":{value:"resolution and classification are required",description:"Error when draft endpoint is called without resolution and classification"},"feedback.noRecords":{value:"No feedback recorded yet.",description:"Placeholder when no feedback entries exist"},"feedback.status.escalated":{value:"Escalated",description:"Status label for escalated tickets"},"feedback.status.autoResolved":{value:"Auto-resolved",description:"Status label for auto-resolved tickets"},"spec.instructionsAppendix":{value:"Always cite support knowledge sources and flag compliance/billing issues for human review when unsure.",description:"Instructions appendix appended to agent spec"}}});export{j as enMessages};
@@ -1,27 +1,4 @@
1
- // src/i18n/catalogs/es.ts
2
- import { defineTranslation } from "@contractspec/lib.contracts-spec/translations";
3
- var esMessages = defineTranslation({
4
- meta: {
5
- key: "support-bot.messages",
6
- version: "1.0.0",
7
- domain: "support-bot",
8
- description: "Spanish translations for the support-bot package",
9
- owners: ["platform"],
10
- stability: "experimental"
11
- },
12
- locale: "es",
13
- fallback: "en",
14
- messages: {
15
- "prompt.classifier.system": {
16
- value: "Clasifica el ticket de soporte.",
17
- description: "Classifier LLM system prompt"
18
- },
19
- "prompt.autoResponder.system": {
20
- value: "Redacta respuestas de soporte empáticas y precisas citando fuentes cuando sea relevante.",
21
- description: "Auto-responder LLM system prompt"
22
- },
23
- "prompt.autoResponder.user": {
24
- value: `Ticket #{ticketId} ({category}, {priority}, {sentiment})
1
+ import{defineTranslation as g}from"@contractspec/lib.contracts-spec/translations";var j=g({meta:{key:"support-bot.messages",version:"1.0.0",domain:"support-bot",description:"Spanish translations for the support-bot package",owners:["platform"],stability:"experimental"},locale:"es",fallback:"en",messages:{"prompt.classifier.system":{value:"Clasifica el ticket de soporte.",description:"Classifier LLM system prompt"},"prompt.autoResponder.system":{value:"Redacta respuestas de soporte empáticas y precisas citando fuentes cuando sea relevante.",description:"Auto-responder LLM system prompt"},"prompt.autoResponder.user":{value:`Ticket #{ticketId} ({category}, {priority}, {sentiment})
25
2
  Asunto: {subject}
26
3
 
27
4
  {body}
@@ -29,163 +6,4 @@ Asunto: {subject}
29
6
  Conocimientos:
30
7
  {knowledge}
31
8
 
32
- Responde al cliente.`,
33
- description: "Auto-responder user prompt template",
34
- placeholders: [
35
- { name: "ticketId", type: "string" },
36
- { name: "category", type: "string" },
37
- { name: "priority", type: "string" },
38
- { name: "sentiment", type: "string" },
39
- { name: "subject", type: "string" },
40
- { name: "body", type: "string" },
41
- { name: "knowledge", type: "string" }
42
- ]
43
- },
44
- "responder.closing.friendly": {
45
- value: "Quedamos a su disposición si necesita cualquier otra cosa.",
46
- description: "Friendly closing line for support responses"
47
- },
48
- "responder.closing.formal": {
49
- value: "No dude en contactarnos si requiere asistencia adicional.",
50
- description: "Formal closing line for support responses"
51
- },
52
- "responder.greeting.named": {
53
- value: "Hola {name},",
54
- description: "Greeting with customer name",
55
- placeholders: [{ name: "name", type: "string" }]
56
- },
57
- "responder.greeting.anonymous": {
58
- value: "Hola,",
59
- description: "Greeting without customer name"
60
- },
61
- "responder.intro.thanks": {
62
- value: "Gracias por contactarnos sobre «{subject}».",
63
- description: "Thank-you intro referencing the ticket subject",
64
- placeholders: [{ name: "subject", type: "string" }]
65
- },
66
- "responder.signature": {
67
- value: "— Soporte ContractSpec",
68
- description: "Email / response signature"
69
- },
70
- "responder.references.header": {
71
- value: "Referencias:",
72
- description: "Header for the references section"
73
- },
74
- "responder.references.sourceLabel": {
75
- value: "Fuente {index}",
76
- description: "Label for a numbered source reference",
77
- placeholders: [{ name: "index", type: "number" }]
78
- },
79
- "responder.category.billing": {
80
- value: "Entiendo que los problemas de facturación pueden ser estresantes, permítame aclarar la situación.",
81
- description: "Category intro for billing tickets"
82
- },
83
- "responder.category.technical": {
84
- value: "Veo que encontró un problema técnico. Esto es lo que sucedió y cómo solucionarlo.",
85
- description: "Category intro for technical tickets"
86
- },
87
- "responder.category.product": {
88
- value: "Gracias por compartir sus comentarios sobre el producto. Estos son los próximos pasos.",
89
- description: "Category intro for product tickets"
90
- },
91
- "responder.category.account": {
92
- value: "El acceso a la cuenta es fundamental, permítame guiarle hacia la resolución.",
93
- description: "Category intro for account tickets"
94
- },
95
- "responder.category.compliance": {
96
- value: "Las preguntas de cumplimiento requieren precisión. Consulte la respuesta alineada con las políticas a continuación.",
97
- description: "Category intro for compliance tickets"
98
- },
99
- "responder.category.other": {
100
- value: "Esto es lo que encontramos tras revisar su solicitud.",
101
- description: "Category intro for uncategorized tickets"
102
- },
103
- "responder.subject.replyPrefix": {
104
- value: "Re: {subject}",
105
- description: "Reply subject line prefix",
106
- placeholders: [{ name: "subject", type: "string" }]
107
- },
108
- "resolver.question.subjectLabel": {
109
- value: "Asunto: {subject}",
110
- description: "Subject label in resolver question context",
111
- placeholders: [{ name: "subject", type: "string" }]
112
- },
113
- "resolver.question.channelLabel": {
114
- value: "Canal: {channel}",
115
- description: "Channel label in resolver question context",
116
- placeholders: [{ name: "channel", type: "string" }]
117
- },
118
- "resolver.question.customerLabel": {
119
- value: "Cliente: {name}",
120
- description: "Customer label in resolver question context",
121
- placeholders: [{ name: "name", type: "string" }]
122
- },
123
- "resolver.action.escalate": {
124
- value: "Escalar para revisión humana",
125
- description: "Action label for escalation"
126
- },
127
- "resolver.action.respond": {
128
- value: "Enviar respuesta automática",
129
- description: "Action label for automated response"
130
- },
131
- "resolver.escalation.insufficientConfidence": {
132
- value: "Confianza insuficiente o referencias de conocimiento faltantes",
133
- description: "Escalation reason when confidence is too low"
134
- },
135
- "tool.classify.title": {
136
- value: "support_classify_ticket",
137
- description: "MCP tool title for ticket classification"
138
- },
139
- "tool.classify.description": {
140
- value: "Clasificar un ticket por prioridad, sentimiento y categoría",
141
- description: "MCP tool description for ticket classification"
142
- },
143
- "tool.resolve.title": {
144
- value: "support_resolve_ticket",
145
- description: "MCP tool title for ticket resolution"
146
- },
147
- "tool.resolve.description": {
148
- value: "Generar una resolución basada en conocimientos para un ticket",
149
- description: "MCP tool description for ticket resolution"
150
- },
151
- "tool.draft.title": {
152
- value: "support_draft_response",
153
- description: "MCP tool title for response drafting"
154
- },
155
- "tool.draft.description": {
156
- value: "Redactar una respuesta al cliente basada en la resolución y la clasificación",
157
- description: "MCP tool description for response drafting"
158
- },
159
- "error.inputMustIncludeTicket": {
160
- value: "La entrada debe incluir un ticket",
161
- description: "Error when input payload is missing the ticket field"
162
- },
163
- "error.ticketMissingId": {
164
- value: "El ticket no tiene identificador",
165
- description: "Error when ticket object lacks an id"
166
- },
167
- "error.resolutionClassificationRequired": {
168
- value: "la resolución y la clasificación son obligatorias",
169
- description: "Error when draft endpoint is called without resolution and classification"
170
- },
171
- "feedback.noRecords": {
172
- value: "No hay comentarios registrados aún.",
173
- description: "Placeholder when no feedback entries exist"
174
- },
175
- "feedback.status.escalated": {
176
- value: "Escalado",
177
- description: "Status label for escalated tickets"
178
- },
179
- "feedback.status.autoResolved": {
180
- value: "Resuelto automáticamente",
181
- description: "Status label for auto-resolved tickets"
182
- },
183
- "spec.instructionsAppendix": {
184
- value: "Cite siempre las fuentes de conocimiento de soporte y señale los problemas de cumplimiento/facturación para revisión humana en caso de duda.",
185
- description: "Instructions appendix appended to agent spec"
186
- }
187
- }
188
- });
189
- export {
190
- esMessages
191
- };
9
+ Responde al cliente.`,description:"Auto-responder user prompt template",placeholders:[{name:"ticketId",type:"string"},{name:"category",type:"string"},{name:"priority",type:"string"},{name:"sentiment",type:"string"},{name:"subject",type:"string"},{name:"body",type:"string"},{name:"knowledge",type:"string"}]},"responder.closing.friendly":{value:"Quedamos a su disposición si necesita cualquier otra cosa.",description:"Friendly closing line for support responses"},"responder.closing.formal":{value:"No dude en contactarnos si requiere asistencia adicional.",description:"Formal closing line for support responses"},"responder.greeting.named":{value:"Hola {name},",description:"Greeting with customer name",placeholders:[{name:"name",type:"string"}]},"responder.greeting.anonymous":{value:"Hola,",description:"Greeting without customer name"},"responder.intro.thanks":{value:"Gracias por contactarnos sobre «{subject}».",description:"Thank-you intro referencing the ticket subject",placeholders:[{name:"subject",type:"string"}]},"responder.signature":{value:"— Soporte ContractSpec",description:"Email / response signature"},"responder.references.header":{value:"Referencias:",description:"Header for the references section"},"responder.references.sourceLabel":{value:"Fuente {index}",description:"Label for a numbered source reference",placeholders:[{name:"index",type:"number"}]},"responder.category.billing":{value:"Entiendo que los problemas de facturación pueden ser estresantes, permítame aclarar la situación.",description:"Category intro for billing tickets"},"responder.category.technical":{value:"Veo que encontró un problema técnico. Esto es lo que sucedió y cómo solucionarlo.",description:"Category intro for technical tickets"},"responder.category.product":{value:"Gracias por compartir sus comentarios sobre el producto. Estos son los próximos pasos.",description:"Category intro for product tickets"},"responder.category.account":{value:"El acceso a la cuenta es fundamental, permítame guiarle hacia la resolución.",description:"Category intro for account tickets"},"responder.category.compliance":{value:"Las preguntas de cumplimiento requieren precisión. Consulte la respuesta alineada con las políticas a continuación.",description:"Category intro for compliance tickets"},"responder.category.other":{value:"Esto es lo que encontramos tras revisar su solicitud.",description:"Category intro for uncategorized tickets"},"responder.subject.replyPrefix":{value:"Re: {subject}",description:"Reply subject line prefix",placeholders:[{name:"subject",type:"string"}]},"resolver.question.subjectLabel":{value:"Asunto: {subject}",description:"Subject label in resolver question context",placeholders:[{name:"subject",type:"string"}]},"resolver.question.channelLabel":{value:"Canal: {channel}",description:"Channel label in resolver question context",placeholders:[{name:"channel",type:"string"}]},"resolver.question.customerLabel":{value:"Cliente: {name}",description:"Customer label in resolver question context",placeholders:[{name:"name",type:"string"}]},"resolver.action.escalate":{value:"Escalar para revisión humana",description:"Action label for escalation"},"resolver.action.respond":{value:"Enviar respuesta automática",description:"Action label for automated response"},"resolver.escalation.insufficientConfidence":{value:"Confianza insuficiente o referencias de conocimiento faltantes",description:"Escalation reason when confidence is too low"},"tool.classify.title":{value:"support_classify_ticket",description:"MCP tool title for ticket classification"},"tool.classify.description":{value:"Clasificar un ticket por prioridad, sentimiento y categoría",description:"MCP tool description for ticket classification"},"tool.resolve.title":{value:"support_resolve_ticket",description:"MCP tool title for ticket resolution"},"tool.resolve.description":{value:"Generar una resolución basada en conocimientos para un ticket",description:"MCP tool description for ticket resolution"},"tool.draft.title":{value:"support_draft_response",description:"MCP tool title for response drafting"},"tool.draft.description":{value:"Redactar una respuesta al cliente basada en la resolución y la clasificación",description:"MCP tool description for response drafting"},"error.inputMustIncludeTicket":{value:"La entrada debe incluir un ticket",description:"Error when input payload is missing the ticket field"},"error.ticketMissingId":{value:"El ticket no tiene identificador",description:"Error when ticket object lacks an id"},"error.resolutionClassificationRequired":{value:"la resolución y la clasificación son obligatorias",description:"Error when draft endpoint is called without resolution and classification"},"feedback.noRecords":{value:"No hay comentarios registrados aún.",description:"Placeholder when no feedback entries exist"},"feedback.status.escalated":{value:"Escalado",description:"Status label for escalated tickets"},"feedback.status.autoResolved":{value:"Resuelto automáticamente",description:"Status label for auto-resolved tickets"},"spec.instructionsAppendix":{value:"Cite siempre las fuentes de conocimiento de soporte y señale los problemas de cumplimiento/facturación para revisión humana en caso de duda.",description:"Instructions appendix appended to agent spec"}}});export{j as esMessages};