search
LoginSignup
0

More than 5 years have passed since last update.

posted at

updated at

lambda + kintone でchatworkへメッセージのみ送信できるようにしてログを残す

※この記事は「AltPlus Advent Calendar 2016」の11日目の記事です。

こんにちわ、 id:thashimotoです。

社内共通で使用できる メッセージ通知用のbotをchatworkで設定しようとしたのですが
chatworkでは、アカウント毎にAPIトークンが発行されるため
APIトークンを社内で公開してしまうと、bot用アカウントの入っているチャットルームの情報へは
アクセスができてしまうので、それを回避するため下記要件で設定したときのログになります。

  • 監査用ログ取得、実行できるAPIの制限(メッセージ通知のみ)、chatworkAPIトークンを展開しない

設定中、引っかかったところなどを書きたいと思います。

構成

  • APIGateway
  • lambda
  • kintone
  • image

APIGateway

  • chatworkのAPIトークンをそのまま配布してしまうと、chatworkのAPIがすべて使用できてしまうため 今回は、メッセージ通知のみできればよかったので、 APIGatewayの APIキーを使用して認証の対応を行いました。
  • 本文マッピングテンプレートは下記の形で設定、始め仕組みを理解していなかったためこの辺りの lambda側での受け取り方で引っかかっていました。
# Content-Type : application/json
{
    "room_id" : $input.json('$.room_id'),
    "body" : $input.json('$.body'),
    "sourceIp" : "$context.identity.sourceIp"
}
  • lambda側値受け取り
    option = "body="+str(event['body'])
    room_id = str(event['room_id'])
    sourceIp = str(event['sourceIp'])

lambda

  • 言語は pythonを使用したのですが 使ったことがなく curlの使いかたがすぐはわからなかったのですが 最終的に pycurlが使えたので下記のように対応(今回はファイルアップは行わず webページ上で設定していました)
import pycurl
    # chatwork post
    c = pycurl.Curl()
    c.setopt(pycurl.URL, chatwork_url)
    c.setopt(pycurl.HTTPHEADER, ['X-ChatWorkToken: '+CHATWORK_TOKEN+''])
    c.setopt(pycurl.POST, 1)

    c.setopt(pycurl.POSTFIELDS, post_text)
    c.perform()
  • lambda上で botの語尾を付けたのですが文字化けしていたので url_encodeしたものを文字連結する形で対応しました。

kintone

  • データストアとして使用
  • 特にひっかかったところはありませんでした。
  • 簡単に集計してグラフ表示までできるので便利でした。

curlで実行

curl -H "Content-Type: application/json" -H "x-api-key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" -X POST -d '{ "body": "body test","room_id": "1111111111111"}'  "apigateway endpoint url"

感想

  • 今回、仕組みが簡単だったためサーバを設置したくなかったので データストア含めて、サーバレス的な形で設定できて運用もあまり手間がかからないので便利そうでした。
  • 今後もグルー的な対応で問題ない場合は、運用が楽なのでこういった形で対応していければと思いました。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0