telegram: route dm sessions by sender id

This commit is contained in:
bmendonca3
2026-03-02 14:56:26 -07:00
committed by Peter Steinberger
parent 2c39731846
commit 317075ef3d
4 changed files with 82 additions and 3 deletions

View File

@@ -5,6 +5,7 @@ import {
describeReplyTarget,
expandTextLinks,
normalizeForwardedContext,
resolveTelegramDirectPeerId,
resolveTelegramForumThreadId,
} from "./helpers.js";
@@ -53,6 +54,20 @@ describe("buildTypingThreadParams", () => {
});
});
describe("resolveTelegramDirectPeerId", () => {
it("prefers sender id when available", () => {
expect(resolveTelegramDirectPeerId({ chatId: 777777777, senderId: 123456789 })).toBe(
"123456789",
);
});
it("falls back to chat id when sender id is missing", () => {
expect(resolveTelegramDirectPeerId({ chatId: 777777777, senderId: undefined })).toBe(
"777777777",
);
});
});
describe("thread id normalization", () => {
it.each([
{

View File

@@ -175,6 +175,24 @@ export function buildTelegramGroupPeerId(chatId: number | string, messageThreadI
return messageThreadId != null ? `${chatId}:topic:${messageThreadId}` : String(chatId);
}
/**
* Resolve the direct-message peer identifier for Telegram routing/session keys.
*
* In some Telegram DM deliveries (for example certain business/chat bridge flows),
* `chat.id` can differ from the actual sender user id. Prefer sender id when present
* so per-peer DM scopes isolate users correctly.
*/
export function resolveTelegramDirectPeerId(params: {
chatId: number | string;
senderId?: number | string | null;
}) {
const senderId = params.senderId != null ? String(params.senderId).trim() : "";
if (senderId) {
return senderId;
}
return String(params.chatId);
}
export function buildTelegramGroupFrom(chatId: number | string, messageThreadId?: number) {
return `telegram:group:${buildTelegramGroupPeerId(chatId, messageThreadId)}`;
}