@besales/mcp 0.48.0 → 1.0.0-beta.4

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 (604) hide show
  1. package/README.md +117 -163
  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 +54 -7
  23. package/dist/http/api-client.js +132 -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 +43 -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 +149 -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 -6
  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 +12389 -6657
  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 +81 -24
  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 -431
  147. package/dist/tools/definitions/broadcast-analytics.js.map +1 -1
  148. package/dist/tools/definitions/broadcast-scheduler.d.ts +10 -13
  149. package/dist/tools/definitions/broadcast-scheduler.js +196 -154
  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 +29 -39
  158. package/dist/tools/definitions/crm-platform.js +249 -352
  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/dialogue-reprocess.d.ts +5 -0
  197. package/dist/tools/definitions/dialogue-reprocess.js +107 -0
  198. package/dist/tools/definitions/dialogue-reprocess.js.map +1 -0
  199. package/dist/tools/definitions/edit-version-transport.test-fixtures.d.ts +13 -0
  200. package/dist/tools/definitions/edit-version-transport.test-fixtures.js +292 -0
  201. package/dist/tools/definitions/edit-version-transport.test-fixtures.js.map +1 -0
  202. package/dist/tools/definitions/edit-version.d.ts +5 -0
  203. package/dist/tools/definitions/edit-version.js +20 -0
  204. package/dist/tools/definitions/edit-version.js.map +1 -0
  205. package/dist/tools/definitions/external-api-channels.js +17 -15
  206. package/dist/tools/definitions/external-api-channels.js.map +1 -1
  207. package/dist/tools/definitions/feedback-document-access.d.ts +16 -0
  208. package/dist/tools/definitions/feedback-document-access.js +63 -0
  209. package/dist/tools/definitions/feedback-document-access.js.map +1 -0
  210. package/dist/tools/definitions/fixtures/shipped-setup-status.d.ts +3 -0
  211. package/dist/tools/definitions/fixtures/shipped-setup-status.js +9 -0
  212. package/dist/tools/definitions/fixtures/shipped-setup-status.js.map +1 -0
  213. package/dist/tools/definitions/follow-up-config.d.ts +79 -0
  214. package/dist/tools/definitions/follow-up-config.js +258 -0
  215. package/dist/tools/definitions/follow-up-config.js.map +1 -0
  216. package/dist/tools/definitions/follow-up-funnel-test.d.ts +4 -3
  217. package/dist/tools/definitions/follow-up-funnel-test.js +65 -52
  218. package/dist/tools/definitions/follow-up-funnel-test.js.map +1 -1
  219. package/dist/tools/definitions/follow-up-promotion-instructions.d.ts +2 -0
  220. package/dist/tools/definitions/follow-up-promotion-instructions.js +7 -0
  221. package/dist/tools/definitions/follow-up-promotion-instructions.js.map +1 -0
  222. package/dist/tools/definitions/follow-up-setup.d.ts +4 -28
  223. package/dist/tools/definitions/follow-up-setup.js +20 -87
  224. package/dist/tools/definitions/follow-up-setup.js.map +1 -1
  225. package/dist/tools/definitions/follow-up.d.ts +20 -122
  226. package/dist/tools/definitions/follow-up.js +200 -357
  227. package/dist/tools/definitions/follow-up.js.map +1 -1
  228. package/dist/tools/definitions/followup-getcourse-compat.d.ts +29 -0
  229. package/dist/tools/definitions/followup-getcourse-compat.js +62 -0
  230. package/dist/tools/definitions/followup-getcourse-compat.js.map +1 -0
  231. package/dist/tools/definitions/followup-sequence-config.schema.d.ts +10 -0
  232. package/dist/tools/definitions/followup-sequence-config.schema.js +14 -0
  233. package/dist/tools/definitions/followup-sequence-config.schema.js.map +1 -0
  234. package/dist/tools/definitions/funnel-analytics.d.ts +18 -0
  235. package/dist/tools/definitions/funnel-analytics.js +150 -0
  236. package/dist/tools/definitions/funnel-analytics.js.map +1 -0
  237. package/dist/tools/definitions/getcourse-anchor-refresh.d.ts +5 -9
  238. package/dist/tools/definitions/getcourse-anchor-refresh.js +26 -31
  239. package/dist/tools/definitions/getcourse-anchor-refresh.js.map +1 -1
  240. package/dist/tools/definitions/getcourse-cold-outbound-settings.d.ts +46 -0
  241. package/dist/tools/definitions/getcourse-cold-outbound-settings.js +37 -0
  242. package/dist/tools/definitions/getcourse-cold-outbound-settings.js.map +1 -0
  243. package/dist/tools/definitions/getcourse-cold-welcome.d.ts +14 -29
  244. package/dist/tools/definitions/getcourse-cold-welcome.js +190 -253
  245. package/dist/tools/definitions/getcourse-cold-welcome.js.map +1 -1
  246. package/dist/tools/definitions/getcourse-wave-welcome.messages.d.ts +10 -0
  247. package/dist/tools/definitions/getcourse-wave-welcome.messages.js +17 -0
  248. package/dist/tools/definitions/getcourse-wave-welcome.messages.js.map +1 -0
  249. package/dist/tools/definitions/help.js.map +1 -1
  250. package/dist/tools/definitions/icp-import-source.d.ts +75 -0
  251. package/dist/tools/definitions/icp-import-source.js +88 -0
  252. package/dist/tools/definitions/icp-import-source.js.map +1 -0
  253. package/dist/tools/definitions/inbound-analytics.d.ts +13 -0
  254. package/dist/tools/definitions/inbound-analytics.js +55 -0
  255. package/dist/tools/definitions/inbound-analytics.js.map +1 -0
  256. package/dist/tools/definitions/instagram-comment.templates.d.ts +19 -0
  257. package/dist/tools/definitions/instagram-comment.templates.js +34 -0
  258. package/dist/tools/definitions/instagram-comment.templates.js.map +1 -0
  259. package/dist/tools/definitions/instagram-settings-compat.d.ts +33 -0
  260. package/dist/tools/definitions/instagram-settings-compat.js +7 -0
  261. package/dist/tools/definitions/instagram-settings-compat.js.map +1 -0
  262. package/dist/tools/definitions/knowledge-chunking.d.ts +42 -0
  263. package/dist/tools/definitions/knowledge-chunking.js +83 -0
  264. package/dist/tools/definitions/knowledge-chunking.js.map +1 -0
  265. package/dist/tools/definitions/knowledge-space-search-fields.d.ts +12 -0
  266. package/dist/tools/definitions/knowledge-space-search-fields.js +30 -0
  267. package/dist/tools/definitions/knowledge-space-search-fields.js.map +1 -0
  268. package/dist/tools/definitions/knowledge.d.ts +24 -14
  269. package/dist/tools/definitions/knowledge.js +342 -233
  270. package/dist/tools/definitions/knowledge.js.map +1 -1
  271. package/dist/tools/definitions/legacy-trigger-repeat.d.ts +17 -0
  272. package/dist/tools/definitions/legacy-trigger-repeat.js +53 -0
  273. package/dist/tools/definitions/legacy-trigger-repeat.js.map +1 -0
  274. package/dist/tools/definitions/link-tracking.d.ts +8 -0
  275. package/dist/tools/definitions/link-tracking.js +141 -38
  276. package/dist/tools/definitions/link-tracking.js.map +1 -1
  277. package/dist/tools/definitions/mailing-variant-content.d.ts +75 -0
  278. package/dist/tools/definitions/mailing-variant-content.js +73 -0
  279. package/dist/tools/definitions/mailing-variant-content.js.map +1 -0
  280. package/dist/tools/definitions/model-comparison.d.ts +2 -1
  281. package/dist/tools/definitions/model-comparison.js +4 -5
  282. package/dist/tools/definitions/model-comparison.js.map +1 -1
  283. package/dist/tools/definitions/money-currency.d.ts +5 -0
  284. package/dist/tools/definitions/money-currency.js +10 -0
  285. package/dist/tools/definitions/money-currency.js.map +1 -0
  286. package/dist/tools/definitions/operator-workflow.d.ts +5 -5
  287. package/dist/tools/definitions/operator-workflow.js +80 -27
  288. package/dist/tools/definitions/operator-workflow.js.map +1 -1
  289. package/dist/tools/definitions/platform-funnel-analytics.d.ts +42 -0
  290. package/dist/tools/definitions/platform-funnel-analytics.js +72 -0
  291. package/dist/tools/definitions/platform-funnel-analytics.js.map +1 -0
  292. package/dist/tools/definitions/platform-getcourse-wave-field-bindings.d.ts +42 -0
  293. package/dist/tools/definitions/platform-getcourse-wave-field-bindings.js +51 -0
  294. package/dist/tools/definitions/platform-getcourse-wave-field-bindings.js.map +1 -0
  295. package/dist/tools/definitions/platform-settings-limits.d.ts +5 -0
  296. package/dist/tools/definitions/platform-settings-limits.js +6 -0
  297. package/dist/tools/definitions/platform-settings-limits.js.map +1 -0
  298. package/dist/tools/definitions/platform-settings-shipped-form.d.ts +37 -0
  299. package/dist/tools/definitions/platform-settings-shipped-form.js +310 -0
  300. package/dist/tools/definitions/platform-settings-shipped-form.js.map +1 -0
  301. package/dist/tools/definitions/platform-settings-update.d.ts +300 -0
  302. package/dist/tools/definitions/platform-settings-update.js +134 -0
  303. package/dist/tools/definitions/platform-settings-update.js.map +1 -0
  304. package/dist/tools/definitions/{getcourse-wave.d.ts → platform-setup-wave.d.ts} +75 -6
  305. package/dist/tools/definitions/platform-setup-wave.js +1079 -0
  306. package/dist/tools/definitions/platform-setup-wave.js.map +1 -0
  307. package/dist/tools/definitions/platform-setup.d.ts +697 -224
  308. package/dist/tools/definitions/platform-setup.js +313 -752
  309. package/dist/tools/definitions/platform-setup.js.map +1 -1
  310. package/dist/tools/definitions/platform-widget-page-rules.schema.d.ts +10 -0
  311. package/dist/tools/definitions/platform-widget-page-rules.schema.js +7 -0
  312. package/dist/tools/definitions/platform-widget-page-rules.schema.js.map +1 -0
  313. package/dist/tools/definitions/prompt-authoring.constants.d.ts +2 -0
  314. package/dist/tools/definitions/prompt-authoring.constants.js +3 -0
  315. package/dist/tools/definitions/prompt-authoring.constants.js.map +1 -0
  316. package/dist/tools/definitions/prompt-batch-controls.d.ts +5 -0
  317. package/dist/tools/definitions/prompt-batch-controls.js +40 -0
  318. package/dist/tools/definitions/prompt-batch-controls.js.map +1 -0
  319. package/dist/tools/definitions/prompt-draft-authoring.d.ts +5 -0
  320. package/dist/tools/definitions/prompt-draft-authoring.js +24 -0
  321. package/dist/tools/definitions/prompt-draft-authoring.js.map +1 -0
  322. package/dist/tools/definitions/prompt-text-projection.d.ts +11 -0
  323. package/dist/tools/definitions/prompt-text-projection.js +62 -0
  324. package/dist/tools/definitions/prompt-text-projection.js.map +1 -0
  325. package/dist/tools/definitions/reviewer-paid.d.ts +19 -0
  326. package/dist/tools/definitions/reviewer-paid.js +115 -0
  327. package/dist/tools/definitions/reviewer-paid.js.map +1 -0
  328. package/dist/tools/definitions/routing-condition-projection.d.ts +31 -0
  329. package/dist/tools/definitions/routing-condition-projection.js +97 -0
  330. package/dist/tools/definitions/routing-condition-projection.js.map +1 -0
  331. package/dist/tools/definitions/schedule-selection-hints.d.ts +3 -0
  332. package/dist/tools/definitions/schedule-selection-hints.js +42 -0
  333. package/dist/tools/definitions/schedule-selection-hints.js.map +1 -0
  334. package/dist/tools/definitions/{scheduled-tasks.d.ts → scheduled-task-alias.d.ts} +12 -10
  335. package/dist/tools/definitions/scheduled-task-alias.js +207 -0
  336. package/dist/tools/definitions/scheduled-task-alias.js.map +1 -0
  337. package/dist/tools/definitions/session.js +3 -3
  338. package/dist/tools/definitions/session.js.map +1 -1
  339. package/dist/tools/definitions/setup-init-operation.schema.d.ts +2 -0
  340. package/dist/tools/definitions/setup-init-operation.schema.js +6 -0
  341. package/dist/tools/definitions/setup-init-operation.schema.js.map +1 -0
  342. package/dist/tools/definitions/shared-input.helpers.d.ts +51 -0
  343. package/dist/tools/definitions/shared-input.helpers.js +323 -0
  344. package/dist/tools/definitions/shared-input.helpers.js.map +1 -0
  345. package/dist/tools/definitions/shared.d.ts +401 -307
  346. package/dist/tools/definitions/shared.js +430 -652
  347. package/dist/tools/definitions/shared.js.map +1 -1
  348. package/dist/tools/definitions/shipped-output-names.d.ts +19 -0
  349. package/dist/tools/definitions/shipped-output-names.js +123 -0
  350. package/dist/tools/definitions/shipped-output-names.js.map +1 -0
  351. package/dist/tools/definitions/task-state.d.ts +4 -4
  352. package/dist/tools/definitions/task-state.js +2 -1
  353. package/dist/tools/definitions/task-state.js.map +1 -1
  354. package/dist/tools/definitions/telegram-personal-capacity.d.ts +4 -0
  355. package/dist/tools/definitions/telegram-personal-capacity.js +18 -0
  356. package/dist/tools/definitions/telegram-personal-capacity.js.map +1 -0
  357. package/dist/tools/definitions/telegram-personal-management.d.ts +34 -0
  358. package/dist/tools/definitions/telegram-personal-management.js +139 -0
  359. package/dist/tools/definitions/telegram-personal-management.js.map +1 -0
  360. package/dist/tools/definitions/telegram-personal-restrictions.d.ts +19 -0
  361. package/dist/tools/definitions/telegram-personal-restrictions.js +109 -0
  362. package/dist/tools/definitions/telegram-personal-restrictions.js.map +1 -0
  363. package/dist/tools/definitions/telegram-pool-policy.d.ts +8 -0
  364. package/dist/tools/definitions/telegram-pool-policy.js +56 -0
  365. package/dist/tools/definitions/telegram-pool-policy.js.map +1 -0
  366. package/dist/tools/definitions/touch-history-alias.d.ts +4 -0
  367. package/dist/tools/definitions/touch-history-alias.js +99 -0
  368. package/dist/tools/definitions/touch-history-alias.js.map +1 -0
  369. package/dist/tools/definitions/trigger-action-item.schema.d.ts +254 -0
  370. package/dist/tools/definitions/trigger-action-item.schema.js +121 -0
  371. package/dist/tools/definitions/trigger-action-item.schema.js.map +1 -0
  372. package/dist/tools/definitions/trigger-argument.schema.d.ts +14 -0
  373. package/dist/tools/definitions/trigger-argument.schema.js +23 -0
  374. package/dist/tools/definitions/trigger-argument.schema.js.map +1 -0
  375. package/dist/tools/definitions/trigger-claim-alias.d.ts +10 -0
  376. package/dist/tools/definitions/trigger-claim-alias.js +90 -0
  377. package/dist/tools/definitions/trigger-claim-alias.js.map +1 -0
  378. package/dist/tools/definitions/trigger-echo-projection.d.ts +1 -0
  379. package/dist/tools/definitions/trigger-echo-projection.js +41 -0
  380. package/dist/tools/definitions/trigger-echo-projection.js.map +1 -0
  381. package/dist/tools/definitions/trigger-upsert.tool.d.ts +41 -0
  382. package/dist/tools/definitions/trigger-upsert.tool.js +159 -0
  383. package/dist/tools/definitions/trigger-upsert.tool.js.map +1 -0
  384. package/dist/tools/definitions/v15-port-descriptions.d.ts +11 -0
  385. package/dist/tools/definitions/v15-port-descriptions.js +30 -0
  386. package/dist/tools/definitions/v15-port-descriptions.js.map +1 -0
  387. package/dist/tools/definitions/variables.d.ts +44 -0
  388. package/dist/tools/definitions/variables.js +310 -0
  389. package/dist/tools/definitions/variables.js.map +1 -0
  390. package/dist/tools/definitions/voice-action-input.d.ts +9 -0
  391. package/dist/tools/definitions/voice-action-input.js +141 -0
  392. package/dist/tools/definitions/voice-action-input.js.map +1 -0
  393. package/dist/tools/definitions/widget-customization-compat.d.ts +51 -0
  394. package/dist/tools/definitions/widget-customization-compat.js +23 -0
  395. package/dist/tools/definitions/widget-customization-compat.js.map +1 -0
  396. package/dist/tools/definitions.d.ts +1134 -617
  397. package/dist/tools/definitions.js +63 -27
  398. package/dist/tools/definitions.js.map +1 -1
  399. package/dist/tools/description-localization.js +3 -2
  400. package/dist/tools/description-localization.js.map +1 -1
  401. package/dist/tools/follow-up-request.d.ts +19 -0
  402. package/dist/tools/follow-up-request.js +81 -0
  403. package/dist/tools/follow-up-request.js.map +1 -0
  404. package/dist/tools/followup-revision.d.ts +4 -0
  405. package/dist/tools/followup-revision.js +29 -0
  406. package/dist/tools/followup-revision.js.map +1 -0
  407. package/dist/tools/incomplete-list.js +4 -0
  408. package/dist/tools/incomplete-list.js.map +1 -1
  409. package/dist/tools/inventory.js +47 -11
  410. package/dist/tools/inventory.js.map +1 -1
  411. package/dist/tools/operation-recovery.d.ts +4 -0
  412. package/dist/tools/operation-recovery.js +33 -0
  413. package/dist/tools/operation-recovery.js.map +1 -0
  414. package/dist/tools/registry-mapping-primary.cases.d.ts +2 -0
  415. package/dist/tools/registry-mapping-primary.cases.js +765 -0
  416. package/dist/tools/registry-mapping-primary.cases.js.map +1 -0
  417. package/dist/tools/registry-mapping-secondary.cases.d.ts +2 -0
  418. package/dist/tools/registry-mapping-secondary.cases.js +626 -0
  419. package/dist/tools/registry-mapping-secondary.cases.js.map +1 -0
  420. package/dist/tools/registry-mapping.cases.d.ts +8 -0
  421. package/dist/tools/registry-mapping.cases.js +170 -0
  422. package/dist/tools/registry-mapping.cases.js.map +1 -0
  423. package/dist/tools/registry-test-fixtures.d.ts +50 -0
  424. package/dist/tools/registry-test-fixtures.js +120 -0
  425. package/dist/tools/registry-test-fixtures.js.map +1 -0
  426. package/dist/tools/registry.d.ts +2 -0
  427. package/dist/tools/registry.js +84 -52
  428. package/dist/tools/registry.js.map +1 -1
  429. package/dist/tools/result.d.ts +1 -0
  430. package/dist/tools/result.js +90 -22
  431. package/dist/tools/result.js.map +1 -1
  432. package/dist/tools/toolsets.d.ts +16 -0
  433. package/dist/tools/toolsets.js +25 -1
  434. package/dist/tools/toolsets.js.map +1 -1
  435. package/dist/types/api-contract.gen.d.ts +131892 -22453
  436. package/dist/utils/credential-signatures.d.ts +3 -0
  437. package/dist/utils/credential-signatures.js +10 -0
  438. package/dist/utils/credential-signatures.js.map +1 -0
  439. package/dist/utils/data-source-column-name.d.ts +10 -0
  440. package/dist/utils/data-source-column-name.js +36 -0
  441. package/dist/utils/data-source-column-name.js.map +1 -0
  442. package/dist/utils/logger.d.ts +1 -0
  443. package/dist/utils/logger.js +32 -8
  444. package/dist/utils/logger.js.map +1 -1
  445. package/dist/utils/secret-read-boundary.d.ts +2 -0
  446. package/dist/utils/secret-read-boundary.js +88 -0
  447. package/dist/utils/secret-read-boundary.js.map +1 -0
  448. package/dist/utils/setup-secrets.d.ts +4 -0
  449. package/dist/utils/setup-secrets.js +40 -0
  450. package/dist/utils/setup-secrets.js.map +1 -0
  451. package/docs/agent-models.md +9 -0
  452. package/docs/agent-usage-guide.full.ru.md +1 -4
  453. package/docs/analytics-contract.md +67 -0
  454. package/docs/async-operation-lifecycle.md +10 -3
  455. package/docs/connect.ru.md +144 -4
  456. package/docs/contact-company-profile.md +17 -0
  457. package/docs/contact-recommendations.md +7 -0
  458. package/docs/crm-stage-pool.md +73 -0
  459. package/docs/customer-data.md +61 -0
  460. package/docs/dialogue-reprocess.md +37 -0
  461. package/docs/edit-versions.md +36 -0
  462. package/docs/failure-semantics.md +17 -9
  463. package/docs/help-navigation.md +15 -42
  464. package/docs/host-compatibility-matrix.md +72 -93
  465. package/docs/host-setup.md +33 -35
  466. package/docs/invariants/public-api-and-contracts.md +16 -0
  467. package/docs/legacy-action-settings.md +21 -0
  468. package/docs/main-transfer-dependencies.md +38 -0
  469. package/docs/mcp2-parity.md +50 -0
  470. package/docs/modules/analytics.md +79 -0
  471. package/docs/modules/besales-mcp.md +144 -0
  472. package/docs/modules/dialog-review-report.md +38 -0
  473. package/docs/modules/dialogue-followup-adapters.md +39 -0
  474. package/docs/modules/message-reactions.md +17 -0
  475. package/docs/modules/network-mode.md +284 -0
  476. package/docs/modules/prompt-batch-and-dialogue-controls.md +69 -0
  477. package/docs/pii-policy.md +21 -16
  478. package/docs/response-size-budget.md +197 -7
  479. package/docs/secret-read-boundary.md +102 -0
  480. package/docs/task-state.md +7 -2
  481. package/docs/telegram-personal-management.md +50 -0
  482. package/docs/telegram-personal-restrictions.md +87 -0
  483. package/docs/telegram-pool-policy.md +19 -0
  484. package/docs/tool-effects.md +15 -9
  485. package/docs/tool-surface.md +205 -4
  486. package/docs/voice-actions-and-inbox.md +95 -0
  487. package/docs/wazzup-instagram-comments.md +26 -0
  488. package/package.json +17 -10
  489. package/scripts/api-source-loader.spec.mjs +40 -0
  490. package/scripts/audit-bridge-controls.mjs +129 -0
  491. package/scripts/audit-revert-mutants.mjs +107 -0
  492. package/scripts/bridge-api-input.spec.mjs +98 -0
  493. package/scripts/bridge-controls-mutants.mjs +130 -0
  494. package/scripts/brx3-shipped-refusals.spec.mjs +149 -0
  495. package/scripts/brx4-ledger-payload.spec.mjs +127 -0
  496. package/scripts/build-onprem.mjs +108 -0
  497. package/scripts/connect-clients.sh +141 -0
  498. package/scripts/connect-scopes.mjs +166 -0
  499. package/scripts/connect-scopes.spec.mjs +83 -0
  500. package/scripts/emit-personal-link-carrier.mjs +31 -0
  501. package/scripts/emit-setup-init-schemas.mjs +24 -0
  502. package/scripts/emit-tool-routes.mjs +878 -0
  503. package/scripts/emit-tool-routes.spec.mjs +300 -0
  504. package/scripts/followup-registry.spec.mjs +107 -0
  505. package/scripts/generate-crm-rotation-contract.mjs +98 -0
  506. package/scripts/generate-followup-session-contract.mjs +16 -0
  507. package/scripts/getcourse-text-source.spec.mjs +110 -0
  508. package/scripts/icp-import-verification/mutate.cjs +70 -0
  509. package/scripts/import-secret-read-contract.mjs +53 -0
  510. package/scripts/install-claude-desktop.js +1 -1
  511. package/scripts/lag-decisions.mjs +37 -0
  512. package/scripts/lag-decisions.spec.mjs +87 -0
  513. package/scripts/lag-open-task-owners.mjs +46 -0
  514. package/scripts/lag-open-task-owners.spec.mjs +78 -0
  515. package/scripts/lag-payload.mjs +10 -0
  516. package/scripts/legacy-action-lag.spec.mjs +22 -0
  517. package/scripts/legacy-field-refusal.shipped.spec.mjs +99 -0
  518. package/scripts/mcpcompat-handler.mjs +34 -0
  519. package/scripts/mcpcompat-loader.mjs +36 -0
  520. package/scripts/mcpcompat-typescript.mjs +3 -0
  521. package/scripts/platform-settings-shipped-parity.spec.mjs +89 -0
  522. package/scripts/prbr-round1-recheck.spec.mjs +605 -0
  523. package/scripts/prbr-shipped-compatibility.spec.mjs +276 -0
  524. package/scripts/publish-mcp-registry.mjs +98 -0
  525. package/scripts/publish-mcp-registry.spec.mjs +68 -0
  526. package/scripts/record-scheduled-task-call.mjs +26 -0
  527. package/scripts/refusal-probe.mjs +17 -0
  528. package/scripts/refusal-probe.spec.mjs +29 -0
  529. package/scripts/registry-diff.mjs +502 -0
  530. package/scripts/registry-diff.spec.mjs +787 -0
  531. package/scripts/request-query.mjs +43 -0
  532. package/scripts/request-query.spec.mjs +82 -0
  533. package/scripts/route-lag.mjs +23 -0
  534. package/scripts/route-lag.spec.mjs +30 -0
  535. package/scripts/sample-args.mjs +174 -0
  536. package/scripts/sample-args.spec.mjs +160 -0
  537. package/scripts/shipped-definitions.mjs +197 -0
  538. package/scripts/shipped-definitions.spec.mjs +57 -0
  539. package/scripts/shipped-inputs.spec.mjs +136 -0
  540. package/scripts/shipped-recordings.spec.mjs +19 -0
  541. package/scripts/shipped-ref.d.mts +5 -0
  542. package/scripts/shipped-ref.mjs +20 -0
  543. package/scripts/shipped-ref.spec.mjs +59 -0
  544. package/scripts/shipped-registry.mjs +107 -0
  545. package/scripts/shipped-sample-candidates.mjs +69 -0
  546. package/scripts/shipped-sample-candidates.spec.mjs +117 -0
  547. package/scripts/shipped-sample.mjs +871 -0
  548. package/scripts/shipped-sample.spec.mjs +451 -0
  549. package/scripts/sync-agent-model-schemas.mjs +72 -0
  550. package/scripts/sync-api-contracts.mjs +85 -0
  551. package/scripts/sync-api-contracts.spec.mjs +144 -0
  552. package/scripts/sync-contract-ledger-schemas.mjs +161 -0
  553. package/scripts/sync-crm-stage-pool-schema.mjs +85 -0
  554. package/scripts/sync-prompt-draft-schema.mjs +92 -0
  555. package/scripts/sync-route-map.mjs +94 -0
  556. package/scripts/sync-schema-descriptions.mjs +25 -0
  557. package/scripts/sync-tool-inventory.mjs +27 -0
  558. package/scripts/sync-trigger-argument-schema.mjs +97 -0
  559. package/scripts/sync-trigger-argument-schema.spec.mjs +91 -0
  560. package/scripts/sync-trigger-event-schema.mjs +20 -0
  561. package/scripts/sync-trigger-repeat-mapping.mjs +12 -0
  562. package/scripts/sync-trigger-task-schema.mjs +45 -0
  563. package/scripts/sync-voice-actions-contract.mjs +67 -0
  564. package/scripts/sync-voice-actions-tools.mjs +97 -0
  565. package/scripts/sync-wave-id-schemas.mjs +55 -0
  566. package/scripts/telegram-personal-confirmation-mutants.mjs +74 -0
  567. package/scripts/tool-input-schemas.mjs +46 -0
  568. package/scripts/tool-input-schemas.spec.mjs +50 -0
  569. package/scripts/verify-followup-adapters.mjs +235 -0
  570. package/scripts/verify-secret-read-import.mjs +84 -0
  571. package/scripts/verify-secret-read-mutants.mjs +143 -0
  572. package/dist/tools/definitions/analytics.d.ts +0 -40
  573. package/dist/tools/definitions/analytics.js +0 -233
  574. package/dist/tools/definitions/analytics.js.map +0 -1
  575. package/dist/tools/definitions/broadcast-mailing-variants.d.ts +0 -41
  576. package/dist/tools/definitions/broadcast-mailing-variants.js +0 -194
  577. package/dist/tools/definitions/broadcast-mailing-variants.js.map +0 -1
  578. package/dist/tools/definitions/dialogue-audit.d.ts +0 -38
  579. package/dist/tools/definitions/dialogue-audit.js +0 -292
  580. package/dist/tools/definitions/dialogue-audit.js.map +0 -1
  581. package/dist/tools/definitions/getcourse-wave.js +0 -519
  582. package/dist/tools/definitions/getcourse-wave.js.map +0 -1
  583. package/dist/tools/definitions/operational-overview.d.ts +0 -3
  584. package/dist/tools/definitions/operational-overview.js +0 -23
  585. package/dist/tools/definitions/operational-overview.js.map +0 -1
  586. package/dist/tools/definitions/scheduled-tasks.js +0 -173
  587. package/dist/tools/definitions/scheduled-tasks.js.map +0 -1
  588. package/dist/tools/definitions/trigger-contact-claims.d.ts +0 -7
  589. package/dist/tools/definitions/trigger-contact-claims.js +0 -60
  590. package/dist/tools/definitions/trigger-contact-claims.js.map +0 -1
  591. package/dist/tools/registry-mapping-cases-core.d.ts +0 -38
  592. package/dist/tools/registry-mapping-cases-core.js +0 -963
  593. package/dist/tools/registry-mapping-cases-core.js.map +0 -1
  594. package/dist/tools/registry-mapping-cases-platform.d.ts +0 -2
  595. package/dist/tools/registry-mapping-cases-platform.js +0 -1052
  596. package/dist/tools/registry-mapping-cases-platform.js.map +0 -1
  597. package/dist/tools/trigger-action-config.d.ts +0 -49
  598. package/dist/tools/trigger-action-config.js +0 -171
  599. package/dist/tools/trigger-action-config.js.map +0 -1
  600. package/docs/evals/model-behavior-scorecard.md +0 -80
  601. package/docs/operation-coverage.md +0 -114
  602. package/scripts/mock-credentials.js +0 -77
  603. package/scripts/model-eval-server.js +0 -213
  604. package/scripts/run-model-eval.js +0 -447
@@ -1,519 +1,149 @@
1
- # 11. Платформы (каналы связи)
2
-
3
- > **Источник правды:** `ai-aniomaly/docs/ai-prompt-builder/11-platforms.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.
6
-
7
- ## 1. Назначение
8
-
9
- `Platform` — это «канал», через который бот общается с пользователями. Каждая платформа — один внешний account/bot/instance. Animaly поддерживает **13 типов** платформ (`PlatformType`): Telegram Bot, Telegram Personal, Wazzup (WhatsApp), Avito, Instagram DM, VKontakte, SmsGorod (SMS), Web Widget, Bitrix24 Bot, Salebot, **GetCourse**, Telephony и External API.
10
-
11
- > Старые цифры «10» и «11» устарели. GetCourse, Telephony и External API — самостоятельные значения `PlatformType`. Наличие типа в runtime не означает, что MCP умеет провизионировать его: актуальный поддерживаемый набор возвращает схема `besales_platform_create_init`.
12
-
13
- ## 2. Общая структура `Platform`
14
-
15
- ```json
16
- {
17
- "id": "uuid",
18
- "type": "TelegramBot",
19
- "name": "Главный Telegram-бот",
20
- "isActive": true,
21
- "isAiEnabled": true,
22
- "timezone": "Europe/Moscow",
23
- "offMessage": "Бот временно недоступен. Пожалуйста, попробуйте позже.",
24
- "workspaceId": "<workspaceId>",
25
-
26
- // Поля, специфичные для каждого type — см. ниже
27
- "config": null,
28
- "botToken": "...",
29
-
30
- "isUserFilterEnabled": false,
31
- "filteredUserIds": [],
32
-
33
- "useDynamicVariables": false,
34
- "clearDynamicVarsOnHistoryClear": true,
35
-
36
- "responsibleAssigneeStrategy": "KEEP",
37
- "fixedResponsibleId": null,
38
-
39
- "sendToCrm": false,
40
- "useCrossPlatformHistory": false,
41
-
42
- "sendStartNoteToCrm": false,
43
- "sendFailedNoteToCrm": false,
44
- "sendOperatorTakeoverNoteToCrm": false,
45
- "sendFinishAutoNoteToCrm": false,
46
-
47
- "finishAutoEnabled": false,
48
- "finishAutoDays": 7,
49
-
50
- "dealMarkerType": "NONE",
51
- "dealMarkerValue": null
52
- }
53
- ```
54
-
55
- ### Общие поля (для всех платформ)
56
-
57
- | Поле | Дефолт | Описание |
58
- |---|---|---|
59
- | `type` | — | enum `PlatformType`. Определяет, как платформа подключается. |
60
- | `name` | null | Пользовательское название (для UI). |
61
- | `isActive` | false | Включён ли канал. |
62
- | `isAiEnabled` | true | Работает ли AI на этой платформе. Если `false` — все сообщения уходят оператору. |
63
- | `timezone` | `"Europe/Moscow"` | Таймзона для расписаний и `{currentTime}`. |
64
- | `offMessage` | `"Бот временно недоступен..."` | Что отвечать, если `isActive=false`. |
65
- | `useDynamicVariables` | false | Можно ли использовать `ChatUser.dynamicVariables`. |
66
- | `clearDynamicVarsOnHistoryClear` | true | Очищать ли динамические переменные при очистке истории. |
67
- | `responsibleAssigneeStrategy` | `KEEP` | Стратегия выбора ответственного. |
68
- | `sendToCrm` | false | Отправлять ли сообщения от бота в CRM (Bitrix24 Open Line, AmoCRM Chat API). |
69
- | `useCrossPlatformHistory` | false | Использовать историю из всех платформ `UnifiedCustomer`. |
70
- | `dealMarkerType` | `NONE` | Маркировка сделок: `NONE` / `TAG` / `CUSTOM_FIELD`. |
71
- | `inboundDealFilterEnabled` / `inboundDealFilterType` / `inboundDealFilterValue` / `inboundDealFilterFieldId` | `false` / `NONE` | **GetCourse only**: агент отвечает ТОЛЬКО контактам, у которых в активной сделке есть поле=значение (`CUSTOM_FIELD` + `fieldId`) или тег (`TAG`). Не прошёл → сообщение сохраняется + уходит в CRM, AI молчит (fail-closed). Включённый фильтр требует `type≠NONE` + `value` (для `CUSTOM_FIELD` ещё `fieldId`). Ставится через `crm_behavior` в `besales_platform_settings_update` (dangerous → нужен `explicit_confirmation`). |
72
-
73
- ### Workspace-scoped API
74
-
75
- Legacy endpoints `GET /api/platforms` и `POST /api/platforms` берут `workspaceId` из JWT.
76
- Для экранов, где workspace выбран явно в UI, используется route-scoped вариант:
77
-
78
- | Endpoint | Назначение |
79
- |---|---|
80
- | `GET /api/workspace/:workspaceId/platforms` | Список платформ выбранного workspace для текущего пользователя. |
81
- | `POST /api/workspace/:workspaceId/platforms` | Создание платформы в выбранном workspace. |
82
-
83
- Оба endpoint проверяют права пользователя в `:workspaceId` через `PermissionsService`:
84
- `PLATFORM_READ` для чтения и `PLATFORM_CREATE` для создания. Это защищает сценарии, где
85
- access token ещё содержит старый workspace, а интерфейс уже переключился на другой.
86
-
87
- ### CRM-заметки
88
-
89
- | Поле | Дефолт | Описание |
90
- |---|---|---|
91
- | `sendStartNoteToCrm` | false | Отправлять ли заметку в CRM при первом контакте. |
92
- | `startNoteTemplate` | null | Кастомный текст (null — дефолтный). |
93
- | `sendFailedNoteToCrm` | false | Заметка при ошибке отправки. |
94
- | `sendOperatorTakeoverNoteToCrm` | false | Заметка при вызове оператора. |
95
- | `sendFinishAutoNoteToCrm` | false | Заметка при `FINISH_AUTO`. |
96
-
97
- ### Авто-завершение по неактивности
98
-
99
- | Поле | Дефолт | Описание |
100
- |---|---|---|
101
- | `finishAutoEnabled` | false | Включить автозакрытие после N дней молчания. |
102
- | `finishAutoDays` | 7 | Сколько дней молчания. |
103
-
104
- ## 3. Каталог платформ по типам
105
-
106
- ### 3.1. `TelegramBot` (Telegram через BotFather)
107
-
108
- ```json
109
- {
110
- "type": "TelegramBot",
111
- "botToken": "<токен от @BotFather>",
112
- "isActive": true,
113
- "isAiEnabled": true,
114
- "enableCleanupCommands": false
115
- }
116
- ```
117
-
118
- | Поле | Описание |
119
- |---|---|
120
- | `botToken` | Токен от @BotFather. **Обязательное** для активации. |
121
- | `enableCleanupCommands` | По умолчанию `false`. Если `true` — Animaly через `setMyCommands` регистрирует у бота меню `/clean` (очистить историю чата) и `/delete` (удалить ChatUser-контакт). Используется только для **TelegramBot**-платформ; на других channel-типах backend отклоняет с 400 (typed validation). Команды реализованы через отдельный сервисный Cleanup Bot — клиент должен добавить себя как `WorkspaceTrustedIdentity` (по `telegram_user_id`/`telegram_username`) ещё ДО первого `/start`. |
122
-
123
- **Поддерживает:** медиа (фото/видео/документы/аудио/voice/video_note), кнопки (INLINE/REPLY), группы (с ограничениями), polling/webhook, Markdown.
124
-
125
- **Лимиты:** caption ≤1024, текст ≤4096, файлы ≤50MB.
126
-
127
- ### 3.2. `TelegramPersonal` (личный Telegram-аккаунт через MTProto)
128
-
129
- ```json
130
- {
131
- "type": "TelegramPersonal",
132
- "isActive": true,
133
- "isAiEnabled": true
134
- }
135
- ```
136
-
137
- Привязка через `TelegramPersonalAccount` (отдельная сущность):
138
-
139
- ```json
140
- {
141
- "phoneNumber": "+79991234567",
142
- "apiId": 12345,
143
- "apiHash": "<api hash>",
144
- "sessionString": "<MTProto сессия>",
145
- "status": "CONNECTED",
146
- "dailyMessageLimit": 10,
147
- "isActiveInCampaigns": true,
148
- "sendingIntervalMinutes": 2,
149
- "proxyId": "<Proxy.id>"
150
- }
151
- ```
152
-
153
- **Поддерживает:** все медиа, voice, video_note, кнопки только REPLY (Telegram personal не поддерживает inline).
154
-
155
- **Особенности:**
156
- - Можно несколько аккаунтов на одну платформу (карусель для рассылок).
157
- - `dailyMessageLimit` — анти-бан защита (default 10).
158
- - `restrictionStatus` отслеживает баны Telegram.
159
- - `messageOpenDelay` (`AgentBehavior`) применяется только здесь.
160
-
161
- ### 3.3. `Wazzup` (агрегатор каналов)
162
-
163
- ```json
164
- {
165
- "type": "Wazzup",
166
- "wazzupCrmKey": "<ключ от Wazzup>",
167
- "wazzupChannel": "WhatsApp",
168
- "isActive": true
169
- }
170
- ```
171
-
172
- | `wazzupChannel` | Канал |
173
- |---|---|
174
- | `WhatsApp` | WhatsApp Business |
175
- | `Avito` | Avito (через Wazzup) |
176
- | `Instagram` | Instagram DM (через Wazzup) |
177
- | `Vk` | ВКонтакте |
178
- | `Telegram` | Telegram (через Wazzup) |
179
- | `Viber` | Viber |
180
- | `Max` | Max (Россия) |
181
- | `TelegramPersonal` | Telegram Personal через Wazzup |
182
-
183
- **Поддерживает:** WhatsApp шаблоны (WABA), медиа, кнопки (для Telegram-канала). На WhatsApp — лимит 24h-окна и approved templates.
184
-
185
- ### 3.4. `Avito` (Avito Messenger напрямую)
186
-
187
- ```json
188
- {
189
- "type": "Avito",
190
- "config": {
191
- "clientId": "<Avito Client ID>",
192
- "clientSecret": "<...>",
193
- "userId": "<Avito User ID>",
194
- "accessToken": "<oauth token>",
195
- "refreshToken": "<...>",
196
- "expiresAt": "..."
197
- },
198
- "isActive": true
199
- }
200
- ```
201
-
202
- **Подключение (OAuth):** браузерная OAuth-авторизация Avito (`clientId` / `clientSecret` → `accessToken` / `refreshToken`); с OAuth Phase 2 доступно подключение через MCP setup-flow (Setup URL), код авторизации не проходит через чат. Поддерживает: текст, картинки. **Не поддерживает:** кнопки, документы, видео.
203
-
204
- ### 3.5. `Instagram` (Direct API через Facebook Graph)
205
-
206
- ```json
207
- {
208
- "type": "Instagram",
209
- "instagramBusinessAccountId": "<IG account>",
210
- "instagramPageId": "<Facebook Page>",
211
- "instagramPageAccessToken": "<encrypted>",
212
- "instagramTokenExpiresAt": "...",
213
- "instagramUserAccessToken": "<encrypted>",
214
- "instagramWebhookVerifyToken": "<token>",
215
-
216
- "replyToInstagramComments": false,
217
- "instagramCommentHandlingMode": "MENTIONS_ONLY",
218
- "instagramCommentReplyMethod": "PRIVATE_DM",
219
- "instagramCommentKeywords": null,
220
- "replyToStoryMentions": false,
221
-
222
- "isActive": true
223
- }
224
- ```
225
-
226
- **Особенности:**
227
- - **24h-окно**: можно отвечать только в течение 24 часов после сообщения пользователя.
228
- - Комментарии под постами обрабатываются отдельно (`instagramCommentHandlingMode`).
229
- - Story Mentions/Replies — опционально.
230
-
231
- **Подключение (OAuth):** канал подключается браузерной OAuth-авторизацией через Facebook Graph API (v21). Поток: `POST /api/instagram/auth/initiate` (под JWT) возвращает `authUrl` с подписанным HMAC-`state` → клиент подтверждает доступ в диалоге Facebook → `GET /api/instagram/auth/callback` обменивает `code` на токены и сохраняет `instagramPageAccessToken` / `instagramUserAccessToken`. Токены не вводятся вручную и не проходят через чат; тот же поток используется при подключении через MCP setup-flow (OAuth Phase 2).
232
-
233
- ### 3.6. `Salebot` (внешний агрегатор)
234
-
235
- ```json
236
- {
237
- "type": "Salebot",
238
- "salebotApiKey": "<API key>",
239
- "salebotProjectId": "<project id>",
240
- "salebotGroupId": "<group/bot name>",
241
- "isActive": true
242
- }
243
- ```
244
-
245
- Salebot сам подключает Telegram/VK/WhatsApp/etc. Animaly через API Salebot отправляет/принимает сообщения.
246
-
247
- ### 3.7. `SmsGorod` (SMS через сервис)
248
-
249
- ```json
250
- {
251
- "type": "SmsGorod",
252
- "smsgorodApiKey": "<API key>",
253
- "smsgorodChannel": "DIGIT",
254
- "smsgorodSender": null,
255
- "isActive": true
256
- }
257
- ```
258
-
259
- | `smsgorodChannel` | Описание |
260
- |---|---|
261
- | `DIGIT` | Цифровой номер отправителя (sender необязателен). |
262
- | `CHAR` | Буквенное имя отправителя — `smsgorodSender` обязателен. |
263
-
264
- **Лимиты:**
265
- - Один SMS = 70 символов кириллицей или 160 латиницей.
266
- - Длинные сообщения разбиваются провайдером.
267
- - **Не поддерживает:** медиа, кнопки.
268
- - Рекомендуется задать `AgentChat.maxResponseSymbols` (например, 140), чтобы LLM не генерировал слишком длинно.
269
-
270
- ### 3.8. `VKon` (VK сообщество)
271
-
272
- ```json
273
- {
274
- "type": "VKon",
275
- "config": {
276
- "groupId": "<community ID>",
277
- "accessToken": "<community access token>",
278
- "secret": "<callback secret>",
279
- "confirmation": "<callback confirmation string>"
280
- },
281
- "isActive": true
282
- }
283
- ```
284
-
285
- **Поддерживает:** текст, медиа (фото/видео/аудио/документы), кнопки (как REPLY-клавиатура), карусели.
286
-
287
- ### 3.9. `WebWidget` (встраиваемый виджет на сайт)
288
-
289
- ```json
290
- {
291
- "type": "WebWidget",
292
- "webWidgetAllowedOrigins": ["*"],
293
- "webWidgetShowPageInfo": true,
294
- "webWidgetRateLimitPerMinute": 20,
295
- "webWidgetCustomization": {
296
- "logo": "https://example.com/logo.png",
297
- "colors": { "primary": "#7B61FF" },
298
- "position": "bottom-right",
299
- "buttonStyle": "rounded"
300
- },
301
- "webWidgetMarketingFieldMappings": {
302
- "utm_source": "<crmFieldId>",
303
- "utm_campaign": "<crmFieldId>",
304
- "ymClientId": "<crmFieldId>",
305
- "googleClientId": "<crmFieldId>"
306
- },
307
- "webWidgetEntryUrlVariableMapping": {
308
- "variableName": "first_visit_url",
309
- "regex": null
310
- }
311
- }
312
- ```
313
-
314
- **Особенности:**
315
- - Real-time через **Socket.IO** (не webhook).
316
- - `webWidgetShowPageInfo` (**default `false`**, opt-in) — добавляет в системный промпт блок
317
- «Контекст страницы»: URL, заголовок и meta description страницы, на которой находится
318
- посетитель. Работает **только для RAG-агентов** — у SIMPLE- и QA-шаблонов этого блока нет.
319
- Вложения (файлы, скриншоты) приходят без контекста страницы. Значения санируются: пробелы
320
- схлопываются, длина режется (url 512 / title 200 / description 400 символов).
321
- - `webWidgetMarketingFieldMappings` — UTM/yaClientId/gaClientId автоматически отправляются в CRM-поля.
322
- - Push-кампании **не поддерживаются** (нет инициатора со стороны бота).
323
- - Особая логика follow-up через `webWidgetLastSeenAt` (см. [`08-follow-up.md`](08-follow-up.md)).
324
-
325
- ### 3.10. `Bitrix24Bot` (Bitrix24 Open Lines)
326
-
327
- ```json
328
- {
329
- "type": "Bitrix24Bot",
330
- "bitrix24BotId": 42,
331
- "bitrix24BotCode": "animaly_bot_<workspaceId>",
332
- "bitrix24BotName": "BeSales AI",
333
- "bitrix24OpenLineId": "5",
334
- "isActive": true
335
- }
336
- ```
337
-
338
- Бот регистрируется в Bitrix24 и принимает сообщения из всех каналов Open Lines (Telegram/WhatsApp/VK/Viber/Avito).
339
-
340
- **Особенности:**
341
- - Live-проверка колонки CRM перед отправкой follow-up (см. [`08-follow-up.md`](08-follow-up.md), раздел 4.1).
342
- - `hasExitedSilentMode` у `ChatUser` — лид/сделка активирована (попала в INCOMING/OUTGOING).
343
-
344
- ### 3.11. `GetCourse` (LMS GetCourse)
345
-
346
- ```json
347
- {
348
- "type": "GetCourse",
349
- "getcourseAccountDomain": "school.getcourse.ru",
350
- "getcourseSchoolApiKey": "<encrypted>",
351
- "getcourseEmployeeUserId": 42,
352
- "getcourseAvailableTransports": ["Site", "Email", "Telegram"],
353
- "getcourseDefaultTransport": "Site",
354
- "getcourseWebhookSecret": "<random32bytes>",
355
- "getcourseDepartments": [
356
- { "id": 1, "label": "Отдел продаж" },
357
- { "id": 2, "label": "Поддержка" }
358
- ]
359
- }
360
- ```
361
-
362
- **Особенности:**
363
- - **Single Platform** на школу с массивом активных транспортов (`Site`, `Email`, `SMS`, `Telegram`, `Facebook`, `VK`, `Chatium`, `WhatsApp`, `Viber`).
364
- - Каждое сообщение знает свой транспорт (`ChatUsersMessages.getcourseTransport`).
365
- - Reply-routing: куда написал — туда отвечаем (`ChatUser.lastGetcourseTransport`).
366
- - Поддерживает GetCourse как CRM (отдельные `ActionGetCourse*` — см. [`04-triggers-and-actions.md`](04-triggers-and-actions.md)).
367
-
368
- ## 4. Сводная таблица возможностей
369
-
370
- | Платформа | Кнопки | Медиа | Группы | Push-кампании | 24h-окно |
371
- |---|---|---|---|---|---|
372
- | `TelegramBot` | INLINE+REPLY | Все | Да | Да | — |
373
- | `TelegramPersonal` | REPLY | Все | Да | Да | — |
374
- | `Wazzup` (WhatsApp) | Inline (WABA) | Да | Да | Через WABA шаблоны | Да |
375
- | `Wazzup` (Telegram) | Inline | Все | Да | Да | — |
376
- | `Avito` | Нет | Картинки | Нет | Ограниченно | — |
377
- | `Instagram` | Quick Replies | Изображения | Нет | Только в 24h-окне | Да |
378
- | `Salebot` | Зависит от подключённого канала | Зависит | Зависит | Да | Зависит |
379
- | `SmsGorod` | Нет | Нет | Нет | Да | — |
380
- | `VKon` | REPLY-клавиатура | Все | Да | Да | — |
381
- | `WebWidget` | Inline + popup | Да | Нет | **Нет** | — |
382
- | `Bitrix24Bot` | Зависит от Open Line | Да | Зависит | Да | — |
383
- | `GetCourse` | Нет (Inbox API ограничен) | Да | Нет | Да | — |
384
-
385
- ## 5. Стратегии ответственного (`responsibleAssigneeStrategy`)
386
-
387
- | Значение | Поведение |
388
- |---|---|
389
- | `KEEP` | Сохранять текущего ответственного в CRM. |
390
- | `ALWAYS_ONE` | Всегда `fixedResponsibleId`. |
391
- | `RANDOM_OPERATOR` | Случайный оператор из списка `CrmOperator`. |
392
-
393
- ## 6. PipelineSettings — фильтрация существующих сделок
394
-
395
- ```json
396
- {
397
- "platformId": "<platformId>",
398
- "filters": [
399
- {
400
- "fieldId": "PHONE",
401
- "valueType": "SYSTEM_VARIABLE",
402
- "value": "phone",
403
- "action": "LINK"
404
- }
405
- ]
406
- }
407
- ```
408
-
409
- `PipelineSettings` определяет, что делать, если в CRM уже есть сделка с тем же телефоном/email:
410
- - `LINK` — привязать пользователя к существующей сделке.
411
- - `IGNORE` — игнорировать (создать новую, или `isBotActive=false`).
412
-
413
- ## 7. Inline-пример: Telegram-бот для интернет-магазина
414
-
415
- ```json
416
- {
417
- "type": "TelegramBot",
418
- "name": "Главный Telegram-бот",
419
- "botToken": "<TOKEN>",
420
- "isActive": true,
421
- "isAiEnabled": true,
422
- "timezone": "Europe/Moscow",
423
-
424
- "useDynamicVariables": true,
425
- "clearDynamicVarsOnHistoryClear": true,
426
-
427
- "responsibleAssigneeStrategy": "RANDOM_OPERATOR",
428
- "sendToCrm": false,
429
-
430
- "sendStartNoteToCrm": true,
431
- "startNoteTemplate": "Новый лид из Telegram-бота",
432
-
433
- "sendOperatorTakeoverNoteToCrm": true,
434
-
435
- "finishAutoEnabled": true,
436
- "finishAutoDays": 14,
437
- "sendFinishAutoNoteToCrm": true,
438
-
439
- "dealMarkerType": "TAG",
440
- "dealMarkerValue": "telegram-bot"
441
- }
442
- ```
443
-
444
- ## 8. Inline-пример: SmsGorod для отправки уведомлений
445
-
446
- ```json
447
- {
448
- "type": "SmsGorod",
449
- "name": "SMS-уведомления",
450
- "smsgorodApiKey": "<KEY>",
451
- "smsgorodChannel": "CHAR",
452
- "smsgorodSender": "MyShop",
453
- "isActive": true,
454
- "isAiEnabled": false,
455
- "timezone": "Europe/Moscow"
456
- }
457
- ```
458
-
459
- `isAiEnabled=false`: SMS-канал часто не для AI-диалога, а для исходящих уведомлений (через follow-up/кампании).
460
-
461
- ## 9. Inline-пример: Web Widget с UTM-маркетингом
462
-
463
- ```json
464
- {
465
- "type": "WebWidget",
466
- "name": "Виджет на сайте",
467
- "isActive": true,
468
- "isAiEnabled": true,
469
- "timezone": "Europe/Moscow",
470
-
471
- "webWidgetAllowedOrigins": ["https://shop.example.com", "https://example.com"],
472
- "webWidgetShowPageInfo": true,
473
- "webWidgetRateLimitPerMinute": 30,
474
-
475
- "webWidgetCustomization": {
476
- "colors": { "primary": "#7B61FF", "background": "#FFFFFF" },
477
- "position": "bottom-right"
478
- },
479
-
480
- "webWidgetMarketingFieldMappings": {
481
- "utm_source": "<crmFieldId-utm_source>",
482
- "utm_campaign": "<crmFieldId-utm_campaign>",
483
- "ymClientId": "<crmFieldId-yandex_client_id>"
484
- },
485
-
486
- "webWidgetEntryUrlVariableMapping": {
487
- "variableName": "first_visit_url"
488
- }
489
- }
490
- ```
491
-
492
- ## 10. Граничные случаи и валидация
493
-
494
- | Правило | Что AI-сервису помнить |
495
- |---|---|
496
- | `botToken` обязателен для TelegramBot | Без него `isActive=true` всё равно не сработает. |
497
- | `wazzupChannel` определяет фичи | На WhatsApp — лимит 24h, на Telegram через Wazzup — нет. |
498
- | Avito — без кнопок и видео | Не предлагать. |
499
- | Instagram — только в 24h-окне | Кампании пройдут только тем, кто писал недавно. |
500
- | WebWidget — нет push-кампаний | Используется только в реальном времени. |
501
- | SMS — `maxResponseSymbols` критично | LLM может генерировать длинные ответы; для SMS обязательно ограничить (например, 140). |
502
- | `useCrossPlatformHistory=true` | Требует `UnifiedCustomer`-привязки клиентов. |
503
- | `finishAutoEnabled=true` | Автозакрытие после `finishAutoDays` дней. Полезно для аналитики «потерянных», но не для активных воронок. |
504
- | `dealMarkerType=TAG` | Создаёт тег в CRM (например, для атрибуции). |
505
- | `inboundDealFilterEnabled=true` (GetCourse) | Платформа отвечает только «контактам в волне» (поле/тег на активной сделке). TAG-режим best-effort (скан ~1000 последних сделок); для надёжности — `CUSTOM_FIELD`. Маркер часто = move-signal поле сделки. |
506
- | Telegram Personal лимиты | `dailyMessageLimit`, `sendingIntervalMinutes` — иначе бан. |
507
- | `proxyId` для TG Personal | Желательно — Telegram быстро банит без прокси. |
508
-
509
- ## 11. Связь с другими подсистемами
510
-
511
- | Подсистема | Связь |
512
- |---|---|
513
- | **Агенты** ([`01-agents.md`](01-agents.md)) | Все агенты привязаны к платформе. |
514
- | **Поведение** ([`10-agent-behavior.md`](10-agent-behavior.md)) | Один `AgentBehavior` на платформу. |
515
- | **Follow-up** ([`08-follow-up.md`](08-follow-up.md)) | WebWidget — особая логика. Bitrix24Bot — live-проверка. |
516
- | **Кампании** ([`09-campaigns.md`](09-campaigns.md)) | Не все платформы поддерживают; разные лимиты. |
517
- | **CRM** ([`12-crm-integration.md`](12-crm-integration.md)) | `sendToCrm`, `dealMarkerType`, `responsibleAssigneeStrategy`, `PlatformAmoChatConfig`. |
518
- | **Переменные** ([`05-variables.md`](05-variables.md)) | `useDynamicVariables`, `webWidgetEntryUrlVariableMapping`. |
519
- | **CustomVariable** | Привязаны к платформе через `platformId`. |
1
+ # Каналы связи
2
+
3
+ Каноническая сущность Besales — `channels`; секретная и провайдерская конфигурация хранится в
4
+ `channel_connections`. В workspace разрешено несколько экземпляров одного типа, поэтому канал
5
+ всегда выбирается по своему ID, а не по предположению «Telegram здесь один».
6
+
7
+ ## Поддерживаемые семейства
8
+
9
+ Рабочая поверхность включает Telegram Bot, Telegram Personal, Wazzup, Instagram DM, Avito, VK,
10
+ SMS, Web Widget, Bitrix24 Bot, Salebot, GetCourse, Voice и External API. Возможности различаются:
11
+ кнопки, media caption, доставка тела собственного файла и подтверждение результата объявляются
12
+ адаптером явно.
13
+
14
+ ## Подключение
15
+
16
+ Секреты никогда не передаются через MCP или LLM. Инициализация возвращает короткоживущую setup
17
+ ссылку, пользователь вводит credentials в браузере, а клиент опрашивает статус. OAuth-каналы
18
+ используют тот же принцип: код авторизации завершается сервером и не появляется в чате.
19
+
20
+ После подключения проверь:
21
+
22
+ - соединение принадлежит нужному workspace;
23
+ - webhook подписан и проходит дедупликацию;
24
+ - канал готов принимать входящие события;
25
+ - capability-профиль заполнен без умолчаний для обязательных свойств;
26
+ - агент и пространства знаний привязаны именно к этому экземпляру.
27
+
28
+ ## Настройки канала через мост
29
+
30
+ `besales_platform_settings_update` принимает страну разбора телефона в
31
+ `general_settings.phone_parsing_country`: строка передаётся API для проверки по его реестру,
32
+ `null` снимает настройку. От страны зависит, получит ли агент инструмент сохранения телефона;
33
+ `UZ` означает, что девятизначный номер трактуется как узбекский; `RU` выдаёт инструмент без
34
+ разбора девяти цифр — российский номер разбирается по своей длине, девятизначный отклоняется.
35
+
36
+ В `crm_behavior` доступны семь связанных настроек:
37
+
38
+ - `create_deal_on_first_outbound`;
39
+ - `finish_auto_enabled`;
40
+ - `finish_auto_days` — целое число от 1 до защитного потолка 36 500 дней;
41
+ - `send_finish_auto_note_to_crm`;
42
+ - `finish_auto_note_template` — строка либо `null`, который снимает шаблон даже на свежем канале
43
+ без сохранённых `crm_behavior` и `auto_finish`;
44
+ - `getcourse_create_deal_payment_tracking_enabled`;
45
+ - `getcourse_status_deal_fallback_enabled`.
46
+
47
+ Если `crm_behavior` ещё не сохранён, единственное активное CRM-подключение требуется для
48
+ `send_to_crm`, создания сделки по первой исходящей, стратегии и фиксированного ответственного,
49
+ четырёх флагов отправки заметок, трёх полей маркера сделки, четырёх шаблонов заметок и обоих
50
+ GetCourse-флагов. Ноль или несколько подключений дают 422 `CRM_CONNECTION_UNRESOLVED`. При уже
51
+ сохранённом `crm_behavior` подключение этим маршрутом повторно не проверяется.
52
+
53
+ Опасные изменения `create_deal_on_first_outbound`, `send_finish_auto_note_to_crm` и
54
+ `getcourse_create_deal_payment_tracking_enabled` требуют `explicit_confirmation=true`. Последний
55
+ флаг по умолчанию включён: при отсутствующем сохранённом ключе `false` требует
56
+ подтверждения, а `true` проходит как неизменное действующее значение. Включение
57
+ автозавершения не требует подтверждения, опасна отправка заметки.
58
+
59
+ ## Входящие и исходящие сообщения
60
+
61
+ Webhook быстро сохраняет сырой факт, дедуплицирует его и ставит обработку в очередь. Тяжёлая
62
+ логика и биллинг не должны задерживать ответ провайдеру. Медиа скачивается единым безопасным
63
+ контуром, проверяется по содержимому и сохраняется в объектное хранилище.
64
+
65
+ Исходящий контент проходит `OutboundDeliveryService`. Прямой вызов адаптера из бизнес-модуля
66
+ запрещён: он обошёл бы governance, идемпотентность, журнал исхода и побочные эффекты доставки.
67
+
68
+ ## Имена и жизненный цикл
69
+
70
+ Название и описание канала редактируются пользователем. Удаление канала не превращает его
71
+ локальные правила маршрутизации в правила всего workspace: такие правила удаляются вместе с
72
+ каналом. Исторические сообщения и аудит подчиняются своим правилам хранения, а не имени канала.
73
+
74
+ ## Прежняя форма настроек канала
75
+
76
+ `besales_platform_settings_update` принимает прежние выключатели `access_control.is_active` и
77
+ `is_ai_enabled`, а также прежние поля `widget_marketing.web_widget_*`. Мост переносит выключатели,
78
+ список сайтов, лимит, сведения о странице и оформление в `general_settings`; две карты виджета
79
+ остаются в `widget_marketing`. Для списка сайтов пустой объект и пустой список означают
80
+ `['*']` — работать везде; непустой объект получает отказ с адресом поля. Непустой массив
81
+ сохраняется. `null` тоже принимается как `['*']` для совместимости чтения, хотя прежний сервер
82
+ не мог записать голый `null` в JSON-колонку.
83
+
84
+ Во вложенных настройках мост переводит camelCase прежнего DTO в snake_case API: например
85
+ `button.backgroundColor` → `button.background_color`, `window.userMessageGradient` →
86
+ `window.user_message_gradient`, `window.botMessageBackgroundColor` →
87
+ `window.bot_message_background_color` (необязательная заливка сообщений бота, цвет `#RGB` или
88
+ `#RRGGBB`; мост значение не проверяет и не меняет, форму проверяет сервер), `utmSource` →
89
+ `utm_source`, `targetVariableName` → `target_variable_name`, `rules[].useStrictUrlMatching` →
90
+ `rules[].use_strict_url_matching`. Оба имени одного поля вместе дают отказ с адресом, даже если
91
+ значения одинаковы. Голый `null` для оформления и обеих карт
92
+ отклоняется: прежний сервер также не мог записать его в JSON-колонку; присылай изменяемые поля.
93
+
94
+ `general_settings.show_page_info` включает контекст страницы посетителя Web Widget: URL,
95
+ заголовок и meta description. Это opt-in: без включённого флага блок в ход не попадает.
96
+ Значения санируются и ограничиваются по длине; это недоверенные данные страницы.
97
+ Наличие семейства канала в runtime не доказывает возможность подключения через MCP — сверяй
98
+ поддерживаемый тип со схемой `besales_platform_create_init`.
99
+
100
+ ## Ответы на комментарии Instagram
101
+
102
+ Настройки поддерживают отдельные утверждённые личные ответы и публичные ответы на жалобы.
103
+ Каждая из трёх групп содержит русскую, узбекскую латинскую и узбекскую кириллическую версию.
104
+ Передаваемый объект заменяет шаблоны целиком: пропуск сохраняет, {} очищает, null убирает.
105
+ Публичный ответ и личное сообщение имеют независимые исходы; неизвестная доставка не повторяется.
106
+ Сначала проверьте доступность записи настроек и подключение канала. Живая проверка Meta выполняется отдельно.
107
+
108
+ ## Прогрев и лесенка личных номеров Telegram
109
+
110
+ `besales_platform_telegram_personal_accounts` читает таблицу номеров по `channel_id`:
111
+ `search`, `status`, `page` (от 1), `limit` (1–100). Нужен `read:channels`.
112
+ `summary` охватывает все живые номера до отбора; `pagination` и `truncated` нельзя терять.
113
+ `campaign` и состояние строки описывают участие и разгон; прогрев — отдельный `warmup`
114
+ (`active`, `reason`, `label`, `until`, `optedOut`), он не блокирует рассылку.
115
+ `restriction` показывает ограничения, последнюю проверку и жалобу; `autoAppealNotBefore`
116
+ читай как наблюдение ядра. Автоматическая подача жалоб сейчас выключена.
117
+
118
+ `besales_platform_telegram_personal_warmup` читает настройки и аналитику прогрева;
119
+ `besales_platform_telegram_personal_warmup_update` частично меняет их (нужен `manage:channels`).
120
+ Поля настроек передаются в snake_case, например `messages_per_day`, `images_enabled`,
121
+ `reaction_types`, `reaction_hours_utc`; пропуск сохраняет, false, 0 и [] передаются буквально.
122
+ Подтверждение не требуется: сообщения прогрева идут только между своими номерами.
123
+
124
+ `besales_platform_telegram_personal_account_warmup` принимает `channel_id`, `account_id`
125
+ и `is_warming_up`. false выводит номер из автоматического прогрева до ручного включения;
126
+ true снимает ручной отказ. `besales_platform_telegram_personal_ramp` читает только
127
+ `newAccountRampEnabled` выбранной рабочей области. Для чтения нужен `read:channels`.
128
+
129
+ Лесенка: 3, 4, 5, 6, 7 с первого дня рассылки. Прогрев идёт параллельно 5 дней,
130
+ включается сам при подключении номера, если его не выключить вручную.
131
+
132
+ ## Проверка ограничений личных номеров Telegram
133
+
134
+ `besales_platform_telegram_personal_restriction_check` проверяет все номера канала (`all:true`)
135
+ или список `account_ids` (1–100). Нужны `channel_id`, стабильный `idempotency_key` и право
136
+ `manage:channels`. Обращение идёт только к @SpamBot, подтверждение не требуется.
137
+ `besales_platform_telegram_personal_restriction_appeal` принимает тот же выбор, необязательный
138
+ `text` (1–500 знаков после trim) и обязательное `explicit_confirmation:true` после явного
139
+ согласия человека. Перед вызовом покажи человеку номер и свой текст, если он задан. Автоматическая подача сейчас
140
+ выключена. Без `text` система подбирает разные английские апелляции для каждого
141
+ номера и сохраняет выбор для повторов с тем же ключом; в ответе — `appealTemplateId`, без текста. Апелляция
142
+ отправляется от номера, отменить её нельзя, не чаще раза в UTC-сутки на номер.
143
+
144
+ В ответе читай каждый `items[].outcome`: `QUEUED/taskId` означает очередь, `FAILED` или
145
+ `SKIPPED` содержат причину. Затем вызови `besales_platform_telegram_personal_operational_task_get`
146
+ с `channel_id` и `task_id` (право `read:channels`). Он возвращает `state` задачи и текущий
147
+ `restrictionStatus` номера; `SUCCEEDED` не означает отсутствие ограничений. Статус мог измениться
148
+ после задачи; `null` означает недоступное наблюдение. При неизвестном исходе сначала прочитай
149
+ задачу или доступность номеров; новый ключ автоматически не создавай.