47 lines
1.5 KiB
TypeScript
47 lines
1.5 KiB
TypeScript
import { chunkMarkdownText } from "../../../src/auto-reply/chunk.js";
|
|
import type { ChannelOutboundAdapter } from "../../../src/channels/plugins/types.js";
|
|
|
|
import { createMSTeamsPollStoreFs } from "./polls.js";
|
|
import { sendMessageMSTeams, sendPollMSTeams } from "./send.js";
|
|
|
|
export const msteamsOutbound: ChannelOutboundAdapter = {
|
|
deliveryMode: "direct",
|
|
chunker: chunkMarkdownText,
|
|
textChunkLimit: 4000,
|
|
pollMaxOptions: 12,
|
|
sendText: async ({ cfg, to, text, deps }) => {
|
|
const send = deps?.sendMSTeams ?? ((to, text) => sendMessageMSTeams({ cfg, to, text }));
|
|
const result = await send(to, text);
|
|
return { channel: "msteams", ...result };
|
|
},
|
|
sendMedia: async ({ cfg, to, text, mediaUrl, deps }) => {
|
|
const send =
|
|
deps?.sendMSTeams ??
|
|
((to, text, opts) => sendMessageMSTeams({ cfg, to, text, mediaUrl: opts?.mediaUrl }));
|
|
const result = await send(to, text, { mediaUrl });
|
|
return { channel: "msteams", ...result };
|
|
},
|
|
sendPoll: async ({ cfg, to, poll }) => {
|
|
const maxSelections = poll.maxSelections ?? 1;
|
|
const result = await sendPollMSTeams({
|
|
cfg,
|
|
to,
|
|
question: poll.question,
|
|
options: poll.options,
|
|
maxSelections,
|
|
});
|
|
const pollStore = createMSTeamsPollStoreFs();
|
|
await pollStore.createPoll({
|
|
id: result.pollId,
|
|
question: poll.question,
|
|
options: poll.options,
|
|
maxSelections,
|
|
createdAt: new Date().toISOString(),
|
|
conversationId: result.conversationId,
|
|
messageId: result.messageId,
|
|
votes: {},
|
|
});
|
|
return result;
|
|
},
|
|
};
|