@besales/mcp 0.43.0 → 0.46.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/dist/instructions/server-instructions.d.ts +1 -1
- package/dist/instructions/server-instructions.js +5 -2
- package/dist/instructions/server-instructions.js.map +1 -1
- package/dist/resources/docs/crm-integration.md +3 -1
- package/dist/resources/workflows/compare-models.md +4 -3
- package/dist/resources/workflows/connect-crm-from-scratch.md +8 -0
- package/dist/schemas/mcp-tools.json +1098 -54
- package/dist/tools/definitions/agent-design.d.ts +8 -0
- package/dist/tools/definitions/agent-design.js +3 -0
- package/dist/tools/definitions/agent-design.js.map +1 -1
- package/dist/tools/definitions/broadcast-analytics.d.ts +5 -4
- package/dist/tools/definitions/broadcast-analytics.js +17 -6
- package/dist/tools/definitions/broadcast-analytics.js.map +1 -1
- package/dist/tools/definitions/broadcast-mailing-variants.js +8 -4
- package/dist/tools/definitions/broadcast-mailing-variants.js.map +1 -1
- package/dist/tools/definitions/broadcast-scheduler.d.ts +82 -0
- package/dist/tools/definitions/broadcast-scheduler.js +317 -0
- package/dist/tools/definitions/broadcast-scheduler.js.map +1 -0
- package/dist/tools/definitions/crm-platform.js +20 -0
- package/dist/tools/definitions/crm-platform.js.map +1 -1
- package/dist/tools/definitions/follow-up-setup.d.ts +6 -0
- package/dist/tools/definitions/follow-up-setup.js +31 -0
- package/dist/tools/definitions/follow-up-setup.js.map +1 -1
- package/dist/tools/definitions/follow-up.d.ts +18 -1
- package/dist/tools/definitions/follow-up.js +80 -5
- package/dist/tools/definitions/follow-up.js.map +1 -1
- package/dist/tools/definitions/getcourse-cold-welcome.d.ts +11 -0
- package/dist/tools/definitions/getcourse-cold-welcome.js +77 -8
- package/dist/tools/definitions/getcourse-cold-welcome.js.map +1 -1
- package/dist/tools/definitions/getcourse-wave.d.ts +3 -3
- package/dist/tools/definitions/getcourse-wave.js +5 -5
- package/dist/tools/definitions/getcourse-wave.js.map +1 -1
- package/dist/tools/definitions/link-tracking.js +22 -0
- package/dist/tools/definitions/link-tracking.js.map +1 -1
- package/dist/tools/definitions/model-comparison.js +6 -3
- package/dist/tools/definitions/model-comparison.js.map +1 -1
- package/dist/tools/definitions/platform-setup.d.ts +38 -3
- package/dist/tools/definitions/platform-setup.js +52 -2
- package/dist/tools/definitions/platform-setup.js.map +1 -1
- package/dist/tools/definitions/shared.d.ts +127 -5
- package/dist/tools/definitions/shared.js +103 -5
- package/dist/tools/definitions/shared.js.map +1 -1
- package/dist/tools/definitions/trigger-contact-claims.d.ts +7 -0
- package/dist/tools/definitions/trigger-contact-claims.js +58 -0
- package/dist/tools/definitions/trigger-contact-claims.js.map +1 -0
- package/dist/tools/definitions.d.ts +141 -7
- package/dist/tools/definitions.js +4 -0
- package/dist/tools/definitions.js.map +1 -1
- package/dist/tools/registry-mapping-cases-core.js +11 -2
- package/dist/tools/registry-mapping-cases-core.js.map +1 -1
- package/dist/tools/registry-mapping-cases-platform.js +29 -0
- package/dist/tools/registry-mapping-cases-platform.js.map +1 -1
- package/dist/tools/trigger-action-config.d.ts +49 -0
- package/dist/tools/trigger-action-config.js +171 -0
- package/dist/tools/trigger-action-config.js.map +1 -0
- package/dist/types/api-contract.gen.d.ts +2285 -221
- package/docs/agent-usage-guide.full.ru.md +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
export const TRIGGER_ACTION_CONFIG_NAMES = {
|
|
2
|
+
CRM_MOVE_STAGE: { input: 'crmConfig', relation: 'crmMoveStage' },
|
|
3
|
+
CRM_UPDATE_FIELD: { input: 'crmUpdateFieldConfig', relation: 'crmUpdateField' },
|
|
4
|
+
CRM_ADD_NOTE: { input: 'crmAddNoteConfig', relation: 'crmAddNote' },
|
|
5
|
+
CRM_RENAME_DEAL: { input: 'renameDealConfig', relation: 'renameDeal' },
|
|
6
|
+
CONVERT_LEAD_TO_DEAL: { input: 'convertLeadToDealConfig', relation: 'convertLeadToDeal' },
|
|
7
|
+
CALENDAR_LOOK: { input: 'calendarLookConfig', relation: 'calendarLook' },
|
|
8
|
+
CALENDAR_UPDATE: { input: 'calendarUpdateConfig', relation: 'calendarUpdate' },
|
|
9
|
+
READ_NAMESPACES: { input: 'readNamespacesConfig', relation: 'readNamespaces' },
|
|
10
|
+
SET_VARIABLE: { input: 'setVariableConfig', relation: 'setVariable' },
|
|
11
|
+
SUMMARIZE_DIALOG: { input: 'summarizeConfig', relation: 'summarizeAction' },
|
|
12
|
+
SEND_TELEGRAM_CHANNEL_MESSAGE: { input: 'telegramChannelConfig', relation: 'telegramChannelMessage' },
|
|
13
|
+
REQUEST_CONTACT: { input: 'requestContactConfig', relation: 'requestContact' },
|
|
14
|
+
REQUEST_SATISFACTION_RATING: { input: 'requestSatisfactionRatingConfig', relation: 'requestSatisfactionRating' },
|
|
15
|
+
SCHEDULE_FOLLOWUP: { input: 'scheduleFollowUpConfig', relation: 'scheduleFollowUp' },
|
|
16
|
+
HTTP_WEBHOOK: { input: 'httpWebhookConfig', relation: 'httpWebhook' },
|
|
17
|
+
DATA_SOURCE_READ: { input: 'dataSourceReadConfig', relation: 'dataSourceRead' },
|
|
18
|
+
DATA_SOURCE_WRITE: { input: 'dataSourceWriteConfig', relation: 'dataSourceWrite' },
|
|
19
|
+
GETCOURSE_SET_DEAL_TAGS: { input: 'getcourseSetDealTagsConfig', relation: 'getcourseSetDealTags' },
|
|
20
|
+
GETCOURSE_UPDATE_USER_CUSTOM_FIELDS: { input: 'getcourseUpdateUserCustomFieldsConfig', relation: 'getcourseUpdateUserCustomFields' },
|
|
21
|
+
GETCOURSE_UPDATE_DEAL_CUSTOM_FIELDS: { input: 'getcourseUpdateDealCustomFieldsConfig', relation: 'getcourseUpdateDealCustomFields' },
|
|
22
|
+
GETCOURSE_UPDATE_DEAL_STATUS: { input: 'getcourseUpdateDealStatusConfig', relation: 'getcourseUpdateDealStatus' },
|
|
23
|
+
GETCOURSE_ADD_DEAL_NOTE: { input: 'getcourseAddDealNoteConfig', relation: 'getcourseAddDealNote' },
|
|
24
|
+
GETCOURSE_SET_DEAL_MANAGER: { input: 'getcourseSetDealManagerConfig', relation: 'getcourseSetDealManager' },
|
|
25
|
+
GETCOURSE_SET_PERSONAL_MANAGER: { input: 'getcourseSetPersonalManagerConfig', relation: 'getcourseSetPersonalManager' },
|
|
26
|
+
GETCOURSE_SET_MANAGER: { input: 'getcourseSetManagerConfig', relation: 'getcourseSetManager' },
|
|
27
|
+
GETCOURSE_ADD_USER_GROUPS: { input: 'getcourseAddUserGroupsConfig', relation: 'getcourseAddUserGroups' },
|
|
28
|
+
GETCOURSE_REMOVE_USER_GROUPS: { input: 'getcourseRemoveUserGroupsConfig', relation: 'getcourseRemoveUserGroups' },
|
|
29
|
+
GETCOURSE_UPDATE_USER_GROUPS: { input: 'getcourseUpdateUserGroupsConfig', relation: 'getcourseUpdateUserGroups' },
|
|
30
|
+
GETCOURSE_SEND_PAYMENT_LINK: { input: 'getcourseSendPaymentLinkConfig', relation: 'getcourseSendPaymentLink' },
|
|
31
|
+
GETCOURSE_CREATE_DEAL: { input: 'getcourseCreateDealConfig', relation: 'getcourseCreateDeal' },
|
|
32
|
+
GETCOURSE_READ_ORDER_STATUS: { input: 'getcourseReadOrderStatusConfig', relation: 'getcourseReadOrderStatus' },
|
|
33
|
+
GETCOURSE_CHANGE_DEPARTMENT: { input: 'getcourseChangeDepartmentConfig', relation: 'getcourseChangeDepartment' },
|
|
34
|
+
CALL_OPERATOR: { input: 'callOperatorConfig', relation: 'callOperator' },
|
|
35
|
+
SILENT_AI: { input: 'silentAiConfig', relation: 'silentAi' },
|
|
36
|
+
PLATFORM_LOG: { input: 'platformLogConfig', relation: 'platformLog' },
|
|
37
|
+
INITIATE_OUTBOUND_CALL: { input: 'initiateOutboundCallConfig', relation: 'initiateOutboundCall' },
|
|
38
|
+
TRANSFER_CALL: { input: 'transferCallConfig', relation: 'transferCall' },
|
|
39
|
+
GETCOURSE_CLOSE_DIALOG: { input: 'getcourseCloseDialogConfig', relation: 'getcourseCloseDialog' },
|
|
40
|
+
GOOGLE_SHEETS_APPEND_ROW: {
|
|
41
|
+
input: 'googleSheetsAppendRowConfig',
|
|
42
|
+
relation: 'googleSheetsAppendRow',
|
|
43
|
+
},
|
|
44
|
+
ADD_UNKNOWN_QUESTION: null,
|
|
45
|
+
};
|
|
46
|
+
/** Правило имени входа: `CRM_UPDATE_FIELD` → `crmUpdateFieldConfig`. Исключения — в карте выше. */
|
|
47
|
+
const looksLikeConfigKey = (key) => key.endsWith('Config');
|
|
48
|
+
const KNOWN_RELATIONS = new Set(Object.values(TRIGGER_ACTION_CONFIG_NAMES)
|
|
49
|
+
.filter((names) => !!names)
|
|
50
|
+
.map((names) => names.relation));
|
|
51
|
+
/**
|
|
52
|
+
* Поля действия, которые ОТВЕТ отдаёт, а ВХОД не принимает: `whitelist + forbidNonWhitelisted`
|
|
53
|
+
* отвечает на них «property … should not exist». Пересылка прочитанного действия обязана их
|
|
54
|
+
* снять — иначе «перешли обратно как есть» упирается в 400 на первом же ключе.
|
|
55
|
+
*/
|
|
56
|
+
const READ_ONLY_ECHO_KEYS = new Set(['id', 'triggerId', 'createdAt', 'updatedAt']);
|
|
57
|
+
/**
|
|
58
|
+
* То же самое ВНУТРИ конфига: строка конфига несёт `actionId` (у всех 38 таблиц), а у пятнадцати
|
|
59
|
+
* ещё и метки времени. Ни одного такого поля нет во ВХОДНЫХ DTO, поэтому конфиг, пересланный
|
|
60
|
+
* из ответа буквально, отвергается «property actionId should not exist» — даже с правильным
|
|
61
|
+
* именем ключа. Чистим ТОЛЬКО верхний уровень: что лежит внутри массивов конфига (маппинги
|
|
62
|
+
* полей, заголовки вебхука), принадлежит вызывающему, и трогать это мы не вправе.
|
|
63
|
+
*/
|
|
64
|
+
const CONFIG_ECHO_KEYS = new Set(['id', 'actionId', 'createdAt', 'updatedAt']);
|
|
65
|
+
/**
|
|
66
|
+
* Снимает эхо-поля с объекта конфига. Не объект — отдаём как есть: судить о чужой форме
|
|
67
|
+
* не наше дело, а бэкенд объяснит отказ точнее.
|
|
68
|
+
*
|
|
69
|
+
* @param config Конфиг так, как его прислал вызывающий.
|
|
70
|
+
* @returns Конфиг без серверных идентификаторов.
|
|
71
|
+
*/
|
|
72
|
+
const stripConfigEchoKeys = (config) => {
|
|
73
|
+
if (typeof config !== 'object' || config === null || Array.isArray(config)) {
|
|
74
|
+
return config;
|
|
75
|
+
}
|
|
76
|
+
return Object.fromEntries(Object.entries(config).filter(([key]) => !CONFIG_ECHO_KEYS.has(key)));
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* Приводит действия к именам ВХОДА бэкенда: конфиг под именем связи переименовывается,
|
|
80
|
+
* эхо-поля ответа снимаются, а конфиг под выдуманным именем становится понятной ошибкой
|
|
81
|
+
* ДО HTTP-запроса.
|
|
82
|
+
*
|
|
83
|
+
* ⚠️ Ответ отдаёт действие со ВСЕМИ связями сразу — своя заполнена, чужие `null` (их около
|
|
84
|
+
* сорока). Поэтому чужая связь со значением `null` — не ошибка вызывающего, а шум ответа:
|
|
85
|
+
* она молча снимается. Ошибкой она становится только НЕПУСТОЙ — это конфиг другого типа
|
|
86
|
+
* действия, и бэкенд его всё равно проигнорирует.
|
|
87
|
+
*
|
|
88
|
+
* Неизвестный `actionType` пропускается как есть: набор типов растёт на бэкенде, и клиент
|
|
89
|
+
* не вправе запрещать то, чего он ещё не знает.
|
|
90
|
+
*
|
|
91
|
+
* @param actions Действия так, как их прислал вызывающий.
|
|
92
|
+
* @returns Нормализованные действия и список замечаний (пустой — всё в порядке).
|
|
93
|
+
*/
|
|
94
|
+
export const normalizeTriggerActions = (actions) => {
|
|
95
|
+
const issues = [];
|
|
96
|
+
const normalized = actions.map((action, index) => {
|
|
97
|
+
const actionType = typeof action.actionType === 'string' ? action.actionType : null;
|
|
98
|
+
const names = actionType ? TRIGGER_ACTION_CONFIG_NAMES[actionType] : undefined;
|
|
99
|
+
const result = {};
|
|
100
|
+
const foreignEntries = [];
|
|
101
|
+
let ownConfig;
|
|
102
|
+
for (const [key, value] of Object.entries(action)) {
|
|
103
|
+
if (READ_ONLY_ECHO_KEYS.has(key)) {
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
// Связь своего типа — это конфиг, просто под именем ответа.
|
|
107
|
+
if (names && key === names.relation) {
|
|
108
|
+
ownConfig = value;
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
if (KNOWN_RELATIONS.has(key)) {
|
|
112
|
+
// Пустая чужая связь — шум ответа; непустая — конфиг чужого типа, о нём говорим.
|
|
113
|
+
if (value !== null && value !== undefined) {
|
|
114
|
+
foreignEntries.push([key, value]);
|
|
115
|
+
}
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
result[key] = key === names?.input ? stripConfigEchoKeys(value) : value;
|
|
119
|
+
}
|
|
120
|
+
if (names === undefined) {
|
|
121
|
+
// Тип неизвестен этой версии клиента — судить о его полях мы не вправе: возвращаем всё,
|
|
122
|
+
// кроме эхо-полей ответа. Молчаливый выброс похожего на конфиг ключа увёл бы настройку.
|
|
123
|
+
for (const [key, value] of foreignEntries) {
|
|
124
|
+
result[key] = value;
|
|
125
|
+
}
|
|
126
|
+
return result;
|
|
127
|
+
}
|
|
128
|
+
if (names === null) {
|
|
129
|
+
const stray = [
|
|
130
|
+
...Object.keys(result).filter(looksLikeConfigKey),
|
|
131
|
+
...foreignEntries.map(([key]) => key),
|
|
132
|
+
];
|
|
133
|
+
if (stray.length > 0) {
|
|
134
|
+
issues.push({
|
|
135
|
+
index,
|
|
136
|
+
message: `${actionType} не имеет конфига, а передан ${stray.join(', ')}`,
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
return result;
|
|
140
|
+
}
|
|
141
|
+
if (ownConfig !== null && ownConfig !== undefined) {
|
|
142
|
+
if (result[names.input] === undefined) {
|
|
143
|
+
result[names.input] = stripConfigEchoKeys(ownConfig);
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
// Два имени одного конфига в одном действии: молча выбрать одно значило бы отправить
|
|
147
|
+
// человеку не то, что он видит в своём запросе.
|
|
148
|
+
issues.push({
|
|
149
|
+
index,
|
|
150
|
+
message: `${actionType}: переданы и ${names.input}, и ${names.relation} — это ОДИН конфиг под двумя именами. ` +
|
|
151
|
+
`Оставь ${names.input}.`,
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
const wrongKeys = [
|
|
156
|
+
...Object.keys(result).filter((key) => key !== names.input && looksLikeConfigKey(key)),
|
|
157
|
+
...foreignEntries.map(([key]) => key),
|
|
158
|
+
];
|
|
159
|
+
if (wrongKeys.length > 0) {
|
|
160
|
+
issues.push({
|
|
161
|
+
index,
|
|
162
|
+
message: `${actionType}: конфиг кладётся в поле ${names.input} ` +
|
|
163
|
+
`(в ОТВЕТЕ API он называется ${names.relation}), а передано ${wrongKeys.join(', ')}. ` +
|
|
164
|
+
'Бэкенд отвергнет чужой ключ с «property … should not exist».',
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
return result;
|
|
168
|
+
});
|
|
169
|
+
return { actions: normalized, issues };
|
|
170
|
+
};
|
|
171
|
+
//# sourceMappingURL=trigger-action-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trigger-action-config.js","sourceRoot":"","sources":["../../src/tools/trigger-action-config.ts"],"names":[],"mappings":"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"}
|