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);
}
}
}