Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@

*.env
!.env.example
CLAUDE.md
1 change: 0 additions & 1 deletion python/slack/.python-version

This file was deleted.

11 changes: 9 additions & 2 deletions python/slack/app/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@
from fastapi import FastAPI, HTTPException, Request
from slack_sdk.signature import SignatureVerifier
from service import SlackService
from dotenv import load_dotenv

load_dotenv()

logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
Expand All @@ -22,13 +25,17 @@ async def slack_events(request: Request):
status_code=500, detail="Environment variables not configured"
)

# Read body once and use it for both verification and parsing
body = await request.body()

if not SignatureVerifier(signing_secret).is_valid_request(
await request.body(), dict(request.headers)
body, dict(request.headers)
):
logger.warning("Request verification failed")
raise HTTPException(status_code=400, detail="Request verification failed")

event_data = await request.json()
import json
event_data = json.loads(body)
if "challenge" in event_data:
return {"challenge": event_data["challenge"]}

Expand Down
15 changes: 9 additions & 6 deletions python/slack/app/service.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from typing import Optional
from slack_sdk.errors import SlackApiError
from slack_sdk.web.async_client import AsyncWebClient
from browser_use import BrowserUse
from browser_use_sdk import BrowserUse

logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
Expand Down Expand Up @@ -93,19 +93,22 @@ async def process_agent_task_async(self, task: str, channel_id: str):
return

# Start the agent task using internal service
task_result = await self.client.tasks.create(task=task)
task_result = self.client.tasks.create_task(task=task)

if not task_result.session_id:
# Get the full task details to access session_id
task_view = self.client.tasks.get_task(task_result.id)

if not task_view.session_id:
# Error starting task
error_message = f"Error: {task_result.message}"
error_message = "Error: Could not retrieve session ID"
await self.update_message(channel_id, message_ts, error_message)
return

share_url = await self.client.sessions.retrieve(task_result.session_id)
share_url = self.client.sessions.create_session_public_share(task_view.session_id)

# Create final message with share link
if share_url:
final_message = f"Agent task started!\n\nShare URL: {share_url.public_share_url}\n\nTask: {task}"
final_message = f"Agent task started!\n\nShare URL: {share_url.share_url}\n\nTask: {task}"
else:
final_message = f"Agent task started!\n\nTask: {task}\n\nNote: Share link could not be created."

Expand Down
18 changes: 8 additions & 10 deletions python/slack/pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
[project]
name = "slack"
name = "slack-browser-use"
version = "0.1.0"
description = "slack-example"
readme = "README.md"
requires-python = ">=3.9.18"
requires-python = ">=3.9"
dependencies = [
"aiohttp>=3.12.15",
"browser-use-sdk>=0.0.2",
"fastapi>=0.116.1",
"pydantic>=2.11.7",
"slack-sdk>=3.36.0",
"uvicorn>=0.35.0",
"browser-use-sdk>=1.2.0",
"fastapi>=0.115.0",
"uvicorn>=0.32.0",
"slack-sdk>=3.33.0",
"python-dotenv>=1.0.0",
"aiohttp>=3.9.0",
]
1,496 changes: 827 additions & 669 deletions python/slack/uv.lock

Large diffs are not rendered by default.

Loading