-
-
Save devStepsize/b1b795309a217d24566dcc0ad136f784 to your computer and use it in GitHub Desktop.
''' | |
This is an example of how to send data to Slack webhooks in Python with the | |
requests module. | |
Detailed documentation of Slack Incoming Webhooks: | |
https://api.slack.com/incoming-webhooks | |
''' | |
import json | |
import requests | |
# Set the webhook_url to the one provided by Slack when you create the webhook at https://my.slack.com/services/new/incoming-webhook/ | |
webhook_url = 'https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX' | |
slack_data = {'text': "Sup! We're hacking shit together @HackSussex :spaghetti:"} | |
response = requests.post( | |
webhook_url, data=json.dumps(slack_data), | |
headers={'Content-Type': 'application/json'} | |
) | |
if response.status_code != 200: | |
raise ValueError( | |
'Request to slack returned an error %s, the response is:\n%s' | |
% (response.status_code, response.text) | |
) |
@johannesber and @NandanSatheesh try putting the content directly into a separate json file then loading it into a variable as follows:
import slack
import json
import requests
with open("block.json", "rt") as block_f:
data = json.load(block_f)
def post_to_slack(message):
webhook_url = 'https://hooks.slack.com/services/MY/WEBHOOK/URL'
slack_data = json.dumps({'blocks': message})
response = requests.post(
webhook_url, data=slack_data,
headers={'Content-Type': 'application/json'}
)
if response.status_code != 200:
raise ValueError(
'Request to slack returned an error %s, the response is:\n%s'
% (response.status_code, response.text)
)
post_to_slack(data)
I've put this up here: https://github.com/guymorrell/slack-webhooks-blockkit
@guymorrell now this works like a charm! Thanks for your help!
Hi, is there away you can use the same method but posting in a thread instead of the channel on Slack?
Hi @guymorrell I am trying to publish cucumber report (Cucumber.json) from Jenkins to slack using slak-notifier-plugin but I got the below error
java.lang.RuntimeException: Received HTTP Status code [400] while posting to slack
at org.jenkinsci.plugins.slacknotifier.SlackClient.postToSlack(SlackClient.java:62)
at org.jenkinsci.plugins.slacknotifier.SlackClient.postToSlack(SlackClient.java:54)
at org.jenkinsci.plugins.slacknotifier.SlackClient.postToSlack(SlackClient.java:41)
at org.jenkinsci.plugins.slacknotifier.CucumberSlackService.sendCucumberReportToSlack(CucumberSlackService.java:33)
at org.jenkinsci.plugins.slacknotifier.CucumberSlackPostBuildNotifier.perform(CucumberSlackPostBuildNotifier.java:67)
at hudson.tasks.BuildStepMonitor$2.perform(BuildStepMonitor.java:32)
at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:741)
at hudson.model.AbstractBuild$AbstractBuildExecution.performAllBuildSteps(AbstractBuild.java:690)
at hudson.model.Build$BuildExecution.post2(Build.java:186)
at hudson.model.AbstractBuild$AbstractBuildExecution.post(AbstractBuild.java:635)
at hudson.model.Run.execute(Run.java:1878)
at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
at hudson.model.ResourceController.execute(ResourceController.java:97)
at hudson.model.Executor.run(Executor.java:428)
Build step 'Send Cucumber Report to Slack' marked build as failure
I could not be able to send the json which is made with Block Kit too. Can you please help me here?
Hi @Udhay1316, can you post trivial messages to slack? See https://github.com/guymorrell/slack-post-oath
Digging the history up but this seems to not work as intended anymore.
What I get as a result is no_text
when I try to post a message. If I add the text
field, it ignores the blocks
.
Have you seen this issue before?
Hi @guymorrell
A simple text worked fine , but I'm trying to send this payload :
{
"Title": "Resources in AWS ~> eng-sbx",
"icon_emoji": ":money:",
"Resource_Count": {
"CloudFormationStack": "259",
"CloudWatchLog Group": "4319",
"DynamoDBTable": "119",
"EC2Address": "7",
"EC2Instance": "34",
"EC2Security Group": "877",
"GlueDatabase": "14",
"LambdaFunction": "831",
"ECRRepository": "117",
"ECRImage": "6602",
"ELBLoad Balancer": "34",
"EMRCluster": "1",
"ElastiCacheCluster": "20",
"ElastiCacheReplication Group": "5",
"GlueCrawler": "10",
"KinesisStream": "24",
"EFSFile System": "9",
"EKSNode Group": "13",
"EKSCluster": "5",
"SageMakerApp": "7",
"SageMakerNotebook Instance": "2",
"RedshiftSnapshot": "2",
"RDSInstance": "18",
"RDSSnapshot": "3",
"EC2Snapshot": "40",
"EC2Volume": "224",
"S3Bucket": "123",
"IAMPolicy": "157",
"IAMRole": "359"
}
}
I keep having error 400 . Can you help me please ?
Traceback (most recent call last):
File "testing.py", line 183, in
print(test())
File "testing.py", line 179, in test
response = post_slack(result)
File "testing.py", line 160, in post_slack
raise ValueError(
ValueError: Request to slack returned an error 400, the response is:
missing_text_or_fallback_or_attachments
json={"text": data}
Amazing! Working like a charm!
@rafaelnpaiva - I have this problem also.
You need to use the block strucutre that Slack is expecting: (found here)
{
"blocks": [
{
"type": "section",
"text": {
"type": "plain_text",
"text": "This is a plain text section block.",
"emoji": true
}
}
]
}
I also need to send a simple JSON payload, and I really don't understand why there isn't a way to send our own key:value JSON block...I get that it won't nessasarily be pretty like Slack likes things to be... but sometimes we just need payloads.
@guymorrell do you have any ideas?
Hi, this is working example:
import requests
def send_slack_notif():
url = 'YOUR_SLACK_WEBHOOK_URL'
payload = {
"blocks": [
{
"type": "section",
"text": {
"type": "plain_text",
"text": ":red_circle: This is a plain text section block.",
"emoji": True
}
}
]
}
r = requests.post(url, json=payload)
send_slack_notif()
I want to format the code in the form of code.
```
slack_data = {
"text": "```\n" + message + "\n```"
}
response = requests.post(
url,
proxies={
"http_proxy": <proxy>,
},
json=slack_data,
headers={"Content-Type": "application/json"},
timeout=5,
)
print(response.text)
```
This does not format my code.
@guymorrell Using this approach, I get a notification that the sent content can't be displayed. If I open the Slack Channel, the provided text is shown without any formatting.