@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.
- package/README.md +117 -163
- package/README.onprem.ru.md +35 -0
- package/bin/besales-mcp-http.js +9 -0
- package/bin/besales-onprem.mjs +19 -0
- package/dist/auth/connection-store.d.ts +3 -1
- package/dist/auth/connection-store.js +9 -3
- package/dist/auth/connection-store.js.map +1 -1
- package/dist/auth/oauth-client.d.ts +20 -27
- package/dist/auth/oauth-client.js +31 -23
- package/dist/auth/oauth-client.js.map +1 -1
- package/dist/auth/session-workspace.d.ts +1 -0
- package/dist/auth/session-workspace.js +10 -1
- package/dist/auth/session-workspace.js.map +1 -1
- package/dist/auth/token-storage.js +4 -1
- package/dist/auth/token-storage.js.map +1 -1
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +80 -19
- package/dist/cli.js.map +1 -1
- package/dist/constants/crm-catalog.d.ts +2 -0
- package/dist/constants/crm-catalog.js +3 -0
- package/dist/constants/crm-catalog.js.map +1 -0
- package/dist/http/api-client.d.ts +54 -7
- package/dist/http/api-client.js +132 -66
- package/dist/http/api-client.js.map +1 -1
- package/dist/http/feedback-document-error.d.ts +26 -0
- package/dist/http/feedback-document-error.js +22 -0
- package/dist/http/feedback-document-error.js.map +1 -0
- package/dist/http-server.d.ts +15 -0
- package/dist/http-server.js +378 -0
- package/dist/http-server.js.map +1 -0
- package/dist/instructions/server-instructions.d.ts +1 -1
- package/dist/instructions/server-instructions.js +6 -3
- package/dist/instructions/server-instructions.js.map +1 -1
- package/dist/network/constants.d.ts +25 -0
- package/dist/network/constants.js +26 -0
- package/dist/network/constants.js.map +1 -0
- package/dist/network/failed-verifications.d.ts +10 -0
- package/dist/network/failed-verifications.js +37 -0
- package/dist/network/failed-verifications.js.map +1 -0
- package/dist/network/http-test-fixture.d.ts +3 -0
- package/dist/network/http-test-fixture.js +86 -0
- package/dist/network/http-test-fixture.js.map +1 -0
- package/dist/network/known-keys.d.ts +10 -0
- package/dist/network/known-keys.js +38 -0
- package/dist/network/known-keys.js.map +1 -0
- package/dist/network/memory-credentials.d.ts +11 -0
- package/dist/network/memory-credentials.js +24 -0
- package/dist/network/memory-credentials.js.map +1 -0
- package/dist/network/rate-limit.d.ts +23 -0
- package/dist/network/rate-limit.js +62 -0
- package/dist/network/rate-limit.js.map +1 -0
- package/dist/network/rejected-keys.d.ts +9 -0
- package/dist/network/rejected-keys.js +39 -0
- package/dist/network/rejected-keys.js.map +1 -0
- package/dist/network/request-work.d.ts +8 -0
- package/dist/network/request-work.js +20 -0
- package/dist/network/request-work.js.map +1 -0
- package/dist/network/successful-keys.d.ts +17 -0
- package/dist/network/successful-keys.js +47 -0
- package/dist/network/successful-keys.js.map +1 -0
- package/dist/resources/concepts/external-execution.md +3 -1
- package/dist/resources/concepts/feedback-sheets.md +21 -12
- package/dist/resources/concepts/icp.md +8 -1
- package/dist/resources/concepts/sandbox.md +15 -6
- package/dist/resources/concepts/triggers.md +43 -0
- package/dist/resources/concepts/workbook-classification.md +104 -50
- package/dist/resources/docs/agent-behavior.md +51 -382
- package/dist/resources/docs/campaigns.md +9 -16
- package/dist/resources/docs/crm-integration.md +39 -523
- package/dist/resources/docs/files-and-uploads.md +23 -286
- package/dist/resources/docs/follow-up.md +47 -12
- package/dist/resources/docs/knowledge-base.md +52 -521
- package/dist/resources/docs/pipeline-builder.md +26 -216
- package/dist/resources/docs/pipeline-settings-deep.md +27 -220
- package/dist/resources/docs/platforms.md +149 -519
- package/dist/resources/docs/prompt-anatomy.md +39 -285
- package/dist/resources/docs/routing.md +8 -16
- package/dist/resources/docs/trigger-actions.md +40 -24
- package/dist/resources/docs/variables.md +8 -12
- package/dist/resources/operator-edit.contract.d.ts +7 -0
- package/dist/resources/operator-edit.contract.js +8 -0
- package/dist/resources/operator-edit.contract.js.map +1 -0
- package/dist/resources/registry.js +20 -4
- package/dist/resources/registry.js.map +1 -1
- package/dist/resources/workflows/audit-dialogues.md +23 -12
- package/dist/resources/workflows/compare-models.md +6 -6
- package/dist/resources/workflows/connect-crm-from-scratch.md +15 -12
- package/dist/resources/workflows/connect-datasource-from-scratch.md +5 -4
- package/dist/resources/workflows/extract-from-document.md +8 -6
- package/dist/resources/workflows/operator-edit.md +15 -0
- package/dist/resources/workflows/platform-setup-from-scratch.md +59 -70
- package/dist/resources/workflows/production-readiness-check.md +25 -15
- package/dist/schemas/mcp-tools.json +12389 -6657
- package/dist/schemas/voice-actions-api.contract.json +248 -0
- package/dist/shared/constants/broadcast-reason.constants.d.ts +2 -0
- package/dist/shared/constants/broadcast-reason.constants.js +47 -0
- package/dist/shared/constants/broadcast-reason.constants.js.map +1 -0
- package/dist/shared/constants/crm-stage-pool.constants.d.ts +2 -0
- package/dist/shared/constants/crm-stage-pool.constants.js +3 -0
- package/dist/shared/constants/crm-stage-pool.constants.js.map +1 -0
- package/dist/shared/constants/followup-note.constants.d.ts +3 -0
- package/dist/shared/constants/followup-note.constants.js +4 -0
- package/dist/shared/constants/followup-note.constants.js.map +1 -0
- package/dist/shared/constants/followup-session.constants.d.ts +2 -0
- package/dist/shared/constants/followup-session.constants.js +3 -0
- package/dist/shared/constants/followup-session.constants.js.map +1 -0
- package/dist/shared/constants/funnel-analytics.constants.d.ts +2 -0
- package/dist/shared/constants/funnel-analytics.constants.js +3 -0
- package/dist/shared/constants/funnel-analytics.constants.js.map +1 -0
- package/dist/shared/constants/message-filter.constants.d.ts +7 -0
- package/dist/shared/constants/message-filter.constants.js +8 -0
- package/dist/shared/constants/message-filter.constants.js.map +1 -0
- package/dist/shared/utils/trigger-repeat-mapping.d.ts +72 -0
- package/dist/shared/utils/trigger-repeat-mapping.js +53 -0
- package/dist/shared/utils/trigger-repeat-mapping.js.map +1 -0
- package/dist/skills/besales-dialogue-audit/SKILL.md +31 -20
- package/dist/tasks/task-state-store.js +5 -0
- package/dist/tasks/task-state-store.js.map +1 -1
- package/dist/tools/annotations.js +4 -3
- package/dist/tools/annotations.js.map +1 -1
- package/dist/tools/definitions/agent-design.d.ts +81 -24
- package/dist/tools/definitions/agent-design.js +246 -90
- package/dist/tools/definitions/agent-design.js.map +1 -1
- package/dist/tools/definitions/agent-model-notice.d.ts +5 -0
- package/dist/tools/definitions/agent-model-notice.js +31 -0
- package/dist/tools/definitions/agent-model-notice.js.map +1 -0
- package/dist/tools/definitions/agent-models.d.ts +5 -0
- package/dist/tools/definitions/agent-models.js +26 -0
- package/dist/tools/definitions/agent-models.js.map +1 -0
- package/dist/tools/definitions/agent-settings.d.ts +85 -0
- package/dist/tools/definitions/agent-settings.js +187 -0
- package/dist/tools/definitions/agent-settings.js.map +1 -0
- package/dist/tools/definitions/ai-costs.d.ts +12 -0
- package/dist/tools/definitions/ai-costs.js +142 -0
- package/dist/tools/definitions/ai-costs.js.map +1 -0
- package/dist/tools/definitions/api-tool-request.d.ts +15 -0
- package/dist/tools/definitions/api-tool-request.js +2 -0
- package/dist/tools/definitions/api-tool-request.js.map +1 -0
- package/dist/tools/definitions/behavior-shipped-form.d.ts +182 -0
- package/dist/tools/definitions/behavior-shipped-form.js +185 -0
- package/dist/tools/definitions/behavior-shipped-form.js.map +1 -0
- package/dist/tools/definitions/broadcast-alerts.d.ts +6 -0
- package/dist/tools/definitions/broadcast-alerts.js +72 -0
- package/dist/tools/definitions/broadcast-alerts.js.map +1 -0
- package/dist/tools/definitions/broadcast-analytics.d.ts +102 -18
- package/dist/tools/definitions/broadcast-analytics.js +732 -431
- package/dist/tools/definitions/broadcast-analytics.js.map +1 -1
- package/dist/tools/definitions/broadcast-scheduler.d.ts +10 -13
- package/dist/tools/definitions/broadcast-scheduler.js +196 -154
- package/dist/tools/definitions/broadcast-scheduler.js.map +1 -1
- package/dist/tools/definitions/call-operator-task.schema.d.ts +11 -0
- package/dist/tools/definitions/call-operator-task.schema.js +30 -0
- package/dist/tools/definitions/call-operator-task.schema.js.map +1 -0
- package/dist/tools/definitions/contacts.d.ts +3 -0
- package/dist/tools/definitions/contacts.js +57 -31
- package/dist/tools/definitions/contacts.js.map +1 -1
- package/dist/tools/definitions/crm-platform.d.ts +29 -39
- package/dist/tools/definitions/crm-platform.js +249 -352
- package/dist/tools/definitions/crm-platform.js.map +1 -1
- package/dist/tools/definitions/crm-stage-pool.messages.d.ts +39 -0
- package/dist/tools/definitions/crm-stage-pool.messages.js +43 -0
- package/dist/tools/definitions/crm-stage-pool.messages.js.map +1 -0
- package/dist/tools/definitions/crm-stage-pool.schema.d.ts +64 -0
- package/dist/tools/definitions/crm-stage-pool.schema.js +109 -0
- package/dist/tools/definitions/crm-stage-pool.schema.js.map +1 -0
- package/dist/tools/definitions/custom-reports.d.ts +12 -0
- package/dist/tools/definitions/custom-reports.js +68 -0
- package/dist/tools/definitions/custom-reports.js.map +1 -0
- package/dist/tools/definitions/datasource.d.ts +2 -1
- package/dist/tools/definitions/datasource.js +28 -13
- package/dist/tools/definitions/datasource.js.map +1 -1
- package/dist/tools/definitions/dialog-review-findings-response.d.ts +14 -0
- package/dist/tools/definitions/dialog-review-findings-response.js +23 -0
- package/dist/tools/definitions/dialog-review-findings-response.js.map +1 -0
- package/dist/tools/definitions/dialog-review-safe-response.d.ts +5 -0
- package/dist/tools/definitions/dialog-review-safe-response.js +152 -0
- package/dist/tools/definitions/dialog-review-safe-response.js.map +1 -0
- package/dist/tools/definitions/dialog-review.d.ts +49 -0
- package/dist/tools/definitions/dialog-review.js +383 -0
- package/dist/tools/definitions/dialog-review.js.map +1 -0
- package/dist/tools/definitions/dialogue-analysis.d.ts +46 -0
- package/dist/tools/definitions/dialogue-analysis.js +170 -0
- package/dist/tools/definitions/dialogue-analysis.js.map +1 -0
- package/dist/tools/definitions/dialogue-audit-agent-scope.d.ts +7 -0
- package/dist/tools/definitions/dialogue-audit-agent-scope.js +41 -0
- package/dist/tools/definitions/dialogue-audit-agent-scope.js.map +1 -0
- package/dist/tools/definitions/dialogue-audit-alias.d.ts +67 -0
- package/dist/tools/definitions/dialogue-audit-alias.js +559 -0
- package/dist/tools/definitions/dialogue-audit-alias.js.map +1 -0
- package/dist/tools/definitions/dialogue-export.d.ts +7 -1
- package/dist/tools/definitions/dialogue-export.js +89 -32
- package/dist/tools/definitions/dialogue-export.js.map +1 -1
- package/dist/tools/definitions/dialogue-followup-state.d.ts +9 -0
- package/dist/tools/definitions/dialogue-followup-state.js +69 -0
- package/dist/tools/definitions/dialogue-followup-state.js.map +1 -0
- package/dist/tools/definitions/dialogue-reprocess.d.ts +5 -0
- package/dist/tools/definitions/dialogue-reprocess.js +107 -0
- package/dist/tools/definitions/dialogue-reprocess.js.map +1 -0
- package/dist/tools/definitions/edit-version-transport.test-fixtures.d.ts +13 -0
- package/dist/tools/definitions/edit-version-transport.test-fixtures.js +292 -0
- package/dist/tools/definitions/edit-version-transport.test-fixtures.js.map +1 -0
- package/dist/tools/definitions/edit-version.d.ts +5 -0
- package/dist/tools/definitions/edit-version.js +20 -0
- package/dist/tools/definitions/edit-version.js.map +1 -0
- package/dist/tools/definitions/external-api-channels.js +17 -15
- package/dist/tools/definitions/external-api-channels.js.map +1 -1
- package/dist/tools/definitions/feedback-document-access.d.ts +16 -0
- package/dist/tools/definitions/feedback-document-access.js +63 -0
- package/dist/tools/definitions/feedback-document-access.js.map +1 -0
- package/dist/tools/definitions/fixtures/shipped-setup-status.d.ts +3 -0
- package/dist/tools/definitions/fixtures/shipped-setup-status.js +9 -0
- package/dist/tools/definitions/fixtures/shipped-setup-status.js.map +1 -0
- package/dist/tools/definitions/follow-up-config.d.ts +79 -0
- package/dist/tools/definitions/follow-up-config.js +258 -0
- package/dist/tools/definitions/follow-up-config.js.map +1 -0
- package/dist/tools/definitions/follow-up-funnel-test.d.ts +4 -3
- package/dist/tools/definitions/follow-up-funnel-test.js +65 -52
- package/dist/tools/definitions/follow-up-funnel-test.js.map +1 -1
- package/dist/tools/definitions/follow-up-promotion-instructions.d.ts +2 -0
- package/dist/tools/definitions/follow-up-promotion-instructions.js +7 -0
- package/dist/tools/definitions/follow-up-promotion-instructions.js.map +1 -0
- package/dist/tools/definitions/follow-up-setup.d.ts +4 -28
- package/dist/tools/definitions/follow-up-setup.js +20 -87
- package/dist/tools/definitions/follow-up-setup.js.map +1 -1
- package/dist/tools/definitions/follow-up.d.ts +20 -122
- package/dist/tools/definitions/follow-up.js +200 -357
- package/dist/tools/definitions/follow-up.js.map +1 -1
- package/dist/tools/definitions/followup-getcourse-compat.d.ts +29 -0
- package/dist/tools/definitions/followup-getcourse-compat.js +62 -0
- package/dist/tools/definitions/followup-getcourse-compat.js.map +1 -0
- package/dist/tools/definitions/followup-sequence-config.schema.d.ts +10 -0
- package/dist/tools/definitions/followup-sequence-config.schema.js +14 -0
- package/dist/tools/definitions/followup-sequence-config.schema.js.map +1 -0
- package/dist/tools/definitions/funnel-analytics.d.ts +18 -0
- package/dist/tools/definitions/funnel-analytics.js +150 -0
- package/dist/tools/definitions/funnel-analytics.js.map +1 -0
- package/dist/tools/definitions/getcourse-anchor-refresh.d.ts +5 -9
- package/dist/tools/definitions/getcourse-anchor-refresh.js +26 -31
- package/dist/tools/definitions/getcourse-anchor-refresh.js.map +1 -1
- package/dist/tools/definitions/getcourse-cold-outbound-settings.d.ts +46 -0
- package/dist/tools/definitions/getcourse-cold-outbound-settings.js +37 -0
- package/dist/tools/definitions/getcourse-cold-outbound-settings.js.map +1 -0
- package/dist/tools/definitions/getcourse-cold-welcome.d.ts +14 -29
- package/dist/tools/definitions/getcourse-cold-welcome.js +190 -253
- package/dist/tools/definitions/getcourse-cold-welcome.js.map +1 -1
- package/dist/tools/definitions/getcourse-wave-welcome.messages.d.ts +10 -0
- package/dist/tools/definitions/getcourse-wave-welcome.messages.js +17 -0
- package/dist/tools/definitions/getcourse-wave-welcome.messages.js.map +1 -0
- package/dist/tools/definitions/help.js.map +1 -1
- package/dist/tools/definitions/icp-import-source.d.ts +75 -0
- package/dist/tools/definitions/icp-import-source.js +88 -0
- package/dist/tools/definitions/icp-import-source.js.map +1 -0
- package/dist/tools/definitions/inbound-analytics.d.ts +13 -0
- package/dist/tools/definitions/inbound-analytics.js +55 -0
- package/dist/tools/definitions/inbound-analytics.js.map +1 -0
- package/dist/tools/definitions/instagram-comment.templates.d.ts +19 -0
- package/dist/tools/definitions/instagram-comment.templates.js +34 -0
- package/dist/tools/definitions/instagram-comment.templates.js.map +1 -0
- package/dist/tools/definitions/instagram-settings-compat.d.ts +33 -0
- package/dist/tools/definitions/instagram-settings-compat.js +7 -0
- package/dist/tools/definitions/instagram-settings-compat.js.map +1 -0
- package/dist/tools/definitions/knowledge-chunking.d.ts +42 -0
- package/dist/tools/definitions/knowledge-chunking.js +83 -0
- package/dist/tools/definitions/knowledge-chunking.js.map +1 -0
- package/dist/tools/definitions/knowledge-space-search-fields.d.ts +12 -0
- package/dist/tools/definitions/knowledge-space-search-fields.js +30 -0
- package/dist/tools/definitions/knowledge-space-search-fields.js.map +1 -0
- package/dist/tools/definitions/knowledge.d.ts +24 -14
- package/dist/tools/definitions/knowledge.js +342 -233
- package/dist/tools/definitions/knowledge.js.map +1 -1
- package/dist/tools/definitions/legacy-trigger-repeat.d.ts +17 -0
- package/dist/tools/definitions/legacy-trigger-repeat.js +53 -0
- package/dist/tools/definitions/legacy-trigger-repeat.js.map +1 -0
- package/dist/tools/definitions/link-tracking.d.ts +8 -0
- package/dist/tools/definitions/link-tracking.js +141 -38
- package/dist/tools/definitions/link-tracking.js.map +1 -1
- package/dist/tools/definitions/mailing-variant-content.d.ts +75 -0
- package/dist/tools/definitions/mailing-variant-content.js +73 -0
- package/dist/tools/definitions/mailing-variant-content.js.map +1 -0
- package/dist/tools/definitions/model-comparison.d.ts +2 -1
- package/dist/tools/definitions/model-comparison.js +4 -5
- package/dist/tools/definitions/model-comparison.js.map +1 -1
- package/dist/tools/definitions/money-currency.d.ts +5 -0
- package/dist/tools/definitions/money-currency.js +10 -0
- package/dist/tools/definitions/money-currency.js.map +1 -0
- package/dist/tools/definitions/operator-workflow.d.ts +5 -5
- package/dist/tools/definitions/operator-workflow.js +80 -27
- package/dist/tools/definitions/operator-workflow.js.map +1 -1
- package/dist/tools/definitions/platform-funnel-analytics.d.ts +42 -0
- package/dist/tools/definitions/platform-funnel-analytics.js +72 -0
- package/dist/tools/definitions/platform-funnel-analytics.js.map +1 -0
- package/dist/tools/definitions/platform-getcourse-wave-field-bindings.d.ts +42 -0
- package/dist/tools/definitions/platform-getcourse-wave-field-bindings.js +51 -0
- package/dist/tools/definitions/platform-getcourse-wave-field-bindings.js.map +1 -0
- package/dist/tools/definitions/platform-settings-limits.d.ts +5 -0
- package/dist/tools/definitions/platform-settings-limits.js +6 -0
- package/dist/tools/definitions/platform-settings-limits.js.map +1 -0
- package/dist/tools/definitions/platform-settings-shipped-form.d.ts +37 -0
- package/dist/tools/definitions/platform-settings-shipped-form.js +310 -0
- package/dist/tools/definitions/platform-settings-shipped-form.js.map +1 -0
- package/dist/tools/definitions/platform-settings-update.d.ts +300 -0
- package/dist/tools/definitions/platform-settings-update.js +134 -0
- package/dist/tools/definitions/platform-settings-update.js.map +1 -0
- package/dist/tools/definitions/{getcourse-wave.d.ts → platform-setup-wave.d.ts} +75 -6
- package/dist/tools/definitions/platform-setup-wave.js +1079 -0
- package/dist/tools/definitions/platform-setup-wave.js.map +1 -0
- package/dist/tools/definitions/platform-setup.d.ts +697 -224
- package/dist/tools/definitions/platform-setup.js +313 -752
- package/dist/tools/definitions/platform-setup.js.map +1 -1
- package/dist/tools/definitions/platform-widget-page-rules.schema.d.ts +10 -0
- package/dist/tools/definitions/platform-widget-page-rules.schema.js +7 -0
- package/dist/tools/definitions/platform-widget-page-rules.schema.js.map +1 -0
- package/dist/tools/definitions/prompt-authoring.constants.d.ts +2 -0
- package/dist/tools/definitions/prompt-authoring.constants.js +3 -0
- package/dist/tools/definitions/prompt-authoring.constants.js.map +1 -0
- package/dist/tools/definitions/prompt-batch-controls.d.ts +5 -0
- package/dist/tools/definitions/prompt-batch-controls.js +40 -0
- package/dist/tools/definitions/prompt-batch-controls.js.map +1 -0
- package/dist/tools/definitions/prompt-draft-authoring.d.ts +5 -0
- package/dist/tools/definitions/prompt-draft-authoring.js +24 -0
- package/dist/tools/definitions/prompt-draft-authoring.js.map +1 -0
- package/dist/tools/definitions/prompt-text-projection.d.ts +11 -0
- package/dist/tools/definitions/prompt-text-projection.js +62 -0
- package/dist/tools/definitions/prompt-text-projection.js.map +1 -0
- package/dist/tools/definitions/reviewer-paid.d.ts +19 -0
- package/dist/tools/definitions/reviewer-paid.js +115 -0
- package/dist/tools/definitions/reviewer-paid.js.map +1 -0
- package/dist/tools/definitions/routing-condition-projection.d.ts +31 -0
- package/dist/tools/definitions/routing-condition-projection.js +97 -0
- package/dist/tools/definitions/routing-condition-projection.js.map +1 -0
- package/dist/tools/definitions/schedule-selection-hints.d.ts +3 -0
- package/dist/tools/definitions/schedule-selection-hints.js +42 -0
- package/dist/tools/definitions/schedule-selection-hints.js.map +1 -0
- package/dist/tools/definitions/{scheduled-tasks.d.ts → scheduled-task-alias.d.ts} +12 -10
- package/dist/tools/definitions/scheduled-task-alias.js +207 -0
- package/dist/tools/definitions/scheduled-task-alias.js.map +1 -0
- package/dist/tools/definitions/session.js +3 -3
- package/dist/tools/definitions/session.js.map +1 -1
- package/dist/tools/definitions/setup-init-operation.schema.d.ts +2 -0
- package/dist/tools/definitions/setup-init-operation.schema.js +6 -0
- package/dist/tools/definitions/setup-init-operation.schema.js.map +1 -0
- package/dist/tools/definitions/shared-input.helpers.d.ts +51 -0
- package/dist/tools/definitions/shared-input.helpers.js +323 -0
- package/dist/tools/definitions/shared-input.helpers.js.map +1 -0
- package/dist/tools/definitions/shared.d.ts +401 -307
- package/dist/tools/definitions/shared.js +430 -652
- package/dist/tools/definitions/shared.js.map +1 -1
- package/dist/tools/definitions/shipped-output-names.d.ts +19 -0
- package/dist/tools/definitions/shipped-output-names.js +123 -0
- package/dist/tools/definitions/shipped-output-names.js.map +1 -0
- package/dist/tools/definitions/task-state.d.ts +4 -4
- package/dist/tools/definitions/task-state.js +2 -1
- package/dist/tools/definitions/task-state.js.map +1 -1
- package/dist/tools/definitions/telegram-personal-capacity.d.ts +4 -0
- package/dist/tools/definitions/telegram-personal-capacity.js +18 -0
- package/dist/tools/definitions/telegram-personal-capacity.js.map +1 -0
- package/dist/tools/definitions/telegram-personal-management.d.ts +34 -0
- package/dist/tools/definitions/telegram-personal-management.js +139 -0
- package/dist/tools/definitions/telegram-personal-management.js.map +1 -0
- package/dist/tools/definitions/telegram-personal-restrictions.d.ts +19 -0
- package/dist/tools/definitions/telegram-personal-restrictions.js +109 -0
- package/dist/tools/definitions/telegram-personal-restrictions.js.map +1 -0
- package/dist/tools/definitions/telegram-pool-policy.d.ts +8 -0
- package/dist/tools/definitions/telegram-pool-policy.js +56 -0
- package/dist/tools/definitions/telegram-pool-policy.js.map +1 -0
- package/dist/tools/definitions/touch-history-alias.d.ts +4 -0
- package/dist/tools/definitions/touch-history-alias.js +99 -0
- package/dist/tools/definitions/touch-history-alias.js.map +1 -0
- package/dist/tools/definitions/trigger-action-item.schema.d.ts +254 -0
- package/dist/tools/definitions/trigger-action-item.schema.js +121 -0
- package/dist/tools/definitions/trigger-action-item.schema.js.map +1 -0
- package/dist/tools/definitions/trigger-argument.schema.d.ts +14 -0
- package/dist/tools/definitions/trigger-argument.schema.js +23 -0
- package/dist/tools/definitions/trigger-argument.schema.js.map +1 -0
- package/dist/tools/definitions/trigger-claim-alias.d.ts +10 -0
- package/dist/tools/definitions/trigger-claim-alias.js +90 -0
- package/dist/tools/definitions/trigger-claim-alias.js.map +1 -0
- package/dist/tools/definitions/trigger-echo-projection.d.ts +1 -0
- package/dist/tools/definitions/trigger-echo-projection.js +41 -0
- package/dist/tools/definitions/trigger-echo-projection.js.map +1 -0
- package/dist/tools/definitions/trigger-upsert.tool.d.ts +41 -0
- package/dist/tools/definitions/trigger-upsert.tool.js +159 -0
- package/dist/tools/definitions/trigger-upsert.tool.js.map +1 -0
- package/dist/tools/definitions/v15-port-descriptions.d.ts +11 -0
- package/dist/tools/definitions/v15-port-descriptions.js +30 -0
- package/dist/tools/definitions/v15-port-descriptions.js.map +1 -0
- package/dist/tools/definitions/variables.d.ts +44 -0
- package/dist/tools/definitions/variables.js +310 -0
- package/dist/tools/definitions/variables.js.map +1 -0
- package/dist/tools/definitions/voice-action-input.d.ts +9 -0
- package/dist/tools/definitions/voice-action-input.js +141 -0
- package/dist/tools/definitions/voice-action-input.js.map +1 -0
- package/dist/tools/definitions/widget-customization-compat.d.ts +51 -0
- package/dist/tools/definitions/widget-customization-compat.js +23 -0
- package/dist/tools/definitions/widget-customization-compat.js.map +1 -0
- package/dist/tools/definitions.d.ts +1134 -617
- package/dist/tools/definitions.js +63 -27
- package/dist/tools/definitions.js.map +1 -1
- package/dist/tools/description-localization.js +3 -2
- package/dist/tools/description-localization.js.map +1 -1
- package/dist/tools/follow-up-request.d.ts +19 -0
- package/dist/tools/follow-up-request.js +81 -0
- package/dist/tools/follow-up-request.js.map +1 -0
- package/dist/tools/followup-revision.d.ts +4 -0
- package/dist/tools/followup-revision.js +29 -0
- package/dist/tools/followup-revision.js.map +1 -0
- package/dist/tools/incomplete-list.js +4 -0
- package/dist/tools/incomplete-list.js.map +1 -1
- package/dist/tools/inventory.js +47 -11
- package/dist/tools/inventory.js.map +1 -1
- package/dist/tools/operation-recovery.d.ts +4 -0
- package/dist/tools/operation-recovery.js +33 -0
- package/dist/tools/operation-recovery.js.map +1 -0
- package/dist/tools/registry-mapping-primary.cases.d.ts +2 -0
- package/dist/tools/registry-mapping-primary.cases.js +765 -0
- package/dist/tools/registry-mapping-primary.cases.js.map +1 -0
- package/dist/tools/registry-mapping-secondary.cases.d.ts +2 -0
- package/dist/tools/registry-mapping-secondary.cases.js +626 -0
- package/dist/tools/registry-mapping-secondary.cases.js.map +1 -0
- package/dist/tools/registry-mapping.cases.d.ts +8 -0
- package/dist/tools/registry-mapping.cases.js +170 -0
- package/dist/tools/registry-mapping.cases.js.map +1 -0
- package/dist/tools/registry-test-fixtures.d.ts +50 -0
- package/dist/tools/registry-test-fixtures.js +120 -0
- package/dist/tools/registry-test-fixtures.js.map +1 -0
- package/dist/tools/registry.d.ts +2 -0
- package/dist/tools/registry.js +84 -52
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/result.d.ts +1 -0
- package/dist/tools/result.js +90 -22
- package/dist/tools/result.js.map +1 -1
- package/dist/tools/toolsets.d.ts +16 -0
- package/dist/tools/toolsets.js +25 -1
- package/dist/tools/toolsets.js.map +1 -1
- package/dist/types/api-contract.gen.d.ts +131892 -22453
- package/dist/utils/credential-signatures.d.ts +3 -0
- package/dist/utils/credential-signatures.js +10 -0
- package/dist/utils/credential-signatures.js.map +1 -0
- package/dist/utils/data-source-column-name.d.ts +10 -0
- package/dist/utils/data-source-column-name.js +36 -0
- package/dist/utils/data-source-column-name.js.map +1 -0
- package/dist/utils/logger.d.ts +1 -0
- package/dist/utils/logger.js +32 -8
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/secret-read-boundary.d.ts +2 -0
- package/dist/utils/secret-read-boundary.js +88 -0
- package/dist/utils/secret-read-boundary.js.map +1 -0
- package/dist/utils/setup-secrets.d.ts +4 -0
- package/dist/utils/setup-secrets.js +40 -0
- package/dist/utils/setup-secrets.js.map +1 -0
- package/docs/agent-models.md +9 -0
- package/docs/agent-usage-guide.full.ru.md +1 -4
- package/docs/analytics-contract.md +67 -0
- package/docs/async-operation-lifecycle.md +10 -3
- package/docs/connect.ru.md +144 -4
- package/docs/contact-company-profile.md +17 -0
- package/docs/contact-recommendations.md +7 -0
- package/docs/crm-stage-pool.md +73 -0
- package/docs/customer-data.md +61 -0
- package/docs/dialogue-reprocess.md +37 -0
- package/docs/edit-versions.md +36 -0
- package/docs/failure-semantics.md +17 -9
- package/docs/help-navigation.md +15 -42
- package/docs/host-compatibility-matrix.md +72 -93
- package/docs/host-setup.md +33 -35
- package/docs/invariants/public-api-and-contracts.md +16 -0
- package/docs/legacy-action-settings.md +21 -0
- package/docs/main-transfer-dependencies.md +38 -0
- package/docs/mcp2-parity.md +50 -0
- package/docs/modules/analytics.md +79 -0
- package/docs/modules/besales-mcp.md +144 -0
- package/docs/modules/dialog-review-report.md +38 -0
- package/docs/modules/dialogue-followup-adapters.md +39 -0
- package/docs/modules/message-reactions.md +17 -0
- package/docs/modules/network-mode.md +284 -0
- package/docs/modules/prompt-batch-and-dialogue-controls.md +69 -0
- package/docs/pii-policy.md +21 -16
- package/docs/response-size-budget.md +197 -7
- package/docs/secret-read-boundary.md +102 -0
- package/docs/task-state.md +7 -2
- package/docs/telegram-personal-management.md +50 -0
- package/docs/telegram-personal-restrictions.md +87 -0
- package/docs/telegram-pool-policy.md +19 -0
- package/docs/tool-effects.md +15 -9
- package/docs/tool-surface.md +205 -4
- package/docs/voice-actions-and-inbox.md +95 -0
- package/docs/wazzup-instagram-comments.md +26 -0
- package/package.json +17 -10
- package/scripts/api-source-loader.spec.mjs +40 -0
- package/scripts/audit-bridge-controls.mjs +129 -0
- package/scripts/audit-revert-mutants.mjs +107 -0
- package/scripts/bridge-api-input.spec.mjs +98 -0
- package/scripts/bridge-controls-mutants.mjs +130 -0
- package/scripts/brx3-shipped-refusals.spec.mjs +149 -0
- package/scripts/brx4-ledger-payload.spec.mjs +127 -0
- package/scripts/build-onprem.mjs +108 -0
- package/scripts/connect-clients.sh +141 -0
- package/scripts/connect-scopes.mjs +166 -0
- package/scripts/connect-scopes.spec.mjs +83 -0
- package/scripts/emit-personal-link-carrier.mjs +31 -0
- package/scripts/emit-setup-init-schemas.mjs +24 -0
- package/scripts/emit-tool-routes.mjs +878 -0
- package/scripts/emit-tool-routes.spec.mjs +300 -0
- package/scripts/followup-registry.spec.mjs +107 -0
- package/scripts/generate-crm-rotation-contract.mjs +98 -0
- package/scripts/generate-followup-session-contract.mjs +16 -0
- package/scripts/getcourse-text-source.spec.mjs +110 -0
- package/scripts/icp-import-verification/mutate.cjs +70 -0
- package/scripts/import-secret-read-contract.mjs +53 -0
- package/scripts/install-claude-desktop.js +1 -1
- package/scripts/lag-decisions.mjs +37 -0
- package/scripts/lag-decisions.spec.mjs +87 -0
- package/scripts/lag-open-task-owners.mjs +46 -0
- package/scripts/lag-open-task-owners.spec.mjs +78 -0
- package/scripts/lag-payload.mjs +10 -0
- package/scripts/legacy-action-lag.spec.mjs +22 -0
- package/scripts/legacy-field-refusal.shipped.spec.mjs +99 -0
- package/scripts/mcpcompat-handler.mjs +34 -0
- package/scripts/mcpcompat-loader.mjs +36 -0
- package/scripts/mcpcompat-typescript.mjs +3 -0
- package/scripts/platform-settings-shipped-parity.spec.mjs +89 -0
- package/scripts/prbr-round1-recheck.spec.mjs +605 -0
- package/scripts/prbr-shipped-compatibility.spec.mjs +276 -0
- package/scripts/publish-mcp-registry.mjs +98 -0
- package/scripts/publish-mcp-registry.spec.mjs +68 -0
- package/scripts/record-scheduled-task-call.mjs +26 -0
- package/scripts/refusal-probe.mjs +17 -0
- package/scripts/refusal-probe.spec.mjs +29 -0
- package/scripts/registry-diff.mjs +502 -0
- package/scripts/registry-diff.spec.mjs +787 -0
- package/scripts/request-query.mjs +43 -0
- package/scripts/request-query.spec.mjs +82 -0
- package/scripts/route-lag.mjs +23 -0
- package/scripts/route-lag.spec.mjs +30 -0
- package/scripts/sample-args.mjs +174 -0
- package/scripts/sample-args.spec.mjs +160 -0
- package/scripts/shipped-definitions.mjs +197 -0
- package/scripts/shipped-definitions.spec.mjs +57 -0
- package/scripts/shipped-inputs.spec.mjs +136 -0
- package/scripts/shipped-recordings.spec.mjs +19 -0
- package/scripts/shipped-ref.d.mts +5 -0
- package/scripts/shipped-ref.mjs +20 -0
- package/scripts/shipped-ref.spec.mjs +59 -0
- package/scripts/shipped-registry.mjs +107 -0
- package/scripts/shipped-sample-candidates.mjs +69 -0
- package/scripts/shipped-sample-candidates.spec.mjs +117 -0
- package/scripts/shipped-sample.mjs +871 -0
- package/scripts/shipped-sample.spec.mjs +451 -0
- package/scripts/sync-agent-model-schemas.mjs +72 -0
- package/scripts/sync-api-contracts.mjs +85 -0
- package/scripts/sync-api-contracts.spec.mjs +144 -0
- package/scripts/sync-contract-ledger-schemas.mjs +161 -0
- package/scripts/sync-crm-stage-pool-schema.mjs +85 -0
- package/scripts/sync-prompt-draft-schema.mjs +92 -0
- package/scripts/sync-route-map.mjs +94 -0
- package/scripts/sync-schema-descriptions.mjs +25 -0
- package/scripts/sync-tool-inventory.mjs +27 -0
- package/scripts/sync-trigger-argument-schema.mjs +97 -0
- package/scripts/sync-trigger-argument-schema.spec.mjs +91 -0
- package/scripts/sync-trigger-event-schema.mjs +20 -0
- package/scripts/sync-trigger-repeat-mapping.mjs +12 -0
- package/scripts/sync-trigger-task-schema.mjs +45 -0
- package/scripts/sync-voice-actions-contract.mjs +67 -0
- package/scripts/sync-voice-actions-tools.mjs +97 -0
- package/scripts/sync-wave-id-schemas.mjs +55 -0
- package/scripts/telegram-personal-confirmation-mutants.mjs +74 -0
- package/scripts/tool-input-schemas.mjs +46 -0
- package/scripts/tool-input-schemas.spec.mjs +50 -0
- package/scripts/verify-followup-adapters.mjs +235 -0
- package/scripts/verify-secret-read-import.mjs +84 -0
- package/scripts/verify-secret-read-mutants.mjs +143 -0
- package/dist/tools/definitions/analytics.d.ts +0 -40
- package/dist/tools/definitions/analytics.js +0 -233
- package/dist/tools/definitions/analytics.js.map +0 -1
- package/dist/tools/definitions/broadcast-mailing-variants.d.ts +0 -41
- package/dist/tools/definitions/broadcast-mailing-variants.js +0 -194
- package/dist/tools/definitions/broadcast-mailing-variants.js.map +0 -1
- package/dist/tools/definitions/dialogue-audit.d.ts +0 -38
- package/dist/tools/definitions/dialogue-audit.js +0 -292
- package/dist/tools/definitions/dialogue-audit.js.map +0 -1
- package/dist/tools/definitions/getcourse-wave.js +0 -519
- package/dist/tools/definitions/getcourse-wave.js.map +0 -1
- package/dist/tools/definitions/operational-overview.d.ts +0 -3
- package/dist/tools/definitions/operational-overview.js +0 -23
- package/dist/tools/definitions/operational-overview.js.map +0 -1
- package/dist/tools/definitions/scheduled-tasks.js +0 -173
- package/dist/tools/definitions/scheduled-tasks.js.map +0 -1
- package/dist/tools/definitions/trigger-contact-claims.d.ts +0 -7
- package/dist/tools/definitions/trigger-contact-claims.js +0 -60
- package/dist/tools/definitions/trigger-contact-claims.js.map +0 -1
- package/dist/tools/registry-mapping-cases-core.d.ts +0 -38
- package/dist/tools/registry-mapping-cases-core.js +0 -963
- package/dist/tools/registry-mapping-cases-core.js.map +0 -1
- package/dist/tools/registry-mapping-cases-platform.d.ts +0 -2
- package/dist/tools/registry-mapping-cases-platform.js +0 -1052
- package/dist/tools/registry-mapping-cases-platform.js.map +0 -1
- package/dist/tools/trigger-action-config.d.ts +0 -49
- package/dist/tools/trigger-action-config.js +0 -171
- package/dist/tools/trigger-action-config.js.map +0 -1
- package/docs/evals/model-behavior-scorecard.md +0 -80
- package/docs/operation-coverage.md +0 -114
- package/scripts/mock-credentials.js +0 -77
- package/scripts/model-eval-server.js +0 -213
- package/scripts/run-model-eval.js +0 -447
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const reactivationConfigSchema: z.ZodObject<{
|
|
3
|
+
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
4
|
+
filterMode: z.ZodOptional<z.ZodEnum<{
|
|
5
|
+
status: "status";
|
|
6
|
+
variable: "variable";
|
|
7
|
+
eventType: "eventType";
|
|
8
|
+
}>>;
|
|
9
|
+
sequenceConditions: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
10
|
+
variable: z.ZodString;
|
|
11
|
+
op: z.ZodEnum<{
|
|
12
|
+
in: "in";
|
|
13
|
+
eq: "eq";
|
|
14
|
+
neq: "neq";
|
|
15
|
+
}>;
|
|
16
|
+
value: z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>;
|
|
17
|
+
}, z.core.$loose>>>;
|
|
18
|
+
steps: z.ZodArray<z.ZodObject<{
|
|
19
|
+
stepType: z.ZodOptional<z.ZodEnum<{
|
|
20
|
+
message: "message";
|
|
21
|
+
webhook: "webhook";
|
|
22
|
+
}>>;
|
|
23
|
+
scheduleMode: z.ZodOptional<z.ZodEnum<{
|
|
24
|
+
offset: "offset";
|
|
25
|
+
clock: "clock";
|
|
26
|
+
}>>;
|
|
27
|
+
anchorMode: z.ZodOptional<z.ZodEnum<{
|
|
28
|
+
variable: "variable";
|
|
29
|
+
last_inbound: "last_inbound";
|
|
30
|
+
}>>;
|
|
31
|
+
anchorVariable: z.ZodOptional<z.ZodString>;
|
|
32
|
+
atTime: z.ZodOptional<z.ZodString>;
|
|
33
|
+
dayOffset: z.ZodOptional<z.ZodNumber>;
|
|
34
|
+
validityMinutes: z.ZodOptional<z.ZodNumber>;
|
|
35
|
+
slotGroup: z.ZodOptional<z.ZodString>;
|
|
36
|
+
conditions: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
37
|
+
variable: z.ZodString;
|
|
38
|
+
op: z.ZodEnum<{
|
|
39
|
+
in: "in";
|
|
40
|
+
eq: "eq";
|
|
41
|
+
neq: "neq";
|
|
42
|
+
}>;
|
|
43
|
+
value: z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>;
|
|
44
|
+
}, z.core.$loose>>>;
|
|
45
|
+
skipIfContactRepliedSincePreviousSlot: z.ZodOptional<z.ZodBoolean>;
|
|
46
|
+
delayHours: z.ZodOptional<z.ZodNumber>;
|
|
47
|
+
delayMinutes: z.ZodOptional<z.ZodNumber>;
|
|
48
|
+
messageConfig: z.ZodOptional<z.ZodObject<{
|
|
49
|
+
type: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
50
|
+
content: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
51
|
+
templateId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
52
|
+
templateValues: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodUnknown>>>;
|
|
53
|
+
contentMode: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
54
|
+
generationContext: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
55
|
+
fallbackContent: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
56
|
+
attachments: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodUnknown>>>;
|
|
57
|
+
buttons: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodUnknown>>>;
|
|
58
|
+
crmNote: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
59
|
+
}, z.core.$loose>>;
|
|
60
|
+
}, z.core.$loose>>;
|
|
61
|
+
sessionTimeVariable: z.ZodOptional<z.ZodString>;
|
|
62
|
+
sessionDayOffsets: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
|
|
63
|
+
sessionDurationMinutes: z.ZodOptional<z.ZodNumber>;
|
|
64
|
+
contactVariablesOnSend: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodString>>>;
|
|
65
|
+
}, z.core.$loose>;
|
|
66
|
+
/**
|
|
67
|
+
* Применяет типизированную схему к `config` ТОЛЬКО для реактивационных цепочек.
|
|
68
|
+
*
|
|
69
|
+
* Через `z.union([reactivationConfigSchema, anyObjectSchema])` это делать нельзя: второй вариант
|
|
70
|
+
* принимает любой объект, поэтому union проходит всегда и ограничения (`steps.min(1)`,
|
|
71
|
+
* `filterMode` enum) не срабатывают ни разу — типизация выглядит рабочей, но её нет.
|
|
72
|
+
*
|
|
73
|
+
* @param input - Разобранный ввод тула
|
|
74
|
+
* @param ctx - Контекст zod для добавления ошибок
|
|
75
|
+
*/
|
|
76
|
+
export declare const refineFollowUpConfig: (input: {
|
|
77
|
+
type?: unknown;
|
|
78
|
+
config?: unknown;
|
|
79
|
+
}, ctx: z.RefinementCtx) => void;
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { MAX_CLOCK_DAY_OFFSET, MAX_SESSION_DURATION_MINUTES, } from "../../shared/constants/followup-session.constants.js";
|
|
3
|
+
import { FOLLOWUP_NOTE_MAX_VALUE_CODE_UNITS, FOLLOWUP_NOTE_MAX_VARIABLES, } from "../../shared/constants/followup-note.constants.js";
|
|
4
|
+
/**
|
|
5
|
+
* Схема конфига реактивационной цепочки.
|
|
6
|
+
*
|
|
7
|
+
* ⚠️ Ключи ВНУТРИ `config` — camelCase, в отличие от snake_case параметров тулов: `config`
|
|
8
|
+
* уходит в тело запроса БЕЗ преобразования, а рантайм читает `anchorMode`/`anchorVariable`/
|
|
9
|
+
* `slotGroup`. Назвать их в snake_case значило бы сохранить конфиг, который рантайм не
|
|
10
|
+
* прочитает: календарный шаг молча стал бы обычным offset-шагом.
|
|
11
|
+
*
|
|
12
|
+
* ⚠️ `.passthrough()` на каждом уровне обязателен по двум причинам: legacy-конфиги несут поля
|
|
13
|
+
* вне этой схемы (`finalAction`, `maxCycleCount`, `webhookConfig`, …), и сама схема исполняется
|
|
14
|
+
* на машине оператора — она обновляется независимо от бэкенда и не должна отвергать конфиг,
|
|
15
|
+
* который бэкенд принял бы.
|
|
16
|
+
*/
|
|
17
|
+
const variableConditionSchema = z
|
|
18
|
+
.object({
|
|
19
|
+
variable: z.string().describe("Имя per-contact переменной"),
|
|
20
|
+
op: z.enum(["eq", "neq", "in"]),
|
|
21
|
+
value: z
|
|
22
|
+
.union([z.string(), z.array(z.string())])
|
|
23
|
+
.describe("Строка для eq/neq, непустой массив непустых строк для 'in'"),
|
|
24
|
+
})
|
|
25
|
+
.passthrough();
|
|
26
|
+
/**
|
|
27
|
+
* Сообщение шага. Поля перечислены поимённо не ради валидации, а ради ОБНАРУЖИМОСТИ: раньше
|
|
28
|
+
* здесь стоял безымянный объект, и «как задать в шаге WABA-шаблон вместо текста» неоткуда было
|
|
29
|
+
* узнать — форма не описана ни в схеме тула, ни в OpenAPI.
|
|
30
|
+
*
|
|
31
|
+
* `.passthrough()` обязателен: конфиги несут поля вне этого списка (wabaVariableMapping и др.),
|
|
32
|
+
* а схема живёт на машине оператора и обновляется независимо от бэкенда.
|
|
33
|
+
*/
|
|
34
|
+
const followUpMessageConfigSchema = z
|
|
35
|
+
.object({
|
|
36
|
+
type: z
|
|
37
|
+
.string()
|
|
38
|
+
.nullish()
|
|
39
|
+
.describe("'text' — обычный текст в content; 'template' — ШАБЛОН WABA (Wazzup), тогда обязателен " +
|
|
40
|
+
"templateId; 'media' — вложения. Шаблон уходит и при ЗАКРЫТОМ 24-часовом окне " +
|
|
41
|
+
"переписки, обычный текст — нет (шаг молча ждёт реплики клиента)"),
|
|
42
|
+
content: z.string().nullish().describe("Текст для type=text"),
|
|
43
|
+
templateId: z
|
|
44
|
+
.string()
|
|
45
|
+
.nullish()
|
|
46
|
+
.describe("ID шаблона WABA. Берётся из besales_wazzup_templates_list — это id шаблона канала, " +
|
|
47
|
+
"а не его имя"),
|
|
48
|
+
templateValues: z
|
|
49
|
+
.array(z.unknown())
|
|
50
|
+
.nullish()
|
|
51
|
+
.describe("Значения подстановок шаблона по порядку ({{1}}, {{2}}, …). Поддерживают переменные " +
|
|
52
|
+
"контакта — они резолвятся перед отправкой"),
|
|
53
|
+
contentMode: z
|
|
54
|
+
.string()
|
|
55
|
+
.nullish()
|
|
56
|
+
.describe("'static' (по умолчанию) либо 'dynamic' — текст генерирует LLM"),
|
|
57
|
+
generationContext: z.string().nullish().describe('Инструкция LLM при contentMode=dynamic'),
|
|
58
|
+
fallbackContent: z.string().nullish().describe('Запасной текст, если генерация не удалась'),
|
|
59
|
+
attachments: z.array(z.unknown()).nullish().describe('Вложения: [{ storedFileId, caption? }]'),
|
|
60
|
+
buttons: z.array(z.unknown()).nullish(),
|
|
61
|
+
crmNote: z.string().nullish(),
|
|
62
|
+
})
|
|
63
|
+
.passthrough();
|
|
64
|
+
const reactivationStepSchema = z
|
|
65
|
+
.object({
|
|
66
|
+
stepType: z.enum(["message", "webhook"]).optional(),
|
|
67
|
+
scheduleMode: z
|
|
68
|
+
.enum(["offset", "clock"])
|
|
69
|
+
.optional()
|
|
70
|
+
.describe("'clock' — время суток + сдвиг дней вместо задержки от последней активности"),
|
|
71
|
+
anchorMode: z
|
|
72
|
+
.enum(["last_inbound", "variable"])
|
|
73
|
+
.optional()
|
|
74
|
+
.describe("'variable' — расписание считается от даты из переменной контакта (календарная цепочка)"),
|
|
75
|
+
anchorVariable: z
|
|
76
|
+
.string()
|
|
77
|
+
.optional()
|
|
78
|
+
.describe("Имя переменной с якорной датой. Обязательно при anchorMode=variable; переменная должна " +
|
|
79
|
+
"существовать у платформы и НЕ быть константой"),
|
|
80
|
+
atTime: z
|
|
81
|
+
.string()
|
|
82
|
+
.optional()
|
|
83
|
+
.describe('Время суток "HH:MM" для scheduleMode=clock'),
|
|
84
|
+
// ⚠️ Нижняя граница — зеркало бэкенда (`MIN_CLOCK_DAY_OFFSET = -7`): отрицательный сдвиг —
|
|
85
|
+
// касание ДО якоря («накануне эфира»). С `min(0)` MCP не мог пересохранить ни одну цепочку с
|
|
86
|
+
// такими шагами (21.09.2026: «Светлана» с шагами dayOffset -1 отвергалась целиком).
|
|
87
|
+
dayOffset: z
|
|
88
|
+
.number()
|
|
89
|
+
.int()
|
|
90
|
+
.min(-7)
|
|
91
|
+
.max(30)
|
|
92
|
+
.optional()
|
|
93
|
+
.describe("Сдвиг в днях от якоря для scheduleMode=clock; отрицательный — до якоря"),
|
|
94
|
+
validityMinutes: z
|
|
95
|
+
.number()
|
|
96
|
+
.int()
|
|
97
|
+
.min(1)
|
|
98
|
+
.optional()
|
|
99
|
+
.describe("Касание, опоздавшее дольше окна, пропускается; по умолчанию 45 минут"),
|
|
100
|
+
slotGroup: z
|
|
101
|
+
.string()
|
|
102
|
+
.optional()
|
|
103
|
+
.describe("Метка взаимоисключающих вариантов одного момента (first-match-wins). Варианты ОБЯЗАНЫ " +
|
|
104
|
+
"идти в steps подряд: разнесённые по цепочке перестают быть взаимоисключающими"),
|
|
105
|
+
conditions: z
|
|
106
|
+
.array(variableConditionSchema)
|
|
107
|
+
.max(3)
|
|
108
|
+
.optional()
|
|
109
|
+
.describe('Условия на переменные контакта; не прошли — шаг пропускается'),
|
|
110
|
+
skipIfContactRepliedSincePreviousSlot: z
|
|
111
|
+
.boolean()
|
|
112
|
+
.optional()
|
|
113
|
+
.describe('Не отправлять шаг, если клиент писал ПОСЛЕ предыдущего слота цепочки. Даёт правило «ответил — ближайшее касание пропускаем, через одно продолжаем»: ответ в 13:05 гасит касание в 16:00, а к 17:00 предыдущим слотом становится 16:00, ответ старше него — и цепочка идёт дальше. Прогресс при пропуске двигается, контакт не зависает. Только для календарного шага (scheduleMode=clock + anchorMode=variable): на остальных рантайм и так проверяет свежесть входящего, и флаг там отвергается.'),
|
|
114
|
+
delayHours: z.number().optional(),
|
|
115
|
+
delayMinutes: z.number().optional(),
|
|
116
|
+
messageConfig: followUpMessageConfigSchema.optional(),
|
|
117
|
+
})
|
|
118
|
+
.passthrough()
|
|
119
|
+
// ⚠️ Зеркалит правила бэкенда, чтобы промах ловился ЛОКАЛЬНО. Иначе вызов проходит нашу
|
|
120
|
+
// проверку, пользователь подтверждает запись, и только сервер отвечает 400 — самый дорогой
|
|
121
|
+
// момент, чтобы узнать про опечатку.
|
|
122
|
+
.superRefine((step, ctx) => {
|
|
123
|
+
const message = step.messageConfig;
|
|
124
|
+
const isDynamic = message?.contentMode === "dynamic";
|
|
125
|
+
const hasAttachments = !!message?.attachments?.length;
|
|
126
|
+
if (message?.type === "template" && !message.templateId) {
|
|
127
|
+
ctx.addIssue({
|
|
128
|
+
code: z.ZodIssueCode.custom,
|
|
129
|
+
path: ["messageConfig", "templateId"],
|
|
130
|
+
message: "Для type=template обязателен templateId (id шаблона из besales_wazzup_templates_list)",
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
if (message?.type === "text" &&
|
|
134
|
+
!message.content &&
|
|
135
|
+
!isDynamic &&
|
|
136
|
+
!hasAttachments) {
|
|
137
|
+
ctx.addIssue({
|
|
138
|
+
code: z.ZodIssueCode.custom,
|
|
139
|
+
path: ["messageConfig", "content"],
|
|
140
|
+
message: "Для type=text обязателен content — кроме шага из одних вложений и contentMode=dynamic",
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
export const reactivationConfigSchema = z
|
|
145
|
+
.object({
|
|
146
|
+
enabled: z.boolean().optional(),
|
|
147
|
+
filterMode: z
|
|
148
|
+
.enum(["status", "eventType", "variable"])
|
|
149
|
+
.optional()
|
|
150
|
+
.describe("БАЗОВЫЙ отбор контактов: по статусу CRM, по типу события платформы либо " +
|
|
151
|
+
"'variable' = базового фильтра нет (отбор только по sequenceConditions). Условия по " +
|
|
152
|
+
"переменным ОРТОГОНАЛЬНЫ этому выбору и добавляются к нему через И — чтобы ветвить " +
|
|
153
|
+
"цепочки по варианту рассылки, сохранив отбор по событию, бери 'eventType' и задай " +
|
|
154
|
+
"sequenceConditions, а НЕ 'variable'. Неизвестное значение НЕ включает ни один фильтр — " +
|
|
155
|
+
"цепочка уйдёт всем контактам канала, поэтому бэкенд отвергает такой конфиг"),
|
|
156
|
+
sequenceConditions: z
|
|
157
|
+
.array(variableConditionSchema)
|
|
158
|
+
.optional()
|
|
159
|
+
.describe("Условия принадлежности контакта цепочке, соединяются через И. Применяются при ЛЮБОМ " +
|
|
160
|
+
"filterMode (при 'variable' обязателен и непуст, иначе цепочка не выберет никого). " +
|
|
161
|
+
"Ветвление по измерениям рассылки GetCourse: WAVE_MAILING_VARIANT — UUID варианта из " +
|
|
162
|
+
"каталога воркспейса, а НЕ его имя («first-ver» будет отвергнут); WAVE_PRODUCT — код " +
|
|
163
|
+
"продукта строчными без пробелов («dbo»); WAVE_FUNNEL — КЛЮЧ воронки (f-код «f11», " +
|
|
164
|
+
"иначе вся строка строчными), а НЕ метка запуска («f11 — ВК NR ДБО» будет отвергнут); " +
|
|
165
|
+
"WAVE_SEGMENT — имя сегмента. Значения проставляет запуск рассылки, у контакта без " +
|
|
166
|
+
"рассылки их нет. " +
|
|
167
|
+
"ВАЖНО: отдельные цепочки НЕ взаимоисключающи — прогресс изолирован по sequenceId, " +
|
|
168
|
+
"поэтому безусловная «ловящая» цепочка рядом с eq A и eq B не подстрахует, а УДВОИТ " +
|
|
169
|
+
"отправку. Набор цепочек обязан быть строгим разбиением: eq A, eq B и fallback " +
|
|
170
|
+
"neq A AND neq B (у контакта без переменной eq/in → false, neq → true)"),
|
|
171
|
+
steps: z.array(reactivationStepSchema).min(1),
|
|
172
|
+
sessionTimeVariable: z
|
|
173
|
+
.string()
|
|
174
|
+
.min(1)
|
|
175
|
+
.optional()
|
|
176
|
+
.describe("Имя переменной контакта с часом эфира; константы и секреты сервер отвергает"),
|
|
177
|
+
sessionDayOffsets: z
|
|
178
|
+
.array(z.number().int().min(0).max(MAX_CLOCK_DAY_OFFSET))
|
|
179
|
+
.min(1)
|
|
180
|
+
.optional()
|
|
181
|
+
.describe("Дни серии от даты первого эфира; повтор дня отвергает сервер с адресом поля"),
|
|
182
|
+
sessionDurationMinutes: z
|
|
183
|
+
.number()
|
|
184
|
+
.int()
|
|
185
|
+
.positive()
|
|
186
|
+
.max(MAX_SESSION_DURATION_MINUTES)
|
|
187
|
+
.optional()
|
|
188
|
+
.describe("Длительность эфира в минутах, не больше суток; требует дни серии и переменную часа"),
|
|
189
|
+
contactVariablesOnSend: z
|
|
190
|
+
.record(z.string().min(1), z.string().min(1).max(500))
|
|
191
|
+
.refine((value) => Object.keys(value).length > 0 && Object.keys(value).length <= 10, {
|
|
192
|
+
message: "от 1 до 10 переменных",
|
|
193
|
+
})
|
|
194
|
+
.nullable()
|
|
195
|
+
.optional()
|
|
196
|
+
.describe('Переменные, которые цепочка ЗАПИСЫВАЕТ контакту, как только РЕАЛЬНО отправила ему шаг-сообщение: { intro: "это снова Светлана." }. Это «записка» для тех, кто будет писать человеку после цепочки. Рабочий пример — фраза знакомства: текст рассылки начинается с {intro}, у площадки рассылки объявлена КОНСТАНТА intro с обычной фразой («здравствуйте! Это Светлана, помощница…»), а цепочка персональной воронки пишет своим людям intro = «это снова Светлана…» — значение контакта в тексте рассылки побеждает умолчание, и человек после недели в воронке не получает знакомство заново. Настраивается НА ЦЕПОЧКУ, а не на шаг: шага, который доходит до всех, нет (лучший — 87 % людей), а запись на любом отправленном шаге покрывает 99 %. Пишется только после ПОДТВЕРЖДЁННОЙ отправки шага-сообщения (вебхук и неудавшаяся отправка не считаются); совпадающее значение повторно не пишется. Каждое имя обязано быть объявлено на площадке цепочки переменной КОНТАКТА (не константой) — иначе сохранение вернёт 400: при отправке опечатка была бы тихой. Не больше 10 переменных, значение — непустая строка до 500 символов (границы бэкенда MAX_CONTACT_VARIABLES_ON_SEND / MAX_CONTACT_VARIABLE_ON_SEND_VALUE_LENGTH).'),
|
|
197
|
+
})
|
|
198
|
+
.passthrough();
|
|
199
|
+
/**
|
|
200
|
+
* Применяет типизированную схему к `config` ТОЛЬКО для реактивационных цепочек.
|
|
201
|
+
*
|
|
202
|
+
* Через `z.union([reactivationConfigSchema, anyObjectSchema])` это делать нельзя: второй вариант
|
|
203
|
+
* принимает любой объект, поэтому union проходит всегда и ограничения (`steps.min(1)`,
|
|
204
|
+
* `filterMode` enum) не срабатывают ни разу — типизация выглядит рабочей, но её нет.
|
|
205
|
+
*
|
|
206
|
+
* @param input - Разобранный ввод тула
|
|
207
|
+
* @param ctx - Контекст zod для добавления ошибок
|
|
208
|
+
*/
|
|
209
|
+
export const refineFollowUpConfig = (input, ctx) => {
|
|
210
|
+
if (input.config !== null &&
|
|
211
|
+
typeof input.config === "object" &&
|
|
212
|
+
!Array.isArray(input.config)) {
|
|
213
|
+
const note = input.config
|
|
214
|
+
.contactVariablesOnSend;
|
|
215
|
+
if (note !== undefined && note !== null) {
|
|
216
|
+
const parsedNote = z.record(z.string(), z.string()).safeParse(note);
|
|
217
|
+
if (!parsedNote.success)
|
|
218
|
+
ctx.addIssue({
|
|
219
|
+
code: 'custom',
|
|
220
|
+
path: ['config', 'contactVariablesOnSend'],
|
|
221
|
+
message: 'Нужен объект строковых значений либо null',
|
|
222
|
+
});
|
|
223
|
+
else {
|
|
224
|
+
const entries = Object.entries(parsedNote.data);
|
|
225
|
+
if (entries.length < 1 || entries.length > FOLLOWUP_NOTE_MAX_VARIABLES)
|
|
226
|
+
ctx.addIssue({
|
|
227
|
+
code: 'custom',
|
|
228
|
+
path: ['config', 'contactVariablesOnSend'],
|
|
229
|
+
message: `Нужны от 1 до ${FOLLOWUP_NOTE_MAX_VARIABLES} переменных`,
|
|
230
|
+
});
|
|
231
|
+
for (const [name, value] of entries)
|
|
232
|
+
if (name.trim().length === 0 ||
|
|
233
|
+
value.trim().length === 0 ||
|
|
234
|
+
value.length > FOLLOWUP_NOTE_MAX_VALUE_CODE_UNITS)
|
|
235
|
+
ctx.addIssue({
|
|
236
|
+
code: 'custom',
|
|
237
|
+
path: ['config', 'contactVariablesOnSend', name],
|
|
238
|
+
message: `Непустое значение не длиннее ${FOLLOWUP_NOTE_MAX_VALUE_CODE_UNITS} кодовых единиц`,
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
if (input.type !== "INACTIVE_USER_REACTIVATION") {
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
const parsed = reactivationConfigSchema.safeParse(input.config);
|
|
247
|
+
if (parsed.success) {
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
for (const issue of parsed.error.issues) {
|
|
251
|
+
ctx.addIssue({
|
|
252
|
+
code: z.ZodIssueCode.custom,
|
|
253
|
+
path: ["config", ...issue.path],
|
|
254
|
+
message: issue.message,
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
};
|
|
258
|
+
//# sourceMappingURL=follow-up-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"follow-up-config.js","sourceRoot":"","sources":["../../../src/tools/definitions/follow-up-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
2
|
+
* Компактный план: оставляет человеку всё, что нужно проверить перед необратимой отправкой, —
|
|
3
|
+
* точный текст, шаблон, причину, по которой пункт не уйдёт, побочки, которые тест НЕ сделает,
|
|
4
|
+
* исключённые цепочки и обрезку. Коды сервера заменены подписями: человеку код не показывается.
|
|
4
5
|
*/
|
|
5
6
|
export declare function compactFunnelTestPlan(response: unknown): unknown;
|
|
6
|
-
/**
|
|
7
|
+
/** Тест воронки дожимов: план по адресу человека в канале, запуск, состояние, остановка. */
|
|
7
8
|
export declare const followUpFunnelTestTools: (import("./shared.js").ToolDefinition<{
|
|
8
9
|
chat_user_id: string;
|
|
9
10
|
workspace_id?: string | undefined;
|
|
@@ -1,78 +1,86 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { compactObject, defineTool, uuidSchema, withInstructions } from './shared.js';
|
|
3
|
+
/** Потолок причины подтверждения — как у отгруженного инструмента. */
|
|
3
4
|
const CONFIRMATION_REASON_MAX_LENGTH = 500;
|
|
4
|
-
/** Только
|
|
5
|
+
/** Только обычный объект JSON: ответ сервера — недоверенная граница. */
|
|
5
6
|
function isRecord(value) {
|
|
6
7
|
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
7
8
|
}
|
|
8
9
|
function recordsOf(value) {
|
|
9
10
|
return Array.isArray(value) ? value.filter(isRecord) : [];
|
|
10
11
|
}
|
|
12
|
+
/** Подпись причины из ответа сервера: `{ code, label }` → подпись; пусто — `null`. */
|
|
13
|
+
function labelOf(value) {
|
|
14
|
+
return isRecord(value) ? value.label : null;
|
|
15
|
+
}
|
|
11
16
|
/**
|
|
12
|
-
*
|
|
13
|
-
*
|
|
17
|
+
* Компактный план: оставляет человеку всё, что нужно проверить перед необратимой отправкой, —
|
|
18
|
+
* точный текст, шаблон, причину, по которой пункт не уйдёт, побочки, которые тест НЕ сделает,
|
|
19
|
+
* исключённые цепочки и обрезку. Коды сервера заменены подписями: человеку код не показывается.
|
|
14
20
|
*/
|
|
15
21
|
export function compactFunnelTestPlan(response) {
|
|
16
22
|
if (!isRecord(response)) {
|
|
17
23
|
return response;
|
|
18
24
|
}
|
|
19
|
-
const
|
|
20
|
-
const
|
|
25
|
+
const plan = isRecord(response.plan) ? response.plan : {};
|
|
26
|
+
const compact = {
|
|
21
27
|
runId: response.runId,
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
.
|
|
35
|
-
.map((sequence) => compactObject({
|
|
36
|
-
sequenceName: sequence.sequenceName,
|
|
37
|
-
reason: sequence.reason,
|
|
38
|
-
outcome: sequence.outcome,
|
|
39
|
-
totalSteps: sequence.totalSteps,
|
|
28
|
+
status: response.statusLabel,
|
|
29
|
+
contactId: response.contactId,
|
|
30
|
+
channelId: response.channelId,
|
|
31
|
+
expiresAt: response.expiresAt,
|
|
32
|
+
contactBlockReason: labelOf(plan.contactBlockReason),
|
|
33
|
+
items: recordsOf(plan.items).map((item) => compactObject({
|
|
34
|
+
order: item.order,
|
|
35
|
+
chain: item.workflowName,
|
|
36
|
+
text: item.displayText,
|
|
37
|
+
template: item.template ?? undefined,
|
|
38
|
+
skipReason: labelOf(item.blockedReason),
|
|
39
|
+
hasPersonalLink: item.hasPersonalLink === true ? true : undefined,
|
|
40
|
+
testWillNotDo: recordsOf(item.skippedEffects).map((effect) => labelOf(effect.effect)),
|
|
40
41
|
})),
|
|
41
|
-
|
|
42
|
-
.filter((
|
|
43
|
-
.map((
|
|
44
|
-
|
|
45
|
-
|
|
42
|
+
excludedChains: recordsOf(plan.chains)
|
|
43
|
+
.filter((chain) => chain.included !== true)
|
|
44
|
+
.map((chain) => compactObject({
|
|
45
|
+
chain: chain.workflowName,
|
|
46
|
+
reason: labelOf(chain.exclusionReason),
|
|
47
|
+
totalSteps: chain.totalSteps,
|
|
46
48
|
})),
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
49
|
+
stoppedChains: recordsOf(plan.chains)
|
|
50
|
+
.filter((chain) => chain.included === true && isRecord(chain.stopReason))
|
|
51
|
+
.map((chain) => ({ chain: chain.workflowName, reason: labelOf(chain.stopReason) })),
|
|
52
|
+
truncated: plan.truncated,
|
|
53
|
+
unchecked: recordsOf(plan.unchecked).map(labelOf),
|
|
54
|
+
notCovered: recordsOf(plan.notCovered).map(labelOf),
|
|
51
55
|
};
|
|
52
|
-
return withInstructions(
|
|
53
|
-
'
|
|
54
|
-
'Перед start покажи
|
|
55
|
-
'Запускай только этот runId:
|
|
56
|
+
return withInstructions(compact, [
|
|
57
|
+
'Инструмент плана НИЧЕГО не отправил и модель не вызывал: план собран из текстов цепочек.',
|
|
58
|
+
'Перед start покажи человеку каждый текст, шаблон, skipReason, excludedChains, stoppedChains и truncated.',
|
|
59
|
+
'Запускай только этот runId: сервер возьмёт замороженный план и тексты не пересоберёт. Черновик живёт сутки — позже план строится заново.',
|
|
56
60
|
]);
|
|
57
61
|
}
|
|
58
|
-
/**
|
|
62
|
+
/** Тест воронки дожимов: план по адресу человека в канале, запуск, состояние, остановка. */
|
|
59
63
|
export const followUpFunnelTestTools = [
|
|
60
64
|
defineTool({
|
|
61
65
|
name: 'besales_followup_funnel_test_plan',
|
|
62
|
-
|
|
66
|
+
// План сохраняет черновик на сервере и удаляет прежние черновики того же автора.
|
|
67
|
+
sideEffect: 'write',
|
|
68
|
+
carriesCustomerData: true,
|
|
63
69
|
requiredFields: ['chat_user_id'],
|
|
64
70
|
defaultWorkspaceId: true,
|
|
65
71
|
schema: z
|
|
66
72
|
.object({
|
|
67
73
|
workspace_id: uuidSchema.optional(),
|
|
74
|
+
// Единица прежней версии — карточка человека в канале — у v2 и есть АДРЕС человека в канале:
|
|
75
|
+
// имя поля отгруженного инструмента сохранено, значение — идентификатор адреса.
|
|
68
76
|
chat_user_id: uuidSchema,
|
|
69
77
|
funnel_id: uuidSchema.optional(),
|
|
70
78
|
})
|
|
71
79
|
.strict(),
|
|
72
80
|
createRequest: (input) => ({
|
|
73
81
|
method: 'POST',
|
|
74
|
-
path: `/
|
|
75
|
-
|
|
82
|
+
path: `/contact-identities/${input.chat_user_id}/funnel-test/plan`,
|
|
83
|
+
...(input.funnel_id === undefined ? {} : { body: { funnelId: input.funnel_id } }),
|
|
76
84
|
}),
|
|
77
85
|
enhanceResponse: compactFunnelTestPlan,
|
|
78
86
|
}),
|
|
@@ -81,6 +89,7 @@ export const followUpFunnelTestTools = [
|
|
|
81
89
|
sideEffect: 'spend',
|
|
82
90
|
requiredFields: ['run_id', 'explicit_confirmation', 'confirmation_reason'],
|
|
83
91
|
defaultWorkspaceId: true,
|
|
92
|
+
verifyWithToolName: 'besales_followup_funnel_test_status',
|
|
84
93
|
schema: z
|
|
85
94
|
.object({
|
|
86
95
|
workspace_id: uuidSchema.optional(),
|
|
@@ -91,19 +100,20 @@ export const followUpFunnelTestTools = [
|
|
|
91
100
|
.strict(),
|
|
92
101
|
createRequest: (input) => ({
|
|
93
102
|
method: 'POST',
|
|
94
|
-
path: `/
|
|
95
|
-
//
|
|
96
|
-
body: { acknowledge: true },
|
|
103
|
+
path: `/funnel-test-runs/${input.run_id}/start`,
|
|
104
|
+
// Причина подтверждения уходит в журнал аудита запуска.
|
|
105
|
+
body: { acknowledge: true, confirmationReason: input.confirmation_reason },
|
|
97
106
|
}),
|
|
98
107
|
enhanceResponse: (response) => withInstructions(response, [
|
|
99
|
-
'
|
|
100
|
-
'Опрашивай besales_followup_funnel_test_status до
|
|
101
|
-
'Если человек ответит во время прогона,
|
|
108
|
+
'Настоящая отправка запущена по замороженному плану, пункты уходят по одному с паузой 15 секунд.',
|
|
109
|
+
'Опрашивай besales_followup_funnel_test_status до завершения.',
|
|
110
|
+
'Если человек ответит во время прогона, сервер остановит оставшиеся касания.',
|
|
102
111
|
]),
|
|
103
112
|
}),
|
|
104
113
|
defineTool({
|
|
105
114
|
name: 'besales_followup_funnel_test_status',
|
|
106
115
|
sideEffect: 'none',
|
|
116
|
+
carriesCustomerData: true,
|
|
107
117
|
requiredFields: ['run_id'],
|
|
108
118
|
defaultWorkspaceId: true,
|
|
109
119
|
schema: z
|
|
@@ -114,11 +124,12 @@ export const followUpFunnelTestTools = [
|
|
|
114
124
|
.strict(),
|
|
115
125
|
createRequest: (input) => ({
|
|
116
126
|
method: 'GET',
|
|
117
|
-
path: `/
|
|
127
|
+
path: `/funnel-test-runs/${input.run_id}`,
|
|
118
128
|
}),
|
|
119
129
|
enhanceResponse: (response) => withInstructions(response, [
|
|
120
|
-
'dispatchedCount
|
|
121
|
-
'
|
|
130
|
+
'dispatchedCount — «занято до отправки», а не «доставлено»: доказанный исход каждого пункта — в results[].',
|
|
131
|
+
'Показывай человеку подписи (statusLabel, outcomeLabel, label причин), а не коды.',
|
|
132
|
+
'stalled=true лечится остановкой (cancel), а не повторным запуском того же runId.',
|
|
122
133
|
]),
|
|
123
134
|
}),
|
|
124
135
|
defineTool({
|
|
@@ -126,6 +137,7 @@ export const followUpFunnelTestTools = [
|
|
|
126
137
|
sideEffect: 'write',
|
|
127
138
|
requiredFields: ['run_id'],
|
|
128
139
|
defaultWorkspaceId: true,
|
|
140
|
+
verifyWithToolName: 'besales_followup_funnel_test_status',
|
|
129
141
|
schema: z
|
|
130
142
|
.object({
|
|
131
143
|
workspace_id: uuidSchema.optional(),
|
|
@@ -134,11 +146,12 @@ export const followUpFunnelTestTools = [
|
|
|
134
146
|
.strict(),
|
|
135
147
|
createRequest: (input) => ({
|
|
136
148
|
method: 'POST',
|
|
137
|
-
path: `/
|
|
149
|
+
path: `/funnel-test-runs/${input.run_id}/cancel`,
|
|
150
|
+
body: {},
|
|
138
151
|
}),
|
|
139
152
|
enhanceResponse: (response) => withInstructions(response, [
|
|
140
|
-
'
|
|
141
|
-
'Проверь results[] в ответе или повторным status
|
|
153
|
+
'Остановка действует со следующего касания: пункт, уже переданный на отправку, мог дойти до человека.',
|
|
154
|
+
'Проверь results[] в ответе или повторным вызовом status.',
|
|
142
155
|
]),
|
|
143
156
|
}),
|
|
144
157
|
];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"follow-up-funnel-test.js","sourceRoot":"","sources":["../../../src/tools/definitions/follow-up-funnel-test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEtF,MAAM,8BAA8B,GAAG,GAAG,CAAC;AAE3C,wEAAwE;AACxE,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC5D,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"follow-up-funnel-test.js","sourceRoot":"","sources":["../../../src/tools/definitions/follow-up-funnel-test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
/** Одинаковое правило публикации полной формы и одной фразы. */
|
|
2
|
+
export declare const followUpPromotionInstructions: readonly ["Если изменились только тексты сообщений, уже идущие люди получат новый текст со следующего сообщения. Сообщение, отправлявшееся в момент сохранения, придёт прежним; повторной отправки нет.", "Если изменено что-то ещё в шагах (расписание, условия, порядок, заметка в CRM), идущие остаются на своей версии. Если вместе с текстом изменены настройки цепочки (остановка при оплате, запись в карточку после отправки, предел кругов, продолжение после ответа, порог молчания, дата календаря), новые настройки действуют для всех сразу, а текст идущим не меняется до повторного сохранения без изменений.", "runs называет людей, получающих новый текст, уже отправлявших старый и оставшихся на своей версии с причиной. Перескажи числа и summary человеку; технический адрес firstDifference переведи в понятное описание. warnings относится только к оставленным людям."];
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** Одинаковое правило публикации полной формы и одной фразы. */
|
|
2
|
+
export const followUpPromotionInstructions = [
|
|
3
|
+
'Если изменились только тексты сообщений, уже идущие люди получат новый текст со следующего сообщения. Сообщение, отправлявшееся в момент сохранения, придёт прежним; повторной отправки нет.',
|
|
4
|
+
'Если изменено что-то ещё в шагах (расписание, условия, порядок, заметка в CRM), идущие остаются на своей версии. Если вместе с текстом изменены настройки цепочки (остановка при оплате, запись в карточку после отправки, предел кругов, продолжение после ответа, порог молчания, дата календаря), новые настройки действуют для всех сразу, а текст идущим не меняется до повторного сохранения без изменений.',
|
|
5
|
+
'runs называет людей, получающих новый текст, уже отправлявших старый и оставшихся на своей версии с причиной. Перескажи числа и summary человеку; технический адрес firstDifference переведи в понятное описание. warnings относится только к оставленным людям.',
|
|
6
|
+
];
|
|
7
|
+
//# sourceMappingURL=follow-up-promotion-instructions.js.map
|