Skip to content

Commit 1533dad

Browse files
committed
Use WebClient with response
1 parent 4b21082 commit 1533dad

File tree

1 file changed

+29
-36
lines changed
  • packages/slackBotFunction

1 file changed

+29
-36
lines changed

packages/slackBotFunction/app.py

Lines changed: 29 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,11 @@
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-
211
import os
222
import json
233
import boto3
244
import logging
255
from slack_bolt import App
266
from slack_bolt.adapter.aws_lambda import SlackRequestHandler
7+
from slack_sdk import WebClient
8+
from slack_sdk.errors import SlackApiError
279

2810

2911
# Get params from SSM
@@ -45,8 +27,8 @@ def get_parameter(parameter_name):
4527
return parameter_value
4628

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

5133

5234
# Get parameter names from environment variables
@@ -98,15 +80,11 @@ def respond_to_slack_within_3_seconds(body, ack):
9880
try:
9981
user_query = body["text"]
10082
logging.info(
101-
f"${SLACK_SLASH_COMMAND} - Acknowledging command: {SLACK_SLASH_COMMAND} - User Query: {user_query}\n"
83+
f"Acknowledging slash command {SLACK_SLASH_COMMAND} - User Query: {user_query}"
10284
)
103-
ack(f"\n${SLACK_SLASH_COMMAND} - Processing Request: {user_query}")
104-
85+
ack(f"\nProcessing Request: {user_query}")
10586
except Exception as 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-
)
87+
logging.error(f"Ack handler error: {err}")
11088

11189

11290
def process_command_request(respond, body):
@@ -117,19 +95,34 @@ def process_command_request(respond, body):
11795
try:
11896
# Get the user query
11997
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+
120103
logging.info(
121-
f"${SLACK_SLASH_COMMAND} - Responding to command: {SLACK_SLASH_COMMAND} - User Query: {user_query}"
104+
f"Processing command: {SLACK_SLASH_COMMAND} - User Query: {user_query}"
122105
)
123106

124107
kb_response = get_bedrock_knowledgebase_response(user_query)
125108
response_text = kb_response["output"]["text"]
126-
respond(f"\n${SLACK_SLASH_COMMAND} - Response: {response_text}\n")
127109

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']}")
128124
except Exception as 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-
)
125+
logging.error(f"Handler error: {err}")
133126

134127

135128
def get_bedrock_knowledgebase_response(user_query):
@@ -184,6 +177,6 @@ def get_bedrock_knowledgebase_response(user_query):
184177

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

0 commit comments

Comments
 (0)