diff --git a/src/adapters/openclaw-message-tool.ts b/src/adapters/openclaw-message-tool.ts new file mode 100644 index 0000000..3c87181 --- /dev/null +++ b/src/adapters/openclaw-message-tool.ts @@ -0,0 +1,42 @@ +import { buildTelegramReplyEndPayload } from "../telegram/outbound-payload.js" + +export type OpenClawTelegramMessageToolPayload = { + action: "send" + channel: "telegram" + target: string + message: string + presentation: { + blocks: Array< + | { type: "text"; text: string } + | { + type: "buttons" + buttons: Array<{ + label: string + value: string + }> + } + > + } +} + +export function buildOpenClawTelegramMessageToolPayload(target: string, text: string): OpenClawTelegramMessageToolPayload { + const payload = buildTelegramReplyEndPayload(text) + return { + action: "send", + channel: "telegram", + target, + message: payload.text, + presentation: { + blocks: [ + { type: "text", text: payload.text }, + { + type: "buttons", + buttons: payload.buttons[0].map((button) => ({ + label: button.text, + value: button.callback_data, + })), + }, + ], + }, + } +} diff --git a/tests/openclaw-message-tool.test.mjs b/tests/openclaw-message-tool.test.mjs new file mode 100644 index 0000000..f4f0485 --- /dev/null +++ b/tests/openclaw-message-tool.test.mjs @@ -0,0 +1,16 @@ +import test from "node:test" +import assert from "node:assert/strict" + +import { buildOpenClawTelegramMessageToolPayload } from "../src/adapters/openclaw-message-tool.ts" + +test("buildOpenClawTelegramMessageToolPayload creates Telegram send payload with text and button presentation", () => { + const payload = buildOpenClawTelegramMessageToolPayload("864811879", "hello") + assert.equal(payload.action, "send") + assert.equal(payload.channel, "telegram") + assert.equal(payload.target, "864811879") + assert.equal(payload.message, "hello") + assert.equal(payload.presentation.blocks[0].type, "text") + assert.equal(payload.presentation.blocks[1].type, "buttons") + assert.equal(payload.presentation.blocks[1].buttons[0].value, "rec:continue") + assert.equal(payload.presentation.blocks[1].buttons[1].value, "rec:stop") +})