先日、他部署のLINE WORKS版Trello Botユーザーから「作って貰ったTrello Botの更新通知がLINE WORKSに来なくなった」という連絡が来た。Trelloからも「Webhookの1つが失敗し、無効になる可能性があります」という件名でメールが来ているとのこと。
しかし、
- こちらでHerokuにデプロイしたBotアプリのソースコードをいじったわけではない
- LINE WORKSのAPI情報をいじったわけでもない
- Trelloから「Webhookの仕様変えるよ」という連絡が来た記憶はない
ということを考えると、「ユーザー側で何かした」としか思えなかったので確認したところ、「ボードを一つ追加しただけ」とのこと。
何はともあれ、原因究明のため、動作確認をする必要が出てきたが、動作確認のためにはLINE WORKS版Trello Botのデプロイ先(Heroku)に対してPOSTリクエストをする必要がある。
しかし、
- 他部署のTrelloボードへのアクセス権限は貰えないため、WebhookによるPOSTリクエストはできない
- 会社のPCにcURLを入れるための説明をISMS担当者にするのもめんどくさい
と億劫な気持ちになっていたら、Chrome ウェブストアでPostmanを発見!
Postmanで解決できた。
以下、再度、動作確認しなければならなくなったときの為、やったことを記録しておく。
やったこと
1. PostmanをGoogle Chromeに追加
リンクはこちら(↓)
Postman - Chrome ウェブストア
なお、PostmanはGoogleアカウントで利用登録できた。
2. JSONダミーデータを作成
Trelloのカードにコメントを入力すると、Webhook生成時にコールバックURLで指定したLINE WORKS版Trello Botのデプロイ先(Heroku)にJSONデータが飛ぶ(POSTメソッド)。
そのJSONデータを処理してLINE WORKSのトークルームに送信するソースコード(抜粋)は以下のようになっている。
@app.route('/webhook', methods=['GET', 'HEAD', 'POST'])
def webhook():
if request.method == 'GET':
return 'Start', 200
elif request.method == 'HEAD':
return '', 200
elif request.method == 'POST':
action_type = request.json['action']['display']['translationKey']
if action_type == 'action_comment_on_card':
card_name = request.json['action']['data']['card']['name']
user_name = request.json['action']['memberCreator']['fullName']
comment = request.json['action']['data']['text']
message = user_name + "さんがコメントしました。\n【カード】" + card_name + "\n【コメント】" + comment
talkbot.send_text_message(send_text=message)
return '', 200
else:
pass
else:
abort(400)
このPOSTリクエストをPostmanで再現したいので、JSONダミーデータを作成した。
{
"action":{
"display":{
"translationKey":"action_comment_on_card"
},
"data":{
"card":{
"name":"カード名"
},
"text":"コメント"
},
"memberCreator":{
"fullName":"ユーザー名"
}
}
}
3. PostmanからPOSTリクエストを送信
- HTTPメソッドを「POST」に変更
- URLにコールバックURL(HerokuアプリのURL)を入力
- Bodyでリクエストボディは「row」を選択し、Content-typeは「JSON(application/json)」に変更、2のJSONダミーデータを入力
この状態でSendボタンを押下すると、Postリクエストが送信される。
動作確認した結果
ステータスコード200のレスポンスが返ってきて、LINE WORKSにも更新通知が飛んだ。そして、以降はTrello更新通知がLINE WORKSに飛ぶようになった。結局、原因不明だがめでたしめでたし。