zaytsv-bot-graph-mcp 0.7.2 → 0.7.3
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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zaytsv-bot-graph-mcp",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.3",
|
|
4
4
|
"description": "MCP server to build and publish Telegram, MAX and Instagram bot funnels/automations in the zaytsv /bots service. Zero dependencies.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": { "zaytsv-bot-graph-mcp": "src/index.mjs" },
|
|
@@ -62,7 +62,8 @@ IG-боты не поддерживают команды (`/start`). Вход
|
|
|
62
62
|
- **Кнопки-ссылки (`kind:"URL"`)**: `value` = URL. Могут иметь `"track": true` — клики считаются, и на такой шаг можно сослаться из условия `LINK_CLICKED` (см. ниже).
|
|
63
63
|
- **`color`** (опционально, и у CALLBACK, и у URL) — только стили, которые рендерит Telegram (как в основном боте / pengrad `ButtonStyle`): `""`=по умолчанию, `"#2EA6FF"`=primary (синий), `"#34C759"`=success (зелёный), `"#FF3B30"`=danger (красный). Других цветов нет.
|
|
64
64
|
- **Режим «Вопрос» (`awaitReply: true`)** — сообщение задаёт вопрос и ждёт ответ (паркуется как `ASK_QUESTION`). Доп. поля: `"saveTo":"name"` (обязателен, `[a-z_][a-z0-9_]{0,63}`), `"inputKind":"TEXT"|"PHOTO"|"DOCUMENT"|"CONTACT"|"LOCATION"`, `"validator":"ANY"|"PHONE"|"EMAIL"|"REGEX"`, `"regex":"..."`, `"retryText":"..."`, `"maxAttempts":3`. Выходы — `valid` / `invalid` (как у `ASK_QUESTION`), плюс `btn_N` для кнопок.
|
|
65
|
-
- `
|
|
65
|
+
- **Канал ответа Instagram (`igReplyChannel`, только для IG-ботов)** — `"comment"` (по умолчанию) — публичный ответ под комментарием; `"dm"` — личное сообщение автору комментария (Private Reply). `"dm"` срабатывает только в графе с `TRIGGER_IG_COMMENT` (нужен `comment_id`): Meta разрешает **1 ЛС на комментарий**, 24-часовое окно на private reply не распространяется. Чтобы ответить и публично, и в ЛС — поставь два шага: один с `"igReplyChannel":"comment"`, второй с `"igReplyChannel":"dm"`.
|
|
66
|
+
- `SEND_PHOTO` — `{ "photoUrl": "https://...", "caption": "подпись (необязательно, ≤1024)", "igReplyChannel": "comment"|"dm" }` (`igReplyChannel` — только IG, см. `SEND_MESSAGE`)
|
|
66
67
|
|
|
67
68
|
### Логика / ветвление
|
|
68
69
|
- `CONDITION` — проверка условий, выходы `yes` / `no`. `{ "match":"ALL"|"ANY", "conditions":[ { "kind":"...", "op":"...", "key":"...", "value":"..." } ] }`. `match:"ALL"` — все условия истинны; `"ANY"` — хотя бы одно. Полный список `kind`/`op`/полей — в разделе [«Условия CONDITION»](#условия-condition).
|
|
@@ -148,6 +149,7 @@ IG-боты подключаются через OAuth в разделе **«Ин
|
|
|
148
149
|
- **`ASK_QUESTION`** — `inputKind` ограничен: только `TEXT`, `EMAIL`, `PHONE`, `NUMBER` (`IG_INPUT_UNSUPPORTED`). Нельзя запрашивать `CONTACT` (кнопка «Поделиться номером» недоступна в IG), `LOCATION`, `PHOTO`, `DOCUMENT`.
|
|
149
150
|
- **Нет reply-клавиатур** — кнопки IG работают как inline (URL или Deep Link); стиль кнопок ограничен возможностями IG Messaging API.
|
|
150
151
|
- **Нет SUBSCRIBED** — условие «подписан на канал» недоступно.
|
|
152
|
+
- **Коммент → ЛС (Private Reply)** — на `SEND_MESSAGE`/`SEND_PHOTO` в графе с `TRIGGER_IG_COMMENT` укажи `"igReplyChannel": "dm"`, чтобы ответить автору комментария в Direct (а не публично под постом). По умолчанию (`"comment"`) — публичный ответ. Подробнее — `igReplyChannel` в разделе «Сообщения».
|
|
151
153
|
|
|
152
154
|
### Оффлайн-проверка IG-графа
|
|
153
155
|
|
|
@@ -108,6 +108,12 @@ if (broadcast.length && triggers.length > broadcast.length) errors.push("BROADCA
|
|
|
108
108
|
for (const n of nodes) {
|
|
109
109
|
const c = n.config || {};
|
|
110
110
|
const who = `«${c._title || n.id}» (${n.type})`;
|
|
111
|
+
if (c.igReplyChannel != null && !["comment", "dm"].includes(String(c.igReplyChannel))) {
|
|
112
|
+
warns.push(`${who}: igReplyChannel должен быть "comment" или "dm" (получено "${c.igReplyChannel}")`);
|
|
113
|
+
}
|
|
114
|
+
if (String(c.igReplyChannel) === "dm" && platform !== "INSTAGRAM") {
|
|
115
|
+
warns.push(`${who}: igReplyChannel="dm" учитывается только у Instagram-ботов`);
|
|
116
|
+
}
|
|
111
117
|
switch (n.type) {
|
|
112
118
|
case "SEND_MESSAGE": {
|
|
113
119
|
const flat = !blank(c.text) || !blank(c.photoUrl);
|
package/src/index.mjs
CHANGED
|
@@ -22,7 +22,7 @@ import os from "node:os";
|
|
|
22
22
|
import fs from "node:fs";
|
|
23
23
|
import path from "node:path";
|
|
24
24
|
|
|
25
|
-
const VERSION = "0.7.
|
|
25
|
+
const VERSION = "0.7.3";
|
|
26
26
|
const BASE = (process.env.ZAYTSV_BASE_URL || "https://zaytsv.ru").replace(/\/+$/, "");
|
|
27
27
|
const CONFIG_DIR = path.join(os.homedir(), ".zaytsv-bot-graph");
|
|
28
28
|
const TOKEN_FILE = path.join(CONFIG_DIR, "token");
|