diff --git a/extensions/line/src/channel.sendPayload.test.ts b/extensions/line/src/channel.sendPayload.test.ts index 470b582dfc6..b525e4468fd 100644 --- a/extensions/line/src/channel.sendPayload.test.ts +++ b/extensions/line/src/channel.sendPayload.test.ts @@ -88,6 +88,41 @@ function createRuntime(): { runtime: PluginRuntime; mocks: LineRuntimeMocks } { } describe("linePlugin outbound.sendPayload", () => { + it("preserves resolved accountId when pairing notifications push directly", async () => { + const { runtime, mocks } = createRuntime(); + setLineRuntime(runtime); + const cfg = { + channels: { + line: { + accounts: { + primary: { + channelAccessToken: "token-primary", + }, + }, + }, + }, + } as OpenClawConfig; + mocks.resolveLineAccount.mockReturnValue({ + accountId: "primary", + channelAccessToken: "token-primary", + config: {}, + }); + + await linePlugin.pairing!.notifyApproval!({ + cfg, + id: "line:user:1", + }); + + expect(mocks.pushMessageLine).toHaveBeenCalledWith( + "line:user:1", + "OpenClaw: your access has been approved.", + { + accountId: "primary", + channelAccessToken: "token-primary", + }, + ); + }); + it("sends flex message without dropping text", async () => { const { runtime, mocks } = createRuntime(); setLineRuntime(runtime); diff --git a/extensions/line/src/channel.ts b/extensions/line/src/channel.ts index 67c67ddeaf9..485ada5e39a 100644 --- a/extensions/line/src/channel.ts +++ b/extensions/line/src/channel.ts @@ -291,6 +291,7 @@ export const linePlugin: ChannelPlugin = createChatChannelP throw new Error("LINE channel access token not configured"); } await line.pushMessageLine(id, message, { + accountId: account.accountId, channelAccessToken: account.channelAccessToken, }); },