Можно ли сделать POST-запрос к Slack с помощью AWS Lambda, используя только нативные библиотеки? - PullRequest
0 голосов
/ 10 ноября 2019

Я пытаюсь сделать POST-запрос к Slack, используя webhooks. Я могу отправить лок на мой экземпляр Slack локально, но при попытке сделать это в лямбде я сталкиваюсь с проблемами при попытке отправить полезную нагрузку.

Все, что я видел, говорит, что я должен использовать и архивировать пользовательские библиотеки, но дляВ целях того, что я делаю, мне нужно использовать нативный код Python. Есть ли способ отправить этот POST-запрос?

import json
import urllib.request
#import botocore.requests as requests

def lambda_handler(event, context):
  message=event['message']
  response = urllib.request.urlopen(message) 
  print(response) 

Этот код дает мне ошибку 400. Я знаю, что я нажимаю на нужный мне URL-адрес (URL-адрес находится в переменной сообщения), но при каждой попыткепри отправке полезной нагрузки путем добавления заголовков, и текстовое тело, похоже, не работает.

Ответы [ 2 ]

0 голосов
/ 12 ноября 2019
  • Пожалуйста, найдите прикрепленный код lambda_handler, надеюсь, это поможет вам.
  • Все сообщения, которые будут опубликованы в slack, помещаются в тему SNS, которая, в свою очередь, читается лямбдой и публикуется в slack. канал с использованием слабого URL-адреса.
import os
import json
from urllib2 import Request, urlopen, URLError, HTTPError

# Get the environment variables
SLACK_WEBHOOK_URL = os.environ['SLACK_WEBHOOK_URL']
SLACK_CHANNEL = os.environ['SLACK_CHANNEL']
SLACK_USER = os.environ['SLACK_USER']

def lambda_handler(event, context):
    # Read message posted on SNS Topic
    message = json.loads(event['Records'][0]['Sns']['Message'])

# New slack message is created
    slack_message = {
        'channel': SLACK_CHANNEL,
        'username': SLACK_USER,
        'text': "%s" % (message)
    }
# Post message on SLACK_WEBHOOK_URL
    req = Request(SLACK_WEBHOOK_URL, json.dumps(slack_message))
    try:
        response = urlopen(req)
        response.read()
        print(slack_message['channel'])
    except HTTPError as e:
        print(e)
    except URLError as e:
        print(e)
0 голосов
/ 10 ноября 2019

Вы можете попробовать, как показано ниже:

SLACK_URL = 'https://hooks.slack.com/services/....'

req = urllib.request.Request(SLACK_URL, json.dumps(message).encode('utf-8'))
response = urllib.request.urlopen(req)
...