- создать приложение Slack, создать подписки на события (упоминания, сообщения и т. д.), получить все необходимые ключи
- создать подписку на события с помощью инструмента ngrok, который туннелирует ответы из моего локально работающего приложения Flask на общедоступный URL-адрес
- кодировать логику бота и помещать ее в приложение Flask< /li>
Код: Выделить всё
import os
from flask import Flask, request
from slackeventsapi import SlackEventAdapter
app = Flask(__name__)
slack_bot_user_id = os.getenv('SLACK_BOT_USER_ID')
slack_events_adapter = SlackEventAdapter(os.getenv('SLACK_SIGNING_SECRET'), '/slack/events', app)
@app.route('/slack/events', methods=['POST'])
def get_events():
# print(request)
return request.json['challenge']
@slack_events_adapter.on('message')
def handle_message(event_data):
print(event_data)
if __name__ == '__main__':
app.run(port=8000, host='0.0.0.0')
< ul>
в строке 6 я определяю адаптер, который соединяет серверное приложение Flask с приложением Slack
[*]в строках 9–13 я определяю функцию, которая будет возвращать " вызов» по запросу событий API
[*](строки 15–17 — это заполнители для фактической реализации логики; будут заполнены после успешной проверки приложения).
Я пытаюсь протестировать приложение с помощью команды
Код: Выделить всё
curl -X POST -d '{"challenge": "empty"}' -H "Content-Type: application/json" 127.0.0.1:8000/slack/eventsКод: Выделить всё
Traceback (most recent call last):
File "/Users/rsuleimanov/Documents/llm_deeds/langchainenv/lib/python3.9/site-packages/flask/app.py", line 2190, in wsgi_app
response = self.full_dispatch_request()
File "/Users/rsuleimanov/Documents/llm_deeds/langchainenv/lib/python3.9/site-packages/flask/app.py", line 1486, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/Users/rsuleimanov/Documents/llm_deeds/langchainenv/lib/python3.9/site-packages/flask/app.py", line 1484, in full_dispatch_request
rv = self.dispatch_request()
File "/Users/rsuleimanov/Documents/llm_deeds/langchainenv/lib/python3.9/site-packages/flask/app.py", line 1469, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
File "/Users/rsuleimanov/Documents/llm_deeds/langchainenv/lib/python3.9/site-packages/slackeventsapi/server.py", line 94, in event
self.emitter.emit('error', slack_exception)
File "/Users/rsuleimanov/Documents/llm_deeds/langchainenv/lib/python3.9/site-packages/pyee/base.py", line 211, in emit
self._emit_handle_potential_error(event, args[0] if args else None)
File "/Users/rsuleimanov/Documents/llm_deeds/langchainenv/lib/python3.9/site-packages/pyee/base.py", line 169, in _emit_handle_potential_error
raise error
slackeventsapi.server.SlackEventAdapterException: Invalid request timestamp
UPD: я мог бы сделать обходной путь, передавая заголовок, например -H "X- Slack-Request-Timestamp: 1717762997", но затем натыкаюсь на ошибку. Неверная подпись запроса (которая следует этой логике), которую, я думаю, я могу решить, но все же я уверен, что это не так, как должно быть. быть обработано. Возникает главный вопрос: как пройти проверку Slack Events?
Подробнее здесь: https://stackoverflow.com/questions/785 ... rexception
Мобильная версия