Transcripts

Append, query, retain, and delete an application-owned transcript keyed by a stable user identity.


Transcripts stores an optional SDK-owned record on the Channel's StateStore. Configure top-level identifyUser and store.transcripts.

Configuration

const channel = createChannel({
  name: "support-slack",
  identifyUser: ({ actor }) => accounts.resolveApplicationUser(actor.id),
  agent: makeAgent,
  store: {
    adapter: durableStateStore,
    transcripts: {
      retention: "30d",
      maxPerUser: 500,
    },
  },
});

retention accepts milliseconds or a duration string. Entries are stored on the list facet, so that facet must be durable for production transcripts.

append

await channel.transcripts.append(
  thread,
  {
    role: "assistant",
    text: "The incident owner is Payments.",
  },
  { userId: "usr_123" },
);

Append silently does nothing when userId is null.

list

const entries = await channel.transcripts.list({
  userId: "usr_123",
  limit: 20,
  roles: ["user", "assistant"],
});

Entries are oldest-first and can be filtered by platform, threadId, or role. On managed Channels, platform is the native provider ("slack" or "teams"). Use the stable application userId to carry context between providers, and filter by platform only when you want one provider's entries.

delete

const { deleted } = await channel.transcripts.delete({
  userId: "usr_123",
});

This deletes only the SDK-owned transcript. It does not delete provider history or a separate Intelligence record.

Automatic bridge

thread.runAgent({ transcript: true }) injects prior entries, appends the current user turn, runs the agent, and appends its response. Do not manually append those same turns.

channel.transcripts becomes available after the runtime starts the Channel. See History and transcripts.