Заставить Slack API кнопки "сделать что-нибудь" - PullRequest
0 голосов
/ 20 марта 2020

Редактировать: Поскольку я задал этот вопрос, я создал URL-адрес ngrok, чтобы получать Slack POST, когда пользователь нажимает кнопку.

Однако каждый раз, когда я нажимаю кнопку, я получаю следующее: "POST / HTTP/1.1" 404 -

Я использую локальный Flask URL, код ниже:

from flask import Flask, request

app = Flask(__name__)


@app.route('/payload', methods=['POST'])
def incoming_slack_message():
    req = request.get_json(Force=True)
    info = request.form['channel_id']
    print(req)
    print(info)
    print('did it work???')
    return 'action successful'


@app.route('/slack/blocks', methods=['POST'])
def incoming_slack_options():
    req = request.get_json(Force=True)
    info = request.form['payload']
    print(req)
    print(info)
    print('Did it work here??')
    return 'ok'


if __name__ == '__main__':
    app.run(port=3000, debug = True)

I Я прочитал, что мне нужно включить callback_id в блок, но всякий раз, когда я это делаю, я получаю TypeError: 'NoneType' object is not subscriptable Это блок, который я использую меньше callback_id

{ "type": "section", "text": { "type": "mrkdwn", "text": "Once your machine is selected, click here." }, "accessory": { "type": "button", "text": { "type": "plain_text", "text": "Change", }, "value": "click_me_123", "action_id": "button" } }

Я уверен, что-то неправильно в моем flask коде, так как я мало что знаю о Flask. Я не думаю, что что-то не так с моим Slack Block, но я все еще чувствую, что должен быть callback_id. Спасибо за ваше время.

1 Ответ

0 голосов
/ 22 марта 2020

Хорошо, я получил кнопку для генерации ответа! Код Flask выглядит следующим образом:

from flask import Flask, request, Response, jsonify
import requests
import json

app = Flask(__name__)

@app.route('/', methods=['POST'])
def resp():
    data = request.json
    button_info = request.form['payload']
    webhook_url = 'webhook from slack'
    slack_data = { 'text': "How can I help you?"}
    response = requests.post(
    webhook_url, data=json.dumps(slack_data),
    headers={'Content-Type': 'application/json'}
    )
    return(jsonify(data), print(button_info))

if __name__ == '__main__':
    app.run(port=3000, debug = True)

Кнопка_info распечатает все данные. Я уверен, что смогу избавиться от некоторых из этих строк / импортов, и это все еще будет работать, но это сделает работу!

*** Этот код связан с URL-адресом ngrok publi c для локального веб-сервера.

brew cask install ngrok, за которым следует

ngrok http 3000, чтобы соответствовать порту 3000 в моем коде

webhook_url с веб-сайта Slack API.

...