telegram-notify-mcp 2.0.0 → 2.2.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 +25 -5
- package/ROADMAP.md +2 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +222 -14
- package/dist/index.js.map +1 -1
- package/dist/routing.d.ts +36 -4
- package/dist/routing.js +99 -1
- package/dist/routing.js.map +1 -1
- package/dist/store.d.ts +21 -0
- package/dist/store.js +33 -1
- package/dist/store.js.map +1 -1
- package/dist/telegram.d.ts +50 -0
- package/dist/telegram.js +61 -0
- package/dist/telegram.js.map +1 -1
- package/package.json +2 -2
- package/skill-snippet.md +8 -2
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
This package is **not** a chat persona or hosted SaaS. It is a local Model Context Protocol server you run under Cursor, Grok Bot, or any MCP host. No secrets ship in the repo; configuration is environment-only.
|
|
6
6
|
|
|
7
7
|
**Publisher:** Ehsan Eskandari pour
|
|
8
|
-
**Version:** 2.
|
|
8
|
+
**Version:** 2.2.0 (Phase 2 + inline approval buttons — Accept / Decline / Custom)
|
|
9
9
|
|
|
10
10
|
## How it works
|
|
11
11
|
|
|
@@ -31,7 +31,7 @@ MCP alone cannot wake agents asynchronously (stdio is pull-only). See [ARCHITECT
|
|
|
31
31
|
|
|
32
32
|
| Tool | Purpose |
|
|
33
33
|
|------|---------|
|
|
34
|
-
| `telegram_notify` | Completion notification (`title?` + `body`). **Requires** `source_agent_id`; optional `source_agent_name`. Appends footer; persists mapping |
|
|
34
|
+
| `telegram_notify` | Completion notification (`title?` + `body`). **Requires** `source_agent_id`; optional `source_agent_name`. Appends footer; persists mapping. Optional opt-in approval buttons (`approval_buttons`, `accept_command`, `decline_command`) |
|
|
35
35
|
| `telegram_poll_inbound` | `getUpdates` + allowlist + route into pending queue; returns summary counts |
|
|
36
36
|
| `telegram_list_pending_commands` | List pending commands (optional `source_agent_id` filter) |
|
|
37
37
|
| `telegram_ack_command` | Ack/delete by `command_id` after host delivery |
|
|
@@ -41,7 +41,25 @@ MCP alone cannot wake agents asynchronously (stdio is pull-only). See [ARCHITECT
|
|
|
41
41
|
1. Only messages from allowlisted chats (`TELEGRAM_CHAT_ALLOWLIST` or `TELEGRAM_CHAT_ID`) are considered.
|
|
42
42
|
2. If the message is a **Telegram reply** to a mapped outbound `message_id`, enqueue for that `source_agent_id`.
|
|
43
43
|
3. Else if text starts with `/to <agent_id> <command…>`, enqueue for that agent (fallback).
|
|
44
|
-
4.
|
|
44
|
+
4. **Approval callbacks** (`callback_query`): Accept → enqueue `accept_command`; Decline → enqueue `decline_command`; Custom → bot sends a ForceReply prompt mapped to the same agent (next reply becomes a normal pending command).
|
|
45
|
+
5. Else **ignore** (counted as `ignored_unroutable` in the poll result). No shell execution inside MCP.
|
|
46
|
+
|
|
47
|
+
### Optional approval buttons (2.1, opt-in)
|
|
48
|
+
|
|
49
|
+
Pass `approval_buttons: true` on `telegram_notify` or on `telegram_send_message` (with `source_agent_id`) to attach an inline keyboard. **Default is off** — plain notify / reply mapping only.
|
|
50
|
+
|
|
51
|
+
- **Accept** / **Decline** — enqueue `accept_command` / `decline_command` for the originating agent (same pending queue as text replies).
|
|
52
|
+
- **Custom** — clears the keyboard and opens a Telegram **ForceReply** on that same bot message so you can type a free-text reply (routed to the same agent).
|
|
53
|
+
|
|
54
|
+
Caller-defined roles/labels (optional):
|
|
55
|
+
|
|
56
|
+
| Param | Purpose |
|
|
57
|
+
|-------|---------|
|
|
58
|
+
| `accept_command` / `decline_command` | Text enqueued when Accept / Decline is pressed |
|
|
59
|
+
| `accept_label` / `decline_label` / `custom_label` | Button titles shown in Telegram |
|
|
60
|
+
| `custom_placeholder` | Placeholder in the reply field after Custom |
|
|
61
|
+
|
|
62
|
+
Defaults: labels `Accept` / `Decline` / `Custom message`; commands `"Accept"` / `"Decline"`. Pending queue format is unchanged — host bridge still list → deliver → ack.
|
|
45
63
|
|
|
46
64
|
## Host poller responsibilities (M3 bridge)
|
|
47
65
|
|
|
@@ -157,7 +175,9 @@ If your host UI has **Add MCP** fields instead of raw JSON:
|
|
|
157
175
|
"title": "Deploy finished",
|
|
158
176
|
"body": "staging is live; smoke tests passed.",
|
|
159
177
|
"source_agent_id": "agent-deploy-1",
|
|
160
|
-
"source_agent_name": "Deploy helper"
|
|
178
|
+
"source_agent_name": "Deploy helper",
|
|
179
|
+
"accept_command": "proceed with smoke tests",
|
|
180
|
+
"decline_command": "abort deploy follow-up"
|
|
161
181
|
}
|
|
162
182
|
```
|
|
163
183
|
|
|
@@ -172,7 +192,7 @@ staging is live; smoke tests passed.
|
|
|
172
192
|
Reply to this message to continue with this agent.
|
|
173
193
|
```
|
|
174
194
|
|
|
175
|
-
4. User **replies** to that message
|
|
195
|
+
4. User taps **Accept** / **Decline** / **Custom**, or **replies** to that message (or sends `/to agent-deploy-1 …`).
|
|
176
196
|
5. Host poller: `telegram_poll_inbound` → list → SendToAgent → `telegram_ack_command`.
|
|
177
197
|
|
|
178
198
|
## Security notes
|
package/ROADMAP.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
- [x] `telegram_get_me`, `telegram_send_message`, `telegram_notify`, `telegram_get_updates`
|
|
7
7
|
- [x] BYOB BotFather token via env only
|
|
8
8
|
- [x] Unit tests with mocked fetch
|
|
9
|
-
- [x] Publish to npm (`telegram-notify-mcp`) — 1.0.0 shipped; 2.0.0 Phase 2 text MVP
|
|
9
|
+
- [x] Publish to npm (`telegram-notify-mcp`) — 1.0.0 shipped; 2.0.0 Phase 2 text MVP; 2.1.0 approval buttons
|
|
10
10
|
- [ ] Optional Cursor / MCP marketplace plugin listing
|
|
11
11
|
|
|
12
12
|
## Phase 2 — inbound / control (text MVP)
|
|
@@ -16,6 +16,7 @@ Architecture: [ARCHITECTURE-PHASE2.md](./ARCHITECTURE-PHASE2.md).
|
|
|
16
16
|
- [x] **M1** — Mapping store + required `source_agent_id` on `telegram_notify` + footer attribution
|
|
17
17
|
- [x] **M2** — Pending commands queue + `telegram_poll_inbound` / `telegram_list_pending_commands` / `telegram_ack_command`; reply + `/to` routing; chat allowlist
|
|
18
18
|
- [x] **M3** — Host routine/skill (or daemon) poll → SendToAgent → ack (documented; host-provided)
|
|
19
|
+
- [x] **M3.5** — Inline approval buttons (Accept / Decline / Custom) via `callback_query` → pending queue (2.1.0)
|
|
19
20
|
- [ ] **M4** — Voice Phase 2b: `telegram_get_file` + host transcription into same queue
|
|
20
21
|
|
|
21
22
|
Notes:
|
package/dist/index.d.ts
CHANGED
|
@@ -6,5 +6,6 @@
|
|
|
6
6
|
* Starts cleanly without a token; tools fail with a clear error when invoked.
|
|
7
7
|
* Public release is env-only — no disk/secret-store token loading.
|
|
8
8
|
* Phase 2: outbound mapping + inbound pending queue (host must poll + SendToAgent + ack).
|
|
9
|
+
* 2.2: opt-in approval buttons; Custom ForceReply on original; caller-defined labels/commands.
|
|
9
10
|
*/
|
|
10
11
|
export {};
|
package/dist/index.js
CHANGED
|
@@ -6,15 +6,16 @@
|
|
|
6
6
|
* Starts cleanly without a token; tools fail with a clear error when invoked.
|
|
7
7
|
* Public release is env-only — no disk/secret-store token loading.
|
|
8
8
|
* Phase 2: outbound mapping + inbound pending queue (host must poll + SendToAgent + ack).
|
|
9
|
+
* 2.2: opt-in approval buttons; Custom ForceReply on original; caller-defined labels/commands.
|
|
9
10
|
*/
|
|
10
11
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
11
12
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
12
13
|
import { z } from 'zod';
|
|
13
|
-
import { TelegramApiError, TelegramClient, formatNotifyMessage, getDefaultChatId, } from './telegram.js';
|
|
14
|
+
import { TelegramApiError, TelegramClient, buildApprovalKeyboard, formatNotifyMessage, generateApprovalToken, getDefaultChatId, } from './telegram.js';
|
|
14
15
|
import { LocalStore } from './store.js';
|
|
15
16
|
import { formatAgentFooter, formatNotifyWithFooter, processUpdates, } from './routing.js';
|
|
16
17
|
const SERVER_NAME = 'telegram-notify-mcp';
|
|
17
|
-
const SERVER_VERSION = '2.
|
|
18
|
+
const SERVER_VERSION = '2.2.0';
|
|
18
19
|
function textResult(text, isError = false) {
|
|
19
20
|
return {
|
|
20
21
|
content: [{ type: 'text', text }],
|
|
@@ -34,6 +35,82 @@ function getClient() {
|
|
|
34
35
|
function getStore() {
|
|
35
36
|
return new LocalStore();
|
|
36
37
|
}
|
|
38
|
+
async function handleCallbackActions(client, store, actions) {
|
|
39
|
+
let answered = 0;
|
|
40
|
+
let custom_prompts_sent = 0;
|
|
41
|
+
for (const action of actions) {
|
|
42
|
+
if (action.kind === 'answer') {
|
|
43
|
+
try {
|
|
44
|
+
await client.answerCallbackQuery({
|
|
45
|
+
callback_query_id: action.callback_query_id,
|
|
46
|
+
text: action.text,
|
|
47
|
+
});
|
|
48
|
+
answered += 1;
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
// Best-effort: spinner may already be cleared
|
|
52
|
+
}
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
// custom_prompt: open ForceReply on the ORIGINAL bot message (reply thread)
|
|
56
|
+
try {
|
|
57
|
+
await client.answerCallbackQuery({
|
|
58
|
+
callback_query_id: action.callback_query_id,
|
|
59
|
+
text: 'Reply to the bot message',
|
|
60
|
+
});
|
|
61
|
+
answered += 1;
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
/* ignore */
|
|
65
|
+
}
|
|
66
|
+
try {
|
|
67
|
+
const session = action.session;
|
|
68
|
+
// Clear inline buttons so the user focuses on replying to that message
|
|
69
|
+
try {
|
|
70
|
+
await client.editMessageReplyMarkup({
|
|
71
|
+
chat_id: session.chat_id,
|
|
72
|
+
message_id: session.telegram_message_id,
|
|
73
|
+
reply_markup: { inline_keyboard: [] },
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
/* ignore — message may be too old */
|
|
78
|
+
}
|
|
79
|
+
// ForceReply as a reply TO the original notification → Telegram opens reply UI
|
|
80
|
+
// under that message. Mapping on both original (already set) and this prompt.
|
|
81
|
+
const placeholder = (session.custom_placeholder ?? 'Type your custom message').trim() ||
|
|
82
|
+
'Type your custom message';
|
|
83
|
+
const prompt = await client.sendMessage({
|
|
84
|
+
chat_id: session.chat_id,
|
|
85
|
+
text: '✍️',
|
|
86
|
+
reply_to_message_id: session.telegram_message_id,
|
|
87
|
+
reply_markup: {
|
|
88
|
+
force_reply: true,
|
|
89
|
+
selective: true,
|
|
90
|
+
input_field_placeholder: placeholder.slice(0, 64),
|
|
91
|
+
},
|
|
92
|
+
});
|
|
93
|
+
store.putMapping({
|
|
94
|
+
chat_id: String(prompt.chat.id),
|
|
95
|
+
telegram_message_id: prompt.message_id,
|
|
96
|
+
source_agent_id: session.source_agent_id,
|
|
97
|
+
source_agent_name: session.source_agent_name,
|
|
98
|
+
});
|
|
99
|
+
// Keep original mapped for direct replies to the bot message as well
|
|
100
|
+
store.putMapping({
|
|
101
|
+
chat_id: session.chat_id,
|
|
102
|
+
telegram_message_id: session.telegram_message_id,
|
|
103
|
+
source_agent_id: session.source_agent_id,
|
|
104
|
+
source_agent_name: session.source_agent_name,
|
|
105
|
+
});
|
|
106
|
+
custom_prompts_sent += 1;
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
/* ignore send failures; poll summary still reports custom_prompts */
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return { answered, custom_prompts_sent };
|
|
113
|
+
}
|
|
37
114
|
function createServer() {
|
|
38
115
|
const server = new McpServer({
|
|
39
116
|
name: SERVER_NAME,
|
|
@@ -53,7 +130,7 @@ function createServer() {
|
|
|
53
130
|
return errorResult(err);
|
|
54
131
|
}
|
|
55
132
|
});
|
|
56
|
-
server.tool('telegram_send_message', 'Send a text message via the Bot API. chat_id is optional when TELEGRAM_CHAT_ID is set. Optional source_agent_id appends footer and persists reply mapping.', {
|
|
133
|
+
server.tool('telegram_send_message', 'Send a text message via the Bot API. chat_id is optional when TELEGRAM_CHAT_ID is set. Optional source_agent_id appends footer and persists reply mapping. Optional approval_buttons attach Accept/Decline/Custom keyboard.', {
|
|
57
134
|
text: z.string().min(1).describe('Message text to send'),
|
|
58
135
|
chat_id: z
|
|
59
136
|
.union([z.string(), z.number()])
|
|
@@ -72,17 +149,59 @@ function createServer() {
|
|
|
72
149
|
.string()
|
|
73
150
|
.optional()
|
|
74
151
|
.describe('Optional display name for footer'),
|
|
75
|
-
|
|
152
|
+
approval_buttons: z
|
|
153
|
+
.boolean()
|
|
154
|
+
.optional()
|
|
155
|
+
.describe('Attach Accept/Decline/Custom inline keyboard (requires source_agent_id; default false)'),
|
|
156
|
+
accept_command: z
|
|
157
|
+
.string()
|
|
158
|
+
.optional()
|
|
159
|
+
.describe('Text enqueued on Accept (default "Accept")'),
|
|
160
|
+
decline_command: z
|
|
161
|
+
.string()
|
|
162
|
+
.optional()
|
|
163
|
+
.describe('Text enqueued on Decline (default "Decline")'),
|
|
164
|
+
accept_label: z
|
|
165
|
+
.string()
|
|
166
|
+
.optional()
|
|
167
|
+
.describe('Button label for Accept (default "Accept")'),
|
|
168
|
+
decline_label: z
|
|
169
|
+
.string()
|
|
170
|
+
.optional()
|
|
171
|
+
.describe('Button label for Decline (default "Decline")'),
|
|
172
|
+
custom_label: z
|
|
173
|
+
.string()
|
|
174
|
+
.optional()
|
|
175
|
+
.describe('Button label for Custom (default "Custom message")'),
|
|
176
|
+
custom_placeholder: z
|
|
177
|
+
.string()
|
|
178
|
+
.optional()
|
|
179
|
+
.describe('Placeholder in the reply field after Custom is pressed'),
|
|
180
|
+
}, async ({ text, chat_id, parse_mode, source_agent_id, source_agent_name, approval_buttons, accept_command, decline_command, accept_label, decline_label, custom_label, custom_placeholder, }) => {
|
|
76
181
|
try {
|
|
77
182
|
const chatId = getDefaultChatId(chat_id);
|
|
78
183
|
let outbound = text;
|
|
79
184
|
if (source_agent_id) {
|
|
80
185
|
outbound = text + formatAgentFooter(source_agent_id, source_agent_name);
|
|
81
186
|
}
|
|
187
|
+
const wantButtons = approval_buttons === true && !!source_agent_id;
|
|
188
|
+
const acceptCmd = (accept_command ?? 'Accept').trim() || 'Accept';
|
|
189
|
+
const declineCmd = (decline_command ?? 'Decline').trim() || 'Decline';
|
|
190
|
+
let token;
|
|
191
|
+
let reply_markup = undefined;
|
|
192
|
+
if (wantButtons) {
|
|
193
|
+
token = generateApprovalToken();
|
|
194
|
+
reply_markup = buildApprovalKeyboard(token, {
|
|
195
|
+
accept: accept_label,
|
|
196
|
+
decline: decline_label,
|
|
197
|
+
custom: custom_label,
|
|
198
|
+
});
|
|
199
|
+
}
|
|
82
200
|
const msg = await getClient().sendMessage({
|
|
83
201
|
chat_id: chatId,
|
|
84
202
|
text: outbound,
|
|
85
203
|
parse_mode,
|
|
204
|
+
reply_markup,
|
|
86
205
|
});
|
|
87
206
|
let mapped = false;
|
|
88
207
|
if (source_agent_id) {
|
|
@@ -91,9 +210,23 @@ function createServer() {
|
|
|
91
210
|
telegram_message_id: msg.message_id,
|
|
92
211
|
source_agent_id,
|
|
93
212
|
source_agent_name: source_agent_name || undefined,
|
|
213
|
+
accept_command: wantButtons ? acceptCmd : undefined,
|
|
214
|
+
decline_command: wantButtons ? declineCmd : undefined,
|
|
94
215
|
});
|
|
95
216
|
mapped = true;
|
|
96
217
|
}
|
|
218
|
+
if (wantButtons && token && source_agent_id) {
|
|
219
|
+
getStore().putApproval({
|
|
220
|
+
token,
|
|
221
|
+
chat_id: String(msg.chat.id),
|
|
222
|
+
telegram_message_id: msg.message_id,
|
|
223
|
+
source_agent_id,
|
|
224
|
+
source_agent_name: source_agent_name || undefined,
|
|
225
|
+
accept_command: acceptCmd,
|
|
226
|
+
decline_command: declineCmd,
|
|
227
|
+
custom_placeholder: custom_placeholder || undefined,
|
|
228
|
+
});
|
|
229
|
+
}
|
|
97
230
|
return textResult(JSON.stringify({
|
|
98
231
|
ok: true,
|
|
99
232
|
message_id: msg.message_id,
|
|
@@ -101,13 +234,15 @@ function createServer() {
|
|
|
101
234
|
text: msg.text ?? outbound,
|
|
102
235
|
mapped,
|
|
103
236
|
source_agent_id: source_agent_id ?? null,
|
|
237
|
+
approval_buttons: wantButtons,
|
|
238
|
+
approval_token: token ?? null,
|
|
104
239
|
}, null, 2));
|
|
105
240
|
}
|
|
106
241
|
catch (err) {
|
|
107
242
|
return errorResult(err);
|
|
108
243
|
}
|
|
109
244
|
});
|
|
110
|
-
server.tool('telegram_notify', 'Send a short completion-style notification (title + body) with required source_agent_id. Appends agent footer and persists message→agent mapping
|
|
245
|
+
server.tool('telegram_notify', 'Send a short completion-style notification (title + body) with required source_agent_id. Appends agent footer and persists message→agent mapping. Optional approval_buttons attach Accept/Decline/Custom keyboard (default false).', {
|
|
111
246
|
body: z.string().min(1).describe('Notification body / details'),
|
|
112
247
|
title: z.string().optional().describe('Optional short title (e.g. "Build finished")'),
|
|
113
248
|
chat_id: z
|
|
@@ -122,20 +257,77 @@ function createServer() {
|
|
|
122
257
|
.string()
|
|
123
258
|
.optional()
|
|
124
259
|
.describe('Optional short human label for the footer'),
|
|
125
|
-
|
|
260
|
+
approval_buttons: z
|
|
261
|
+
.boolean()
|
|
262
|
+
.optional()
|
|
263
|
+
.describe('Attach Accept/Decline/Custom inline keyboard (default false; opt-in)'),
|
|
264
|
+
accept_command: z
|
|
265
|
+
.string()
|
|
266
|
+
.optional()
|
|
267
|
+
.describe('Text enqueued as pending command when Accept is pressed (e.g. "asmj11 بفرست"). Default: "Accept"'),
|
|
268
|
+
decline_command: z
|
|
269
|
+
.string()
|
|
270
|
+
.optional()
|
|
271
|
+
.describe('Text enqueued when Decline is pressed. Default: "Decline"'),
|
|
272
|
+
accept_label: z
|
|
273
|
+
.string()
|
|
274
|
+
.optional()
|
|
275
|
+
.describe('Button label for Accept (default "Accept")'),
|
|
276
|
+
decline_label: z
|
|
277
|
+
.string()
|
|
278
|
+
.optional()
|
|
279
|
+
.describe('Button label for Decline (default "Decline")'),
|
|
280
|
+
custom_label: z
|
|
281
|
+
.string()
|
|
282
|
+
.optional()
|
|
283
|
+
.describe('Button label for Custom (default "Custom message")'),
|
|
284
|
+
custom_placeholder: z
|
|
285
|
+
.string()
|
|
286
|
+
.optional()
|
|
287
|
+
.describe('Placeholder in the reply field after Custom is pressed'),
|
|
288
|
+
}, async ({ body, title, chat_id, source_agent_id, source_agent_name, approval_buttons, accept_command, decline_command, accept_label, decline_label, custom_label, custom_placeholder, }) => {
|
|
126
289
|
try {
|
|
127
290
|
const chatId = getDefaultChatId(chat_id);
|
|
128
291
|
const text = formatNotifyWithFooter(title, body, source_agent_id, source_agent_name, formatNotifyMessage);
|
|
292
|
+
const wantButtons = approval_buttons === true;
|
|
293
|
+
const acceptCmd = (accept_command ?? 'Accept').trim() || 'Accept';
|
|
294
|
+
const declineCmd = (decline_command ?? 'Decline').trim() || 'Decline';
|
|
295
|
+
let token;
|
|
296
|
+
let reply_markup = undefined;
|
|
297
|
+
if (wantButtons) {
|
|
298
|
+
token = generateApprovalToken();
|
|
299
|
+
reply_markup = buildApprovalKeyboard(token, {
|
|
300
|
+
accept: accept_label,
|
|
301
|
+
decline: decline_label,
|
|
302
|
+
custom: custom_label,
|
|
303
|
+
});
|
|
304
|
+
}
|
|
129
305
|
const msg = await getClient().sendMessage({
|
|
130
306
|
chat_id: chatId,
|
|
131
307
|
text,
|
|
308
|
+
reply_markup,
|
|
132
309
|
});
|
|
133
|
-
getStore()
|
|
310
|
+
const store = getStore();
|
|
311
|
+
store.putMapping({
|
|
134
312
|
chat_id: String(msg.chat.id),
|
|
135
313
|
telegram_message_id: msg.message_id,
|
|
136
314
|
source_agent_id,
|
|
137
315
|
source_agent_name: source_agent_name || undefined,
|
|
316
|
+
accept_command: wantButtons ? acceptCmd : undefined,
|
|
317
|
+
decline_command: wantButtons ? declineCmd : undefined,
|
|
138
318
|
});
|
|
319
|
+
if (wantButtons && token) {
|
|
320
|
+
store.putApproval({
|
|
321
|
+
token,
|
|
322
|
+
chat_id: String(msg.chat.id),
|
|
323
|
+
telegram_message_id: msg.message_id,
|
|
324
|
+
source_agent_id,
|
|
325
|
+
source_agent_name: source_agent_name || undefined,
|
|
326
|
+
accept_command: acceptCmd,
|
|
327
|
+
decline_command: declineCmd,
|
|
328
|
+
custom_placeholder: custom_placeholder || undefined,
|
|
329
|
+
});
|
|
330
|
+
}
|
|
139
331
|
return textResult(JSON.stringify({
|
|
140
332
|
ok: true,
|
|
141
333
|
message_id: msg.message_id,
|
|
@@ -144,6 +336,8 @@ function createServer() {
|
|
|
144
336
|
mapped: true,
|
|
145
337
|
source_agent_id,
|
|
146
338
|
source_agent_name: source_agent_name ?? null,
|
|
339
|
+
approval_buttons: wantButtons,
|
|
340
|
+
approval_token: token ?? null,
|
|
147
341
|
}, null, 2));
|
|
148
342
|
}
|
|
149
343
|
catch (err) {
|
|
@@ -163,7 +357,7 @@ function createServer() {
|
|
|
163
357
|
const updates = await getClient().getUpdates({ limit: limit ?? 10 });
|
|
164
358
|
const chats = new Map();
|
|
165
359
|
for (const u of updates) {
|
|
166
|
-
const m = u.message ?? u.edited_message ?? u.channel_post;
|
|
360
|
+
const m = u.message ?? u.edited_message ?? u.channel_post ?? u.callback_query?.message;
|
|
167
361
|
if (!m?.chat)
|
|
168
362
|
continue;
|
|
169
363
|
const c = m.chat;
|
|
@@ -177,12 +371,20 @@ function createServer() {
|
|
|
177
371
|
update_count: updates.length,
|
|
178
372
|
discovered_chats: [...chats.values()],
|
|
179
373
|
updates: updates.map((u) => {
|
|
180
|
-
const m = u.message ??
|
|
374
|
+
const m = u.message ??
|
|
375
|
+
u.edited_message ??
|
|
376
|
+
u.channel_post ??
|
|
377
|
+
u.callback_query?.message;
|
|
181
378
|
return {
|
|
182
379
|
update_id: u.update_id,
|
|
183
380
|
chat_id: m?.chat?.id ?? null,
|
|
184
|
-
from:
|
|
381
|
+
from: u.callback_query?.from?.username ??
|
|
382
|
+
u.callback_query?.from?.first_name ??
|
|
383
|
+
m?.from?.username ??
|
|
384
|
+
m?.from?.first_name ??
|
|
385
|
+
null,
|
|
185
386
|
text: m?.text ?? null,
|
|
387
|
+
callback_data: u.callback_query?.data ?? null,
|
|
186
388
|
};
|
|
187
389
|
}),
|
|
188
390
|
}, null, 2));
|
|
@@ -191,7 +393,7 @@ function createServer() {
|
|
|
191
393
|
return errorResult(err);
|
|
192
394
|
}
|
|
193
395
|
});
|
|
194
|
-
server.tool('telegram_poll_inbound', 'Poll Telegram getUpdates, allowlist-filter, route replies/mappings
|
|
396
|
+
server.tool('telegram_poll_inbound', 'Poll Telegram getUpdates, allowlist-filter, route replies/mappings, /to commands, and approval button callbacks into the pending queue. Answers callback_query; Custom sends a ForceReply prompt. Host must then list + SendToAgent + ack.', {
|
|
195
397
|
limit: z
|
|
196
398
|
.number()
|
|
197
399
|
.int()
|
|
@@ -209,20 +411,26 @@ function createServer() {
|
|
|
209
411
|
}, async ({ limit, timeout }) => {
|
|
210
412
|
try {
|
|
211
413
|
const store = getStore();
|
|
414
|
+
const client = getClient();
|
|
212
415
|
const offset = store.getUpdateOffset();
|
|
213
|
-
const updates = await
|
|
416
|
+
const updates = await client.getUpdates({
|
|
214
417
|
limit: limit ?? 50,
|
|
215
418
|
timeout: timeout ?? 0,
|
|
216
419
|
offset,
|
|
420
|
+
allowed_updates: ['message', 'edited_message', 'callback_query'],
|
|
217
421
|
});
|
|
218
422
|
const summary = processUpdates(store, updates);
|
|
219
423
|
if (summary.next_offset !== undefined) {
|
|
220
424
|
store.setUpdateOffset(summary.next_offset);
|
|
221
425
|
}
|
|
426
|
+
const cb = await handleCallbackActions(client, store, summary.callback_actions);
|
|
427
|
+
const { callback_actions: _actions, ...publicSummary } = summary;
|
|
222
428
|
return textResult(JSON.stringify({
|
|
223
429
|
ok: true,
|
|
224
|
-
...
|
|
225
|
-
|
|
430
|
+
...publicSummary,
|
|
431
|
+
callbacks_answered: cb.answered,
|
|
432
|
+
custom_prompts_sent: cb.custom_prompts_sent,
|
|
433
|
+
note: 'Unroutable messages (no reply-to mapping and no /to <agent_id> …) are ignored. Approval Accept/Decline enqueue accept_command/decline_command. Custom prompts a ForceReply. Host should call telegram_list_pending_commands, deliver via SendToAgent, then telegram_ack_command.',
|
|
226
434
|
}, null, 2));
|
|
227
435
|
}
|
|
228
436
|
catch (err) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/routing.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Inbound routing: allowlist, reply→mapping, /to <agent_id> fallback.
|
|
2
|
+
* Inbound routing: allowlist, reply→mapping, /to <agent_id> fallback, approval callbacks.
|
|
3
3
|
* Unroutable allowlisted messages are ignored (counted); never executed as shell.
|
|
4
4
|
*/
|
|
5
|
-
import type { PendingCommand, LocalStore } from './store.js';
|
|
6
|
-
import type { TelegramMessage, TelegramUpdate } from './telegram.js';
|
|
5
|
+
import type { ApprovalSession, PendingCommand, LocalStore } from './store.js';
|
|
6
|
+
import type { TelegramCallbackQuery, TelegramMessage, TelegramUpdate } from './telegram.js';
|
|
7
7
|
export interface AllowlistResult {
|
|
8
8
|
allowed: boolean;
|
|
9
9
|
chatId: string;
|
|
@@ -25,25 +25,57 @@ export declare function truncateAgentLabel(idOrName: string, maxLen?: number): s
|
|
|
25
25
|
*/
|
|
26
26
|
export declare function formatAgentFooter(sourceAgentId: string, sourceAgentName?: string): string;
|
|
27
27
|
export declare function formatNotifyWithFooter(title: string | undefined, body: string, sourceAgentId: string, sourceAgentName?: string, formatBase?: (title: string | undefined, body: string) => string): string;
|
|
28
|
+
export type CallbackAction = 'ok' | 'no' | 'cu';
|
|
29
|
+
/** Parse callback_data: ok:TOKEN | no:TOKEN | cu:TOKEN */
|
|
30
|
+
export declare function parseApprovalCallbackData(data: string | undefined): {
|
|
31
|
+
action: CallbackAction;
|
|
32
|
+
token: string;
|
|
33
|
+
} | undefined;
|
|
28
34
|
export type InboundDisposition = {
|
|
29
35
|
kind: 'enqueued';
|
|
30
36
|
command: PendingCommand;
|
|
31
|
-
via: 'reply' | 'to_command';
|
|
37
|
+
via: 'reply' | 'to_command' | 'approval';
|
|
32
38
|
} | {
|
|
33
39
|
kind: 'ignored_not_allowlisted';
|
|
34
40
|
} | {
|
|
35
41
|
kind: 'ignored_unroutable';
|
|
36
42
|
} | {
|
|
37
43
|
kind: 'ignored_no_text';
|
|
44
|
+
} | {
|
|
45
|
+
kind: 'custom_prompt';
|
|
46
|
+
session: ApprovalSession;
|
|
47
|
+
callback_query_id: string;
|
|
48
|
+
via: 'approval';
|
|
49
|
+
} | {
|
|
50
|
+
kind: 'ignored_unknown_callback';
|
|
51
|
+
} | {
|
|
52
|
+
kind: 'callback_answered_only';
|
|
53
|
+
callback_query_id: string;
|
|
38
54
|
};
|
|
39
55
|
export declare function routeInboundMessage(store: LocalStore, message: TelegramMessage, env?: NodeJS.ProcessEnv): InboundDisposition;
|
|
56
|
+
/**
|
|
57
|
+
* Route an inline-keyboard callback_query into pending queue or custom_prompt disposition.
|
|
58
|
+
*/
|
|
59
|
+
export declare function routeCallbackQuery(store: LocalStore, callback: TelegramCallbackQuery, env?: NodeJS.ProcessEnv): InboundDisposition;
|
|
40
60
|
export interface PollSummary {
|
|
41
61
|
updates_seen: number;
|
|
42
62
|
enqueued: number;
|
|
43
63
|
ignored_not_allowlisted: number;
|
|
44
64
|
ignored_unroutable: number;
|
|
45
65
|
ignored_no_text: number;
|
|
66
|
+
ignored_unknown_callback: number;
|
|
67
|
+
custom_prompts: number;
|
|
46
68
|
commands: PendingCommand[];
|
|
69
|
+
/** Callbacks that need answerCallbackQuery + optional ForceReply follow-up. */
|
|
70
|
+
callback_actions: Array<{
|
|
71
|
+
kind: 'answer';
|
|
72
|
+
callback_query_id: string;
|
|
73
|
+
text?: string;
|
|
74
|
+
} | {
|
|
75
|
+
kind: 'custom_prompt';
|
|
76
|
+
callback_query_id: string;
|
|
77
|
+
session: ApprovalSession;
|
|
78
|
+
}>;
|
|
47
79
|
next_offset?: number;
|
|
48
80
|
}
|
|
49
81
|
export declare function processUpdates(store: LocalStore, updates: TelegramUpdate[], env?: NodeJS.ProcessEnv): PollSummary;
|
package/dist/routing.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Inbound routing: allowlist, reply→mapping, /to <agent_id> fallback.
|
|
2
|
+
* Inbound routing: allowlist, reply→mapping, /to <agent_id> fallback, approval callbacks.
|
|
3
3
|
* Unroutable allowlisted messages are ignored (counted); never executed as shell.
|
|
4
4
|
*/
|
|
5
5
|
/**
|
|
@@ -62,6 +62,19 @@ function defaultFormatBase(title, body) {
|
|
|
62
62
|
return `✅ ${t}\n\n${b}`;
|
|
63
63
|
return `✅ ${b}`;
|
|
64
64
|
}
|
|
65
|
+
/** Parse callback_data: ok:TOKEN | no:TOKEN | cu:TOKEN */
|
|
66
|
+
export function parseApprovalCallbackData(data) {
|
|
67
|
+
if (!data)
|
|
68
|
+
return undefined;
|
|
69
|
+
const match = data.match(/^(ok|no|cu):(.+)$/);
|
|
70
|
+
if (!match)
|
|
71
|
+
return undefined;
|
|
72
|
+
const action = match[1];
|
|
73
|
+
const token = match[2];
|
|
74
|
+
if (!token)
|
|
75
|
+
return undefined;
|
|
76
|
+
return { action, token };
|
|
77
|
+
}
|
|
65
78
|
export function routeInboundMessage(store, message, env = process.env) {
|
|
66
79
|
const chatId = message.chat?.id;
|
|
67
80
|
if (chatId === undefined || chatId === null) {
|
|
@@ -104,6 +117,48 @@ export function routeInboundMessage(store, message, env = process.env) {
|
|
|
104
117
|
// Prefer ignore with count (documented): no mapping and no /to → drop
|
|
105
118
|
return { kind: 'ignored_unroutable' };
|
|
106
119
|
}
|
|
120
|
+
/**
|
|
121
|
+
* Route an inline-keyboard callback_query into pending queue or custom_prompt disposition.
|
|
122
|
+
*/
|
|
123
|
+
export function routeCallbackQuery(store, callback, env = process.env) {
|
|
124
|
+
const chatId = callback.message?.chat?.id;
|
|
125
|
+
if (chatId === undefined || chatId === null) {
|
|
126
|
+
return { kind: 'ignored_unroutable' };
|
|
127
|
+
}
|
|
128
|
+
if (!isChatAllowed(chatId, env)) {
|
|
129
|
+
return { kind: 'ignored_not_allowlisted' };
|
|
130
|
+
}
|
|
131
|
+
const parsed = parseApprovalCallbackData(callback.data);
|
|
132
|
+
if (!parsed) {
|
|
133
|
+
return { kind: 'ignored_unknown_callback' };
|
|
134
|
+
}
|
|
135
|
+
const session = store.getApproval(parsed.token);
|
|
136
|
+
if (!session) {
|
|
137
|
+
return { kind: 'ignored_unknown_callback' };
|
|
138
|
+
}
|
|
139
|
+
const originalMessageId = session.telegram_message_id;
|
|
140
|
+
const callbackMessageId = callback.message?.message_id ?? 0;
|
|
141
|
+
if (parsed.action === 'cu') {
|
|
142
|
+
return {
|
|
143
|
+
kind: 'custom_prompt',
|
|
144
|
+
session,
|
|
145
|
+
callback_query_id: callback.id,
|
|
146
|
+
via: 'approval',
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
const text = parsed.action === 'ok' ? session.accept_command : session.decline_command;
|
|
150
|
+
const command = store.enqueuePending({
|
|
151
|
+
source_agent_id: session.source_agent_id,
|
|
152
|
+
source_agent_name: session.source_agent_name,
|
|
153
|
+
chat_id: String(chatId),
|
|
154
|
+
telegram_message_id: callbackMessageId,
|
|
155
|
+
reply_to_telegram_message_id: originalMessageId,
|
|
156
|
+
text,
|
|
157
|
+
});
|
|
158
|
+
// One-shot: remove session after Accept/Decline so re-presses don't re-enqueue
|
|
159
|
+
store.deleteApproval(parsed.token);
|
|
160
|
+
return { kind: 'enqueued', command, via: 'approval' };
|
|
161
|
+
}
|
|
107
162
|
export function processUpdates(store, updates, env = process.env) {
|
|
108
163
|
const summary = {
|
|
109
164
|
updates_seen: updates.length,
|
|
@@ -111,13 +166,56 @@ export function processUpdates(store, updates, env = process.env) {
|
|
|
111
166
|
ignored_not_allowlisted: 0,
|
|
112
167
|
ignored_unroutable: 0,
|
|
113
168
|
ignored_no_text: 0,
|
|
169
|
+
ignored_unknown_callback: 0,
|
|
170
|
+
custom_prompts: 0,
|
|
114
171
|
commands: [],
|
|
172
|
+
callback_actions: [],
|
|
115
173
|
};
|
|
116
174
|
let maxUpdateId;
|
|
117
175
|
for (const u of updates) {
|
|
118
176
|
if (maxUpdateId === undefined || u.update_id > maxUpdateId) {
|
|
119
177
|
maxUpdateId = u.update_id;
|
|
120
178
|
}
|
|
179
|
+
if (u.callback_query) {
|
|
180
|
+
const result = routeCallbackQuery(store, u.callback_query, env);
|
|
181
|
+
switch (result.kind) {
|
|
182
|
+
case 'enqueued':
|
|
183
|
+
summary.enqueued += 1;
|
|
184
|
+
summary.commands.push(result.command);
|
|
185
|
+
summary.callback_actions.push({
|
|
186
|
+
kind: 'answer',
|
|
187
|
+
callback_query_id: u.callback_query.id,
|
|
188
|
+
text: result.command.text.slice(0, 200),
|
|
189
|
+
});
|
|
190
|
+
break;
|
|
191
|
+
case 'custom_prompt':
|
|
192
|
+
summary.custom_prompts += 1;
|
|
193
|
+
summary.callback_actions.push({
|
|
194
|
+
kind: 'custom_prompt',
|
|
195
|
+
callback_query_id: result.callback_query_id,
|
|
196
|
+
session: result.session,
|
|
197
|
+
});
|
|
198
|
+
break;
|
|
199
|
+
case 'ignored_not_allowlisted':
|
|
200
|
+
summary.ignored_not_allowlisted += 1;
|
|
201
|
+
break;
|
|
202
|
+
case 'ignored_unroutable':
|
|
203
|
+
summary.ignored_unroutable += 1;
|
|
204
|
+
break;
|
|
205
|
+
case 'ignored_unknown_callback':
|
|
206
|
+
summary.ignored_unknown_callback += 1;
|
|
207
|
+
// Still answer so Telegram stops the spinner
|
|
208
|
+
summary.callback_actions.push({
|
|
209
|
+
kind: 'answer',
|
|
210
|
+
callback_query_id: u.callback_query.id,
|
|
211
|
+
text: 'Unknown or expired approval',
|
|
212
|
+
});
|
|
213
|
+
break;
|
|
214
|
+
default:
|
|
215
|
+
break;
|
|
216
|
+
}
|
|
217
|
+
continue;
|
|
218
|
+
}
|
|
121
219
|
const message = u.message ?? u.edited_message;
|
|
122
220
|
if (!message)
|
|
123
221
|
continue;
|
package/dist/routing.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routing.js","sourceRoot":"","sources":["../src/routing.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"routing.js","sourceRoot":"","sources":["../src/routing.ts"],"names":[],"mappings":"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"}
|
package/dist/store.d.ts
CHANGED
|
@@ -10,6 +10,22 @@ export interface OutboundMapping {
|
|
|
10
10
|
source_agent_name?: string;
|
|
11
11
|
conversation_hint?: string;
|
|
12
12
|
created_at: string;
|
|
13
|
+
/** Optional: command text enqueued when Accept is pressed on this message. */
|
|
14
|
+
accept_command?: string;
|
|
15
|
+
/** Optional: command text enqueued when Decline is pressed on this message. */
|
|
16
|
+
decline_command?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface ApprovalSession {
|
|
19
|
+
token: string;
|
|
20
|
+
chat_id: string;
|
|
21
|
+
telegram_message_id: number;
|
|
22
|
+
source_agent_id: string;
|
|
23
|
+
source_agent_name?: string;
|
|
24
|
+
accept_command: string;
|
|
25
|
+
decline_command: string;
|
|
26
|
+
/** Optional placeholder shown in the Telegram reply field after Custom. */
|
|
27
|
+
custom_placeholder?: string;
|
|
28
|
+
created_at: string;
|
|
13
29
|
}
|
|
14
30
|
export type PendingCommandStatus = 'pending' | 'acked';
|
|
15
31
|
export interface PendingCommand {
|
|
@@ -37,6 +53,11 @@ export declare class LocalStore {
|
|
|
37
53
|
created_at?: string;
|
|
38
54
|
}): OutboundMapping;
|
|
39
55
|
getMapping(chatId: string | number, messageId: number): OutboundMapping | undefined;
|
|
56
|
+
putApproval(entry: Omit<ApprovalSession, 'created_at'> & {
|
|
57
|
+
created_at?: string;
|
|
58
|
+
}): ApprovalSession;
|
|
59
|
+
getApproval(token: string): ApprovalSession | undefined;
|
|
60
|
+
deleteApproval(token: string): boolean;
|
|
40
61
|
enqueuePending(input: Omit<PendingCommand, 'id' | 'created_at' | 'status'> & {
|
|
41
62
|
id?: string;
|
|
42
63
|
created_at?: string;
|
package/dist/store.js
CHANGED
|
@@ -16,7 +16,7 @@ export function getDataDir(env = process.env) {
|
|
|
16
16
|
return join(process.cwd(), '.telegram-notify-data');
|
|
17
17
|
}
|
|
18
18
|
function emptyStore() {
|
|
19
|
-
return { mappings: {}, pending: [], update_offset: undefined };
|
|
19
|
+
return { mappings: {}, pending: [], approvals: {}, update_offset: undefined };
|
|
20
20
|
}
|
|
21
21
|
export class LocalStore {
|
|
22
22
|
dataDir;
|
|
@@ -41,6 +41,7 @@ export class LocalStore {
|
|
|
41
41
|
return {
|
|
42
42
|
mappings: parsed.mappings ?? {},
|
|
43
43
|
pending: Array.isArray(parsed.pending) ? parsed.pending : [],
|
|
44
|
+
approvals: parsed.approvals ?? {},
|
|
44
45
|
update_offset: parsed.update_offset,
|
|
45
46
|
};
|
|
46
47
|
}
|
|
@@ -61,6 +62,8 @@ export class LocalStore {
|
|
|
61
62
|
source_agent_name: entry.source_agent_name,
|
|
62
63
|
conversation_hint: entry.conversation_hint,
|
|
63
64
|
created_at: entry.created_at ?? new Date().toISOString(),
|
|
65
|
+
accept_command: entry.accept_command,
|
|
66
|
+
decline_command: entry.decline_command,
|
|
64
67
|
};
|
|
65
68
|
data.mappings[mappingKey(full.chat_id, full.telegram_message_id)] = full;
|
|
66
69
|
this.write(data);
|
|
@@ -70,6 +73,35 @@ export class LocalStore {
|
|
|
70
73
|
const data = this.read();
|
|
71
74
|
return data.mappings[mappingKey(chatId, messageId)];
|
|
72
75
|
}
|
|
76
|
+
putApproval(entry) {
|
|
77
|
+
const data = this.read();
|
|
78
|
+
const full = {
|
|
79
|
+
token: entry.token,
|
|
80
|
+
chat_id: String(entry.chat_id),
|
|
81
|
+
telegram_message_id: entry.telegram_message_id,
|
|
82
|
+
source_agent_id: entry.source_agent_id,
|
|
83
|
+
source_agent_name: entry.source_agent_name,
|
|
84
|
+
accept_command: entry.accept_command,
|
|
85
|
+
decline_command: entry.decline_command,
|
|
86
|
+
custom_placeholder: entry.custom_placeholder,
|
|
87
|
+
created_at: entry.created_at ?? new Date().toISOString(),
|
|
88
|
+
};
|
|
89
|
+
data.approvals[full.token] = full;
|
|
90
|
+
this.write(data);
|
|
91
|
+
return full;
|
|
92
|
+
}
|
|
93
|
+
getApproval(token) {
|
|
94
|
+
const data = this.read();
|
|
95
|
+
return data.approvals[token];
|
|
96
|
+
}
|
|
97
|
+
deleteApproval(token) {
|
|
98
|
+
const data = this.read();
|
|
99
|
+
if (!(token in data.approvals))
|
|
100
|
+
return false;
|
|
101
|
+
delete data.approvals[token];
|
|
102
|
+
this.write(data);
|
|
103
|
+
return true;
|
|
104
|
+
}
|
|
73
105
|
enqueuePending(input) {
|
|
74
106
|
const data = this.read();
|
|
75
107
|
const cmd = {
|
package/dist/store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
|
package/dist/telegram.d.ts
CHANGED
|
@@ -32,11 +32,18 @@ export interface TelegramMessage {
|
|
|
32
32
|
from?: TelegramUser;
|
|
33
33
|
reply_to_message?: TelegramMessage;
|
|
34
34
|
}
|
|
35
|
+
export interface TelegramCallbackQuery {
|
|
36
|
+
id: string;
|
|
37
|
+
from?: TelegramUser;
|
|
38
|
+
data?: string;
|
|
39
|
+
message?: TelegramMessage;
|
|
40
|
+
}
|
|
35
41
|
export interface TelegramUpdate {
|
|
36
42
|
update_id: number;
|
|
37
43
|
message?: TelegramMessage;
|
|
38
44
|
edited_message?: TelegramMessage;
|
|
39
45
|
channel_post?: TelegramMessage;
|
|
46
|
+
callback_query?: TelegramCallbackQuery;
|
|
40
47
|
}
|
|
41
48
|
export interface TelegramApiResponse<T> {
|
|
42
49
|
ok: boolean;
|
|
@@ -45,19 +52,53 @@ export interface TelegramApiResponse<T> {
|
|
|
45
52
|
error_code?: number;
|
|
46
53
|
}
|
|
47
54
|
export type ParseMode = 'Markdown' | 'MarkdownV2' | 'HTML';
|
|
55
|
+
export interface InlineKeyboardButton {
|
|
56
|
+
text: string;
|
|
57
|
+
callback_data?: string;
|
|
58
|
+
url?: string;
|
|
59
|
+
}
|
|
60
|
+
export interface InlineKeyboardMarkup {
|
|
61
|
+
inline_keyboard: InlineKeyboardButton[][];
|
|
62
|
+
}
|
|
63
|
+
export interface ForceReplyMarkup {
|
|
64
|
+
force_reply: true;
|
|
65
|
+
selective?: boolean;
|
|
66
|
+
input_field_placeholder?: string;
|
|
67
|
+
}
|
|
68
|
+
export type ReplyMarkup = InlineKeyboardMarkup | ForceReplyMarkup;
|
|
48
69
|
export interface SendMessageParams {
|
|
49
70
|
chat_id: string | number;
|
|
50
71
|
text: string;
|
|
51
72
|
parse_mode?: ParseMode;
|
|
52
73
|
disable_notification?: boolean;
|
|
74
|
+
reply_markup?: ReplyMarkup;
|
|
75
|
+
reply_to_message_id?: number;
|
|
76
|
+
}
|
|
77
|
+
export interface AnswerCallbackQueryParams {
|
|
78
|
+
callback_query_id: string;
|
|
79
|
+
text?: string;
|
|
80
|
+
show_alert?: boolean;
|
|
53
81
|
}
|
|
54
82
|
export interface GetUpdatesParams {
|
|
55
83
|
limit?: number;
|
|
56
84
|
timeout?: number;
|
|
57
85
|
offset?: number;
|
|
86
|
+
allowed_updates?: string[];
|
|
58
87
|
}
|
|
59
88
|
export declare function getDefaultChatId(explicit?: string | number): string | number;
|
|
60
89
|
export declare function formatNotifyMessage(title: string | undefined, body: string): string;
|
|
90
|
+
/** Short random token for callback_data (keeps ok:/no:/cu: + token ≤ 64 bytes). */
|
|
91
|
+
export declare function generateApprovalToken(byteLength?: number): string;
|
|
92
|
+
export interface ApprovalButtonLabels {
|
|
93
|
+
accept?: string;
|
|
94
|
+
decline?: string;
|
|
95
|
+
custom?: string;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Inline keyboard: Accept / Decline / Custom (labels overridable by caller).
|
|
99
|
+
* callback_data prefixes: ok: | no: | cu: + TOKEN
|
|
100
|
+
*/
|
|
101
|
+
export declare function buildApprovalKeyboard(token: string, labels?: ApprovalButtonLabels): InlineKeyboardMarkup;
|
|
61
102
|
export declare class TelegramClient {
|
|
62
103
|
private readonly fetchImpl;
|
|
63
104
|
private readonly baseUrl;
|
|
@@ -65,6 +106,15 @@ export declare class TelegramClient {
|
|
|
65
106
|
private call;
|
|
66
107
|
getMe(): Promise<TelegramUser>;
|
|
67
108
|
sendMessage(params: SendMessageParams): Promise<TelegramMessage>;
|
|
109
|
+
answerCallbackQuery(params: AnswerCallbackQueryParams): Promise<boolean>;
|
|
110
|
+
/** Remove or replace inline keyboard on an existing message (empty markup clears buttons). */
|
|
111
|
+
editMessageReplyMarkup(params: {
|
|
112
|
+
chat_id: string | number;
|
|
113
|
+
message_id: number;
|
|
114
|
+
reply_markup?: InlineKeyboardMarkup | {
|
|
115
|
+
inline_keyboard: [];
|
|
116
|
+
};
|
|
117
|
+
}): Promise<TelegramMessage | boolean>;
|
|
68
118
|
getUpdates(params?: GetUpdatesParams): Promise<TelegramUpdate[]>;
|
|
69
119
|
}
|
|
70
120
|
export declare function createClientFromEnv(fetchImpl?: typeof fetch): TelegramClient;
|
package/dist/telegram.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Thin Telegram Bot HTTP API client (api.telegram.org).
|
|
3
3
|
* Uses Node 20+ global fetch. No secrets are hardcoded.
|
|
4
4
|
*/
|
|
5
|
+
import { randomBytes } from 'node:crypto';
|
|
5
6
|
export class TelegramApiError extends Error {
|
|
6
7
|
status;
|
|
7
8
|
description;
|
|
@@ -37,6 +38,39 @@ export function formatNotifyMessage(title, body) {
|
|
|
37
38
|
}
|
|
38
39
|
return `✅ ${b}`;
|
|
39
40
|
}
|
|
41
|
+
/** Short random token for callback_data (keeps ok:/no:/cu: + token ≤ 64 bytes). */
|
|
42
|
+
export function generateApprovalToken(byteLength = 6) {
|
|
43
|
+
return randomBytes(byteLength).toString('base64url').slice(0, 12);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Inline keyboard: Accept / Decline / Custom (labels overridable by caller).
|
|
47
|
+
* callback_data prefixes: ok: | no: | cu: + TOKEN
|
|
48
|
+
*/
|
|
49
|
+
export function buildApprovalKeyboard(token, labels = {}) {
|
|
50
|
+
const t = token.trim();
|
|
51
|
+
if (!t) {
|
|
52
|
+
throw new Error('approval token must be non-empty');
|
|
53
|
+
}
|
|
54
|
+
for (const prefix of ['ok:', 'no:', 'cu:']) {
|
|
55
|
+
if (Buffer.byteLength(prefix + t, 'utf8') > 64) {
|
|
56
|
+
throw new Error(`callback_data exceeds 64 bytes for prefix ${prefix}`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
const accept = (labels.accept ?? 'Accept').trim() || 'Accept';
|
|
60
|
+
const decline = (labels.decline ?? 'Decline').trim() || 'Decline';
|
|
61
|
+
const custom = (labels.custom ?? 'Custom message').trim() || 'Custom message';
|
|
62
|
+
// Telegram button text max ~64 chars
|
|
63
|
+
const clip = (s) => (s.length > 64 ? s.slice(0, 64) : s);
|
|
64
|
+
return {
|
|
65
|
+
inline_keyboard: [
|
|
66
|
+
[
|
|
67
|
+
{ text: clip(accept), callback_data: `ok:${t}` },
|
|
68
|
+
{ text: clip(decline), callback_data: `no:${t}` },
|
|
69
|
+
],
|
|
70
|
+
[{ text: clip(custom), callback_data: `cu:${t}` }],
|
|
71
|
+
],
|
|
72
|
+
};
|
|
73
|
+
}
|
|
40
74
|
export class TelegramClient {
|
|
41
75
|
fetchImpl;
|
|
42
76
|
baseUrl;
|
|
@@ -84,8 +118,33 @@ export class TelegramClient {
|
|
|
84
118
|
if (params.disable_notification !== undefined) {
|
|
85
119
|
payload.disable_notification = params.disable_notification;
|
|
86
120
|
}
|
|
121
|
+
if (params.reply_markup !== undefined) {
|
|
122
|
+
payload.reply_markup = params.reply_markup;
|
|
123
|
+
}
|
|
124
|
+
if (params.reply_to_message_id !== undefined) {
|
|
125
|
+
payload.reply_to_message_id = params.reply_to_message_id;
|
|
126
|
+
}
|
|
87
127
|
return this.call('sendMessage', payload);
|
|
88
128
|
}
|
|
129
|
+
answerCallbackQuery(params) {
|
|
130
|
+
const payload = {
|
|
131
|
+
callback_query_id: params.callback_query_id,
|
|
132
|
+
};
|
|
133
|
+
if (params.text !== undefined)
|
|
134
|
+
payload.text = params.text;
|
|
135
|
+
if (params.show_alert !== undefined)
|
|
136
|
+
payload.show_alert = params.show_alert;
|
|
137
|
+
return this.call('answerCallbackQuery', payload);
|
|
138
|
+
}
|
|
139
|
+
/** Remove or replace inline keyboard on an existing message (empty markup clears buttons). */
|
|
140
|
+
editMessageReplyMarkup(params) {
|
|
141
|
+
const payload = {
|
|
142
|
+
chat_id: params.chat_id,
|
|
143
|
+
message_id: params.message_id,
|
|
144
|
+
reply_markup: params.reply_markup ?? { inline_keyboard: [] },
|
|
145
|
+
};
|
|
146
|
+
return this.call('editMessageReplyMarkup', payload);
|
|
147
|
+
}
|
|
89
148
|
getUpdates(params = {}) {
|
|
90
149
|
const payload = {};
|
|
91
150
|
if (params.limit !== undefined)
|
|
@@ -94,6 +153,8 @@ export class TelegramClient {
|
|
|
94
153
|
payload.timeout = params.timeout;
|
|
95
154
|
if (params.offset !== undefined)
|
|
96
155
|
payload.offset = params.offset;
|
|
156
|
+
if (params.allowed_updates !== undefined)
|
|
157
|
+
payload.allowed_updates = params.allowed_updates;
|
|
97
158
|
return this.call('getUpdates', Object.keys(payload).length ? payload : undefined);
|
|
98
159
|
}
|
|
99
160
|
}
|
package/dist/telegram.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telegram.js","sourceRoot":"","sources":["../src/telegram.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAGvB;IACA;IAHlB,YACE,OAAe,EACC,MAAe,EACf,WAAoB;QAEpC,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,WAAM,GAAN,MAAM,CAAS;QACf,gBAAW,GAAX,WAAW,CAAS;QAGpC,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;
|
|
1
|
+
{"version":3,"file":"telegram.js","sourceRoot":"","sources":["../src/telegram.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "telegram-notify-mcp",
|
|
3
|
-
"version": "2.
|
|
4
|
-
"description": "MCP connector/server that sends Telegram notifications via your own BotFather bot (BYOB), with Phase 2 inbound reply routing
|
|
3
|
+
"version": "2.2.0",
|
|
4
|
+
"description": "MCP connector/server that sends Telegram notifications via your own BotFather bot (BYOB), with Phase 2 inbound reply routing and inline approval buttons.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"bin": {
|
package/skill-snippet.md
CHANGED
|
@@ -25,16 +25,21 @@ Call `telegram_notify` with:
|
|
|
25
25
|
- `source_agent_id`: **required** — stable id of this agent (used for reply routing)
|
|
26
26
|
- `source_agent_name`: optional short label for the Telegram footer
|
|
27
27
|
- `chat_id`: only if no default env chat
|
|
28
|
+
- `approval_buttons`: optional boolean — default **true** (Accept / Decline / Custom keyboard)
|
|
29
|
+
- `accept_command`: optional string — text enqueued when user taps Accept (e.g. `asmj11 بفرست`). Default: `Accept`
|
|
30
|
+
- `decline_command`: optional string — text enqueued on Decline. Default: `Decline`
|
|
28
31
|
|
|
29
32
|
Keep messages short. Do not put tokens or passwords in the body.
|
|
30
33
|
|
|
34
|
+
When the user taps **Custom message**, the bot asks for a ForceReply; their next reply is enqueued for the same `source_agent_id` like a normal reply.
|
|
35
|
+
|
|
31
36
|
## Verify bot
|
|
32
37
|
|
|
33
38
|
Call `telegram_get_me` if sends fail or after rotating the token.
|
|
34
39
|
|
|
35
40
|
## Raw send
|
|
36
41
|
|
|
37
|
-
Use `telegram_send_message` when you need a custom `parse_mode` or non-notify wording. Pass optional `source_agent_id` if you want footer + reply mapping.
|
|
42
|
+
Use `telegram_send_message` when you need a custom `parse_mode` or non-notify wording. Pass optional `source_agent_id` if you want footer + reply mapping. Optional `approval_buttons` (default false), `accept_command`, `decline_command` work the same as on `telegram_notify` when `source_agent_id` is set.
|
|
38
43
|
|
|
39
44
|
---
|
|
40
45
|
|
|
@@ -75,8 +80,9 @@ async function telegramInboundTick(mcp, sendToAgent) {
|
|
|
75
80
|
|
|
76
81
|
### Routing reminders for the user
|
|
77
82
|
|
|
78
|
-
- Prefer **replying** to the notify message
|
|
83
|
+
- Prefer **Accept / Decline / Custom** buttons, or **replying** to the notify message (maps to the originating agent).
|
|
79
84
|
- Fallback: `/to <agent_id> <natural language command>`.
|
|
80
85
|
- Unroutable messages are ignored (not executed).
|
|
86
|
+
- Pending queue shape is unchanged — bridge/daemon needs no format change.
|
|
81
87
|
|
|
82
88
|
Do **not** put `TELEGRAM_BOT_TOKEN` in prompts or Telegram bodies. Do **not** treat Telegram text as shell inside the MCP server — the **agent** decides actions under normal host policies.
|