@besales/mcp 0.47.1 → 1.0.0-beta.2

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 (587) hide show
  1. package/README.md +109 -164
  2. package/README.onprem.ru.md +35 -0
  3. package/bin/besales-mcp-http.js +9 -0
  4. package/bin/besales-onprem.mjs +19 -0
  5. package/dist/auth/connection-store.d.ts +3 -1
  6. package/dist/auth/connection-store.js +9 -3
  7. package/dist/auth/connection-store.js.map +1 -1
  8. package/dist/auth/oauth-client.d.ts +20 -27
  9. package/dist/auth/oauth-client.js +31 -23
  10. package/dist/auth/oauth-client.js.map +1 -1
  11. package/dist/auth/session-workspace.d.ts +1 -0
  12. package/dist/auth/session-workspace.js +10 -1
  13. package/dist/auth/session-workspace.js.map +1 -1
  14. package/dist/auth/token-storage.js +4 -1
  15. package/dist/auth/token-storage.js.map +1 -1
  16. package/dist/cli.d.ts +1 -0
  17. package/dist/cli.js +80 -19
  18. package/dist/cli.js.map +1 -1
  19. package/dist/constants/crm-catalog.d.ts +2 -0
  20. package/dist/constants/crm-catalog.js +3 -0
  21. package/dist/constants/crm-catalog.js.map +1 -0
  22. package/dist/http/api-client.d.ts +52 -7
  23. package/dist/http/api-client.js +131 -66
  24. package/dist/http/api-client.js.map +1 -1
  25. package/dist/http/feedback-document-error.d.ts +26 -0
  26. package/dist/http/feedback-document-error.js +22 -0
  27. package/dist/http/feedback-document-error.js.map +1 -0
  28. package/dist/http-server.d.ts +15 -0
  29. package/dist/http-server.js +378 -0
  30. package/dist/http-server.js.map +1 -0
  31. package/dist/instructions/server-instructions.d.ts +1 -1
  32. package/dist/instructions/server-instructions.js +6 -3
  33. package/dist/instructions/server-instructions.js.map +1 -1
  34. package/dist/network/constants.d.ts +25 -0
  35. package/dist/network/constants.js +26 -0
  36. package/dist/network/constants.js.map +1 -0
  37. package/dist/network/failed-verifications.d.ts +10 -0
  38. package/dist/network/failed-verifications.js +37 -0
  39. package/dist/network/failed-verifications.js.map +1 -0
  40. package/dist/network/http-test-fixture.d.ts +3 -0
  41. package/dist/network/http-test-fixture.js +86 -0
  42. package/dist/network/http-test-fixture.js.map +1 -0
  43. package/dist/network/known-keys.d.ts +10 -0
  44. package/dist/network/known-keys.js +38 -0
  45. package/dist/network/known-keys.js.map +1 -0
  46. package/dist/network/memory-credentials.d.ts +11 -0
  47. package/dist/network/memory-credentials.js +24 -0
  48. package/dist/network/memory-credentials.js.map +1 -0
  49. package/dist/network/rate-limit.d.ts +23 -0
  50. package/dist/network/rate-limit.js +62 -0
  51. package/dist/network/rate-limit.js.map +1 -0
  52. package/dist/network/rejected-keys.d.ts +9 -0
  53. package/dist/network/rejected-keys.js +39 -0
  54. package/dist/network/rejected-keys.js.map +1 -0
  55. package/dist/network/request-work.d.ts +8 -0
  56. package/dist/network/request-work.js +20 -0
  57. package/dist/network/request-work.js.map +1 -0
  58. package/dist/network/successful-keys.d.ts +17 -0
  59. package/dist/network/successful-keys.js +47 -0
  60. package/dist/network/successful-keys.js.map +1 -0
  61. package/dist/resources/concepts/external-execution.md +3 -1
  62. package/dist/resources/concepts/feedback-sheets.md +21 -12
  63. package/dist/resources/concepts/icp.md +8 -1
  64. package/dist/resources/concepts/sandbox.md +15 -6
  65. package/dist/resources/concepts/triggers.md +8 -0
  66. package/dist/resources/concepts/workbook-classification.md +104 -50
  67. package/dist/resources/docs/agent-behavior.md +51 -382
  68. package/dist/resources/docs/campaigns.md +9 -16
  69. package/dist/resources/docs/crm-integration.md +39 -523
  70. package/dist/resources/docs/files-and-uploads.md +23 -286
  71. package/dist/resources/docs/follow-up.md +47 -12
  72. package/dist/resources/docs/knowledge-base.md +52 -521
  73. package/dist/resources/docs/pipeline-builder.md +26 -216
  74. package/dist/resources/docs/pipeline-settings-deep.md +27 -220
  75. package/dist/resources/docs/platforms.md +106 -519
  76. package/dist/resources/docs/prompt-anatomy.md +39 -285
  77. package/dist/resources/docs/routing.md +8 -16
  78. package/dist/resources/docs/trigger-actions.md +40 -24
  79. package/dist/resources/docs/variables.md +8 -12
  80. package/dist/resources/operator-edit.contract.d.ts +7 -0
  81. package/dist/resources/operator-edit.contract.js +8 -0
  82. package/dist/resources/operator-edit.contract.js.map +1 -0
  83. package/dist/resources/registry.js +20 -4
  84. package/dist/resources/registry.js.map +1 -1
  85. package/dist/resources/workflows/audit-dialogues.md +23 -12
  86. package/dist/resources/workflows/compare-models.md +6 -4
  87. package/dist/resources/workflows/connect-crm-from-scratch.md +15 -12
  88. package/dist/resources/workflows/connect-datasource-from-scratch.md +5 -4
  89. package/dist/resources/workflows/extract-from-document.md +8 -6
  90. package/dist/resources/workflows/operator-edit.md +15 -0
  91. package/dist/resources/workflows/platform-setup-from-scratch.md +59 -70
  92. package/dist/resources/workflows/production-readiness-check.md +25 -15
  93. package/dist/schemas/mcp-tools.json +12061 -6753
  94. package/dist/schemas/voice-actions-api.contract.json +248 -0
  95. package/dist/shared/constants/broadcast-reason.constants.d.ts +2 -0
  96. package/dist/shared/constants/broadcast-reason.constants.js +47 -0
  97. package/dist/shared/constants/broadcast-reason.constants.js.map +1 -0
  98. package/dist/shared/constants/crm-stage-pool.constants.d.ts +2 -0
  99. package/dist/shared/constants/crm-stage-pool.constants.js +3 -0
  100. package/dist/shared/constants/crm-stage-pool.constants.js.map +1 -0
  101. package/dist/shared/constants/followup-note.constants.d.ts +3 -0
  102. package/dist/shared/constants/followup-note.constants.js +4 -0
  103. package/dist/shared/constants/followup-note.constants.js.map +1 -0
  104. package/dist/shared/constants/followup-session.constants.d.ts +2 -0
  105. package/dist/shared/constants/followup-session.constants.js +3 -0
  106. package/dist/shared/constants/followup-session.constants.js.map +1 -0
  107. package/dist/shared/constants/funnel-analytics.constants.d.ts +2 -0
  108. package/dist/shared/constants/funnel-analytics.constants.js +3 -0
  109. package/dist/shared/constants/funnel-analytics.constants.js.map +1 -0
  110. package/dist/shared/constants/message-filter.constants.d.ts +7 -0
  111. package/dist/shared/constants/message-filter.constants.js +8 -0
  112. package/dist/shared/constants/message-filter.constants.js.map +1 -0
  113. package/dist/shared/utils/trigger-repeat-mapping.d.ts +72 -0
  114. package/dist/shared/utils/trigger-repeat-mapping.js +53 -0
  115. package/dist/shared/utils/trigger-repeat-mapping.js.map +1 -0
  116. package/dist/skills/besales-dialogue-audit/SKILL.md +31 -20
  117. package/dist/tasks/task-state-store.js +5 -0
  118. package/dist/tasks/task-state-store.js.map +1 -1
  119. package/dist/tools/annotations.js +4 -3
  120. package/dist/tools/annotations.js.map +1 -1
  121. package/dist/tools/definitions/agent-design.d.ts +78 -21
  122. package/dist/tools/definitions/agent-design.js +246 -90
  123. package/dist/tools/definitions/agent-design.js.map +1 -1
  124. package/dist/tools/definitions/agent-model-notice.d.ts +5 -0
  125. package/dist/tools/definitions/agent-model-notice.js +31 -0
  126. package/dist/tools/definitions/agent-model-notice.js.map +1 -0
  127. package/dist/tools/definitions/agent-models.d.ts +5 -0
  128. package/dist/tools/definitions/agent-models.js +26 -0
  129. package/dist/tools/definitions/agent-models.js.map +1 -0
  130. package/dist/tools/definitions/agent-settings.d.ts +85 -0
  131. package/dist/tools/definitions/agent-settings.js +187 -0
  132. package/dist/tools/definitions/agent-settings.js.map +1 -0
  133. package/dist/tools/definitions/ai-costs.d.ts +12 -0
  134. package/dist/tools/definitions/ai-costs.js +142 -0
  135. package/dist/tools/definitions/ai-costs.js.map +1 -0
  136. package/dist/tools/definitions/api-tool-request.d.ts +15 -0
  137. package/dist/tools/definitions/api-tool-request.js +2 -0
  138. package/dist/tools/definitions/api-tool-request.js.map +1 -0
  139. package/dist/tools/definitions/behavior-shipped-form.d.ts +182 -0
  140. package/dist/tools/definitions/behavior-shipped-form.js +185 -0
  141. package/dist/tools/definitions/behavior-shipped-form.js.map +1 -0
  142. package/dist/tools/definitions/broadcast-alerts.d.ts +6 -0
  143. package/dist/tools/definitions/broadcast-alerts.js +72 -0
  144. package/dist/tools/definitions/broadcast-alerts.js.map +1 -0
  145. package/dist/tools/definitions/broadcast-analytics.d.ts +102 -18
  146. package/dist/tools/definitions/broadcast-analytics.js +732 -427
  147. package/dist/tools/definitions/broadcast-analytics.js.map +1 -1
  148. package/dist/tools/definitions/broadcast-scheduler.d.ts +19 -13
  149. package/dist/tools/definitions/broadcast-scheduler.js +217 -128
  150. package/dist/tools/definitions/broadcast-scheduler.js.map +1 -1
  151. package/dist/tools/definitions/call-operator-task.schema.d.ts +11 -0
  152. package/dist/tools/definitions/call-operator-task.schema.js +30 -0
  153. package/dist/tools/definitions/call-operator-task.schema.js.map +1 -0
  154. package/dist/tools/definitions/contacts.d.ts +3 -0
  155. package/dist/tools/definitions/contacts.js +57 -31
  156. package/dist/tools/definitions/contacts.js.map +1 -1
  157. package/dist/tools/definitions/crm-platform.d.ts +28 -39
  158. package/dist/tools/definitions/crm-platform.js +235 -344
  159. package/dist/tools/definitions/crm-platform.js.map +1 -1
  160. package/dist/tools/definitions/crm-stage-pool.messages.d.ts +39 -0
  161. package/dist/tools/definitions/crm-stage-pool.messages.js +43 -0
  162. package/dist/tools/definitions/crm-stage-pool.messages.js.map +1 -0
  163. package/dist/tools/definitions/crm-stage-pool.schema.d.ts +64 -0
  164. package/dist/tools/definitions/crm-stage-pool.schema.js +109 -0
  165. package/dist/tools/definitions/crm-stage-pool.schema.js.map +1 -0
  166. package/dist/tools/definitions/custom-reports.d.ts +12 -0
  167. package/dist/tools/definitions/custom-reports.js +68 -0
  168. package/dist/tools/definitions/custom-reports.js.map +1 -0
  169. package/dist/tools/definitions/datasource.d.ts +2 -1
  170. package/dist/tools/definitions/datasource.js +28 -13
  171. package/dist/tools/definitions/datasource.js.map +1 -1
  172. package/dist/tools/definitions/dialog-review-findings-response.d.ts +14 -0
  173. package/dist/tools/definitions/dialog-review-findings-response.js +23 -0
  174. package/dist/tools/definitions/dialog-review-findings-response.js.map +1 -0
  175. package/dist/tools/definitions/dialog-review-safe-response.d.ts +5 -0
  176. package/dist/tools/definitions/dialog-review-safe-response.js +152 -0
  177. package/dist/tools/definitions/dialog-review-safe-response.js.map +1 -0
  178. package/dist/tools/definitions/dialog-review.d.ts +49 -0
  179. package/dist/tools/definitions/dialog-review.js +383 -0
  180. package/dist/tools/definitions/dialog-review.js.map +1 -0
  181. package/dist/tools/definitions/dialogue-analysis.d.ts +46 -0
  182. package/dist/tools/definitions/dialogue-analysis.js +170 -0
  183. package/dist/tools/definitions/dialogue-analysis.js.map +1 -0
  184. package/dist/tools/definitions/dialogue-audit-agent-scope.d.ts +7 -0
  185. package/dist/tools/definitions/dialogue-audit-agent-scope.js +41 -0
  186. package/dist/tools/definitions/dialogue-audit-agent-scope.js.map +1 -0
  187. package/dist/tools/definitions/dialogue-audit-alias.d.ts +67 -0
  188. package/dist/tools/definitions/dialogue-audit-alias.js +559 -0
  189. package/dist/tools/definitions/dialogue-audit-alias.js.map +1 -0
  190. package/dist/tools/definitions/dialogue-export.d.ts +7 -1
  191. package/dist/tools/definitions/dialogue-export.js +89 -32
  192. package/dist/tools/definitions/dialogue-export.js.map +1 -1
  193. package/dist/tools/definitions/dialogue-followup-state.d.ts +9 -0
  194. package/dist/tools/definitions/dialogue-followup-state.js +69 -0
  195. package/dist/tools/definitions/dialogue-followup-state.js.map +1 -0
  196. package/dist/tools/definitions/edit-version-transport.test-fixtures.d.ts +13 -0
  197. package/dist/tools/definitions/edit-version-transport.test-fixtures.js +292 -0
  198. package/dist/tools/definitions/edit-version-transport.test-fixtures.js.map +1 -0
  199. package/dist/tools/definitions/edit-version.d.ts +5 -0
  200. package/dist/tools/definitions/edit-version.js +20 -0
  201. package/dist/tools/definitions/edit-version.js.map +1 -0
  202. package/dist/tools/definitions/external-api-channels.js +17 -15
  203. package/dist/tools/definitions/external-api-channels.js.map +1 -1
  204. package/dist/tools/definitions/feedback-document-access.d.ts +16 -0
  205. package/dist/tools/definitions/feedback-document-access.js +63 -0
  206. package/dist/tools/definitions/feedback-document-access.js.map +1 -0
  207. package/dist/tools/definitions/fixtures/shipped-setup-status.d.ts +3 -0
  208. package/dist/tools/definitions/fixtures/shipped-setup-status.js +9 -0
  209. package/dist/tools/definitions/fixtures/shipped-setup-status.js.map +1 -0
  210. package/dist/tools/definitions/follow-up-config.d.ts +79 -0
  211. package/dist/tools/definitions/follow-up-config.js +258 -0
  212. package/dist/tools/definitions/follow-up-config.js.map +1 -0
  213. package/dist/tools/definitions/follow-up-funnel-test.d.ts +4 -3
  214. package/dist/tools/definitions/follow-up-funnel-test.js +65 -52
  215. package/dist/tools/definitions/follow-up-funnel-test.js.map +1 -1
  216. package/dist/tools/definitions/follow-up-promotion-instructions.d.ts +2 -0
  217. package/dist/tools/definitions/follow-up-promotion-instructions.js +7 -0
  218. package/dist/tools/definitions/follow-up-promotion-instructions.js.map +1 -0
  219. package/dist/tools/definitions/follow-up-setup.d.ts +4 -28
  220. package/dist/tools/definitions/follow-up-setup.js +20 -87
  221. package/dist/tools/definitions/follow-up-setup.js.map +1 -1
  222. package/dist/tools/definitions/follow-up.d.ts +20 -122
  223. package/dist/tools/definitions/follow-up.js +200 -354
  224. package/dist/tools/definitions/follow-up.js.map +1 -1
  225. package/dist/tools/definitions/followup-getcourse-compat.d.ts +29 -0
  226. package/dist/tools/definitions/followup-getcourse-compat.js +62 -0
  227. package/dist/tools/definitions/followup-getcourse-compat.js.map +1 -0
  228. package/dist/tools/definitions/followup-sequence-config.schema.d.ts +10 -0
  229. package/dist/tools/definitions/followup-sequence-config.schema.js +14 -0
  230. package/dist/tools/definitions/followup-sequence-config.schema.js.map +1 -0
  231. package/dist/tools/definitions/funnel-analytics.d.ts +18 -0
  232. package/dist/tools/definitions/funnel-analytics.js +150 -0
  233. package/dist/tools/definitions/funnel-analytics.js.map +1 -0
  234. package/dist/tools/definitions/getcourse-anchor-refresh.d.ts +5 -9
  235. package/dist/tools/definitions/getcourse-anchor-refresh.js +26 -31
  236. package/dist/tools/definitions/getcourse-anchor-refresh.js.map +1 -1
  237. package/dist/tools/definitions/getcourse-cold-outbound-settings.d.ts +46 -0
  238. package/dist/tools/definitions/getcourse-cold-outbound-settings.js +37 -0
  239. package/dist/tools/definitions/getcourse-cold-outbound-settings.js.map +1 -0
  240. package/dist/tools/definitions/getcourse-cold-welcome.d.ts +17 -29
  241. package/dist/tools/definitions/getcourse-cold-welcome.js +182 -242
  242. package/dist/tools/definitions/getcourse-cold-welcome.js.map +1 -1
  243. package/dist/tools/definitions/getcourse-wave-welcome.messages.d.ts +10 -0
  244. package/dist/tools/definitions/getcourse-wave-welcome.messages.js +17 -0
  245. package/dist/tools/definitions/getcourse-wave-welcome.messages.js.map +1 -0
  246. package/dist/tools/definitions/help.js.map +1 -1
  247. package/dist/tools/definitions/icp-import-source.d.ts +75 -0
  248. package/dist/tools/definitions/icp-import-source.js +88 -0
  249. package/dist/tools/definitions/icp-import-source.js.map +1 -0
  250. package/dist/tools/definitions/inbound-analytics.d.ts +13 -0
  251. package/dist/tools/definitions/inbound-analytics.js +55 -0
  252. package/dist/tools/definitions/inbound-analytics.js.map +1 -0
  253. package/dist/tools/definitions/instagram-comment.templates.d.ts +19 -0
  254. package/dist/tools/definitions/instagram-comment.templates.js +34 -0
  255. package/dist/tools/definitions/instagram-comment.templates.js.map +1 -0
  256. package/dist/tools/definitions/instagram-settings-compat.d.ts +33 -0
  257. package/dist/tools/definitions/instagram-settings-compat.js +7 -0
  258. package/dist/tools/definitions/instagram-settings-compat.js.map +1 -0
  259. package/dist/tools/definitions/knowledge-chunking.d.ts +42 -0
  260. package/dist/tools/definitions/knowledge-chunking.js +83 -0
  261. package/dist/tools/definitions/knowledge-chunking.js.map +1 -0
  262. package/dist/tools/definitions/knowledge-space-search-fields.d.ts +12 -0
  263. package/dist/tools/definitions/knowledge-space-search-fields.js +30 -0
  264. package/dist/tools/definitions/knowledge-space-search-fields.js.map +1 -0
  265. package/dist/tools/definitions/knowledge.d.ts +24 -14
  266. package/dist/tools/definitions/knowledge.js +342 -233
  267. package/dist/tools/definitions/knowledge.js.map +1 -1
  268. package/dist/tools/definitions/legacy-trigger-repeat.d.ts +17 -0
  269. package/dist/tools/definitions/legacy-trigger-repeat.js +53 -0
  270. package/dist/tools/definitions/legacy-trigger-repeat.js.map +1 -0
  271. package/dist/tools/definitions/link-tracking.d.ts +8 -0
  272. package/dist/tools/definitions/link-tracking.js +141 -38
  273. package/dist/tools/definitions/link-tracking.js.map +1 -1
  274. package/dist/tools/definitions/mailing-variant-content.d.ts +75 -0
  275. package/dist/tools/definitions/mailing-variant-content.js +73 -0
  276. package/dist/tools/definitions/mailing-variant-content.js.map +1 -0
  277. package/dist/tools/definitions/model-comparison.d.ts +1 -0
  278. package/dist/tools/definitions/model-comparison.js +4 -5
  279. package/dist/tools/definitions/model-comparison.js.map +1 -1
  280. package/dist/tools/definitions/money-currency.d.ts +5 -0
  281. package/dist/tools/definitions/money-currency.js +10 -0
  282. package/dist/tools/definitions/money-currency.js.map +1 -0
  283. package/dist/tools/definitions/operator-workflow.d.ts +5 -5
  284. package/dist/tools/definitions/operator-workflow.js +80 -27
  285. package/dist/tools/definitions/operator-workflow.js.map +1 -1
  286. package/dist/tools/definitions/platform-funnel-analytics.d.ts +42 -0
  287. package/dist/tools/definitions/platform-funnel-analytics.js +72 -0
  288. package/dist/tools/definitions/platform-funnel-analytics.js.map +1 -0
  289. package/dist/tools/definitions/platform-getcourse-wave-field-bindings.d.ts +42 -0
  290. package/dist/tools/definitions/platform-getcourse-wave-field-bindings.js +51 -0
  291. package/dist/tools/definitions/platform-getcourse-wave-field-bindings.js.map +1 -0
  292. package/dist/tools/definitions/platform-settings-limits.d.ts +5 -0
  293. package/dist/tools/definitions/platform-settings-limits.js +6 -0
  294. package/dist/tools/definitions/platform-settings-limits.js.map +1 -0
  295. package/dist/tools/definitions/platform-settings-shipped-form.d.ts +37 -0
  296. package/dist/tools/definitions/platform-settings-shipped-form.js +310 -0
  297. package/dist/tools/definitions/platform-settings-shipped-form.js.map +1 -0
  298. package/dist/tools/definitions/platform-settings-update.d.ts +300 -0
  299. package/dist/tools/definitions/platform-settings-update.js +134 -0
  300. package/dist/tools/definitions/platform-settings-update.js.map +1 -0
  301. package/dist/tools/definitions/{getcourse-wave.d.ts → platform-setup-wave.d.ts} +75 -6
  302. package/dist/tools/definitions/platform-setup-wave.js +1079 -0
  303. package/dist/tools/definitions/platform-setup-wave.js.map +1 -0
  304. package/dist/tools/definitions/platform-setup.d.ts +701 -222
  305. package/dist/tools/definitions/platform-setup.js +313 -752
  306. package/dist/tools/definitions/platform-setup.js.map +1 -1
  307. package/dist/tools/definitions/platform-widget-page-rules.schema.d.ts +10 -0
  308. package/dist/tools/definitions/platform-widget-page-rules.schema.js +7 -0
  309. package/dist/tools/definitions/platform-widget-page-rules.schema.js.map +1 -0
  310. package/dist/tools/definitions/prompt-authoring.constants.d.ts +2 -0
  311. package/dist/tools/definitions/prompt-authoring.constants.js +3 -0
  312. package/dist/tools/definitions/prompt-authoring.constants.js.map +1 -0
  313. package/dist/tools/definitions/prompt-batch-controls.d.ts +5 -0
  314. package/dist/tools/definitions/prompt-batch-controls.js +40 -0
  315. package/dist/tools/definitions/prompt-batch-controls.js.map +1 -0
  316. package/dist/tools/definitions/prompt-draft-authoring.d.ts +5 -0
  317. package/dist/tools/definitions/prompt-draft-authoring.js +24 -0
  318. package/dist/tools/definitions/prompt-draft-authoring.js.map +1 -0
  319. package/dist/tools/definitions/prompt-text-projection.d.ts +11 -0
  320. package/dist/tools/definitions/prompt-text-projection.js +62 -0
  321. package/dist/tools/definitions/prompt-text-projection.js.map +1 -0
  322. package/dist/tools/definitions/reviewer-paid.d.ts +19 -0
  323. package/dist/tools/definitions/reviewer-paid.js +115 -0
  324. package/dist/tools/definitions/reviewer-paid.js.map +1 -0
  325. package/dist/tools/definitions/routing-condition-projection.d.ts +31 -0
  326. package/dist/tools/definitions/routing-condition-projection.js +97 -0
  327. package/dist/tools/definitions/routing-condition-projection.js.map +1 -0
  328. package/dist/tools/definitions/schedule-selection-hints.d.ts +3 -0
  329. package/dist/tools/definitions/schedule-selection-hints.js +42 -0
  330. package/dist/tools/definitions/schedule-selection-hints.js.map +1 -0
  331. package/dist/tools/definitions/{scheduled-tasks.d.ts → scheduled-task-alias.d.ts} +12 -10
  332. package/dist/tools/definitions/scheduled-task-alias.js +207 -0
  333. package/dist/tools/definitions/scheduled-task-alias.js.map +1 -0
  334. package/dist/tools/definitions/session.js +3 -3
  335. package/dist/tools/definitions/session.js.map +1 -1
  336. package/dist/tools/definitions/setup-init-operation.schema.d.ts +2 -0
  337. package/dist/tools/definitions/setup-init-operation.schema.js +6 -0
  338. package/dist/tools/definitions/setup-init-operation.schema.js.map +1 -0
  339. package/dist/tools/definitions/shared-input.helpers.d.ts +51 -0
  340. package/dist/tools/definitions/shared-input.helpers.js +323 -0
  341. package/dist/tools/definitions/shared-input.helpers.js.map +1 -0
  342. package/dist/tools/definitions/shared.d.ts +414 -284
  343. package/dist/tools/definitions/shared.js +436 -619
  344. package/dist/tools/definitions/shared.js.map +1 -1
  345. package/dist/tools/definitions/shipped-output-names.d.ts +19 -0
  346. package/dist/tools/definitions/shipped-output-names.js +123 -0
  347. package/dist/tools/definitions/shipped-output-names.js.map +1 -0
  348. package/dist/tools/definitions/task-state.d.ts +5 -5
  349. package/dist/tools/definitions/task-state.js +2 -1
  350. package/dist/tools/definitions/task-state.js.map +1 -1
  351. package/dist/tools/definitions/telegram-personal-capacity.d.ts +4 -0
  352. package/dist/tools/definitions/telegram-personal-capacity.js +18 -0
  353. package/dist/tools/definitions/telegram-personal-capacity.js.map +1 -0
  354. package/dist/tools/definitions/telegram-pool-policy.d.ts +8 -0
  355. package/dist/tools/definitions/telegram-pool-policy.js +56 -0
  356. package/dist/tools/definitions/telegram-pool-policy.js.map +1 -0
  357. package/dist/tools/definitions/touch-history-alias.d.ts +4 -0
  358. package/dist/tools/definitions/touch-history-alias.js +99 -0
  359. package/dist/tools/definitions/touch-history-alias.js.map +1 -0
  360. package/dist/tools/definitions/trigger-action-item.schema.d.ts +254 -0
  361. package/dist/tools/definitions/trigger-action-item.schema.js +121 -0
  362. package/dist/tools/definitions/trigger-action-item.schema.js.map +1 -0
  363. package/dist/tools/definitions/trigger-argument.schema.d.ts +14 -0
  364. package/dist/tools/definitions/trigger-argument.schema.js +23 -0
  365. package/dist/tools/definitions/trigger-argument.schema.js.map +1 -0
  366. package/dist/tools/definitions/trigger-claim-alias.d.ts +10 -0
  367. package/dist/tools/definitions/trigger-claim-alias.js +90 -0
  368. package/dist/tools/definitions/trigger-claim-alias.js.map +1 -0
  369. package/dist/tools/definitions/trigger-echo-projection.d.ts +1 -0
  370. package/dist/tools/definitions/trigger-echo-projection.js +41 -0
  371. package/dist/tools/definitions/trigger-echo-projection.js.map +1 -0
  372. package/dist/tools/definitions/trigger-upsert.tool.d.ts +29 -0
  373. package/dist/tools/definitions/trigger-upsert.tool.js +122 -0
  374. package/dist/tools/definitions/trigger-upsert.tool.js.map +1 -0
  375. package/dist/tools/definitions/v15-port-descriptions.d.ts +11 -0
  376. package/dist/tools/definitions/v15-port-descriptions.js +30 -0
  377. package/dist/tools/definitions/v15-port-descriptions.js.map +1 -0
  378. package/dist/tools/definitions/variables.d.ts +44 -0
  379. package/dist/tools/definitions/variables.js +310 -0
  380. package/dist/tools/definitions/variables.js.map +1 -0
  381. package/dist/tools/definitions/voice-action-input.d.ts +9 -0
  382. package/dist/tools/definitions/voice-action-input.js +141 -0
  383. package/dist/tools/definitions/voice-action-input.js.map +1 -0
  384. package/dist/tools/definitions/widget-customization-compat.d.ts +51 -0
  385. package/dist/tools/definitions/widget-customization-compat.js +23 -0
  386. package/dist/tools/definitions/widget-customization-compat.js.map +1 -0
  387. package/dist/tools/definitions.d.ts +1105 -621
  388. package/dist/tools/definitions.js +57 -27
  389. package/dist/tools/definitions.js.map +1 -1
  390. package/dist/tools/description-localization.js +3 -2
  391. package/dist/tools/description-localization.js.map +1 -1
  392. package/dist/tools/follow-up-request.d.ts +19 -0
  393. package/dist/tools/follow-up-request.js +81 -0
  394. package/dist/tools/follow-up-request.js.map +1 -0
  395. package/dist/tools/followup-revision.d.ts +4 -0
  396. package/dist/tools/followup-revision.js +29 -0
  397. package/dist/tools/followup-revision.js.map +1 -0
  398. package/dist/tools/incomplete-list.js +4 -0
  399. package/dist/tools/incomplete-list.js.map +1 -1
  400. package/dist/tools/inventory.js +47 -11
  401. package/dist/tools/inventory.js.map +1 -1
  402. package/dist/tools/operation-recovery.d.ts +4 -0
  403. package/dist/tools/operation-recovery.js +33 -0
  404. package/dist/tools/operation-recovery.js.map +1 -0
  405. package/dist/tools/registry-mapping-primary.cases.d.ts +2 -0
  406. package/dist/tools/registry-mapping-primary.cases.js +753 -0
  407. package/dist/tools/registry-mapping-primary.cases.js.map +1 -0
  408. package/dist/tools/registry-mapping-secondary.cases.d.ts +2 -0
  409. package/dist/tools/registry-mapping-secondary.cases.js +626 -0
  410. package/dist/tools/registry-mapping-secondary.cases.js.map +1 -0
  411. package/dist/tools/registry-mapping.cases.d.ts +8 -0
  412. package/dist/tools/registry-mapping.cases.js +13 -0
  413. package/dist/tools/registry-mapping.cases.js.map +1 -0
  414. package/dist/tools/registry-test-fixtures.d.ts +50 -0
  415. package/dist/tools/registry-test-fixtures.js +120 -0
  416. package/dist/tools/registry-test-fixtures.js.map +1 -0
  417. package/dist/tools/registry.d.ts +2 -0
  418. package/dist/tools/registry.js +82 -52
  419. package/dist/tools/registry.js.map +1 -1
  420. package/dist/tools/result.d.ts +1 -0
  421. package/dist/tools/result.js +90 -22
  422. package/dist/tools/result.js.map +1 -1
  423. package/dist/tools/toolsets.d.ts +16 -0
  424. package/dist/tools/toolsets.js +25 -1
  425. package/dist/tools/toolsets.js.map +1 -1
  426. package/dist/types/api-contract.gen.d.ts +105862 -22115
  427. package/dist/utils/credential-signatures.d.ts +3 -0
  428. package/dist/utils/credential-signatures.js +10 -0
  429. package/dist/utils/credential-signatures.js.map +1 -0
  430. package/dist/utils/data-source-column-name.d.ts +10 -0
  431. package/dist/utils/data-source-column-name.js +36 -0
  432. package/dist/utils/data-source-column-name.js.map +1 -0
  433. package/dist/utils/logger.d.ts +1 -0
  434. package/dist/utils/logger.js +32 -8
  435. package/dist/utils/logger.js.map +1 -1
  436. package/dist/utils/secret-read-boundary.d.ts +2 -0
  437. package/dist/utils/secret-read-boundary.js +88 -0
  438. package/dist/utils/secret-read-boundary.js.map +1 -0
  439. package/dist/utils/setup-secrets.d.ts +4 -0
  440. package/dist/utils/setup-secrets.js +40 -0
  441. package/dist/utils/setup-secrets.js.map +1 -0
  442. package/docs/agent-models.md +9 -0
  443. package/docs/agent-usage-guide.full.ru.md +1 -4
  444. package/docs/analytics-contract.md +67 -0
  445. package/docs/async-operation-lifecycle.md +10 -3
  446. package/docs/connect.ru.md +144 -4
  447. package/docs/contact-company-profile.md +17 -0
  448. package/docs/contact-recommendations.md +7 -0
  449. package/docs/crm-stage-pool.md +73 -0
  450. package/docs/customer-data.md +61 -0
  451. package/docs/edit-versions.md +36 -0
  452. package/docs/failure-semantics.md +17 -9
  453. package/docs/help-navigation.md +15 -42
  454. package/docs/host-compatibility-matrix.md +72 -93
  455. package/docs/host-setup.md +33 -35
  456. package/docs/invariants/public-api-and-contracts.md +16 -0
  457. package/docs/legacy-action-settings.md +21 -0
  458. package/docs/main-transfer-dependencies.md +38 -0
  459. package/docs/mcp2-parity.md +50 -0
  460. package/docs/modules/analytics.md +79 -0
  461. package/docs/modules/besales-mcp.md +137 -0
  462. package/docs/modules/dialog-review-report.md +38 -0
  463. package/docs/modules/dialogue-followup-adapters.md +39 -0
  464. package/docs/modules/message-reactions.md +17 -0
  465. package/docs/modules/network-mode.md +284 -0
  466. package/docs/modules/prompt-batch-and-dialogue-controls.md +69 -0
  467. package/docs/pii-policy.md +21 -16
  468. package/docs/response-size-budget.md +197 -7
  469. package/docs/secret-read-boundary.md +102 -0
  470. package/docs/task-state.md +7 -2
  471. package/docs/telegram-pool-policy.md +19 -0
  472. package/docs/tool-effects.md +15 -9
  473. package/docs/tool-surface.md +205 -4
  474. package/docs/voice-actions-and-inbox.md +95 -0
  475. package/docs/wazzup-instagram-comments.md +26 -0
  476. package/package.json +17 -10
  477. package/scripts/api-source-loader.spec.mjs +40 -0
  478. package/scripts/audit-bridge-controls.mjs +129 -0
  479. package/scripts/audit-revert-mutants.mjs +107 -0
  480. package/scripts/bridge-api-input.spec.mjs +98 -0
  481. package/scripts/bridge-controls-mutants.mjs +130 -0
  482. package/scripts/brx3-shipped-refusals.spec.mjs +149 -0
  483. package/scripts/brx4-ledger-payload.spec.mjs +127 -0
  484. package/scripts/build-onprem.mjs +108 -0
  485. package/scripts/connect-clients.sh +141 -0
  486. package/scripts/connect-scopes.mjs +166 -0
  487. package/scripts/connect-scopes.spec.mjs +83 -0
  488. package/scripts/emit-personal-link-carrier.mjs +31 -0
  489. package/scripts/emit-setup-init-schemas.mjs +24 -0
  490. package/scripts/emit-tool-routes.mjs +878 -0
  491. package/scripts/emit-tool-routes.spec.mjs +300 -0
  492. package/scripts/followup-registry.spec.mjs +107 -0
  493. package/scripts/generate-crm-rotation-contract.mjs +98 -0
  494. package/scripts/generate-followup-session-contract.mjs +16 -0
  495. package/scripts/icp-import-verification/mutate.cjs +70 -0
  496. package/scripts/import-secret-read-contract.mjs +53 -0
  497. package/scripts/install-claude-desktop.js +1 -1
  498. package/scripts/lag-decisions.mjs +37 -0
  499. package/scripts/lag-decisions.spec.mjs +87 -0
  500. package/scripts/lag-open-task-owners.mjs +46 -0
  501. package/scripts/lag-open-task-owners.spec.mjs +78 -0
  502. package/scripts/lag-payload.mjs +10 -0
  503. package/scripts/legacy-action-lag.spec.mjs +22 -0
  504. package/scripts/legacy-field-refusal.shipped.spec.mjs +99 -0
  505. package/scripts/mcpcompat-handler.mjs +34 -0
  506. package/scripts/mcpcompat-loader.mjs +36 -0
  507. package/scripts/mcpcompat-typescript.mjs +3 -0
  508. package/scripts/platform-settings-shipped-parity.spec.mjs +89 -0
  509. package/scripts/prbr-round1-recheck.spec.mjs +605 -0
  510. package/scripts/prbr-shipped-compatibility.spec.mjs +276 -0
  511. package/scripts/publish-mcp-registry.mjs +98 -0
  512. package/scripts/publish-mcp-registry.spec.mjs +68 -0
  513. package/scripts/record-scheduled-task-call.mjs +26 -0
  514. package/scripts/refusal-probe.mjs +17 -0
  515. package/scripts/refusal-probe.spec.mjs +29 -0
  516. package/scripts/registry-diff.mjs +502 -0
  517. package/scripts/registry-diff.spec.mjs +787 -0
  518. package/scripts/request-query.mjs +43 -0
  519. package/scripts/request-query.spec.mjs +82 -0
  520. package/scripts/route-lag.mjs +23 -0
  521. package/scripts/route-lag.spec.mjs +30 -0
  522. package/scripts/sample-args.mjs +174 -0
  523. package/scripts/sample-args.spec.mjs +160 -0
  524. package/scripts/shipped-definitions.mjs +197 -0
  525. package/scripts/shipped-definitions.spec.mjs +57 -0
  526. package/scripts/shipped-inputs.spec.mjs +136 -0
  527. package/scripts/shipped-recordings.spec.mjs +19 -0
  528. package/scripts/shipped-ref.d.mts +5 -0
  529. package/scripts/shipped-ref.mjs +20 -0
  530. package/scripts/shipped-ref.spec.mjs +59 -0
  531. package/scripts/shipped-registry.mjs +107 -0
  532. package/scripts/shipped-sample-candidates.mjs +69 -0
  533. package/scripts/shipped-sample-candidates.spec.mjs +117 -0
  534. package/scripts/shipped-sample.mjs +868 -0
  535. package/scripts/shipped-sample.spec.mjs +451 -0
  536. package/scripts/sync-agent-model-schemas.mjs +72 -0
  537. package/scripts/sync-api-contracts.mjs +85 -0
  538. package/scripts/sync-api-contracts.spec.mjs +144 -0
  539. package/scripts/sync-contract-ledger-schemas.mjs +161 -0
  540. package/scripts/sync-crm-stage-pool-schema.mjs +85 -0
  541. package/scripts/sync-prompt-draft-schema.mjs +92 -0
  542. package/scripts/sync-route-map.mjs +94 -0
  543. package/scripts/sync-schema-descriptions.mjs +25 -0
  544. package/scripts/sync-tool-inventory.mjs +27 -0
  545. package/scripts/sync-trigger-argument-schema.mjs +121 -0
  546. package/scripts/sync-trigger-repeat-mapping.mjs +12 -0
  547. package/scripts/sync-voice-actions-contract.mjs +67 -0
  548. package/scripts/sync-voice-actions-tools.mjs +97 -0
  549. package/scripts/sync-wave-id-schemas.mjs +55 -0
  550. package/scripts/tool-input-schemas.mjs +46 -0
  551. package/scripts/tool-input-schemas.spec.mjs +50 -0
  552. package/scripts/verify-followup-adapters.mjs +235 -0
  553. package/scripts/verify-secret-read-import.mjs +84 -0
  554. package/scripts/verify-secret-read-mutants.mjs +143 -0
  555. package/dist/tools/definitions/analytics.d.ts +0 -40
  556. package/dist/tools/definitions/analytics.js +0 -233
  557. package/dist/tools/definitions/analytics.js.map +0 -1
  558. package/dist/tools/definitions/broadcast-mailing-variants.d.ts +0 -41
  559. package/dist/tools/definitions/broadcast-mailing-variants.js +0 -194
  560. package/dist/tools/definitions/broadcast-mailing-variants.js.map +0 -1
  561. package/dist/tools/definitions/dialogue-audit.d.ts +0 -38
  562. package/dist/tools/definitions/dialogue-audit.js +0 -292
  563. package/dist/tools/definitions/dialogue-audit.js.map +0 -1
  564. package/dist/tools/definitions/getcourse-wave.js +0 -519
  565. package/dist/tools/definitions/getcourse-wave.js.map +0 -1
  566. package/dist/tools/definitions/operational-overview.d.ts +0 -3
  567. package/dist/tools/definitions/operational-overview.js +0 -23
  568. package/dist/tools/definitions/operational-overview.js.map +0 -1
  569. package/dist/tools/definitions/scheduled-tasks.js +0 -173
  570. package/dist/tools/definitions/scheduled-tasks.js.map +0 -1
  571. package/dist/tools/definitions/trigger-contact-claims.d.ts +0 -7
  572. package/dist/tools/definitions/trigger-contact-claims.js +0 -60
  573. package/dist/tools/definitions/trigger-contact-claims.js.map +0 -1
  574. package/dist/tools/registry-mapping-cases-core.d.ts +0 -38
  575. package/dist/tools/registry-mapping-cases-core.js +0 -927
  576. package/dist/tools/registry-mapping-cases-core.js.map +0 -1
  577. package/dist/tools/registry-mapping-cases-platform.d.ts +0 -2
  578. package/dist/tools/registry-mapping-cases-platform.js +0 -1052
  579. package/dist/tools/registry-mapping-cases-platform.js.map +0 -1
  580. package/dist/tools/trigger-action-config.d.ts +0 -49
  581. package/dist/tools/trigger-action-config.js +0 -171
  582. package/dist/tools/trigger-action-config.js.map +0 -1
  583. package/docs/evals/model-behavior-scorecard.md +0 -80
  584. package/docs/operation-coverage.md +0 -114
  585. package/scripts/mock-credentials.js +0 -77
  586. package/scripts/model-eval-server.js +0 -213
  587. package/scripts/run-model-eval.js +0 -447
@@ -1,225 +1,35 @@
1
- # 14. Pipeline Builder и PipelineSettings
1
+ # Настройка CRM-воронок
2
2
 
3
- > **Источник правды:** `ai-aniomaly/docs/ai-prompt-builder/14-pipeline-builder.md` — копия для MCP doc-bridge (v1.5 Increment 6b). Синкать при изменении оригинала.
4
- >
5
- > ⚠️ **MCP-контекст:** это доменная справка, написанная для людей/админ-UI. В MCP-сессии ты выполняешь те же операции **через besales_* tools**, а не через UI (drag-n-drop, клики в админке). Где текст ниже говорит «клиент/админ делает X через UI» — это «что должно получиться»; механику бери из tool (напр. загрузка файла → `besales_file_upload_request`; документ в knowledge → `besales_knowledge_document_upload`; сайт → `besales_knowledge_website_add`) + из workflow-ресурсов. Внутренние ссылки `[NN-name.md]` — относительные пути исходной доки, через MCP НЕ резолвятся: ищи `besales://docs/<slug>` или concept-resource.
3
+ Воронка и её стадии — workspace-каталог CRM. Каноническая бизнес-связь в v2 принадлежит агенту,
4
+ но отгруженная совместимая MCP-поверхность пока умеет только канальную связь.
6
5
 
7
- ## 1. Назначение
6
+ ## Базовый порядок
8
7
 
9
- Когда платформа подключена к CRM, нужно решить две задачи:
8
+ 1. Получи актуальные воронки через `besales_crm_pipeline_list`.
9
+ 2. При необходимости создай или обнови пользовательскую запись каталога.
10
+ 3. Проверь стадии и их внешние идентификаторы.
11
+ 4. Если нужна построенная сегодня связь, вызови `besales_platform_pipeline_link` для конкретного
12
+ канала. Не выдавай её за agent-level связь.
13
+ 5. Проверь сценарий на тестовом контакте до массового запуска.
10
14
 
11
- 1. **Что делать, если в CRM уже есть сделка/контакт с тем же телефоном** (повторное обращение клиента) — `PipelineSettings.filter*`.
12
- 2. **Куда автоматически переводить сделку** при определённых событиях: пришло сообщение от пользователя, ответил бот, ответил оператор — `PipelineSettings.*MoveToStatus`.
15
+ Agent-level поверхность для `agent_active_pipelines` этим инструментом не построена. Если задача
16
+ требует именно общей воронки агента на нескольких каналах, сообщи об этом разрыве вместо серии
17
+ канальных вызовов, которая создала бы другую модель владения.
13
18
 
14
- Обе задачи настраиваются в Pipeline Builder UI (одна страница админки). Структура — модель `PipelineSettings` (one-to-one с `Platform`).
19
+ ## Автоматические переходы
15
20
 
16
- ## 2. JSON-схема
21
+ Переход стадии выполняется серверным action step после ActionGovernor. Условия используют общий
22
+ `ConditionGroupJson`; отдельные строки выражений и второй DSL запрещены. Для каждой автоматизации
23
+ нужно явно определить:
17
24
 
18
- ```json
19
- {
20
- "id": "uuid",
21
- "platformId": "<platformId>",
25
+ - исходную и целевую стадию;
26
+ - событие или условие активации;
27
+ - поведение при отсутствии внешней записи;
28
+ - допустимость повтора и правила неоднозначного исхода;
29
+ - аудит и видимый оператору результат.
22
30
 
23
- "filterEnabled": true,
24
- "filterByPhoneEnabled": true,
25
- "filterByFieldEnabled": false,
26
- "filterByContactEnabled": false,
31
+ ## Защита от дрейфа
27
32
 
28
- "fieldId": null,
29
- "fieldEntityType": null,
30
- "valueType": null,
31
- "value": null,
32
-
33
- "actionOnFound": "LINK",
34
-
35
- "createNewLead": true,
36
- "createNewContact": true,
37
-
38
- "incomingMoveToStatus": 142,
39
- "incomingMoveToStatusPipelineId": 1234567,
40
- "incomingMoveToStatusCrmId": "<Crm.id>",
41
-
42
- "outgoingMoveToStatus": 143,
43
- "outgoingMoveToStatusPipelineId": 1234567,
44
- "outgoingMoveToStatusCrmId": "<Crm.id>",
45
-
46
- "aiResponseMoveToStatus": null,
47
- "aiResponseMoveToStatusPipelineId": null,
48
- "aiResponseMoveToStatusCrmId": null,
49
-
50
- "operatorSpeechMoveToStatus": 145,
51
- "operatorSpeechMoveToStatusPipelineId": 1234567,
52
- "operatorSpeechMoveToStatusCrmId": "<Crm.id>"
53
- }
54
- ```
55
-
56
- ## 3. Фильтрация существующих сделок
57
-
58
- ### Поля
59
-
60
- | Поле | Тип | Описание |
61
- |---|---|---|
62
- | `filterEnabled` | bool | Главный выключатель — без него фильтр не работает. |
63
- | `filterByPhoneEnabled` | bool | Искать существующую сделку/контакт по телефону клиента. |
64
- | `filterByFieldEnabled` | bool | Искать по кастомному CRM-полю. |
65
- | `filterByContactEnabled` | bool | Полнотекстовый поиск через CRM-контакт. |
66
- | `fieldId` | string / null | ID кастомного поля CRM (для `filterByFieldEnabled`). |
67
- | `fieldEntityType` | string / null | `LEAD` или `CONTACT` — где искать поле. |
68
- | `valueType` | enum `PipelineFilterValueType` / null | `CONSTANT` (фиксированное значение) или `SYSTEM_VARIABLE` (имя системной переменной — `phone`, `telegramId` и т.п.). |
69
- | `value` | string / null | Само значение или имя системной переменной. |
70
- | `actionOnFound` | enum `PipelineFilterAction` / null | `IGNORE` (игнорировать обращение, `isBotActive=false`) или `LINK` (привязать к существующей сделке и продолжить). |
71
-
72
- ### Сценарии
73
-
74
- | Сценарий бизнеса | Настройки |
75
- |---|---|
76
- | «Если клиент уже у нас в работе — не дублировать сделку, а продолжить в существующей» | `filterEnabled=true`, `filterByPhoneEnabled=true`, `actionOnFound=LINK` |
77
- | «Если есть сделка — не отвечать ботом, отдать оператору» | `filterEnabled=true`, `filterByPhoneEnabled=true`, `actionOnFound=IGNORE` |
78
- | «Искать по нашему UTM-полю, чтобы не дублировать с лендингов» | `filterEnabled=true`, `filterByFieldEnabled=true`, `fieldId=<UTM_FIELD_ID>`, `fieldEntityType=LEAD`, `valueType=CONSTANT`, `value="lp_main_2026"`, `actionOnFound=LINK` |
79
-
80
- ### Создание новых сущностей
81
-
82
- | Поле | Описание |
83
- |---|---|
84
- | `createNewLead` | Создавать ли сделку в CRM при первом обращении клиента, если фильтр не нашёл существующую (или фильтр выключен). |
85
- | `createNewContact` | Аналогично для контакта. |
86
-
87
- Обычно оба `true` — иначе сделки/контакты в CRM не появятся.
88
-
89
- ## 4. Status movement: автоматические переходы между этапами
90
-
91
- Каждое событие в системе может автоматически двигать сделку. Настройка задаёт композитный ключ `(crmId, pipelineId, statusId)` — статус **может быть в любой воронке** активной для платформы (см. `PlatformPipeline`).
92
-
93
- ### Все события
94
-
95
- | Поле | Когда срабатывает | Куда уйдёт сделка |
96
- |---|---|---|
97
- | `incomingMoveToStatus` | Пользователь написал в бот (входящее сообщение) | На указанный статус (обычно «Новый» или «В работе») |
98
- | `outgoingMoveToStatus` | Бот/оператор ответил пользователю | На указанный статус (обычно «Идёт диалог») |
99
- | `aiResponseMoveToStatus` | Бот сгенерировал и отправил ответ через LLM | На указанный статус (опционально — если хочется отделить «AI ответил» от «оператор ответил») |
100
- | `operatorSpeechMoveToStatus` | Оператор написал в карточку (через CRM Chat API) | На указанный статус (обычно «У оператора») |
101
-
102
- Каждое поле — это **тройка**: `*MoveToStatus`, `*MoveToStatusPipelineId`, `*MoveToStatusCrmId`. Если основное поле `null` — переход не выполняется.
103
-
104
- ### Связь со `StatusType`
105
-
106
- В `CrmPipelineStatus.statusTypes[]` (массив enum `StatusType`) можно указать «семантику» этапа: `INCOMING`, `OUTGOING`, `MESSAGE_SENT`, `AI_TOOK_OVER`, `OPERATOR_TOOK_OVER`, `USER_BLOCKED`. Эти теги — для UI и аналитики (показывают, какие этапы что обрабатывают), но **не управляют автопереходами** — это делает `PipelineSettings.*MoveToStatus`.
107
-
108
- ### `CrmPipelineStatus.onMessageReceivedMoveToStatus`
109
-
110
- Альтернативный механизм автоперехода — на уровне самого статуса: `null` или ID статуса, в который перейти при получении сообщения от пользователя. Может конфликтовать с `PipelineSettings.incomingMoveToStatus` — приоритет за `PipelineSettings`.
111
-
112
- ### `CrmPipelineStatus.isSystemManaged`, `isBotActive` и `isOperatorAvailable`
113
-
114
- Эти поля хранятся на статусе и редактируются в Pipeline Builder:
115
- - `isSystemManaged=false` → master-гейт выключен: статус не управляется системой, а UI считает бота и оператора неактивными независимо от дочерних флагов.
116
- - `isBotActive=false` → бот молчит на этом этапе.
117
- - `isOperatorAvailable=false` → оператор не может быть подключён через `CALL_OPERATOR`.
118
-
119
- Через MCP эти поля меняются в `besales_crm_pipeline_status_update` как
120
- `is_system_managed`, `is_bot_active` и `is_operator_available`.
121
-
122
- ## 5. PlatformPipeline — связь платформы с воронками
123
-
124
- Платформа может работать с **несколькими воронками** одной CRM (например, одна для лидов, другая для текущих клиентов):
125
-
126
- ```json
127
- {
128
- "platformId": "<platformId>",
129
- "pipelineCrmId": "<Crm.id>",
130
- "pipelineId": 1234567,
131
- "isActive": true
132
- }
133
- ```
134
-
135
- Это many-to-many связь. PipelineSettings может ссылаться на статусы из любой активной воронки.
136
-
137
- ## 6. Inline-пример: типичный e-commerce setup
138
-
139
- ```json
140
- {
141
- "platformId": "<platformId>",
142
-
143
- "filterEnabled": true,
144
- "filterByPhoneEnabled": true,
145
- "filterByFieldEnabled": false,
146
- "filterByContactEnabled": false,
147
- "actionOnFound": "LINK",
148
-
149
- "createNewLead": true,
150
- "createNewContact": true,
151
-
152
- "incomingMoveToStatus": 142,
153
- "incomingMoveToStatusPipelineId": 1234567,
154
- "incomingMoveToStatusCrmId": "<Crm.id>",
155
-
156
- "outgoingMoveToStatus": 143,
157
- "outgoingMoveToStatusPipelineId": 1234567,
158
- "outgoingMoveToStatusCrmId": "<Crm.id>",
159
-
160
- "operatorSpeechMoveToStatus": 145,
161
- "operatorSpeechMoveToStatusPipelineId": 1234567,
162
- "operatorSpeechMoveToStatusCrmId": "<Crm.id>"
163
- }
164
- ```
165
-
166
- Логика:
167
- - При первом сообщении — ищем по телефону, если уже есть — привязываем; если нет — создаём новую сделку в этапе 142.
168
- - При первом ответе — переводим в 143 («Идёт диалог»).
169
- - Когда оператор подключился — 145 («У оператора»).
170
-
171
- ## 7. Inline-пример: фильтр по UTM (B2B-лендинг)
172
-
173
- Для разных лендингов — разные воронки:
174
-
175
- ```json
176
- {
177
- "filterEnabled": true,
178
- "filterByFieldEnabled": true,
179
- "fieldId": "987",
180
- "fieldEntityType": "LEAD",
181
- "valueType": "SYSTEM_VARIABLE",
182
- "value": "telegramId",
183
- "actionOnFound": "LINK",
184
- "createNewLead": true,
185
- "createNewContact": true
186
- }
187
- ```
188
-
189
- Логика: ищем сделку по полю с ID `987` (например, «Telegram User ID» в LEAD), значение которого совпадает с `{telegramId}` текущего пользователя. Если найдено — привязываем; иначе создаём новую.
190
-
191
- ## 8. Граничные случаи и валидация
192
-
193
- | Правило | Что AI-сервису помнить |
194
- |---|---|
195
- | `PipelineSettings` — one-to-one с Platform | Для каждой платформы максимум одна запись. |
196
- | `filterEnabled=true` без `filterBy*` | Бесполезно — система не знает, по чему искать. |
197
- | `filterByPhoneEnabled=true` для платформ без телефона (Web Widget без UTM) | Может не найти, но бот всё равно сработает (фильтр пропустится). |
198
- | `actionOnFound=IGNORE` | `ChatUser.isBotActive=false` — бот не отвечает. Подходит для «после ручного открытия сделки оператор сам отвечает». |
199
- | `actionOnFound=LINK` | `ChatUser` привязывается к существующей `leadId/bitrixDealId`. Хорошо для непрерывности. |
200
- | `*MoveToStatus` без всех трёх ID | Если нет `*MoveToStatusPipelineId`/`*MoveToStatusCrmId` — переход не сработает. |
201
- | Конфликт `aiResponseMoveToStatus` и `outgoingMoveToStatus` | Оба сработают по очереди (сначала AI, потом outgoing). Часто хватает только `outgoing`, чтобы не перегружать. |
202
- | Composite key статуса | Все три поля (`MoveToStatus`, `MoveToStatusPipelineId`, `MoveToStatusCrmId`) или ни одного. |
203
- | Удаление воронки/статуса | Если ID удалится в CRM — переход просто не выполнится (без ошибки). Регулярно проверять синхронизацию. |
204
- | Pipeline Builder не управляет триггерами | Это два разных механизма перевода. Триггер `CRM_MOVE_STAGE` — точечный, по условию. PipelineSettings — автоматически по событию. |
205
-
206
- ## 9. Что AI-сервис должен спрашивать у клиента
207
-
208
- Перед генерацией PipelineSettings:
209
-
210
- 1. «Если клиент уже есть в CRM — продолжить в существующей сделке или создать новую?» (`actionOnFound`).
211
- 2. «Куда переводить сделку, когда клиент написал?» (`incomingMoveToStatus`).
212
- 3. «Куда переводить, когда вы ответили?» (`outgoingMoveToStatus`).
213
- 4. «Куда переводить, когда подключился оператор?» (`operatorSpeechMoveToStatus`).
214
- 5. «Создавать ли новые сделки/контакты автоматически?» (`createNewLead`/`createNewContact`).
215
- 6. «По какому ключу искать дубликаты — телефон, кастомное поле, что-то ещё?» (`filterBy*`).
216
-
217
- ## 10. Связь с другими подсистемами
218
-
219
- | Подсистема | Связь |
220
- |---|---|
221
- | **Платформы** ([`11-platforms.md`](11-platforms.md)) | `PipelineSettings` принадлежит платформе (one-to-one). |
222
- | **CRM** ([`12-crm-integration.md`](12-crm-integration.md)) | Использует `CrmPipelineStatus` (composite key). `StatusType` теги влияют на UI/аналитику. |
223
- | **Триггеры** ([`04-triggers-and-actions.md`](04-triggers-and-actions.md)) | Триггер `CRM_MOVE_STAGE` — независимый механизм перевода (точечный, по условию). Совместимы — могут работать параллельно. |
224
- | **Маршрутизация** ([`06-routing.md`](06-routing.md)) | `LEAD_STATUS` стратегия router-а опирается на `ChatUser.leadStatusId`, который обновляется автоматически после переходов через PipelineSettings. |
225
- | **AgentBehavior** ([`10-agent-behavior.md`](10-agent-behavior.md)) | `aiErrorTargetStageId` — куда перевести при ошибке LLM (читает напрямую `pipelineId` текущей воронки, если `null`). |
33
+ Не сохраняй название стадии как единственный идентификатор: оно редактируется в CRM. Не передавай
34
+ модели внешний ID. После ресинхронизации проверяй ссылки на удалённые стадии и правила
35
+ маршрутизации; невалидная ссылка должна быть видна владельцу, а не молча выбирать соседнюю стадию.
@@ -1,231 +1,38 @@
1
- # 24. Pipeline Settings — глубокая конфигурация
1
+ # Расширенные правила CRM и маршрутизации
2
2
 
3
- > **Источник правды:** `ai-aniomaly/docs/ai-prompt-builder/24-pipeline-settings-deep.md` — копия для MCP doc-bridge (v1.5 Increment 6b). Синкать при изменении оригинала.
4
- >
5
- > ⚠️ **MCP-контекст:** это доменная справка, написанная для людей/админ-UI. В MCP-сессии ты выполняешь те же операции **через besales_* tools**, а не через UI (drag-n-drop, клики в админке). Где текст ниже говорит «клиент/админ делает X через UI» — это «что должно получиться»; механику бери из tool (напр. загрузка файла → `besales_file_upload_request`; документ в knowledge → `besales_knowledge_document_upload`; сайт → `besales_knowledge_website_add`) + из workflow-ресурсов. Внутренние ссылки `[NN-name.md]` — относительные пути исходной доки, через MCP НЕ резолвятся: ищи `besales://docs/<slug>` или concept-resource.
3
+ В Besales нет одного JSON-объекта «настройки воронки канала». Поведение разделено по владельцам,
4
+ чтобы изменение транспорта не переписывало CRM-логику и наоборот.
6
5
 
7
- ## 1. Назначение
6
+ ## Где живёт настройка
8
7
 
9
- `PipelineSettings` — расширение [14-pipeline-builder.md](14-pipeline-builder.md). Настройки 1:1 с `Platform`, отвечают за две группы поведения:
10
-
11
- 1. **Фильтр поиска существующих сделок** — когда новый клиент пишет, нужно ли искать его уже-имеющуюся сделку и как с ней поступить.
12
- 2. **Автопереход статусов** — 6 разных триггеров системного перемещения сделки по воронке.
13
-
14
- Базовый файл [14-pipeline-builder.md](14-pipeline-builder.md) описывал часть полей; здесь — **полная JSON-схема** со всеми 30+ полями.
15
-
16
- ## 2. Полная JSON-схема `PipelineSettings`
17
-
18
- ```json
19
- {
20
- "id": "uuid",
21
- "platformId": "<Platform.id>",
22
-
23
- // === FILTER SEARCH (поиск существующих сделок) ===
24
- "filterEnabled": true,
25
- "filterByPhoneEnabled": true,
26
- "filterByFieldEnabled": false,
27
- "filterByContactEnabled": false,
28
- "fieldId": null,
29
- "fieldEntityType": null,
30
- "valueType": null,
31
- "value": null,
32
- "actionOnFound": "LINK",
33
-
34
- // === CREATION FLAGS ===
35
- "createNewLead": true,
36
- "createNewContact": true,
37
-
38
- // === STATUS MOVEMENT (6 триггеров) ===
39
- "aiResponseMoveToStatus": 142,
40
- "aiResponseMoveToStatusPipelineId": 1234567,
41
- "aiResponseMoveToStatusCrmId": "<Crm.id>",
42
-
43
- "operatorSpeechMoveToStatus": 145,
44
- "operatorSpeechMoveToStatusPipelineId": 1234567,
45
- "operatorSpeechMoveToStatusCrmId": "<Crm.id>",
46
-
47
- "incomingMoveToStatus": 140,
48
- "incomingMoveToStatusPipelineId": 1234567,
49
- "incomingMoveToStatusCrmId": "<Crm.id>",
50
-
51
- "outgoingMoveToStatus": 141,
52
- "outgoingMoveToStatusPipelineId": 1234567,
53
- "outgoingMoveToStatusCrmId": "<Crm.id>",
54
-
55
- "messageSentMoveToStatus": null,
56
- "messageSentMoveToStatusPipelineId": null,
57
- "messageSentMoveToStatusCrmId": null,
58
-
59
- "userBlockedMoveToStatus": 199,
60
- "userBlockedMoveToStatusPipelineId": 1234567,
61
- "userBlockedMoveToStatusCrmId": "<Crm.id>",
62
-
63
- // Marker-статус покупки для /chats (не движение сделки)
64
- "saleStatus": 200,
65
- "saleStatusPipelineId": 1234567,
66
- "saleStatusCrmId": "<Crm.id>",
67
-
68
- // === GLOBAL ===
69
- "alwaysMoveToAiStatus": false,
70
- "preventBackwardMovement": true
71
- }
72
- ```
73
-
74
- ## 3. Группа: Фильтр поиска существующих сделок
75
-
76
- ### 3.1. Master switch
77
-
78
- `filterEnabled: true` — без этого ни один из под-флагов не работает.
79
-
80
- ### 3.2. Три режима поиска (взаимоисключающие, AI-сервис выбирает один)
81
-
82
- | Флаг | Поведение | Когда использовать |
83
- |---|---|---|
84
- | `filterByPhoneEnabled` | Искать сделку по полю `phone` контакта **И** по кастомным полям сделки, в которых есть телефон | По умолчанию для всех платформ с телефоном (Wazzup, Avito, SMS) |
85
- | `filterByFieldEnabled` | Искать по конкретному кастомному полю CRM | Когда у клиента CRM-поле «UTM» или «email», и нужно дедуплицировать по нему |
86
- | `filterByContactEnabled` | Полнотекстовый поиск через **контакт** CRM (AmoCRM Search Contact API) | Когда у клиента нет фиксированных полей, но нужен fuzzy-матч |
87
-
88
- ### 3.3. Параметры для `filterByFieldEnabled`
89
-
90
- ```json
91
- {
92
- "filterByFieldEnabled": true,
93
- "fieldId": "12345",
94
- "fieldEntityType": "CONTACT",
95
- "valueType": "SYSTEM_VARIABLE",
96
- "value": "phone"
97
- }
98
- ```
99
-
100
- | Поле | Тип | Описание |
101
- |---|---|---|
102
- | `fieldId` | string | ID кастомного поля в CRM (числовой ID) |
103
- | `fieldEntityType` | `'LEAD'` / `'CONTACT'` | Где искать поле — у сделки или у контакта |
104
- | `valueType` | enum `PipelineFilterValueType` | `CONSTANT` (искать по фиксированной строке) / `SYSTEM_VARIABLE` (брать значение из системной переменной типа `{phone}`) |
105
- | `value` | string | Либо константа, либо имя переменной (`phone`, `telegramId`, etc.) |
106
-
107
- ### 3.4. Действие при нахождении сделки
108
-
109
- `actionOnFound` — enum `PipelineFilterAction`:
110
-
111
- | Значение | Поведение |
112
- |---|---|
113
- | `LINK` | Привязать `ChatUser` к найденной сделке. Бот будет общаться с этой сделкой |
114
- | `IGNORE` | Игнорировать существующую сделку, создать новую (если `createNewLead=true`) |
115
-
116
- ### 3.5. Флаги создания
117
-
118
- | Флаг | Поведение | Default |
119
- |---|---|---|
120
- | `createNewLead` | Создать новую сделку, если ничего не найдено или `actionOnFound=IGNORE` | true |
121
- | `createNewContact` | Создать новый контакт, если ничего не найдено | true |
122
-
123
- > Если `createNewLead=false` и сделка не найдена → бот будет общаться без CRM-сделки. CRM-actions триггеров (`CRM_MOVE_STAGE`) silently не сработают.
124
-
125
- ## 4. Группа: Автопереход статусов
126
-
127
- `PipelineSettings` определяет **6 триггеров** автоматического перевода сделки по воронке. Каждый триггер — composite-FK на `CrmPipelineStatus` (3 поля: `<X>MoveToStatus`, `<X>MoveToStatusPipelineId`, `<X>MoveToStatusCrmId`).
128
-
129
- | Триггер | Когда срабатывает | Назначение |
130
- |---|---|---|
131
- | `aiResponseMoveToStatus` | После каждого ответа AI боту | Маркировка «бот говорил с клиентом» |
132
- | `operatorSpeechMoveToStatus` | После каждого сообщения от оператора-человека | Маркировка «оператор уже подключился» |
133
- | `incomingMoveToStatus` | При первом входящем сообщении от пользователя | Маркировка «появился новый запрос» |
134
- | `outgoingMoveToStatus` | При первом исходящем сообщении (например, follow-up) | Маркировка «бот написал первым» |
135
- | `messageSentMoveToStatus` | После любого исходящего сообщения (повторяется) | Аналитика «сколько касаний с клиентом» |
136
- | `userBlockedMoveToStatus` | Когда пользователь блокирует бота / пишет «STOP» | Архив для очистки воронки |
137
-
138
- `saleStatus` / `saleStatusPipelineId` / `saleStatusCrmId` настраиваются тем же способом через
139
- `crm_pipeline_behavior.status_movement`, но это marker для списка чатов, а не автопереход сделки.
140
- Если текущий `ChatUser.leadStatusId` совпадает с `saleStatus` своей платформы, `/chats` покажет
141
- shopping bag и фильтр «Купил» будет считать этот чат купленным.
142
-
143
- ### 4.1. Composite-FK
144
-
145
- В CRM статус идентифицируется тройкой: `(crmId, pipelineId, statusId)`. AI-сервис всегда заполняет все три поля или все три оставляет null. Заполнить только `<X>MoveToStatus` без `<X>MoveToStatusPipelineId` нельзя — runtime не поймёт, в какую воронку.
146
-
147
- ### 4.2. Конфликты и приоритеты
148
-
149
- | Конфликт | Поведение |
8
+ | Вопрос | Канонический владелец |
150
9
  |---|---|
151
- | Триггер `CRM_MOVE_STAGE` сработал ПЕРЕД ответом ИИ | После ответа ИИ применится `aiResponseMoveToStatus` (если задан) — может перезаписать только что выставленный статус |
152
- | `incomingMoveToStatus` И `aiResponseMoveToStatus` оба заданы | На входящем сначала переведётся в incoming-статус, потом — после ответа — в ai-response статус. Клиент видит две движухи в воронке |
153
- | `alwaysMoveToAiStatus=true` | Любой ai-response игнорирует текущую колонку и форсит переход в `aiResponseMoveToStatus` (даже если бот уже там) |
154
-
155
- ### 4.3. Связь с типами статусов (`CrmPipelineStatus.statusTypes[]`)
156
-
157
- | Триггер | Соответствующий `StatusType` |
158
- |---|---|
159
- | `incomingMoveToStatus` | `INCOMING` |
160
- | `outgoingMoveToStatus` | `OUTGOING` |
161
- | `messageSentMoveToStatus` | `MESSAGE_SENT` |
162
-
163
- > `CrmPipelineStatus.statusTypes` — массив, **может содержать несколько типов**. Например, статус «Бот общается» может быть и `INCOMING`, и `MESSAGE_SENT`. UI Pipeline Builder использует это для отметки колонок.
10
+ | Какие воронки использует агент | `agent_active_pipelines` |
11
+ | Какие стадии существуют во внешней CRM | `crm_pipeline_statuses` |
12
+ | Как поля CRM связаны с бизнес-смыслом | `crm_field_mappings` |
13
+ | Как выбирается агент | `agent_routing_rules` |
14
+ | Когда выполняется действие | `agent_action_activations` |
15
+ | Как ведёт себя транспорт | `channel_behavior_configs` |
164
16
 
165
- ## 5. Глобальные правила
17
+ ## Условия
166
18
 
167
- ### `alwaysMoveToAiStatus`
19
+ Маршрутизация, handoff, governance и активация используют один формат `ConditionGroupJson`, но
20
+ разные разрешённые профили полей. `ALL` и `ANY` задают комбинатор группы. Ссылка на переменную,
21
+ стадию или агента должна принадлежать тому же workspace и проходить сверку валидности.
168
22
 
169
- Если `true`: после **любого** ответа AI сделка форсированно переходит в `aiResponseMoveToStatus`, даже если она уже в колонке с включённым `isBotActive`. Это полезно, когда у клиента 5-10 «AI-колонок» и важно сводить всё в одну для аналитики.
23
+ Локальное правило с `channel_id` действует только в этом канале. При удалении канала оно
24
+ удаляется, а не становится глобальным. Агент, выбранный целью правила, не удаляется молча:
25
+ владелец сначала видит список блокирующих правил и меняет их явно.
170
26
 
171
- ### `preventBackwardMovement`
27
+ ## Переходы и создание записей
172
28
 
173
- Если `true`: автоматический move-to-status **не сработает**, если целевой статус имеет `sort` меньше текущего. Защита от бесконечного «маятника» (бот пишет → ai-response двигает назад → потом снова движение).
29
+ Не смешивай в одном флаге поиск существующей сделки, создание новой и смену стадии. Это отдельные
30
+ операции с разной идемпотентностью и ценой ошибки. Каждая внешняя запись связывается через
31
+ `crm_record_links`, а денежные и необратимые операции требуют отдельного права и аудита.
174
32
 
175
- > Работает per-pipeline (учитывается только в пределах одной воронки).
33
+ ## Диагностика
176
34
 
177
- ## 6. `PlatformPipeline` (M2M связь)
178
-
179
- Платформа может работать с **несколькими активными воронками одновременно**:
180
-
181
- ```json
182
- {
183
- "id": "uuid",
184
- "platformId": "<Platform.id>",
185
- "pipelineId": 1234567,
186
- "pipelineCrmId": "<Crm.id>",
187
- "sort": 0
188
- }
189
- ```
190
-
191
- Используется когда:
192
- - Один Telegram-бот ведёт лидов и в основную воронку, и в воронку «холодных».
193
- - Несколько воронок Bitrix24 (для разных продуктов).
194
-
195
- Без хотя бы одной записи `PlatformPipeline` все CRM-actions триггеров silently не сработают (платформа «не знает» в какую воронку кладть сделки).
196
-
197
- ## 7. Что AI-сервис описывает клиенту
198
-
199
- Стандартный workflow настройки Pipeline Settings:
200
-
201
- 1. **Подключите Crm** (AmoCRM/Bitrix24/GetCourse) — см. [12-crm-integration.md](12-crm-integration.md).
202
- 2. **Создайте `PlatformPipeline`** для каждой воронки, в которой бот должен работать.
203
- 3. **Включите `filterEnabled`** и выберите режим поиска (`filterByPhoneEnabled` для Wazzup/SMS, `filterByContactEnabled` для AmoCRM).
204
- 4. **Задайте `actionOnFound`** — обычно `LINK` (продолжить с существующей сделкой).
205
- 5. **Настройте 1-3 автоперехода**, которые вам реально нужны:
206
- - Минимум: `aiResponseMoveToStatus` для трекинга «бот ответил».
207
- - Часто: `incomingMoveToStatus` + `outgoingMoveToStatus` для разделения первичной воронки.
208
- - Реже: `userBlockedMoveToStatus` для архивирования.
209
- 6. **Не включайте всё подряд** — больше автопереходов = больше движений в воронке = операторы запутаются.
210
- 7. **`preventBackwardMovement=true`** — почти всегда нужен, защищает от глюков.
211
-
212
- ## 8. Граничные случаи
213
-
214
- | Ситуация | Поведение |
215
- |---|---|
216
- | `<X>MoveToStatus` указан, но не существует в CRM | Runtime логирует ошибку, переход не происходит |
217
- | `<X>MoveToStatusPipelineId` не совпадает с активной `PlatformPipeline` | Runtime отклонит переход (статус не из «своей» воронки) |
218
- | `filterByPhoneEnabled=true`, но у платформы нет телефона (Telegram Bot без shareContact) | Поиск не выполняется, ведёт себя как `filterEnabled=false` |
219
- | `actionOnFound=IGNORE` И `createNewLead=false` | Сделка не создаётся, бот общается «в воздух» — CRM-actions не сработают |
220
- | Несколько матчей в `filterByContactEnabled` | Берётся самая свежая сделка (по `updatedAt`) |
221
- | Клиент сменил `filterByFieldEnabled` на лету | Существующие связи `ChatUser ↔ Deal` не пересчитываются — только для новых |
222
-
223
- ## 9. Связь с другими подсистемами
224
-
225
- | Подсистема | Связь |
226
- |---|---|
227
- | **Pipeline Builder** ([14-pipeline-builder.md](14-pipeline-builder.md)) | Базовая часть — UI и `CrmPipelineStatus.statusTypes` |
228
- | **CRM** ([12-crm-integration.md](12-crm-integration.md)) | `Crm`, `CrmPipeline`, `CrmPipelineStatus`, поля контакта |
229
- | **Платформы** ([11-platforms.md](11-platforms.md)) | `Platform.dealMarkerType`, `responsibleAssigneeStrategy`, `sendToCrm` |
230
- | **Триггеры** ([04-triggers-and-actions.md](04-triggers-and-actions.md)) | `CRM_MOVE_STAGE` action — ручное переключение, может конфликтовать с автопереходами |
231
- | **Routing** ([06-routing.md](06-routing.md)) | `LEAD_STATUS` маршрутизация работает поверх той же `CrmPipelineStatus` модели |
35
+ Если правило не сработало, проверяй последовательно: актуальность CRM-каталога, валидность ссылок,
36
+ профиль condition-core, привязку агента к воронке, решение ActionGovernor и нормализованный исход
37
+ провайдера. Не лечи проблему копированием настроек в промпт — модель не является источником
38
+ истины для маршрутизации или CRM-ID.