Пишем бота для Slack на Python

МЕНЮ


Новости ИИ
Поиск

ТЕМЫ


Внедрение ИИНовости ИИРобототехника, БПЛАТрансгуманизмЛингвистика, обработка текстаБиология, теория эволюцииВиртулаьная и дополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информации

АРХИВ


Август 2017
Июль 2017
Июнь 2017
Май 2017
Апрель 2017
Март 2017
Февраль 2017
Январь 2017
Декабрь 2016
Ноябрь 2016
Октябрь 2016
Сентябрь 2016
Август 2016
Июль 2016
Июнь 2016
Май 2016
Апрель 2016
Март 2016
Февраль 2016
Январь 2016
0000

RSS


RSS новости
Ураган харви в США

Новостная лента форума ailab.ru

2017-08-04 17:20

чат-боты

Небольшой туториал, как сделать простого слэк-бота на Python, развернуть его на Heroku, подключить Travis CI за двадцать минут и начать делать что-то полезное.

Итак у нас есть бот, который карает людей пишущих в чат «привет», только чтобы отвлечь нас от работы. Как сделать себе такого же, но лучше?

Heroku + Python Web App

Установка хероку прекрасно описана тут нам потребуется всего три файла

 - requirements.txt - Procfile - runtime.txt 

В первом перечисляем все зависимости примерно так

httplib2 slacker Flask==0.12

можно их сразу не писать, умный PyCharm сам подскажет, что мы что-то пропустили.
Httplib2 понадобится нам чтобы посылать запросы для прохождения авторизации, Slacker — чтобы удобно работать со Slack API, а Flask — для приема запросов, это самый простой и безболезненный веб-фреймворк, требующий нулевой настройки.

В runtime.txt указываем версию пайтона, которая нам нравится.
В Procfile тоже ровно одна строка
web: python app.py

Теперь мы готовы писать свое первое приложение, создаем app.py с таким содержимым

from flask import Flask from flask import request from flask import make_response  app = Flask(__name__)  # создали ендпоинт @app.route('/webhook') def hello_slack():     # получили данные из запроса     request_json = request.get_json(silent=True, force=True)     # тут ваш код возьмет запрос и вернет в ответ любой dict объект ответа, можно даже пустой     # примерно так request_json -> response_body_json     ...     response_body = json.dumps(response_body_json)     # упаковали все в корректный респонс     response = make_response(response_body)     response.headers['Content-Type'] = 'application/json'     # и вернули     return response  if __name__ == '__main__':     port = int(os.getenv('PORT', 5000))     app.run(debug=False, port=port, host='0.0.0.0') 

Пушим все на гитхаб, заходим на хероку и создаем новое приложение из публичного репозитория. Хероку самостоятельно выкачает коды, поставит зависимости из requirements.txt и запустит приложение согласно Procfile.

Slack

Все, с этого момента у нас есть бекенд по адресу

https://YOUR_APP_NAME.herokuapp.com/webhook
и можно создавать свое слэк приложение, которое будет *делать-что-то-полезное*. Осталось его валидировать для events API (то есть, самого полезного АПИ — АПИ оповещения нас о любых событиях). Слэк сам просто на наш ендпоинт особый challenge-request из которого нужно достать код и положить его в респонс. Теперь уже в настройках слэк-приложения в разделе Event Subscriptions выбираем нужные нам события и все. События будут падать на тот же адрес. Как только сделаете все, что хотите с входящими данными, нужно поддержать авторизацию других пользователей. Для этого нужен будет еще один эндпоинт, например /auth, на который слэк отправит запрос, как только новый пользователь захочет поставить себе ваше приложение. Получив такой запрос, нужно вытащить из него код и выслать POST-ом на slack.com/api/oauth.access вместе с кредами приложения, а на сам запрос ответить любым успешным ответом, или же редиректом на страничку, которую хотите показать пользователю после авторизации.

Travis CI

Бот готов. Осталось убедиться, что он работает. Приложение всегда можно запустить локально и поспамить запросами через curl, но толку от этого мало, поэтому сразу пишем юнит тесты и просим Тревиса следить за репозиторием. Проект в Тревисе создается почти так же интуитивно как в хероку, нужен только адрес репа, все остальное тревис сделает сам если создать еще один файл в корне проекта .travis.yml

language: python python:   - "3.6" script:   python3 -m unittest discover 
В секции script мы сообщаем тревису, что делать, после того как скачана последняя версия исходников. Эта команда (которую стоит почаще запускать локально) сама найдет юнит-тесты в нашем проекте и прогонит их.

С этого момента Тревис и Хероку (если включено в настройках) следят за репозиторием и скачивают ваше приложение, разворачивают его и запускают тесты, присылают результаты их выполнения на почту. И вы почти готовы к продакшену, как только все заработает, нужно будет только отключить автоустановку сорцов в хероку, и перенастроить Тревис, чтобы он сам проводил деплой только тогда, когда тесты прошли успешно. Профит!

Сылки на исходники лежат тут, а живой Тревис здесь. Сам бот доступен только коллегам родной компании, но я не исключаю выпуск его в паблик, если будет интерес.

Удачи!

Источник: habrahabr.ru