@besales/mcp 0.1.0 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +272 -17
- package/dist/auth/connection-store.d.ts +58 -0
- package/dist/auth/connection-store.js +208 -0
- package/dist/auth/connection-store.js.map +1 -0
- package/dist/auth/oauth-client.d.ts +27 -2
- package/dist/auth/oauth-client.js +62 -11
- package/dist/auth/oauth-client.js.map +1 -1
- package/dist/auth/session-workspace.d.ts +2 -0
- package/dist/auth/session-workspace.js +20 -0
- package/dist/auth/session-workspace.js.map +1 -0
- package/dist/auth/token-storage.d.ts +19 -5
- package/dist/auth/token-storage.js +11 -6
- package/dist/auth/token-storage.js.map +1 -1
- package/dist/cli.d.ts +2 -7
- package/dist/cli.js +111 -33
- package/dist/cli.js.map +1 -1
- package/dist/http/api-client.d.ts +4 -13
- package/dist/http/api-client.js +18 -18
- package/dist/http/api-client.js.map +1 -1
- package/dist/index.d.ts +8 -6
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/instructions/server-instructions.d.ts +15 -0
- package/dist/instructions/server-instructions.js +245 -0
- package/dist/instructions/server-instructions.js.map +1 -0
- package/dist/package-metadata.js +7 -1
- package/dist/package-metadata.js.map +1 -1
- package/dist/resources/concepts/feedback-sheets.md +77 -0
- package/dist/resources/concepts/sandbox.md +13 -0
- package/dist/resources/concepts/workbook-classification.md +241 -0
- package/dist/resources/docs/agent-behavior.md +393 -0
- package/dist/resources/docs/crm-integration.md +535 -0
- package/dist/resources/docs/files-and-uploads.md +295 -0
- package/dist/resources/docs/knowledge-base.md +521 -0
- package/dist/resources/docs/pipeline-builder.md +221 -0
- package/dist/resources/docs/pipeline-settings-deep.md +221 -0
- package/dist/resources/docs/platforms.md +513 -0
- package/dist/resources/docs/prompt-anatomy.md +298 -0
- package/dist/resources/docs/prompt-principles.md +390 -0
- package/dist/resources/registry.js +34 -12
- package/dist/resources/registry.js.map +1 -1
- package/dist/resources/workflows/compare-models.md +46 -0
- package/dist/resources/workflows/connect-crm-from-scratch.md +89 -0
- package/dist/resources/workflows/connect-datasource-from-scratch.md +92 -0
- package/dist/resources/workflows/extract-from-document.md +36 -0
- package/dist/resources/workflows/iterate-with-sandbox.md +31 -0
- package/dist/resources/workflows/platform-setup-from-scratch.md +113 -0
- package/dist/resources/workflows/production-readiness-check.md +41 -0
- package/dist/schemas/mcp-tools.json +2638 -184
- package/dist/server.js +2 -0
- package/dist/server.js.map +1 -1
- package/dist/tools/definitions/agent-design.d.ts +215 -0
- package/dist/tools/definitions/agent-design.js +644 -0
- package/dist/tools/definitions/agent-design.js.map +1 -0
- package/dist/tools/definitions/crm-platform.d.ts +211 -0
- package/dist/tools/definitions/crm-platform.js +1070 -0
- package/dist/tools/definitions/crm-platform.js.map +1 -0
- package/dist/tools/definitions/datasource.d.ts +40 -0
- package/dist/tools/definitions/datasource.js +196 -0
- package/dist/tools/definitions/datasource.js.map +1 -0
- package/dist/tools/definitions/knowledge.d.ts +215 -0
- package/dist/tools/definitions/knowledge.js +782 -0
- package/dist/tools/definitions/knowledge.js.map +1 -0
- package/dist/tools/definitions/model-comparison.d.ts +25 -0
- package/dist/tools/definitions/model-comparison.js +101 -0
- package/dist/tools/definitions/model-comparison.js.map +1 -0
- package/dist/tools/definitions/platform-setup.d.ts +412 -0
- package/dist/tools/definitions/platform-setup.js +741 -0
- package/dist/tools/definitions/platform-setup.js.map +1 -0
- package/dist/tools/definitions/session.d.ts +11 -0
- package/dist/tools/definitions/session.js +86 -0
- package/dist/tools/definitions/session.js.map +1 -0
- package/dist/tools/definitions/shared.d.ts +742 -0
- package/dist/tools/definitions/shared.js +773 -0
- package/dist/tools/definitions/shared.js.map +1 -0
- package/dist/tools/definitions.d.ts +873 -88
- package/dist/tools/definitions.js +14 -856
- package/dist/tools/definitions.js.map +1 -1
- package/dist/tools/registry.d.ts +3 -1
- package/dist/tools/registry.js +90 -11
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/result.d.ts +1 -1
- package/dist/tools/result.js +12 -4
- package/dist/tools/result.js.map +1 -1
- package/dist/utils/logger.js +2 -1
- package/dist/utils/logger.js.map +1 -1
- package/docs/host-setup.md +34 -15
- package/package.json +2 -2
- package/scripts/install-claude-desktop.js +89 -11
- package/scripts/mock-api-server.js +1 -1
- package/scripts/mock-credentials.js +49 -6
- package/dist/types/api-contract.gen.d.ts +0 -6975
- package/dist/types/api-contract.gen.js +0 -6
- package/dist/types/api-contract.gen.js.map +0 -1
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
# 17. Файлы и медиа: StoredFile + FileSection
|
|
2
|
+
|
|
3
|
+
> **Источник правды:** `ai-aniomaly/docs/ai-prompt-builder/17-files-and-uploads.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
|
+
В Animaly есть единое хранилище файлов на уровне workspace — `StoredFile`. Сюда загружаются:
|
|
10
|
+
- Картинки/PDF/видео для инструмента `send_pic`.
|
|
11
|
+
- Приветственные медиа агента (`AgentBehavior.greetingFileId`).
|
|
12
|
+
- Аватары `TelegramPersonalAccount`.
|
|
13
|
+
- Картинки для `WarmupImage`.
|
|
14
|
+
- Медиа в `MessageConfig.attachments[]` follow-up.
|
|
15
|
+
- Чанки QA-ответов с медиа (`QaAnswerChunk.storedFileId`).
|
|
16
|
+
- Медиа-блоки в `Template` кампаний.
|
|
17
|
+
|
|
18
|
+
Файлы группируются в разделы (`FileSection`) — это удобство для админа в UI.
|
|
19
|
+
|
|
20
|
+
## 2. Архитектура
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
Workspace
|
|
24
|
+
├── FileSection[] # Разделы (например: «Прайсы», «Сертификаты», «Warmup-мемы»)
|
|
25
|
+
│ └── StoredFile[] # Файлы в разделе
|
|
26
|
+
└── StoredFile[] # Файлы без раздела (sectionId=null)
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Все ссылки на файлы в системе — через `StoredFile.id` (uuid).
|
|
30
|
+
|
|
31
|
+
## 3. JSON-схема `StoredFile`
|
|
32
|
+
|
|
33
|
+
```json
|
|
34
|
+
{
|
|
35
|
+
"id": "uuid",
|
|
36
|
+
"name": "Прайс-лист 2026",
|
|
37
|
+
"originalFilename": "price-list-2026.pdf",
|
|
38
|
+
"mimeType": "application/pdf",
|
|
39
|
+
"fileType": "DOCUMENT",
|
|
40
|
+
"storageType": "s3",
|
|
41
|
+
"url": "s3://animaly/files/<workspaceId>/price-list-2026.pdf",
|
|
42
|
+
"size": 245678,
|
|
43
|
+
"workspaceId": "<workspaceId>",
|
|
44
|
+
"sectionId": "<FileSection.id>",
|
|
45
|
+
"source": "USER_UPLOAD"
|
|
46
|
+
}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
| Поле | Тип | Описание |
|
|
50
|
+
|---|---|---|
|
|
51
|
+
| `name` | string | Имя, заданное при загрузке (для UI). Уникален в `(workspaceId, name)`. |
|
|
52
|
+
| `originalFilename` | string | Реальное имя файла при загрузке. |
|
|
53
|
+
| `mimeType` | string | `application/pdf`, `image/jpeg`, `video/mp4` и т.п. |
|
|
54
|
+
| `fileType` | enum `StoredFileType` | `IMAGE` / `DOCUMENT` / `VIDEO` / `AUDIO` / `VOICE` / `VIDEO_NOTE` / `OTHER`. |
|
|
55
|
+
| `storageType` | string (`local` / `s3`) | Где физически хранится. В проде — `s3`. |
|
|
56
|
+
| `url` | string | Путь/URL к файлу. |
|
|
57
|
+
| `size` | int | Размер в байтах. |
|
|
58
|
+
| `sectionId` | uuid / null | ID `FileSection` (или null — без раздела). |
|
|
59
|
+
| `source` | enum `StoredFileSource` | Категория для UI-фильтра. См. ниже. |
|
|
60
|
+
|
|
61
|
+
## 4. `StoredFileSource` — откуда взялся файл
|
|
62
|
+
|
|
63
|
+
| Значение | Когда выставляется |
|
|
64
|
+
|---|---|
|
|
65
|
+
| `USER_UPLOAD` | Загружен админом вручную через UI (default). |
|
|
66
|
+
| `CHAT_MEDIA` | Получен от пользователя в диалоге (картинка/видео/документ от клиента). |
|
|
67
|
+
| `TELEGRAM_AVATAR` | Скачанный аватар Telegram-аккаунта (для UI отображения). |
|
|
68
|
+
| `WARMUP_IMAGE` | Картинка для warmup-сценариев. |
|
|
69
|
+
| `AGENT_GREETING` | Приветственное медиа агента (`AgentBehavior.greetingFileId`). |
|
|
70
|
+
| `CAMPAIGN` | Медиа из шаблона кампании. |
|
|
71
|
+
| `CRM_IMPORT` | Файл, импортированный из CRM (например, документ к сделке). |
|
|
72
|
+
| `OTHER` | Прочее. |
|
|
73
|
+
|
|
74
|
+
AI-сервис должен задавать корректный `source` при загрузке — это влияет на фильтрацию в админке.
|
|
75
|
+
|
|
76
|
+
## 5. JSON-схема `FileSection`
|
|
77
|
+
|
|
78
|
+
```json
|
|
79
|
+
{
|
|
80
|
+
"id": "uuid",
|
|
81
|
+
"name": "Прайсы и каталоги",
|
|
82
|
+
"workspaceId": "<workspaceId>"
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
`name` уникален в `(workspaceId)`. Раздел — это просто группировка для UI; не влияет на логику работы.
|
|
87
|
+
|
|
88
|
+
## 6. Использование `StoredFile` в системе
|
|
89
|
+
|
|
90
|
+
### 6.1. `send_pic` (builtin tool)
|
|
91
|
+
|
|
92
|
+
```
|
|
93
|
+
LLM решает отправить файл → вызывает send_pic("price-list-2026", "delivery-info") или send_pic(["url-1", "url-2"])
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
`send_pic` принимает:
|
|
97
|
+
- **Имя файла** (`StoredFile.name` без расширения) — система найдёт по имени в workspace.
|
|
98
|
+
- **URL** — отправит напрямую без сохранения.
|
|
99
|
+
- **Массив** имён/URL — отправит все по очереди.
|
|
100
|
+
|
|
101
|
+
См. [`03-tools-catalog.md`](03-tools-catalog.md), раздел 2.12.
|
|
102
|
+
|
|
103
|
+
### 6.2. Приветственное медиа
|
|
104
|
+
|
|
105
|
+
```json
|
|
106
|
+
{
|
|
107
|
+
"AgentBehavior": {
|
|
108
|
+
"botGreeting": "Здравствуйте! Я Анна, помогу с заказом.",
|
|
109
|
+
"greetingFileId": "<StoredFile.id>",
|
|
110
|
+
"greetingButtons": [...]
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Файл (картинка / видео / аудио) отправляется вместе с текстом приветствия. `source` рекомендуется `AGENT_GREETING`.
|
|
116
|
+
|
|
117
|
+
### 6.3. Медиа в follow-up
|
|
118
|
+
|
|
119
|
+
```json
|
|
120
|
+
{
|
|
121
|
+
"MessageConfig": {
|
|
122
|
+
"type": "media",
|
|
123
|
+
"attachments": [
|
|
124
|
+
{ "storedFileId": "<StoredFile.id>", "caption": "Прайс на этот месяц" }
|
|
125
|
+
]
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
До 4 вложений в одном шаге. Caption ≤ 1024 символов.
|
|
131
|
+
|
|
132
|
+
### 6.4. Медиа-блоки в кампаниях
|
|
133
|
+
|
|
134
|
+
```json
|
|
135
|
+
{
|
|
136
|
+
"Template.blocks": [
|
|
137
|
+
{ "type": "media", "storedFileId": "<StoredFile.id>", "caption": "..." }
|
|
138
|
+
]
|
|
139
|
+
}
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
См. [`09-campaigns.md`](09-campaigns.md), раздел 3.2.
|
|
143
|
+
|
|
144
|
+
### 6.5. QA-ответы с медиа
|
|
145
|
+
|
|
146
|
+
```json
|
|
147
|
+
{
|
|
148
|
+
"QaAnswerChunk": {
|
|
149
|
+
"orderIndex": 0,
|
|
150
|
+
"text": null,
|
|
151
|
+
"storedFileId": "<StoredFile.id>",
|
|
152
|
+
"buttons": []
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
QA может отдать медиа без текста (только картинку/документ) или текст + медиа в разных чанках. См. [`07-knowledge-base.md`](07-knowledge-base.md), раздел 6.
|
|
158
|
+
|
|
159
|
+
### 6.6. Warmup
|
|
160
|
+
|
|
161
|
+
```json
|
|
162
|
+
{
|
|
163
|
+
"WarmupImage": {
|
|
164
|
+
"warmupSettingsId": "<warmupSettingsId>",
|
|
165
|
+
"storedFileId": "<StoredFile.id>"
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
См. [`16-warmup-telegram-personal.md`](16-warmup-telegram-personal.md), раздел 7.
|
|
171
|
+
|
|
172
|
+
## 7. Лимиты и платформенные ограничения
|
|
173
|
+
|
|
174
|
+
| Платформа | Image | Video | Document | Audio | Caption |
|
|
175
|
+
|---|---|---|---|---|---|
|
|
176
|
+
| Telegram Bot | ≤ 10 MB | ≤ 50 MB | ≤ 50 MB | ≤ 50 MB | ≤ 1024 |
|
|
177
|
+
| Telegram Personal | ≤ 2 GB | ≤ 2 GB | ≤ 2 GB | ≤ 2 GB | ≤ 1024 |
|
|
178
|
+
| Wazzup (WhatsApp) | ≤ 5 MB | ≤ 16 MB | ≤ 100 MB | ≤ 16 MB | ≤ 1024 |
|
|
179
|
+
| Avito | ≤ 10 MB | ✗ | ✗ | ✗ | — |
|
|
180
|
+
| Instagram | ≤ 8 MB | ≤ 100 MB | ✗ | ≤ 8 MB | ≤ 1000 |
|
|
181
|
+
| VK | ≤ 50 MB | ≤ 200 MB | ≤ 200 MB | ≤ 200 MB | — |
|
|
182
|
+
| Web Widget | ≤ 25 MB | ≤ 100 MB | ≤ 100 MB | ≤ 25 MB | — |
|
|
183
|
+
| SMS | ✗ | ✗ | ✗ | ✗ | — |
|
|
184
|
+
|
|
185
|
+
(Лимиты могут отличаться в реальном времени — указаны типовые значения провайдеров.)
|
|
186
|
+
|
|
187
|
+
## 8. Inline-пример: organize files for e-commerce bot
|
|
188
|
+
|
|
189
|
+
```json
|
|
190
|
+
{
|
|
191
|
+
"fileSections": [
|
|
192
|
+
{ "name": "Прайсы и каталоги" },
|
|
193
|
+
{ "name": "Сертификаты" },
|
|
194
|
+
{ "name": "Welcome-медиа" },
|
|
195
|
+
{ "name": "Карта проезда" }
|
|
196
|
+
],
|
|
197
|
+
"storedFiles": [
|
|
198
|
+
{
|
|
199
|
+
"name": "Прайс-лист 2026",
|
|
200
|
+
"originalFilename": "price-list-2026.pdf",
|
|
201
|
+
"mimeType": "application/pdf",
|
|
202
|
+
"fileType": "DOCUMENT",
|
|
203
|
+
"sectionId": "<id-Прайсы>",
|
|
204
|
+
"source": "USER_UPLOAD"
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
"name": "Каталог товаров (PDF)",
|
|
208
|
+
"originalFilename": "catalog.pdf",
|
|
209
|
+
"mimeType": "application/pdf",
|
|
210
|
+
"fileType": "DOCUMENT",
|
|
211
|
+
"sectionId": "<id-Прайсы>",
|
|
212
|
+
"source": "USER_UPLOAD"
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
"name": "Welcome video",
|
|
216
|
+
"originalFilename": "welcome.mp4",
|
|
217
|
+
"mimeType": "video/mp4",
|
|
218
|
+
"fileType": "VIDEO",
|
|
219
|
+
"sectionId": "<id-Welcome>",
|
|
220
|
+
"source": "AGENT_GREETING"
|
|
221
|
+
},
|
|
222
|
+
{
|
|
223
|
+
"name": "Карта офиса",
|
|
224
|
+
"originalFilename": "office-map.jpg",
|
|
225
|
+
"mimeType": "image/jpeg",
|
|
226
|
+
"fileType": "IMAGE",
|
|
227
|
+
"sectionId": "<id-Карта>",
|
|
228
|
+
"source": "USER_UPLOAD"
|
|
229
|
+
}
|
|
230
|
+
]
|
|
231
|
+
}
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
В `AgentBehavior`:
|
|
235
|
+
```json
|
|
236
|
+
{ "greetingFileId": "<id-Welcome video>" }
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
В `baseSystemPrompt` агента:
|
|
240
|
+
```
|
|
241
|
+
Если клиент спрашивает прайс-лист — отправляй его инструментом send_pic("Прайс-лист 2026").
|
|
242
|
+
Если клиент спрашивает, как добраться — send_pic("Карта офиса").
|
|
243
|
+
Если клиент просит каталог — send_pic("Каталог товаров (PDF)").
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
## 9. Что должен сделать клиент в админке
|
|
247
|
+
|
|
248
|
+
AI-сервис не загружает файлы сам — только описывает структуру. Клиенту нужно:
|
|
249
|
+
|
|
250
|
+
1. Открыть `Files` (раздел в навигации админки).
|
|
251
|
+
2. Создать `FileSection` (например, «Прайсы»).
|
|
252
|
+
3. Загрузить файлы через UI (drag-n-drop или file picker).
|
|
253
|
+
4. Указать `name` (как агент будет ссылаться) и `description` (опционально).
|
|
254
|
+
5. Получить `StoredFile.id` или `name` и подставить в:
|
|
255
|
+
- `AgentBehavior.greetingFileId`
|
|
256
|
+
- `MessageConfig.attachments[].storedFileId`
|
|
257
|
+
- `Template.blocks[].storedFileId`
|
|
258
|
+
- `WarmupImage.storedFileId`
|
|
259
|
+
- `QaAnswerChunk.storedFileId`
|
|
260
|
+
|
|
261
|
+
## 10. Граничные случаи и валидация
|
|
262
|
+
|
|
263
|
+
| Правило | Что AI-сервису помнить |
|
|
264
|
+
|---|---|
|
|
265
|
+
| `name` уникален в `(workspaceId)` | Не назначать два файла с именем «Прайс». |
|
|
266
|
+
| `send_pic` ищет по `name` | AI должен использовать тот же `name`, что админ ввёл при загрузке. Чувствителен к точному совпадению. |
|
|
267
|
+
| `mimeType` определяет, как платформа отрендерит | PDF в Telegram пойдёт как document, в Wazzup-WhatsApp — тоже document, на Avito — не пройдёт. |
|
|
268
|
+
| `source=CHAT_MEDIA` файлы | Растут быстро (от пользователей). Имеют свою retention-политику. AI-сервис не должен ссылаться. |
|
|
269
|
+
| `storageType=local` для прода | Не использовать — только для dev. В проде S3. |
|
|
270
|
+
| Удаление `FileSection` | `sectionId` файлов внутри становится `null`, файлы остаются. |
|
|
271
|
+
| Удаление `StoredFile` | Каскадно удалит ссылки в `AgentBehavior.greetingFile`, `WarmupImage`, `QaAnswerChunk`. |
|
|
272
|
+
| Слишком большой файл (>50 MB) | Многие платформы не примут. Для PDF — рекомендовать сжатие. |
|
|
273
|
+
| `send_pic` с массивом >5 файлов | Платформы могут флаговать как спам. Реалистичный лимит — 1–3 за один вызов. |
|
|
274
|
+
| Voice (Telegram OPUS) vs Audio | `VOICE` и `AUDIO` — разные `fileType`. Голосовые (`VOICE`) авто-транскрибируются через Whisper; аудиофайлы (`AUDIO`) — нет (применяется `audioHandlingBehavior`). См. [`10-agent-behavior.md`](10-agent-behavior.md) §9. |
|
|
275
|
+
|
|
276
|
+
## 11. Что AI-сервис должен спросить у клиента
|
|
277
|
+
|
|
278
|
+
При сценариях с медиа:
|
|
279
|
+
|
|
280
|
+
1. «Какие документы/картинки вы хотите, чтобы агент мог отправлять?» (для `send_pic`).
|
|
281
|
+
2. «Нужно ли приветственное видео/картинка вместе с приветствием?» (для `greetingFileId`).
|
|
282
|
+
3. «Есть ли уже подготовленные прайсы / каталоги / сертификаты?» — указать `StoredFile.name` для использования в промпте.
|
|
283
|
+
4. Для warmup: «Загрузите 5–10 нейтральных картинок (мемы, природа) — они нужны для естественной активности warmup-аккаунтов».
|
|
284
|
+
|
|
285
|
+
## 12. Связь с другими подсистемами
|
|
286
|
+
|
|
287
|
+
| Подсистема | Связь |
|
|
288
|
+
|---|---|
|
|
289
|
+
| **Инструменты** ([`03-tools-catalog.md`](03-tools-catalog.md)) | `send_pic` — единственный инструмент, который работает с файлами на чтение. |
|
|
290
|
+
| **Поведение** ([`10-agent-behavior.md`](10-agent-behavior.md)) | `greetingFileId` — приветственное медиа. |
|
|
291
|
+
| **Follow-up** ([`08-follow-up.md`](08-follow-up.md)) | `MessageConfig.attachments[].storedFileId`. |
|
|
292
|
+
| **Кампании** ([`09-campaigns.md`](09-campaigns.md)) | `Template.blocks[type=media].storedFileId`. |
|
|
293
|
+
| **База знаний** ([`07-knowledge-base.md`](07-knowledge-base.md)) | `QaAnswerChunk.storedFileId` — медиа в QA-ответах. |
|
|
294
|
+
| **Warmup** ([`16-warmup-telegram-personal.md`](16-warmup-telegram-personal.md)) | `WarmupImage.storedFileId`. |
|
|
295
|
+
| **Платформы** ([`11-platforms.md`](11-platforms.md)) | Каждая платформа имеет свои лимиты по типам и размерам. |
|