@besales/mcp 0.33.0 → 0.37.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 (37) hide show
  1. package/README.md +45 -12
  2. package/dist/http/api-client.d.ts +2 -0
  3. package/dist/http/api-client.js +55 -0
  4. package/dist/http/api-client.js.map +1 -1
  5. package/dist/schemas/mcp-tools.json +965 -30
  6. package/dist/tools/definitions/broadcast-analytics.d.ts +28 -7
  7. package/dist/tools/definitions/broadcast-analytics.js +399 -33
  8. package/dist/tools/definitions/broadcast-analytics.js.map +1 -1
  9. package/dist/tools/definitions/broadcast-mailing-variants.d.ts +19 -0
  10. package/dist/tools/definitions/broadcast-mailing-variants.js +107 -0
  11. package/dist/tools/definitions/broadcast-mailing-variants.js.map +1 -0
  12. package/dist/tools/definitions/getcourse-wave.d.ts +147 -0
  13. package/dist/tools/definitions/getcourse-wave.js +505 -0
  14. package/dist/tools/definitions/getcourse-wave.js.map +1 -0
  15. package/dist/tools/definitions/platform-setup.d.ts +73 -8
  16. package/dist/tools/definitions/platform-setup.js +106 -504
  17. package/dist/tools/definitions/platform-setup.js.map +1 -1
  18. package/dist/tools/definitions/scheduled-tasks.d.ts +4 -0
  19. package/dist/tools/definitions/scheduled-tasks.js +14 -2
  20. package/dist/tools/definitions/scheduled-tasks.js.map +1 -1
  21. package/dist/tools/definitions/session.js +6 -4
  22. package/dist/tools/definitions/session.js.map +1 -1
  23. package/dist/tools/definitions/shared.d.ts +53 -0
  24. package/dist/tools/definitions/shared.js +71 -0
  25. package/dist/tools/definitions/shared.js.map +1 -1
  26. package/dist/tools/definitions.d.ts +121 -15
  27. package/dist/tools/definitions.js +2 -0
  28. package/dist/tools/definitions.js.map +1 -1
  29. package/dist/tools/registry-mapping-cases-core.d.ts +34 -0
  30. package/dist/tools/registry-mapping-cases-core.js +700 -0
  31. package/dist/tools/registry-mapping-cases-core.js.map +1 -0
  32. package/dist/tools/registry-mapping-cases-platform.d.ts +2 -0
  33. package/dist/tools/registry-mapping-cases-platform.js +910 -0
  34. package/dist/tools/registry-mapping-cases-platform.js.map +1 -0
  35. package/dist/tools/registry.js +12 -6
  36. package/dist/tools/registry.js.map +1 -1
  37. package/package.json +1 -1
@@ -1,26 +1,47 @@
1
1
  export declare const broadcastAnalyticsTools: (import("./shared.js").ToolDefinition<{
2
- view: "cohort" | "period";
2
+ report: "summary" | "cohorts" | "skip_reasons" | "recipients" | "deals" | "action_failures" | "indirect_payments" | "response_windows" | "insights" | "recent_leads" | "data_quality" | "segments_catalog" | "funnel_products" | "payment_candidates" | "payment_candidates_summary";
3
3
  mode: "all" | "days" | "range";
4
+ view: "cohort" | "period";
5
+ date?: string | undefined;
6
+ channel?: "Site" | "Email" | "SMS" | "Telegram" | "Facebook" | "VK" | "Chatium" | "WhatsApp" | "Viber" | "MAX" | "UNKNOWN" | undefined;
7
+ import_job_id?: string | undefined;
8
+ page?: number | undefined;
9
+ page_size?: number | undefined;
10
+ recipient_metric?: "sent" | "delivered" | "entered" | "deepDialog" | "handedOff" | "notDelivered" | "notSent" | undefined;
11
+ deal_metric?: "issued" | "paid" | "withoutCohort" | undefined;
12
+ reason?: "NO_MESSENGER" | "ACTIVE_INVOICE_SAME_PRODUCT" | "ACTIVE_DEAL_SAME_PRODUCT" | "PAID_SAME_PRODUCT" | "ACTIVE_DEAL_OTHER_PRODUCT" | "MANAGER_ASSIGNED_ACTIVE_DEAL" | "PRODUCT_CONTEXT_MISSING" | "GETCOURSE_CHECK_ERROR" | "ALREADY_SENT" | "USER_NOT_FOUND" | undefined;
13
+ action_type?: string | undefined;
14
+ payment_view?: "decidable" | "excluded" | "resolved" | undefined;
15
+ payment_status?: "PENDING" | "CONFIRMED" | "CONFIRMED_INDIRECT" | "REJECTED" | undefined;
16
+ payment_eligibility?: "PENDING_CHECK" | "VERIFIED" | "VERIFIED_WEAK" | "UNVERIFIED" | "EXCLUDED_NON_AUTOWEB" | "EXCLUDED_PREEXISTING" | undefined;
17
+ include_archived?: boolean | undefined;
4
18
  workspace_id?: string | undefined;
5
19
  days?: number | undefined;
6
20
  from?: string | undefined;
7
21
  to?: string | undefined;
8
22
  platform_id?: string | undefined;
9
- funnel?: string | undefined;
23
+ funnel?: string | string[] | undefined;
10
24
  funnel_mode?: "none" | undefined;
11
- segment?: string | undefined;
12
- product?: string | undefined;
25
+ segment?: string | string[] | undefined;
26
+ mailing_variant_id?: string | string[] | undefined;
27
+ product?: string | string[] | undefined;
13
28
  product_mode?: "none" | undefined;
29
+ freshness?: "0-7" | "8-14" | "15-30" | "31+" | ("0-7" | "8-14" | "15-30" | "31+")[] | undefined;
30
+ channels?: "Site" | "Email" | "SMS" | "Telegram" | "Facebook" | "VK" | "Chatium" | "WhatsApp" | "Viber" | "MAX" | "UNKNOWN" | ("Site" | "Email" | "SMS" | "Telegram" | "Facebook" | "VK" | "Chatium" | "WhatsApp" | "Viber" | "MAX" | "UNKNOWN")[] | undefined;
14
31
  }> | import("./shared.js").ToolDefinition<{
15
32
  mode: "all" | "days" | "range";
33
+ view: "cohort" | "period";
16
34
  workspace_id?: string | undefined;
17
35
  days?: number | undefined;
18
36
  from?: string | undefined;
19
37
  to?: string | undefined;
20
38
  platform_id?: string | undefined;
21
- funnel?: string | undefined;
39
+ funnel?: string | string[] | undefined;
22
40
  funnel_mode?: "none" | undefined;
23
- segment?: string | undefined;
24
- product?: string | undefined;
41
+ segment?: string | string[] | undefined;
42
+ mailing_variant_id?: string | string[] | undefined;
43
+ product?: string | string[] | undefined;
25
44
  product_mode?: "none" | undefined;
45
+ freshness?: "0-7" | "8-14" | "15-30" | "31+" | ("0-7" | "8-14" | "15-30" | "31+")[] | undefined;
46
+ channels?: "Site" | "Email" | "SMS" | "Telegram" | "Facebook" | "VK" | "Chatium" | "WhatsApp" | "Viber" | "MAX" | "UNKNOWN" | ("Site" | "Email" | "SMS" | "Telegram" | "Facebook" | "VK" | "Chatium" | "WhatsApp" | "Viber" | "MAX" | "UNKNOWN")[] | undefined;
26
47
  }>)[];
@@ -1,8 +1,72 @@
1
- // Read-only агрегаты страницы /broadcast-analytics. Не пересчитывать эти показатели по сообщениям:
1
+ // Read-only данные страницы /broadcast-analytics. Не пересчитывать эти показатели по сообщениям:
2
2
  // backend уже держит когортную атрибуцию, delivery-гейт и дедуп событий между соседними волнами.
3
3
  import { z } from 'zod';
4
4
  import { defineTool, uuidSchema, withInstructions } from './shared.js';
5
5
  const calendarDateSchema = z.string().regex(/^\d{4}-\d{2}-\d{2}$/);
6
+ const filterValuesSchema = z.union([
7
+ z.string().min(1),
8
+ z.array(z.string().min(1)).min(1).max(50),
9
+ ]);
10
+ const channelSchema = z.enum([
11
+ 'Site',
12
+ 'Email',
13
+ 'SMS',
14
+ 'Telegram',
15
+ 'Facebook',
16
+ 'VK',
17
+ 'Chatium',
18
+ 'WhatsApp',
19
+ 'Viber',
20
+ 'MAX',
21
+ 'UNKNOWN',
22
+ ]);
23
+ const preflightReasonSchema = z.enum([
24
+ 'NO_MESSENGER',
25
+ 'ACTIVE_INVOICE_SAME_PRODUCT',
26
+ 'ACTIVE_DEAL_SAME_PRODUCT',
27
+ 'PAID_SAME_PRODUCT',
28
+ 'ACTIVE_DEAL_OTHER_PRODUCT',
29
+ 'MANAGER_ASSIGNED_ACTIVE_DEAL',
30
+ 'PRODUCT_CONTEXT_MISSING',
31
+ 'GETCOURSE_CHECK_ERROR',
32
+ 'ALREADY_SENT',
33
+ 'USER_NOT_FOUND',
34
+ ]);
35
+ const actionTypeSchema = z.string().min(1);
36
+ const PAYMENT_CANDIDATES_MAX_PAGE_SIZE = 100;
37
+ const analyticsReportSchema = z.enum([
38
+ 'summary',
39
+ 'cohorts',
40
+ 'skip_reasons',
41
+ 'recipients',
42
+ 'deals',
43
+ 'action_failures',
44
+ 'indirect_payments',
45
+ 'response_windows',
46
+ 'insights',
47
+ 'recent_leads',
48
+ 'data_quality',
49
+ 'segments_catalog',
50
+ 'funnel_products',
51
+ 'payment_candidates',
52
+ 'payment_candidates_summary',
53
+ ]);
54
+ const DRILLDOWN_REPORTS = new Set([
55
+ 'recipients',
56
+ 'deals',
57
+ 'action_failures',
58
+ 'indirect_payments',
59
+ ]);
60
+ const PAGED_REPORTS = new Set([
61
+ ...DRILLDOWN_REPORTS,
62
+ 'payment_candidates',
63
+ ]);
64
+ const DATED_REPORTS = new Set([
65
+ ...DRILLDOWN_REPORTS,
66
+ 'skip_reasons',
67
+ ]);
68
+ const isPaymentReport = (report) => report === 'payment_candidates' || report === 'payment_candidates_summary';
69
+ const isCatalogReport = (report) => report === 'segments_catalog' || report === 'funnel_products';
6
70
  const analyticsQueryFields = {
7
71
  workspace_id: uuidSchema.optional(),
8
72
  mode: z.enum(['all', 'days', 'range']).default('days'),
@@ -10,13 +74,210 @@ const analyticsQueryFields = {
10
74
  from: calendarDateSchema.optional(),
11
75
  to: calendarDateSchema.optional(),
12
76
  platform_id: uuidSchema.optional(),
13
- funnel: z.string().min(1).optional(),
77
+ funnel: filterValuesSchema.optional(),
14
78
  funnel_mode: z.literal('none').optional(),
15
- segment: z.string().min(1).optional(),
16
- product: z.string().min(1).optional(),
79
+ segment: filterValuesSchema.optional(),
80
+ mailing_variant_id: z.union([uuidSchema, z.array(uuidSchema).min(1).max(50)]).optional(),
81
+ product: filterValuesSchema.optional(),
17
82
  product_mode: z.literal('none').optional(),
83
+ freshness: z
84
+ .union([
85
+ z.enum(['0-7', '8-14', '15-30', '31+']),
86
+ z.array(z.enum(['0-7', '8-14', '15-30', '31+'])).min(1).max(4),
87
+ ])
88
+ .optional(),
89
+ channels: z.union([channelSchema, z.array(channelSchema).min(1).max(11)]).optional(),
90
+ view: z.enum(['cohort', 'period']).default('period'),
18
91
  };
19
- function buildQuery(input) {
92
+ const analyticsToolSchema = z
93
+ .object({
94
+ ...analyticsQueryFields,
95
+ report: analyticsReportSchema.default('summary'),
96
+ date: calendarDateSchema.optional(),
97
+ channel: channelSchema.optional(),
98
+ import_job_id: z.string().min(1).optional(),
99
+ page: z.number().int().min(1).optional(),
100
+ page_size: z.number().int().min(1).max(200).optional(),
101
+ recipient_metric: z
102
+ .enum([
103
+ 'sent',
104
+ 'delivered',
105
+ 'entered',
106
+ 'deepDialog',
107
+ 'handedOff',
108
+ 'notDelivered',
109
+ 'notSent',
110
+ ])
111
+ .optional(),
112
+ deal_metric: z.enum(['issued', 'paid', 'withoutCohort']).optional(),
113
+ reason: preflightReasonSchema.optional(),
114
+ action_type: actionTypeSchema.optional(),
115
+ payment_view: z.enum(['decidable', 'excluded', 'resolved']).optional(),
116
+ payment_status: z.enum(['PENDING', 'CONFIRMED', 'CONFIRMED_INDIRECT', 'REJECTED']).optional(),
117
+ payment_eligibility: z
118
+ .enum([
119
+ 'PENDING_CHECK',
120
+ 'VERIFIED',
121
+ 'VERIFIED_WEAK',
122
+ 'UNVERIFIED',
123
+ 'EXCLUDED_NON_AUTOWEB',
124
+ 'EXCLUDED_PREEXISTING',
125
+ ])
126
+ .optional(),
127
+ include_archived: z.boolean().optional(),
128
+ })
129
+ .strict()
130
+ .superRefine((input, ctx) => {
131
+ const addUnsupportedFilterIssue = (path, report) => {
132
+ ctx.addIssue({
133
+ code: 'custom',
134
+ path: [path],
135
+ message: `${path} не поддерживается для report=${report}`,
136
+ });
137
+ };
138
+ if (input.report === 'recipients' && !input.recipient_metric) {
139
+ ctx.addIssue({
140
+ code: 'custom',
141
+ path: ['recipient_metric'],
142
+ message: 'recipient_metric обязателен для report=recipients',
143
+ });
144
+ }
145
+ if (input.report === 'deals' && !input.deal_metric) {
146
+ ctx.addIssue({
147
+ code: 'custom',
148
+ path: ['deal_metric'],
149
+ message: 'deal_metric обязателен для report=deals',
150
+ });
151
+ }
152
+ if (input.recipient_metric && input.report !== 'recipients') {
153
+ addUnsupportedFilterIssue('recipient_metric', input.report);
154
+ }
155
+ if (input.deal_metric && input.report !== 'deals') {
156
+ addUnsupportedFilterIssue('deal_metric', input.report);
157
+ }
158
+ if (input.reason &&
159
+ (input.report !== 'recipients' || input.recipient_metric !== 'notSent')) {
160
+ addUnsupportedFilterIssue('reason', input.report);
161
+ }
162
+ if (input.action_type && input.report !== 'action_failures') {
163
+ addUnsupportedFilterIssue('action_type', input.report);
164
+ }
165
+ if (input.mode === 'range') {
166
+ if (!input.from) {
167
+ ctx.addIssue({
168
+ code: 'custom',
169
+ path: ['from'],
170
+ message: 'from обязателен для mode=range',
171
+ });
172
+ }
173
+ if (!input.to) {
174
+ ctx.addIssue({
175
+ code: 'custom',
176
+ path: ['to'],
177
+ message: 'to обязателен для mode=range',
178
+ });
179
+ }
180
+ if (input.days !== undefined) {
181
+ ctx.addIssue({
182
+ code: 'custom',
183
+ path: ['days'],
184
+ message: 'days не поддерживается для mode=range',
185
+ });
186
+ }
187
+ }
188
+ else {
189
+ if (input.from) {
190
+ ctx.addIssue({
191
+ code: 'custom',
192
+ path: ['from'],
193
+ message: `from не поддерживается для mode=${input.mode}`,
194
+ });
195
+ }
196
+ if (input.to) {
197
+ ctx.addIssue({
198
+ code: 'custom',
199
+ path: ['to'],
200
+ message: `to не поддерживается для mode=${input.mode}`,
201
+ });
202
+ }
203
+ if (input.mode === 'all' && input.days !== undefined) {
204
+ ctx.addIssue({
205
+ code: 'custom',
206
+ path: ['days'],
207
+ message: 'days не поддерживается для mode=all',
208
+ });
209
+ }
210
+ }
211
+ if (input.from && input.to && input.from > input.to) {
212
+ ctx.addIssue({
213
+ code: 'custom',
214
+ path: ['to'],
215
+ message: 'to не может быть раньше from',
216
+ });
217
+ }
218
+ if ((input.page || input.page_size) && !PAGED_REPORTS.has(input.report)) {
219
+ addUnsupportedFilterIssue(input.page ? 'page' : 'page_size', input.report);
220
+ }
221
+ if (input.date && !DATED_REPORTS.has(input.report)) {
222
+ addUnsupportedFilterIssue('date', input.report);
223
+ }
224
+ if (input.import_job_id && !DATED_REPORTS.has(input.report)) {
225
+ addUnsupportedFilterIssue('import_job_id', input.report);
226
+ }
227
+ if (input.channel && !DRILLDOWN_REPORTS.has(input.report)) {
228
+ addUnsupportedFilterIssue('channel', input.report);
229
+ }
230
+ const hasAnalyticsOnlyFilter = input.days !== undefined ||
231
+ input.from !== undefined ||
232
+ input.to !== undefined ||
233
+ input.platform_id !== undefined ||
234
+ input.funnel !== undefined ||
235
+ input.funnel_mode !== undefined ||
236
+ input.segment !== undefined ||
237
+ input.mailing_variant_id !== undefined ||
238
+ input.product !== undefined ||
239
+ input.product_mode !== undefined ||
240
+ input.freshness !== undefined ||
241
+ input.channels !== undefined ||
242
+ input.mode !== 'days' ||
243
+ input.view !== 'period';
244
+ if ((isPaymentReport(input.report) || isCatalogReport(input.report)) && hasAnalyticsOnlyFilter) {
245
+ addUnsupportedFilterIssue('report', input.report);
246
+ }
247
+ const hasPaymentListFilter = input.payment_view !== undefined ||
248
+ input.payment_status !== undefined ||
249
+ input.payment_eligibility !== undefined ||
250
+ input.include_archived !== undefined;
251
+ if (hasPaymentListFilter && input.report !== 'payment_candidates') {
252
+ addUnsupportedFilterIssue('payment_view', input.report);
253
+ }
254
+ if (input.report === 'payment_candidates' &&
255
+ input.payment_view &&
256
+ (input.payment_status || input.payment_eligibility)) {
257
+ ctx.addIssue({
258
+ code: 'custom',
259
+ path: ['payment_view'],
260
+ message: 'payment_view нельзя сочетать с payment_status/payment_eligibility',
261
+ });
262
+ }
263
+ if (input.report === 'payment_candidates' &&
264
+ input.page_size !== undefined &&
265
+ input.page_size > PAYMENT_CANDIDATES_MAX_PAGE_SIZE) {
266
+ ctx.addIssue({
267
+ code: 'custom',
268
+ path: ['page_size'],
269
+ message: `page_size для report=payment_candidates не больше ${PAYMENT_CANDIDATES_MAX_PAGE_SIZE}`,
270
+ });
271
+ }
272
+ });
273
+ const appendFilterValues = (params, key, value) => {
274
+ if (!value)
275
+ return;
276
+ const values = Array.isArray(value) ? value : [value];
277
+ for (const item of values)
278
+ params.append(key, item);
279
+ };
280
+ function buildAnalyticsParams(input) {
20
281
  const params = new URLSearchParams();
21
282
  const mode = input.mode ?? 'days';
22
283
  params.set('mode', mode);
@@ -28,45 +289,151 @@ function buildQuery(input) {
28
289
  params.set('to', input.to);
29
290
  if (input.platform_id)
30
291
  params.set('platformId', input.platform_id);
31
- if (input.funnel)
32
- params.set('funnel', input.funnel);
292
+ appendFilterValues(params, 'funnel', input.funnel);
33
293
  if (input.funnel_mode)
34
294
  params.set('funnelMode', input.funnel_mode);
35
- if (input.segment)
36
- params.set('segment', input.segment);
37
- if (input.product)
38
- params.set('product', input.product);
295
+ appendFilterValues(params, 'segment', input.segment);
296
+ appendFilterValues(params, 'mailingVariantId', input.mailing_variant_id);
297
+ appendFilterValues(params, 'product', input.product);
39
298
  if (input.product_mode)
40
299
  params.set('productMode', input.product_mode);
41
- if (input.view)
42
- params.set('view', input.view);
300
+ appendFilterValues(params, 'freshness', input.freshness);
301
+ appendFilterValues(params, 'channels', input.channels);
302
+ params.set('view', input.view ?? 'period');
303
+ return params;
304
+ }
305
+ function toQuery(params) {
43
306
  const query = params.toString();
44
307
  return query ? `?${query}` : '';
45
308
  }
309
+ function appendDrilldownParams(params, input) {
310
+ if (input.date)
311
+ params.set('date', input.date);
312
+ if (input.channel)
313
+ params.set('channel', input.channel);
314
+ if (input.import_job_id)
315
+ params.set('importJobId', input.import_job_id);
316
+ if (input.page)
317
+ params.set('page', String(input.page));
318
+ if (input.page_size)
319
+ params.set('pageSize', String(input.page_size));
320
+ }
321
+ function buildPaymentCandidatesQuery(input) {
322
+ const params = new URLSearchParams();
323
+ if (input.payment_view)
324
+ params.set('view', input.payment_view);
325
+ if (input.payment_status)
326
+ params.set('status', input.payment_status);
327
+ if (input.payment_eligibility)
328
+ params.set('eligibility', input.payment_eligibility);
329
+ if (input.include_archived)
330
+ params.set('includeArchived', 'true');
331
+ if (input.page)
332
+ params.set('page', String(input.page));
333
+ if (input.page_size)
334
+ params.set('pageSize', String(input.page_size));
335
+ return toQuery(params);
336
+ }
337
+ function buildReportPath(input) {
338
+ const workspaceBase = `/workspaces/${input.workspace_id}`;
339
+ const analyticsBase = `${workspaceBase}/broadcast-analytics`;
340
+ const params = buildAnalyticsParams(input);
341
+ switch (input.report) {
342
+ case 'summary':
343
+ return `${analyticsBase}${toQuery(params)}`;
344
+ case 'cohorts':
345
+ return `${analyticsBase}/cohorts${toQuery(params)}`;
346
+ case 'skip_reasons':
347
+ if (input.import_job_id)
348
+ params.set('importJobId', input.import_job_id);
349
+ if (input.date)
350
+ params.set('date', input.date);
351
+ return `${analyticsBase}/skip-reasons${toQuery(params)}`;
352
+ case 'recipients':
353
+ appendDrilldownParams(params, input);
354
+ params.set('metric', input.recipient_metric);
355
+ if (input.reason)
356
+ params.set('reason', input.reason);
357
+ return `${analyticsBase}/recipients${toQuery(params)}`;
358
+ case 'deals':
359
+ appendDrilldownParams(params, input);
360
+ params.set('metric', input.deal_metric);
361
+ return `${analyticsBase}/deals${toQuery(params)}`;
362
+ case 'action_failures':
363
+ appendDrilldownParams(params, input);
364
+ if (input.action_type)
365
+ params.set('actionType', input.action_type);
366
+ return `${analyticsBase}/action-failures${toQuery(params)}`;
367
+ case 'indirect_payments':
368
+ appendDrilldownParams(params, input);
369
+ return `${analyticsBase}/indirect-payments${toQuery(params)}`;
370
+ case 'response_windows':
371
+ return `${analyticsBase}/response-windows${toQuery(params)}`;
372
+ case 'insights':
373
+ return `${analyticsBase}/insights${toQuery(params)}`;
374
+ case 'recent_leads':
375
+ return `${analyticsBase}/recent-leads${toQuery(params)}`;
376
+ case 'data_quality':
377
+ return `${analyticsBase}/data-quality${toQuery(params)}`;
378
+ case 'segments_catalog':
379
+ return `${analyticsBase}/segments`;
380
+ case 'funnel_products':
381
+ return `${analyticsBase}/funnel-products`;
382
+ case 'payment_candidates':
383
+ return `${workspaceBase}/payment-candidates${buildPaymentCandidatesQuery(input)}`;
384
+ case 'payment_candidates_summary':
385
+ return `${workspaceBase}/payment-candidates/summary`;
386
+ }
387
+ }
388
+ function reportInstructions(report) {
389
+ if (isCatalogReport(report)) {
390
+ return [
391
+ 'Это workspace-scoped справочник страницы аналитики, поэтому период и dimension-фильтры к нему не применяются.',
392
+ report === 'segments_catalog'
393
+ ? 'description — сохранённое бизнес-правило отбора сегмента; null означает, что правило ещё не описано.'
394
+ : 'unmappedKeys — нормализованные ключи воронок последних 90 дней, для которых продукт ещё не задан.',
395
+ ];
396
+ }
397
+ if (isPaymentReport(report)) {
398
+ return [
399
+ 'Это read-only данные вкладки «Подтверждение оплат». Общие фильтры аналитики к ней в UI не применяются; для списка используй payment_view либо payment_status/payment_eligibility и пагинацию.',
400
+ 'Для payment_candidates максимальный page_size — 100.',
401
+ 'Инструмент не подтверждает и не отклоняет оплаты: он только читает очередь и историю решений.',
402
+ ];
403
+ }
404
+ if (report === 'recipients' ||
405
+ report === 'deals' ||
406
+ report === 'action_failures' ||
407
+ report === 'indirect_payments') {
408
+ return [
409
+ 'Это пагинированный drill-down той же страницы. Передавай те же общие фильтры, что использовались для агрегата, чтобы total совпадал с раскрываемой ячейкой.',
410
+ 'Для следующей страницы увеличивай page; максимальный page_size — 200.',
411
+ ];
412
+ }
413
+ return [
414
+ 'Это authoritative данные той же страницы /broadcast-analytics. НЕ пересчитывай статистику рассылок через besales_dialogues_query или транскрипты.',
415
+ 'Для «сегодня» используй mode=range, from=to=нужная дата YYYY-MM-DD; даты группируются по МСК.',
416
+ ];
417
+ }
46
418
  export const broadcastAnalyticsTools = [
47
419
  defineTool({
48
420
  name: 'besales_broadcast_analytics_get',
49
421
  requiredFields: [],
50
422
  defaultWorkspaceId: true,
51
- schema: z
52
- .object({
53
- ...analyticsQueryFields,
54
- view: z.enum(['cohort', 'period']).default('period'),
55
- })
56
- .strict(),
423
+ schema: analyticsToolSchema,
57
424
  createRequest: (input) => ({
58
425
  method: 'GET',
59
- path: `/workspaces/${input.workspace_id}/broadcast-analytics${buildQuery(input)}`,
426
+ path: buildReportPath(input),
60
427
  }),
61
- enhanceResponse: (response) => withInstructions(response, [
62
- 'Это authoritative агрегат той же страницы /broadcast-analytics. НЕ пересчитывай статистику рассылок через besales_dialogues_query или транскрипты.',
63
- 'Для «сегодня» используй view=period, mode=range, from=to=нужная дата YYYY-MM-DD; даты группируются по МСК.',
64
- 'Общий итог бери из totals, а не суммой data по каналам: один получатель мультиканальной волны присутствует в нескольких channel-строках.',
65
- 'sent — строки получателей волн, не число реплик агента и не обязательно уникальные люди между разными волнами.',
66
- 'received — доставленные строки получателей с учётом platform delivery-гейта.',
67
- 'enteredDialog — строки получателей, у которых было хотя бы одно входящее после этой волны и до следующей; это НЕ количество входящих сообщений.',
68
- 'handedOff — успешные GETCOURSE_CREATE_DEAL / GETCOURSE_SET_MANAGER / GETCOURSE_SET_DEAL_MANAGER / GETCOURSE_SET_PERSONAL_MANAGER.',
69
- 'funnel здесь — бизнес-воронка волны. Названия CRM pipeline при необходимости читай отдельно через besales_crm_list + besales_crm_pipeline_list.',
428
+ enhanceResponse: (response, input) => withInstructions(response, [
429
+ ...reportInstructions(input.report),
430
+ ...(isPaymentReport(input.report)
431
+ ? []
432
+ : [
433
+ 'summary: общий итог бери из totals, а не суммой data по каналам — один получатель мультиканальной волны присутствует в нескольких channel-строках.',
434
+ 'enteredDialog/entered — ответившие получатели в окне волны, не число входящих сообщений.',
435
+ 'funnel — бизнес-воронка волны; названия CRM pipeline при необходимости читай через besales_crm_list + besales_crm_pipeline_list.',
436
+ ]),
70
437
  ]),
71
438
  }),
72
439
  defineTool({
@@ -76,13 +443,12 @@ export const broadcastAnalyticsTools = [
76
443
  schema: z.object(analyticsQueryFields).strict(),
77
444
  createRequest: (input) => ({
78
445
  method: 'GET',
79
- path: `/workspaces/${input.workspace_id}/broadcast-analytics/cohorts${buildQuery(input)}`,
446
+ path: buildReportPath({ ...input, report: 'cohorts' }),
80
447
  }),
81
448
  enhanceResponse: (response) => withInstructions(response, [
449
+ 'Backward-compatible alias для besales_broadcast_analytics_get с report=cohorts.',
82
450
  'Каждый items[] — отдельный запуск рассылки (importJobId/cohortId), а не строка сообщения или диалог.',
83
- 'label — имя запуска; funnel/segment/product/channels — снимок бизнес-разрезов волны.',
84
- 'sent/delivered/entered/handedOff считаются по получателям этой волны; entered — ответившие получатели, не число их сообщений.',
85
- 'Для общей статистики по дням используй besales_broadcast_analytics_get; транскрипты нужны только для качественного разбора конкретных диалогов.',
451
+ 'Для общей статистики и остальных вкладок используй besales_broadcast_analytics_get.',
86
452
  ]),
87
453
  }),
88
454
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"broadcast-analytics.js","sourceRoot":"","sources":["../../../src/tools/definitions/broadcast-analytics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"broadcast-analytics.js","sourceRoot":"","sources":["../../../src/tools/definitions/broadcast-analytics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export declare const broadcastMailingVariantTools: (import("./shared.js").ToolDefinition<{
2
+ workspace_id?: string | undefined;
3
+ include_archived?: boolean | undefined;
4
+ }> | import("./shared.js").ToolDefinition<{
5
+ name: string;
6
+ workspace_id?: string | undefined;
7
+ description?: string | undefined;
8
+ }> | import("./shared.js").ToolDefinition<{
9
+ mailing_variant_id: string;
10
+ workspace_id?: string | undefined;
11
+ name?: string | undefined;
12
+ description?: string | null | undefined;
13
+ archived?: boolean | undefined;
14
+ explicit_confirmation?: true | undefined;
15
+ }> | import("./shared.js").ToolDefinition<{
16
+ mailing_variant_id: string;
17
+ explicit_confirmation: true;
18
+ workspace_id?: string | undefined;
19
+ }>)[];