Skip to content

Commit cd246d5

Browse files
Merge pull request #21 from TeskaLabs/Refactor/Slack-use-case
Refactor: Slack with attachments
2 parents c1b6d6c + 8be7f3f commit cd246d5

File tree

5 files changed

+93
-3
lines changed

5 files changed

+93
-3
lines changed

.gitlab-ci.yml

+4
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
- pip install requests
2525
- pip install temp
2626
- pip install aiokafka
27+
- pip install slack-sdk
2728
- python3 -m unittest test
2829

2930

@@ -48,6 +49,7 @@
4849
- pip install aiohttp
4950
- pip install temp
5051
- pip install aiokafka
52+
- pip install slack-sdk
5153
- python3 -m unittest test
5254

5355
test py39:
@@ -71,6 +73,7 @@
7173
- pip install -U git+https://github.com/TeskaLabs/asab
7274
- pip install temp
7375
- pip install aiokafka
76+
- pip install slack-sdk
7477
- python3 -m unittest test
7578

7679
test flake:
@@ -90,6 +93,7 @@
9093
- pip install aiohttp
9194
- pip install temp
9295
- pip install aiokafka
96+
- pip install slack-sdk
9397
- pip install -U git+https://github.com/TeskaLabs/asab
9498
- python3 -m flake8 asabiris
9599

README.md

+49-1
Original file line numberDiff line numberDiff line change
@@ -71,4 +71,52 @@ https://teskalabs.github.io/asab-iris/
7171
**Templates used for other purpose must be stored under**
7272
```
7373
/Templates/General/
74-
```
74+
```
75+
76+
## Creating Xbot Tokens for Slack Apps
77+
78+
### Prerequisites
79+
- You have a Slack workspace where you can create and install apps.
80+
- You have a GitHub repository where you want to add the instructions.
81+
82+
### Step 1: Create a Slack App
83+
1. Go to the [Slack API website](https://api.slack.com/apps) and sign in to your Slack account.
84+
2. Click on the "Create New App" button.
85+
3. Give your app a name and select the workspace where you want to install it.
86+
4. Click on the "Create App" button.
87+
88+
### Step 2: Configure App Permissions
89+
1. In the left sidebar, click on "OAuth & Permissions".
90+
2. Scroll down to the "Bot Token Scopes" section and click on the "Add an OAuth Scope" button.
91+
3. Add the necessary scopes for sending messages and uploading files. For example:
92+
- `chat:write` (for sending messages)
93+
- `files:write` (for uploading files)
94+
4. Click on the "Save Changes" button.
95+
96+
### Step 3: Install the App in your Workspace
97+
1. In the left sidebar, click on "OAuth & Permissions".
98+
2. Scroll up to the "OAuth Tokens & Redirect URLs" section.
99+
3. Click on the "Install to Workspace" button.
100+
4. Review the requested scopes and click on the "Allow" button.
101+
5. Copy the generated OAuth access token. This will be your xbot token.
102+
103+
## Adding the App to a Channel
104+
105+
### Step 1: Choose a Channel
106+
1. Open your Slack workspace and navigate to the channel where you want to add the app.
107+
108+
### Step 2: Invite the App to the Channel
109+
1. In the channel, click on the channel name or the gear icon to access the channel settings.
110+
2. Select "Add apps" from the dropdown menu.
111+
112+
### Step 3: Search for the App
113+
1. In the search bar, type the name of your app and press Enter.
114+
2. Locate your app in the search results and click on it to select it.
115+
116+
### Step 4: Confirm the Addition
117+
1. Review the app details and permissions to ensure it aligns with your requirements.
118+
2. Click on the "Add to Channel" or "Add" button to add the app to the channel.
119+
120+
### Step 5: Verify the App's Presence
121+
1. Look for the app's name or icon in the channel member list.
122+
2. If the app is successfully added, it should appear as a member of the channel.

asabiris/output/slack/service.py

+8-2
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,20 @@
1212

1313
L = logging.getLogger(__name__)
1414

15+
asab.Config.add_defaults(
16+
{
17+
'slack': {
18+
"channel": "general",
19+
}
20+
})
1521

1622
class SlackOutputService(asab.Service, OutputABC):
1723
def __init__(self, app, service_name="SlackOutputService"):
1824
super().__init__(app, service_name)
1925
try:
20-
self.SlackWebhookUrl = asab.Config.get("slack", "webhook_url")
26+
self.SlackWebhookUrl = asab.Config.get("slack", "token")
2127
self.Client = WebClient(token=self.SlackWebhookUrl)
22-
self.Channel = asab.Config.get("slack", "slack_channel")
28+
self.Channel = asab.Config.get("slack", "channel")
2329
except configparser.NoOptionError as e:
2430
L.error("Please provide webhook_url in slack configuration section.")
2531
raise e

etc/asab-iris.conf

+4
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,7 @@ from=info@example.com
1212
ssl=no
1313
starttls=yes
1414
subject=Mail from ASAB Iris
15+
16+
[slack]
17+
token=xoxb-111111111111-2222222222222-3333333333333voe
18+
channel=general

qa.md

+28
Original file line numberDiff line numberDiff line change
@@ -429,4 +429,32 @@ EXPECTED RESPONSE:
429429
"message": "Invalid path '/Templates/MISSING.md'.",
430430
"uuid": "c941fe16-470e-42d2-958c-c9fb09ac8e7d"
431431
}
432+
```
433+
434+
## TSM022: Try to send Slack with attachment
435+
436+
`PUT /send_slack`
437+
438+
```
439+
{
440+
"body":{
441+
"template":"/Templates/Slack/alert.md",
442+
"params":{
443+
"message":"I am testing a template",
444+
"event":"Iris-Event"
445+
}
446+
},
447+
"attachments":[
448+
{
449+
"base64":"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",
450+
"content-type":"image/jpeg",
451+
"filename":"kiwi.jpeg"
452+
}
453+
]
454+
}
455+
EXPECTED RESPONSE:
456+
457+
{
458+
"result": "OK"
459+
}
432460
```

0 commit comments

Comments
 (0)