20160128SlackのOut GoingAPIを用いた自動処理 ********************************************** Contents: .. contents:: .. toctree:: :maxdepth: 1 はじめに ============= Slackが流行っている。各種連携のために、SlackAPIを活用する。 APIについての詳細は https://api.slack.com/ をみること。 Incoming WebHooks ========================== Browse apps > Custom Integrations > Incoming WebHooks > Config > Add Config からRequestする。 Outgoing WebHooks ================================= これが本ページの主題となる。 Outgoing Webhookでは、予め指定したキーワードが含まれる文字列を受けたときに 外のAPIをたたくことができる。 いくつかのオプションを設定できる Channelはそのキーワードをひっかけるチャンネル。 Trigger Wordはキーワードとすべき文字列。これにマッチしたものがAPIで呼ばれる。 URLが呼ぶWeb API。 Tokenは本文に入る文字列。APIはこのキーワードを確認して本物かどうかを区別する。 サーバ側のスクリプト --------------------------- pythonのスクリプトで処理をする。 wsgiを用いる。 /etc/apache2/sites-enabled/001-wsgi-testに :: WSGIDaemonProcess user=nobody group=nogroup threads=10 WSGIScriptReloading On WSGIScriptAlias /as /home/kanai/json_as.wsgi のように記載し、 https://github.com/recuraki/PythonJunkTest/blob/master/Flask/json_as.py のようなプログラムを書く。 スクリプトの詳細 ^^^^^^^^^^^^^^^^^^^^^^^^ FlaskではPOSTメソッドで来てかつform["text"]でテキストを取得できる。すなわち、 :: from flask import Flask, request @app.route('/', methods=['POST']) def index(): stText = request.form["text"] でstTextに入力された全文が乗ってくる。 :: # 返信を作ります diRet = {} # ここでaslookupする diRet['text'] = aslook(liText[1]) diRet['username'] = "asbot" return(json.dumps(diRet, indent = 2)) といういうように、してあげればOK。 Incoming WebHooks =================================== URL宛てにJSONを書くだけでよいので非常に簡単。 :: import requests, json url = "" d = { "text":"hoge", "username":'kanai-test', "icon_emoji":':grin:', "channel":'#bottest', } r = requests.post(url, data=json.dumps(d))