@adonis-agora/agent 0.64.0 → 0.65.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/CHANGELOG.md +21 -0
- package/dist/src/action-proposal-outcome.d.ts +4 -0
- package/dist/src/action-proposal-outcome.d.ts.map +1 -1
- package/dist/src/action-proposal-outcome.js +23 -4
- package/dist/src/action-proposal-outcome.js.map +1 -1
- package/dist/src/action-proposal-text.js +3 -3
- package/dist/src/action-proposal-text.js.map +1 -1
- package/dist/src/agent-service.d.ts +10 -1
- package/dist/src/agent-service.d.ts.map +1 -1
- package/dist/src/agent-service.js +3 -2
- package/dist/src/agent-service.js.map +1 -1
- package/dist/src/channels/adapters/evolution_api.d.ts +7 -2
- package/dist/src/channels/adapters/evolution_api.d.ts.map +1 -1
- package/dist/src/channels/adapters/evolution_api.js +127 -41
- package/dist/src/channels/adapters/evolution_api.js.map +1 -1
- package/dist/src/channels/adapters/telegram.d.ts +2 -1
- package/dist/src/channels/adapters/telegram.d.ts.map +1 -1
- package/dist/src/channels/adapters/telegram.js +57 -4
- package/dist/src/channels/adapters/telegram.js.map +1 -1
- package/dist/src/channels/adapters/whatsapp_cloud.d.ts +3 -2
- package/dist/src/channels/adapters/whatsapp_cloud.d.ts.map +1 -1
- package/dist/src/channels/adapters/whatsapp_cloud.js +55 -4
- package/dist/src/channels/adapters/whatsapp_cloud.js.map +1 -1
- package/dist/src/channels/adapters/whatsmiau.d.ts +5 -3
- package/dist/src/channels/adapters/whatsmiau.d.ts.map +1 -1
- package/dist/src/channels/adapters/whatsmiau.js +6 -2
- package/dist/src/channels/adapters/whatsmiau.js.map +1 -1
- package/dist/src/channels/executor.d.ts +116 -0
- package/dist/src/channels/executor.d.ts.map +1 -0
- package/dist/src/channels/executor.js +138 -0
- package/dist/src/channels/executor.js.map +1 -0
- package/dist/src/channels/handler.d.ts +228 -89
- package/dist/src/channels/handler.d.ts.map +1 -1
- package/dist/src/channels/handler.js +845 -337
- package/dist/src/channels/handler.js.map +1 -1
- package/dist/src/channels/http.d.ts +15 -0
- package/dist/src/channels/http.d.ts.map +1 -1
- package/dist/src/channels/http.js +43 -0
- package/dist/src/channels/http.js.map +1 -1
- package/dist/src/channels/index.d.ts +7 -4
- package/dist/src/channels/index.d.ts.map +1 -1
- package/dist/src/channels/index.js +6 -3
- package/dist/src/channels/index.js.map +1 -1
- package/dist/src/channels/texts.d.ts +102 -0
- package/dist/src/channels/texts.d.ts.map +1 -0
- package/dist/src/channels/texts.js +79 -0
- package/dist/src/channels/texts.js.map +1 -0
- package/dist/src/channels/types.d.ts +61 -1
- package/dist/src/channels/types.d.ts.map +1 -1
- package/dist/src/durable/agent-run-context.d.ts +10 -0
- package/dist/src/durable/agent-run-context.d.ts.map +1 -1
- package/dist/src/durable/agent-run-context.js +22 -0
- package/dist/src/durable/agent-run-context.js.map +1 -1
- package/dist/src/index.d.ts +2 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/index.js.map +1 -1
- package/package.json +1 -1
- package/skills/agent-setup/SKILL.md +11 -4
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ChannelDeliveryError, ChannelMediaTooLargeError, decodeBase64, fetchBytes, postJson, queryParam, record, safeEqual, sizeOf, str, } from '../http.js';
|
|
1
|
+
import { ChannelDeliveryError, ChannelMediaTooLargeError, decodeBase64, fetchBytes, mediaFilename, postJson, queryParam, record, safeEqual, sizeOf, str, } from '../http.js';
|
|
2
2
|
const PHONE_JID = /^(\d{5,20})@s\.whatsapp\.net$/;
|
|
3
3
|
/** A phone jid's digits; any other jid as is. */
|
|
4
4
|
function addressOf(jid) {
|
|
@@ -68,29 +68,61 @@ function mediaOf(message, key) {
|
|
|
68
68
|
}
|
|
69
69
|
return undefined;
|
|
70
70
|
}
|
|
71
|
+
const LID_JID = /@lid$/;
|
|
72
|
+
/** The message types of a button or list reply. */
|
|
73
|
+
const REPLY_TYPES = new Set([
|
|
74
|
+
'buttonsResponseMessage',
|
|
75
|
+
'templateButtonReplyMessage',
|
|
76
|
+
'listResponseMessage',
|
|
77
|
+
'interactiveResponseMessage',
|
|
78
|
+
]);
|
|
79
|
+
/**
|
|
80
|
+
* Is the message from the person (not sent by the instance itself)? Explicit `fromMe: false` → yes,
|
|
81
|
+
* `fromMe: true` → no. Absent from both the key and the data — Whatsmiau (Go, `omitempty`) drops a
|
|
82
|
+
* `false` — only a `status: 'received'` says it came in; any other status is never assumed incoming,
|
|
83
|
+
* so the agent never answers its own messages.
|
|
84
|
+
*/
|
|
85
|
+
function direction(key, data) {
|
|
86
|
+
if (key.fromMe === true || data.fromMe === true)
|
|
87
|
+
return 'own';
|
|
88
|
+
if (key.fromMe === false || data.fromMe === false)
|
|
89
|
+
return 'incoming';
|
|
90
|
+
if (key.fromMe === undefined && data.fromMe === undefined && data.status === 'received') {
|
|
91
|
+
return 'incoming';
|
|
92
|
+
}
|
|
93
|
+
return 'unknown';
|
|
94
|
+
}
|
|
71
95
|
function parseOne(data, options) {
|
|
72
96
|
const key = record(data.key);
|
|
73
97
|
const remoteJid = str(key?.remoteJid);
|
|
74
98
|
const id = str(key?.id);
|
|
75
99
|
if (!key || !remoteJid || !id)
|
|
76
|
-
return
|
|
77
|
-
|
|
78
|
-
if (
|
|
79
|
-
return
|
|
80
|
-
if (
|
|
81
|
-
return
|
|
100
|
+
return { skipped: 'no message key', unexpected: true };
|
|
101
|
+
const from = direction(key, data);
|
|
102
|
+
if (from === 'own')
|
|
103
|
+
return { skipped: 'own message' };
|
|
104
|
+
if (from === 'unknown') {
|
|
105
|
+
return { skipped: `fromMe missing and status ${String(data.status)}`, unexpected: true };
|
|
106
|
+
}
|
|
107
|
+
if (remoteJid.endsWith('@broadcast') || remoteJid.endsWith('@newsletter')) {
|
|
108
|
+
return { skipped: 'broadcast' };
|
|
109
|
+
}
|
|
82
110
|
const group = remoteJid.endsWith('@g.us');
|
|
83
111
|
if (group && options.groups !== true)
|
|
84
|
-
return
|
|
85
|
-
// A `@lid`
|
|
86
|
-
//
|
|
87
|
-
|
|
88
|
-
const
|
|
112
|
+
return { skipped: 'group' };
|
|
113
|
+
// A chat is addressed by its phone jid or by its `@lid` one (`addressingMode: 'lid'`), and the
|
|
114
|
+
// server adds the other alongside when it knows it: Evolution `remoteJidAlt` (older versions
|
|
115
|
+
// `senderPn`), Whatsmiau `remoteLid`. The phone wins, so the chat keeps one id either way.
|
|
116
|
+
const aliases = [remoteJid, str(key.remoteJidAlt), str(key.senderPn), str(key.remoteLid)];
|
|
117
|
+
const phoneJid = aliases.find((jid) => jid !== undefined && PHONE_JID.test(jid));
|
|
118
|
+
const lidJid = aliases.find((jid) => jid !== undefined && LID_JID.test(jid));
|
|
119
|
+
const chat = phoneJid ?? lidJid ?? remoteJid;
|
|
120
|
+
const sender = group ? str(key.participant) : chat;
|
|
89
121
|
if (sender === undefined)
|
|
90
|
-
return
|
|
122
|
+
return { skipped: 'no group participant', unexpected: true };
|
|
91
123
|
const message = record(data.message);
|
|
92
124
|
if (!message)
|
|
93
|
-
return
|
|
125
|
+
return { skipped: 'no message body' };
|
|
94
126
|
const button = buttonReply(message);
|
|
95
127
|
const file = button ? undefined : mediaOf(message, key);
|
|
96
128
|
const text = button
|
|
@@ -98,36 +130,78 @@ function parseOne(data, options) {
|
|
|
98
130
|
: file
|
|
99
131
|
? (file.caption ?? '')
|
|
100
132
|
: (str(message.conversation) ?? str(record(message.extendedTextMessage)?.text));
|
|
101
|
-
if (text === undefined || (text.trim() === '' && !file))
|
|
102
|
-
return
|
|
133
|
+
if (text === undefined || (text.trim() === '' && !file)) {
|
|
134
|
+
return { skipped: 'unsupported message type' };
|
|
135
|
+
}
|
|
136
|
+
// Whatsmiau forwards a button press as `messageType: 'buttonsResponseMessage'` with only the
|
|
137
|
+
// label in `message.conversation` — the button's id is lost.
|
|
138
|
+
const pressWithoutId = !button && !file && REPLY_TYPES.has(str(data.messageType) ?? '');
|
|
103
139
|
return {
|
|
104
140
|
id,
|
|
105
141
|
from: addressOf(sender),
|
|
106
|
-
// Replies go to the phone when it is known — `sendText`'s `number` is a phone number
|
|
107
|
-
//
|
|
108
|
-
|
|
109
|
-
conversation: group ? remoteJid : (phoneJid ?? remoteJid),
|
|
142
|
+
// Replies go to the phone when it is known — `sendText`'s `number` is a phone number; the `@lid`
|
|
143
|
+
// jid only when it is all there is.
|
|
144
|
+
conversation: group ? remoteJid : chat,
|
|
110
145
|
text: text.trim(),
|
|
111
146
|
...(button ? { buttonId: button.id } : {}),
|
|
147
|
+
...(pressWithoutId ? { buttonWithoutId: true } : {}),
|
|
112
148
|
...(file ? { media: [file.media] } : {}),
|
|
113
149
|
raw: data,
|
|
114
150
|
};
|
|
115
151
|
}
|
|
152
|
+
/** The messages in a webhook body, or why there are none. */
|
|
153
|
+
function readBody(body, options) {
|
|
154
|
+
const envelope = record(body);
|
|
155
|
+
if (!envelope)
|
|
156
|
+
return { messages: null, ignored: { reason: 'not a JSON object' } };
|
|
157
|
+
const rawEvent = str(envelope.event);
|
|
158
|
+
const event = rawEvent?.toLowerCase().replace(/_/g, '.');
|
|
159
|
+
const named = rawEvent !== undefined ? { event: rawEvent } : {};
|
|
160
|
+
if (event !== 'messages.upsert') {
|
|
161
|
+
return { messages: null, ignored: { ...named, reason: 'not a messages.upsert event' } };
|
|
162
|
+
}
|
|
163
|
+
const from = str(envelope.instance);
|
|
164
|
+
if (from !== undefined && from !== options.instance) {
|
|
165
|
+
return { messages: null, ignored: { ...named, reason: 'another instance' } };
|
|
166
|
+
}
|
|
167
|
+
const items = (Array.isArray(envelope.data) ? envelope.data : [envelope.data])
|
|
168
|
+
.map((item) => record(item))
|
|
169
|
+
.filter((item) => item !== undefined)
|
|
170
|
+
.map((item) => parseOne(item, options));
|
|
171
|
+
const messages = items.filter((item) => !('skipped' in item));
|
|
172
|
+
if (messages.length > 0)
|
|
173
|
+
return { messages };
|
|
174
|
+
const skipped = items.filter((item) => 'skipped' in item);
|
|
175
|
+
if (skipped.length === 0)
|
|
176
|
+
return { messages, ignored: { ...named, reason: 'no data' } };
|
|
177
|
+
return {
|
|
178
|
+
messages,
|
|
179
|
+
ignored: {
|
|
180
|
+
...named,
|
|
181
|
+
reason: [...new Set(skipped.map((item) => item.skipped))].join(', '),
|
|
182
|
+
...(skipped.some((item) => item.unexpected) ? { unexpected: true } : {}),
|
|
183
|
+
},
|
|
184
|
+
};
|
|
185
|
+
}
|
|
116
186
|
/** The WhatsApp reply-button limit. */
|
|
117
187
|
const MAX_BUTTONS = 3;
|
|
188
|
+
/** The longest caption WhatsApp shows under a file. */
|
|
189
|
+
const MAX_CAPTION = 1024;
|
|
190
|
+
/** The longest footer a buttons message carries. */
|
|
191
|
+
const MAX_FOOTER = 60;
|
|
118
192
|
/**
|
|
119
193
|
* WhatsApp through [Evolution API](https://doc.evolution-api.com) v2 (or a server with the same
|
|
120
194
|
* routes). Point the instance's webhook — event `MESSAGES_UPSERT` — at the route, with the token:
|
|
121
195
|
* `https://app.example.com/webhooks/whatsapp?token=<webhookToken>`.
|
|
122
196
|
*
|
|
123
197
|
* Reads `messages.upsert` (text, extended text, button and list replies, images, audio, video,
|
|
124
|
-
* documents and stickers); ignores the instance's own messages
|
|
125
|
-
* groups. Sends with `POST {url}/message/sendText/{instance}`. Downloads media from the webhook's
|
|
198
|
+
* documents and stickers); ignores the instance's own messages (an item without `fromMe` counts as
|
|
199
|
+
* incoming only with `status: 'received'`), broadcasts and (unless `groups`) groups. Sends with `POST {url}/message/sendText/{instance}`. Downloads media from the webhook's
|
|
126
200
|
* inline `base64` (Evolution's "webhook base64" setting), else its `mediaUrl`, else
|
|
127
201
|
* `POST {url}/chat/getBase64FromMediaMessage/{instance}`.
|
|
128
202
|
*/
|
|
129
203
|
export function evolutionApi(options) {
|
|
130
|
-
return evolutionFormatAdapter(options, { buttons: false });
|
|
204
|
+
return evolutionFormatAdapter(options, { buttons: false, instructionWithButtons: true });
|
|
131
205
|
}
|
|
132
206
|
/**
|
|
133
207
|
* The adapter for any server speaking Evolution's webhook and routes — `evolutionApi()` and
|
|
@@ -148,6 +222,8 @@ export function evolutionFormatAdapter(options, defaults) {
|
|
|
148
222
|
...(buttons ? { buttons: MAX_BUTTONS } : {}),
|
|
149
223
|
markdown: 'whatsapp',
|
|
150
224
|
maxLength: options.maxLength ?? 4096,
|
|
225
|
+
media: true,
|
|
226
|
+
maxCaptionLength: MAX_CAPTION,
|
|
151
227
|
},
|
|
152
228
|
verify(request) {
|
|
153
229
|
if (options.webhookToken === false)
|
|
@@ -162,21 +238,10 @@ export function evolutionFormatAdapter(options, defaults) {
|
|
|
162
238
|
return supplied.some((token) => safeEqual(token, options.webhookToken));
|
|
163
239
|
},
|
|
164
240
|
parse(body) {
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
if (event !== 'messages.upsert')
|
|
170
|
-
return null;
|
|
171
|
-
const from = str(envelope.instance);
|
|
172
|
-
if (from !== undefined && from !== options.instance)
|
|
173
|
-
return null;
|
|
174
|
-
const items = Array.isArray(envelope.data) ? envelope.data : [envelope.data];
|
|
175
|
-
return items
|
|
176
|
-
.map((item) => record(item))
|
|
177
|
-
.filter((item) => item !== undefined)
|
|
178
|
-
.map((item) => parseOne(item, options))
|
|
179
|
-
.filter((item) => item !== null);
|
|
241
|
+
return readBody(body, options).messages;
|
|
242
|
+
},
|
|
243
|
+
ignored(body) {
|
|
244
|
+
return readBody(body, options).ignored ?? null;
|
|
180
245
|
},
|
|
181
246
|
async download(media, { maxBytes }) {
|
|
182
247
|
const ref = media.ref;
|
|
@@ -215,12 +280,30 @@ export function evolutionFormatAdapter(options, defaults) {
|
|
|
215
280
|
},
|
|
216
281
|
async send(conversation, message) {
|
|
217
282
|
const number = addressOf(conversation);
|
|
283
|
+
if (message.media !== undefined) {
|
|
284
|
+
const { media } = message;
|
|
285
|
+
const source = media.url ?? media.data?.toString('base64');
|
|
286
|
+
if (source === undefined)
|
|
287
|
+
throw new Error(`${name}: a file needs a url or its data`);
|
|
288
|
+
await post('/message/sendMedia', {
|
|
289
|
+
number,
|
|
290
|
+
mediatype: media.kind,
|
|
291
|
+
media: source,
|
|
292
|
+
...(media.contentType !== undefined ? { mimetype: media.contentType } : {}),
|
|
293
|
+
...(message.text !== '' ? { caption: message.text.slice(0, MAX_CAPTION) } : {}),
|
|
294
|
+
...(media.kind === 'document' ? { fileName: mediaFilename(media) } : {}),
|
|
295
|
+
});
|
|
296
|
+
return;
|
|
297
|
+
}
|
|
218
298
|
if (message.buttons !== undefined && buttons) {
|
|
219
299
|
const [first = '', ...rest] = message.text.split('\n');
|
|
220
300
|
const title = first.replace(/[*_~]/g, '').trim();
|
|
221
|
-
//
|
|
222
|
-
// still answer by text.
|
|
223
|
-
const
|
|
301
|
+
// Where buttons may not render, the reply instruction rides along: a phone that shows the
|
|
302
|
+
// text but not the buttons can still answer by text.
|
|
303
|
+
const instruction = defaults.instructionWithButtons
|
|
304
|
+
? (message.instruction?.trim() ?? '')
|
|
305
|
+
: '';
|
|
306
|
+
const description = [rest.join('\n').trim(), instruction]
|
|
224
307
|
.filter((part) => part !== '')
|
|
225
308
|
.join('\n\n');
|
|
226
309
|
if (title.length <= 60 && description.length <= 1024 && message.buttons.length > 0) {
|
|
@@ -229,6 +312,9 @@ export function evolutionFormatAdapter(options, defaults) {
|
|
|
229
312
|
number,
|
|
230
313
|
title,
|
|
231
314
|
description: description === '' ? title : description,
|
|
315
|
+
...(message.footer !== undefined && message.footer.trim() !== ''
|
|
316
|
+
? { footer: message.footer.replace(/[*_~]/g, '').trim().slice(0, MAX_FOOTER) }
|
|
317
|
+
: {}),
|
|
232
318
|
buttons: message.buttons.slice(0, MAX_BUTTONS).map((button) => ({
|
|
233
319
|
type: 'reply',
|
|
234
320
|
displayText: button.label.slice(0, 20),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evolution_api.js","sourceRoot":"","sources":["../../../../src/channels/adapters/evolution_api.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"evolution_api.js","sourceRoot":"","sources":["../../../../src/channels/adapters/evolution_api.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,7 +28,8 @@ export interface TelegramOptions {
|
|
|
28
28
|
* with `getFile`, which serves up to 20 MB) and inline-keyboard presses (`callback_query`, answered with
|
|
29
29
|
* `answerCallbackQuery` and the keyboard removed so it cannot be pressed twice); ignores bots and
|
|
30
30
|
* (unless `groups`) group chats. Sends `sendMessage` in MarkdownV2 — when Telegram refuses the
|
|
31
|
-
* formatting, the same text goes again as plain text.
|
|
31
|
+
* formatting, the same text goes again as plain text. Files go with `sendPhoto` / `sendDocument` /
|
|
32
|
+
* `sendAudio` / `sendVideo` (by URL, or uploaded as `multipart/form-data` when given as bytes).
|
|
32
33
|
*/
|
|
33
34
|
export declare function telegram(options: TelegramOptions): ChannelAdapter;
|
|
34
35
|
//# sourceMappingURL=telegram.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telegram.d.ts","sourceRoot":"","sources":["../../../../src/channels/adapters/telegram.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,YAAY,
|
|
1
|
+
{"version":3,"file":"telegram.d.ts","sourceRoot":"","sources":["../../../../src/channels/adapters/telegram.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,YAAY,EAUlB,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EACV,cAAc,EAMf,MAAM,aAAa,CAAC;AAWrB,MAAM,WAAW,eAAe;IAC9B,uCAAuC;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB,mFAAmF;IACnF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iFAAiF;IACjF,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,6FAA6F;IAC7F,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mGAAmG;IACnG,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AA4DD;;;;;;;;;;GAUG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,cAAc,CAuLjE"}
|
|
@@ -1,5 +1,13 @@
|
|
|
1
|
-
import { ChannelDeliveryError, ChannelMediaTooLargeError, fetchBytes, postJson, record, safeEqual, sizeOf, str, } from '../http.js';
|
|
1
|
+
import { ChannelDeliveryError, ChannelMediaTooLargeError, fetchBytes, mediaFilename, postForm, postJson, record, safeEqual, sizeOf, str, } from '../http.js';
|
|
2
2
|
import { unescapeTelegramMarkdown } from '../markdown.js';
|
|
3
|
+
const FILE_METHODS = {
|
|
4
|
+
image: ['sendPhoto', 'photo'],
|
|
5
|
+
document: ['sendDocument', 'document'],
|
|
6
|
+
audio: ['sendAudio', 'audio'],
|
|
7
|
+
video: ['sendVideo', 'video'],
|
|
8
|
+
};
|
|
9
|
+
/** The longest caption Telegram takes. */
|
|
10
|
+
const MAX_CAPTION = 1024;
|
|
3
11
|
/** Telegram's limits: message text, buttons we put in one keyboard. */
|
|
4
12
|
const MAX_TEXT = 4096;
|
|
5
13
|
const MAX_BUTTONS = 8;
|
|
@@ -63,7 +71,8 @@ function pressedLabel(message, data) {
|
|
|
63
71
|
* with `getFile`, which serves up to 20 MB) and inline-keyboard presses (`callback_query`, answered with
|
|
64
72
|
* `answerCallbackQuery` and the keyboard removed so it cannot be pressed twice); ignores bots and
|
|
65
73
|
* (unless `groups`) group chats. Sends `sendMessage` in MarkdownV2 — when Telegram refuses the
|
|
66
|
-
* formatting, the same text goes again as plain text.
|
|
74
|
+
* formatting, the same text goes again as plain text. Files go with `sendPhoto` / `sendDocument` /
|
|
75
|
+
* `sendAudio` / `sendVideo` (by URL, or uploaded as `multipart/form-data` when given as bytes).
|
|
67
76
|
*/
|
|
68
77
|
export function telegram(options) {
|
|
69
78
|
const name = options.name ?? 'telegram';
|
|
@@ -73,6 +82,40 @@ export function telegram(options) {
|
|
|
73
82
|
const origin = (options.apiUrl ?? 'https://api.telegram.org').replace(/\/+$/, '');
|
|
74
83
|
const api = `${origin}/bot${options.botToken}`;
|
|
75
84
|
const call = (method, body) => postJson(name, fetcher, `${api}/${method}`, {}, body, timeoutMs);
|
|
85
|
+
/** `sendPhoto` / `sendDocument` / `sendAudio` / `sendVideo`, by URL or uploaded. */
|
|
86
|
+
const sendFile = async (chatId, media, caption) => {
|
|
87
|
+
const [method, field] = FILE_METHODS[media.kind];
|
|
88
|
+
const formatted = caption !== '' && markdown ? { parse_mode: 'MarkdownV2' } : {};
|
|
89
|
+
const send = (text, format) => {
|
|
90
|
+
if (media.url !== undefined)
|
|
91
|
+
return call(method, {
|
|
92
|
+
chat_id: chatId,
|
|
93
|
+
[field]: media.url,
|
|
94
|
+
...(text !== '' ? { caption: text, ...format } : {}),
|
|
95
|
+
});
|
|
96
|
+
if (media.data === undefined)
|
|
97
|
+
throw new Error(`${name}: a file needs a url or its data`);
|
|
98
|
+
return postForm(name, fetcher, `${api}/${method}`, {}, {
|
|
99
|
+
chat_id: chatId,
|
|
100
|
+
...(text !== '' ? { caption: text, ...format } : {}),
|
|
101
|
+
[field]: {
|
|
102
|
+
data: media.data,
|
|
103
|
+
contentType: media.contentType ?? 'application/octet-stream',
|
|
104
|
+
filename: mediaFilename(media),
|
|
105
|
+
},
|
|
106
|
+
}, timeoutMs);
|
|
107
|
+
};
|
|
108
|
+
try {
|
|
109
|
+
await send(caption, formatted);
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
if (!('parse_mode' in formatted))
|
|
113
|
+
throw error;
|
|
114
|
+
if (!(error instanceof ChannelDeliveryError) || error.status !== 400)
|
|
115
|
+
throw error;
|
|
116
|
+
await send(unescapeTelegramMarkdown(caption), {});
|
|
117
|
+
}
|
|
118
|
+
};
|
|
76
119
|
const privateOnly = (chat) => options.groups === true || chat?.type === 'private';
|
|
77
120
|
return {
|
|
78
121
|
name,
|
|
@@ -80,6 +123,8 @@ export function telegram(options) {
|
|
|
80
123
|
buttons: MAX_BUTTONS,
|
|
81
124
|
markdown: markdown ? 'telegram' : 'none',
|
|
82
125
|
maxLength: MAX_TEXT,
|
|
126
|
+
media: true,
|
|
127
|
+
maxCaptionLength: MAX_CAPTION,
|
|
83
128
|
},
|
|
84
129
|
verify(request) {
|
|
85
130
|
return safeEqual(request.header('x-telegram-bot-api-secret-token'), options.secretToken);
|
|
@@ -161,9 +206,17 @@ export function telegram(options) {
|
|
|
161
206
|
};
|
|
162
207
|
},
|
|
163
208
|
async send(conversation, message) {
|
|
209
|
+
if (message.media !== undefined) {
|
|
210
|
+
await sendFile(conversation, message.media, message.text.slice(0, MAX_CAPTION));
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
// Telegram has no footer: it goes under the text.
|
|
214
|
+
const text = message.footer !== undefined && message.footer.trim() !== ''
|
|
215
|
+
? `${message.text}\n\n${message.footer}`
|
|
216
|
+
: message.text;
|
|
164
217
|
const body = {
|
|
165
218
|
chat_id: conversation,
|
|
166
|
-
text
|
|
219
|
+
text,
|
|
167
220
|
link_preview_options: { is_disabled: true },
|
|
168
221
|
...(message.buttons !== undefined && message.buttons.length > 0
|
|
169
222
|
? {
|
|
@@ -188,7 +241,7 @@ export function telegram(options) {
|
|
|
188
241
|
// "can't parse entities": the same words, unformatted, beat no answer.
|
|
189
242
|
if (!(error instanceof ChannelDeliveryError) || error.status !== 400)
|
|
190
243
|
throw error;
|
|
191
|
-
await call('sendMessage', { ...body, text: unescapeTelegramMarkdown(
|
|
244
|
+
await call('sendMessage', { ...body, text: unescapeTelegramMarkdown(text) });
|
|
192
245
|
}
|
|
193
246
|
},
|
|
194
247
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telegram.js","sourceRoot":"","sources":["../../../../src/channels/adapters/telegram.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EAEpB,yBAAyB,EACzB,UAAU,EACV,QAAQ,EACR,MAAM,EACN,SAAS,EACT,MAAM,EACN,GAAG,GACJ,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"telegram.js","sourceRoot":"","sources":["../../../../src/channels/adapters/telegram.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,8 +24,9 @@ export interface WhatsappCloudOptions {
|
|
|
24
24
|
*
|
|
25
25
|
* Verifies `X-Hub-Signature-256` over the raw body; reads text, interactive button/list replies,
|
|
26
26
|
* template quick replies and media (image, audio, video, document, sticker — downloaded through the
|
|
27
|
-
* Graph API media endpoint) addressed to `phoneNumberId` (status updates are ignored); sends text
|
|
28
|
-
* interactive reply buttons (at most 3, 20-character titles)
|
|
27
|
+
* Graph API media endpoint) addressed to `phoneNumberId` (status updates are ignored); sends text,
|
|
28
|
+
* interactive reply buttons (at most 3, 20-character titles, with a footer) and files (image,
|
|
29
|
+
* document, audio, video — by link, or uploaded first when given as bytes).
|
|
29
30
|
*/
|
|
30
31
|
export declare function whatsappCloud(options: WhatsappCloudOptions): ChannelAdapter;
|
|
31
32
|
//# sourceMappingURL=whatsapp_cloud.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"whatsapp_cloud.d.ts","sourceRoot":"","sources":["../../../../src/channels/adapters/whatsapp_cloud.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,YAAY,
|
|
1
|
+
{"version":3,"file":"whatsapp_cloud.d.ts","sourceRoot":"","sources":["../../../../src/channels/adapters/whatsapp_cloud.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,YAAY,EAWlB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EACV,cAAc,EAMf,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,oBAAoB;IACnC,6FAA6F;IAC7F,aAAa,EAAE,MAAM,CAAC;IACtB,oFAAoF;IACpF,WAAW,EAAE,MAAM,CAAC;IACpB,wFAAwF;IACxF,SAAS,EAAE,MAAM,CAAC;IAClB,kGAAkG;IAClG,WAAW,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6FAA6F;IAC7F,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AA0DD;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,cAAc,CA2L3E"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { createHmac } from 'node:crypto';
|
|
2
|
-
import { ChannelDeliveryError, ChannelMediaTooLargeError, fetchBytes, postJson, queryParam, record, safeEqual, sizeOf, str, } from '../http.js';
|
|
2
|
+
import { ChannelDeliveryError, ChannelMediaTooLargeError, fetchBytes, mediaFilename, postForm, postJson, queryParam, record, safeEqual, sizeOf, str, } from '../http.js';
|
|
3
3
|
/** Cloud API limits: text body, interactive body, button title. */
|
|
4
4
|
const MAX_TEXT = 4096;
|
|
5
5
|
const MAX_INTERACTIVE_BODY = 1024;
|
|
6
6
|
const MAX_BUTTON_TITLE = 20;
|
|
7
7
|
const MAX_BUTTONS = 3;
|
|
8
|
+
const MAX_CAPTION = 1024;
|
|
9
|
+
const MAX_FOOTER = 60;
|
|
8
10
|
const MEDIA_TYPES = ['image', 'audio', 'video', 'document', 'sticker'];
|
|
9
11
|
/** The file a Cloud API message carries (`{ id, mime_type, caption?, filename? }`), and its caption. */
|
|
10
12
|
function mediaOf(message) {
|
|
@@ -58,8 +60,9 @@ function parseMessage(message) {
|
|
|
58
60
|
*
|
|
59
61
|
* Verifies `X-Hub-Signature-256` over the raw body; reads text, interactive button/list replies,
|
|
60
62
|
* template quick replies and media (image, audio, video, document, sticker — downloaded through the
|
|
61
|
-
* Graph API media endpoint) addressed to `phoneNumberId` (status updates are ignored); sends text
|
|
62
|
-
* interactive reply buttons (at most 3, 20-character titles)
|
|
63
|
+
* Graph API media endpoint) addressed to `phoneNumberId` (status updates are ignored); sends text,
|
|
64
|
+
* interactive reply buttons (at most 3, 20-character titles, with a footer) and files (image,
|
|
65
|
+
* document, audio, video — by link, or uploaded first when given as bytes).
|
|
63
66
|
*/
|
|
64
67
|
export function whatsappCloud(options) {
|
|
65
68
|
const name = options.name ?? 'whatsapp';
|
|
@@ -69,9 +72,31 @@ export function whatsappCloud(options) {
|
|
|
69
72
|
const endpoint = `https://graph.facebook.com/${graphVersion}/${encodeURIComponent(options.phoneNumberId)}/messages`;
|
|
70
73
|
const post = (body) => postJson(name, fetcher, endpoint, { authorization: `Bearer ${options.accessToken}` }, { messaging_product: 'whatsapp', recipient_type: 'individual', ...body }, timeoutMs);
|
|
71
74
|
const sendText = (to, body) => post({ to, type: 'text', text: { body, preview_url: false } });
|
|
75
|
+
/** Bytes are uploaded first (`POST /{phone-number-id}/media`); the message names the upload. */
|
|
76
|
+
const upload = async (media) => {
|
|
77
|
+
const answer = record(await postForm(name, fetcher, endpoint.replace(/\/messages$/, '/media'), { authorization: `Bearer ${options.accessToken}` }, {
|
|
78
|
+
messaging_product: 'whatsapp',
|
|
79
|
+
type: media.contentType ?? 'application/octet-stream',
|
|
80
|
+
file: {
|
|
81
|
+
data: media.data,
|
|
82
|
+
contentType: media.contentType ?? 'application/octet-stream',
|
|
83
|
+
filename: mediaFilename(media),
|
|
84
|
+
},
|
|
85
|
+
}, timeoutMs));
|
|
86
|
+
const id = str(answer?.id);
|
|
87
|
+
if (id === undefined)
|
|
88
|
+
throw new ChannelDeliveryError(name, null, `${name}: upload failed`);
|
|
89
|
+
return id;
|
|
90
|
+
};
|
|
72
91
|
return {
|
|
73
92
|
name,
|
|
74
|
-
capabilities: {
|
|
93
|
+
capabilities: {
|
|
94
|
+
buttons: MAX_BUTTONS,
|
|
95
|
+
markdown: 'whatsapp',
|
|
96
|
+
maxLength: MAX_TEXT,
|
|
97
|
+
media: true,
|
|
98
|
+
maxCaptionLength: MAX_CAPTION,
|
|
99
|
+
},
|
|
75
100
|
challenge(request) {
|
|
76
101
|
if (request.method !== 'GET')
|
|
77
102
|
return null;
|
|
@@ -144,6 +169,29 @@ export function whatsappCloud(options) {
|
|
|
144
169
|
};
|
|
145
170
|
},
|
|
146
171
|
async send(conversation, message) {
|
|
172
|
+
if (message.media !== undefined) {
|
|
173
|
+
const { media } = message;
|
|
174
|
+
const source = media.url !== undefined
|
|
175
|
+
? { link: media.url }
|
|
176
|
+
: media.data !== undefined
|
|
177
|
+
? { id: await upload({ ...media, data: media.data }) }
|
|
178
|
+
: undefined;
|
|
179
|
+
if (source === undefined)
|
|
180
|
+
throw new Error(`${name}: a file needs a url or its data`);
|
|
181
|
+
await post({
|
|
182
|
+
to: conversation,
|
|
183
|
+
type: media.kind,
|
|
184
|
+
[media.kind]: {
|
|
185
|
+
...source,
|
|
186
|
+
// Audio carries no caption on WhatsApp.
|
|
187
|
+
...(message.text !== '' && media.kind !== 'audio'
|
|
188
|
+
? { caption: message.text.slice(0, MAX_CAPTION) }
|
|
189
|
+
: {}),
|
|
190
|
+
...(media.kind === 'document' ? { filename: mediaFilename(media) } : {}),
|
|
191
|
+
},
|
|
192
|
+
});
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
147
195
|
if (message.buttons === undefined || message.buttons.length === 0) {
|
|
148
196
|
await sendText(conversation, message.buttons === undefined ? message.text : message.fallbackText);
|
|
149
197
|
return;
|
|
@@ -163,6 +211,9 @@ export function whatsappCloud(options) {
|
|
|
163
211
|
interactive: {
|
|
164
212
|
type: 'button',
|
|
165
213
|
body: { text: body },
|
|
214
|
+
...(message.footer !== undefined && message.footer.trim() !== ''
|
|
215
|
+
? { footer: { text: message.footer.replace(/[*_~]/g, '').trim().slice(0, MAX_FOOTER) } }
|
|
216
|
+
: {}),
|
|
166
217
|
action: {
|
|
167
218
|
buttons: message.buttons.slice(0, MAX_BUTTONS).map((button) => ({
|
|
168
219
|
type: 'reply',
|