Skip to content

Commit 8aa25f6

Browse files
committed
Restore slackBotFunction logic
1 parent 1171fe9 commit 8aa25f6

File tree

1 file changed

+36
-29
lines changed
  • packages/slackBotFunction

1 file changed

+36
-29
lines changed

packages/slackBotFunction/app.py

Lines changed: 36 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,29 @@
1+
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
# SPDX-License-Identifier: MIT-0.
3+
4+
"""
5+
AWS Lambda hosted Slack ChatBot integration to Amazon Bedrock Knowledge Base.
6+
Expects Slack Bot Slash Command given by the SLACK_SLASH_COMMAND param and presents
7+
a user query to the Bedrock Knowledge Base described by the KNOWLEDGEBASE_ID parameter.
8+
9+
The user query is used in a Bedrock KB ReteriveandGenerate API call and the KB
10+
response is presented to the user in Slack.
11+
12+
Slack integration based on SlackBolt library and examples given at:
13+
https://github.com/slackapi/bolt-python/blob/main/examples/aws_lambda/lazy_aws_lambda.py
14+
"""
15+
16+
__version__ = "0.0.1"
17+
__status__ = "Development"
18+
__copyright__ = "Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved."
19+
__author__ = "Dean Colcott <https://www.linkedin.com/in/deancolcott/>"
20+
121
import os
222
import json
323
import boto3
424
import logging
525
from slack_bolt import App
626
from slack_bolt.adapter.aws_lambda import SlackRequestHandler
7-
from slack_sdk import WebClient
8-
from slack_sdk.errors import SlackApiError
927

1028

1129
# Get params from SSM
@@ -27,8 +45,8 @@ def get_parameter(parameter_name):
2745
return parameter_value
2846

2947
except Exception as e:
30-
logging.error(f"Error getting parameter {parameter_name}: {str(e)}")
31-
raise
48+
print(f"Error getting parameter {parameter_name}: {str(e)}")
49+
raise e
3250

3351

3452
# Get parameter names from environment variables
@@ -80,11 +98,15 @@ def respond_to_slack_within_3_seconds(body, ack):
8098
try:
8199
user_query = body["text"]
82100
logging.info(
83-
f"Acknowledging slash command {SLACK_SLASH_COMMAND} - User Query: {user_query}"
101+
f"${SLACK_SLASH_COMMAND} - Acknowledging command: {SLACK_SLASH_COMMAND} - User Query: {user_query}\n"
84102
)
85-
ack(f"\nProcessing Request: {user_query}")
103+
ack(f"\n${SLACK_SLASH_COMMAND} - Processing Request: {user_query}")
104+
86105
except Exception as err:
87-
logging.error(f"Ack handler error: {err}")
106+
print(f"${SLACK_SLASH_COMMAND} - Error: {err}")
107+
respond(
108+
f"${SLACK_SLASH_COMMAND} - Sorry an error occurred. Please try again later. Error: {err}"
109+
)
88110

89111

90112
def process_command_request(respond, body):
@@ -95,34 +117,19 @@ def process_command_request(respond, body):
95117
try:
96118
# Get the user query
97119
user_query = body["text"]
98-
channel_id = body["channel_id"]
99-
user_id = body["user_id"]
100-
# Use thread_ts for thread replies, or fallback to message_ts
101-
thread_ts = body.get("thread_ts") or body.get("message_ts")
102-
103120
logging.info(
104-
f"Processing command: {SLACK_SLASH_COMMAND} - User Query: {user_query}"
121+
f"${SLACK_SLASH_COMMAND} - Responding to command: {SLACK_SLASH_COMMAND} - User Query: {user_query}"
105122
)
106123

107124
kb_response = get_bedrock_knowledgebase_response(user_query)
108125
response_text = kb_response["output"]["text"]
126+
respond(f"\n${SLACK_SLASH_COMMAND} - Response: {response_text}\n")
109127

110-
client = WebClient(token=bot_token)
111-
112-
# Prepare payload: reply in thread if thread_ts is provided.
113-
message_payload = {
114-
"channel": channel_id,
115-
"text": f"*Question from <@{user_id}>:*\n{user_query}\n\n*Answer:*\n{response_text}"
116-
}
117-
if thread_ts:
118-
message_payload["thread_ts"] = thread_ts
119-
120-
client.chat_postMessage(**message_payload)
121-
122-
except SlackApiError as e:
123-
logging.error(f"Slack API error posting message: {e.response['error']}")
124128
except Exception as err:
125-
logging.error(f"Handler error: {err}")
129+
print(f"${SLACK_SLASH_COMMAND} - Error: {err}")
130+
respond(
131+
f"${SLACK_SLASH_COMMAND} - Sorry an error occurred. Please try again later. Error: {err}"
132+
)
126133

127134

128135
def get_bedrock_knowledgebase_response(user_query):
@@ -177,6 +184,6 @@ def get_bedrock_knowledgebase_response(user_query):
177184

178185
# Lambda handler method.
179186
def handler(event, context):
180-
logging.info(f"{SLACK_SLASH_COMMAND} - Event: {event}")
187+
print(f"${SLACK_SLASH_COMMAND} - Event: {event}\n")
181188
slack_handler = SlackRequestHandler(app=app)
182189
return slack_handler.handle(event, context)

0 commit comments

Comments
 (0)