はじめに
今までやってきたことを組み合わせてSlackにコメント付きで名刺画像をアップロードすると、名刺情報をkintoneに登録するようにしてみましょう。APIを使うためにPythonを用いて作ることにします。
前回記事はこちら:
これから作るアプリ
以下のように名刺画像をSlackにアップロードするとBotが情報を抽出してkintoneに登録してくれます。
アプリ作成の流れ
Step 0:アプリ作成の準備をする
↓
Step 1:pykintoneを使ってkintoneにデータ登録をする
↓
Step 2:SlackBotを作る
↓
Step 3:Slackからkintoneへ名刺情報を登録する
Step0(10min) アプリ作成の準備をする
アプリを作るために、必要なライブラリのインストール、SlackBotアカウントの作成、APIキーの設定を行います。
必要なライブラリをインストールする
アプリを作成するために必要なライブラリをインストールします。以下のコマンドを実行してインストールしてください。
$ pip install pykintone
$ pip install slackbot
SlackBotアカウントを作成する
まずはSlack Botアカウントを作成しましょう。
https://my.slack.com/services/new/bot
既にチームのSlackは開設済で、権限のあるユーザでログインしているものとします。その状態で、上記リンクを開くと、Botアカウントの作成画面が開きます。表示されているフォーム中にBotアカウントのユーザ名を入力して、「Add bot integration」を押してください。
「Add bot integration」を押すと、新たにフォームが表示されます。その中の「API Token」は後で作成するBotで用いるのでメモしてください。
「Customize Icon」や「Customize Name」で作成したBotの名前やアイコン画像を変更できます。変更内容を「Save Integration」で保存します。
この後のテスト用にプライベートチャンネルを作成して作成したBotを登録しておきましょう。下記のように設定したら、「Create Channel」で内容を保存します。
以上でSlackBotの設定は完了です。
APIキーを設定する
SlackのAPIキーを設定する
Slackで取得したAPIキーを設定ファイル(plugins/config/slack.yaml)に記述します。エディタでslack.yamlを開いて、tokenの値をあなたのSlackのAPIキーの値で上書きしましょう。xxxの部分を書き換えてください。
token: xxx
kintoneのAPIキーを設定する
kintoneで取得したAPIキー、ドメイン名、アプリIDを設定ファイル(plugins/config/kintone.yaml)に記述します。エディタでkintone.yamlを開いて、domain、id、tokenの値をあなたのkintoneアプリのドメイン名、アプリID、APIキーの値で上書きしましょう。xxxの部分を書き換えてください。
domain: xxx
apps:
test:
id: xxx
token: xxx
Step1(10min) pykintoneを使ってkintoneにデータ登録をする
ここではpykintoneを使ってkintoneに情報を登録するためのスクリプトの記述を行います。記述を行ったら、動作確認のためにスクリプトを実行します。ではまずはスクリプトの記述から行いましょう。
スクリプトの記述
kintoneに情報を登録するために、スクリプトを記述します。スクリプトの場所は、plugins/apis/kintone.pyです。エディタでkintone.pyを開いて、内容を以下のように書き換えましょう。書き換え終わったら保存してください。その際の文字コードはUTF8でお願いします。
# -*- coding: utf-8 -*-
import pykintone
from pykintone import model
import pykintone.structure_field as sf
class BusinessCard(model.kintoneModel):
def __init__(self, app, name, company, location, impression, submitter, image_path):
super(BusinessCard, self).__init__()
self.name = name
self.company = company
self.location = location
self.impression = impression
self.submitter = submitter
self.image = [sf.File.upload(image_path, app)]
def create_card(comment, entities, file_path, submitter, conf_path):
app = pykintone.load(conf_path).app()
name, company, location = entities['PERSON'], entities['ORGANIZATION'], entities['LOCATION']
card = BusinessCard(app, name, company, location, comment, submitter, file_path)
result = app.create(card)
if result.ok:
return result
else:
print(result.error)
create_cardに名刺情報とAPIキーの設定ファイルを与えることで、名刺情報をkintoneに登録してくれます。では動作確認のために実行してみましょう。
スクリプトの実行
先ほど書いたスクリプトを実行してみましょう。
まずplugins/testsフォルダに移動してください。その中にtest_kintone.pyがあるのを確認できるでしょうか。test_kintone.pyでは先ほど書いたスクリプトのcreate_cardを呼び出すように指定しています。つまり、正しく動作すれば名刺情報を与えた時にその情報がkintoneに登録されるはずです。
$ python test_kintone.py data/example.png
実行結果として以下のようにkintoneに名刺情報が登録されたでしょうか?
Step2(10min) SlackBotを作る
ここではごくごく基礎的なSlackBotを動かすためのスクリプトの記述を行います。記述を行ったら、動作確認のためにスクリプトを実行します。ではまずはスクリプトの記述から行いましょう。
スクリプトの記述
SlackBotを作るために、スクリプトを記述します。スクリプトの場所は、plugins/slack.pyです。エディタでslack.pyを開いて、以下の内容を**追記**してください。追記し終わったら保存してください。その際の文字コードはUTF8でお願いします。
from slackbot.bot import respond_to
@respond_to('こんにちは')
@respond_to('今日は')
def hello(message):
message.reply('こんにちは!')
“respond_to”にマッチするキーワードを指定することで、Botに対するメンションに反応するようになります。とにかく動かしてみましょう。
スクリプトの実行
ではSlackBotを起動してみましょう。
トップレベルにあるbot.pyを起動して**@をつけて**メッセージを送ってみましょう。
$ python bot.py
Step3(10min) Slackからkintoneへ名刺情報を登録する
さて、いよいよ今までの集大成です。Slackに名刺画像をアップロードすると、SlackBot経由でkintoneに情報を登録します。まずはVision API、Natural Language API、kintone APIを統合したSlackBotスクリプトの記述を行います。記述を行ったら、動作確認のためにスクリプトを実行します。ではまずはスクリプトの記述から行いましょう。
スクリプトの記述
SlackBotからkintoneに名刺情報を登録するためのスクリプトを記述します。スクリプトの場所は、plugins/slack.pyです。エディタでslack.pyを開いて、以下の内容を**追記**してください。追記し終わったら保存してください。その際の文字コードはUTF8でお願いします。
@listen_to('(.*)')
def anymessage(message, something):
if 'file' in message.body:
slack_token = loader(os.path.join(BASE_DIR, 'config/slack.yaml'))
google_token = loader(os.path.join(BASE_DIR, 'config/google.yaml'))
kintone_conf = os.path.join(BASE_DIR, 'config/kintone.yaml')
url = message.body['file']['url_private_download']
submitter = get_user_name(message.body['user'], slack_token['token'])
img_path = download_image(url, slack_token['token'])
entities = extract_entities_from_img(img_path, google_token['token'])
comment = message.body['file']['initial_comment']['comment']
create_card(comment, entities, img_path, submitter, kintone_conf)
message.reply('名刺情報を登録しました。')
else:
message.reply('名刺情報の登録をできますよ。')
名刺画像がアップロードされた場合は、名刺画像から情報を抽出してkintoneへ登録するような処理を書いています。では動作確認のために実行してみましょう。
スクリプトの実行
ではSlackBotを起動してみましょう。トップレベルにあるbot.pyを起動します。
$ python bot.py
おわりに
いかがだったでしょうか。
Vision API、Natural Language API、kintone、Slackを組み合わせて名刺管理アプリケーションを作って見ました。可能性を感じていただけたでしょうか?
今回は登録しかしませんでしたが、Botを使っているのでインタラクティブなアプリを作ることもできます。
これらのweb APIや他のweb API、もしくは、自作のweb APIを用意して、賢い処理をする仕組みを考えてみましょう!
おつかれさまでした。
記事まとめ
今回のハンズオンの内容は3つの記事にまとめています。
事前準備は以下の記事からお願いします。