NestJS Slack Integration
    Preparing search index...

    Module @xpr/nestjs-slack-assistant - v0.0.0

    @xpr/nestjs-slack-assistant

    This package export all decorators from @xpr/nestjs-slack package. See @xpr/nestjs-slack documentation for more details.

    npm i @xpr/nestjs-slack-assistant
    

    Minimal required configuration includes token and app token.

    More information about slack tokens: https://api.slack.com/concepts/token-types

    const token = process.env.SLACK_BOT_TOKEN as string;
    const appToken = process.env.SLACK_APP_TOKEN as string;

    const app = await NestFactory.createMicroservice(MyChatModule, {
    strategy: new SlackAssistant({
    slack: {
    token,
    appToken,
    },
    }),
    });

    await app.listen();

    The package exports 3 decorators:

    • @ThreadStarted - triggered when a thread is started (slack docs)
    • @ThreadContextChanged - triggered when a thread context is changed (slack docs)
    • @UserMessage - triggered when a user sends a message in a thread (slack docs)

    The only mandatory decorator is @UserMessage, but you can use the other two to handle thread context changes and thread started events.

    @SlackController()
    class ChatController {
    @ThreadStarted()
    async start(
    { say, setSuggestedPrompts, saveThreadContext }: ThreadStartedArgs,
    ) {
    try {
    await say("Hi, how can I help you?");
    await saveThreadContext();
    await setSuggestedPrompts({
    title: "Here are some suggested options:",
    prompts: [
    {
    title: "What is the weather like today?",
    message: "...the prompt to the LLM...",
    },
    {
    title: "Tell me a joke",
    message: "...the prompt to the LLM...",
    },
    ],
    });
    } catch (err) {
    this.logger.error("start failed", err);
    }
    }

    @ThreadContextChanged()
    async contextChanged({ saveThreadContext }: ThreadContextChangedArgs) {
    await saveThreadContext();
    }

    @UserMessage()
    async message({ message, say /*, client*/ }: UserMessageArgs) {
    // use the client to interact with slack
    // client.views.open()
    try {
    // client.views.update
    const response = await this.llmAgent.invoke(
    (message as { text: string })?.text ?? "",
    );
    await say(response);
    } catch (err) {
    this.logger.error("message failed", err);
    }
    }
    }

    Classes

    Slack
    SlackAssistant

    Type Aliases

    ActionId
    EndpointArgs
    OptionId
    Pattern
    ShortCutId
    SlackActionArgs
    SlackCommandArgs
    SlackEventArgs
    SlackMessageArgs
    SlackOptionArgs
    SlackShortcutArgs
    SlackViewArgs
    ThreadContextChangedArgs
    ThreadStartedArgs
    UserMessageArgs
    ViewId

    Variables

    AssistantEventTypes
    EventTypes

    Functions

    SlackAction
    SlackCommand
    SlackController
    SlackEvent
    SlackMessage
    SlackOption
    SlackShortcut
    SlackView
    ThreadContextChanged
    ThreadStarted
    UserMessage