# 20160128SlackのOut GoingAPIを用いた自動処理 ## はじめに 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)) ```