SlackのOut GoingAPIを用いた自動処理

Contents:

はじめに

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 = "<imcommingのURL>"
d = {
    "text":"hoge",
    "username":'kanai-test',
    "icon_emoji":':grin:',
    "channel":'#bottest',
    }
r = requests.post(url, data=json.dumps(d))