Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Slackでスタンプを押すとBackLogに起票する仕組みを作る__1_.pdf
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Hitoki
February 01, 2023
850
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slackでスタンプを押すとBackLogに起票する仕組みを作る__1_.pdf
Hitoki
February 01, 2023
Featured
See All Featured
エンジニアに許された特別な時間の終わり
watany
107
250k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
220
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
170
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
230
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.1k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
870
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
860
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.3k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
370
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
200
We Have a Design System, Now What?
morganepeng
55
8.2k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Transcript
Slackでスタンプを押すとBackLog に起票する仕組みを作る
自己紹介 • 名前 ◦ 馬淵 仁輝(まぶち ひとき) • 所属 ◦ 2022/10/1 入社 ◦
Eng4G SREUnit • 前職 ◦ スマホゲー運営 ◦ BE領域が主(6年) ◦ 約5タイトル ◦ インフラ保守等の他領域も担当
テーマについて • Slack→BackLogで起票する仕組みを作る ◦ 何が必要なの? ◦ どのくらいの時間と温度感で出来るもの? • 作るのが面倒臭い・・ ◦
基本はコピペでいけるように紹介します
アジェンダ • 自己紹介 • テーマについて • 構成図イメージ • AWS側でやること •
BackLog側でやること • Slack側でやること • 注意すること • まとめ
構成図イメージ
AWS側ですること • AWS Lambdaの用意(15分) • AWS APIGateWayの用意(3分)
AWS側ですること • AWS Lambdaの用意(15分) ◦ Slackのメッセージを取得する関数 ◦ BackLogにチケットを起票する関数 ◦ 発火した時に上2つをいい感じに動かす関数
◦ (必須ではない)Slackにメッセージを投下する関数 import json import urllib.request import requests ・インポートするライブラリ
AWS側ですること • AWS Lambdaの用意 ◦ Slackのメッセージを取得する関数のサンプルコード def get_slack_message(channel_id, ts): token
= "slackから取得するトークン " SLACK_URL = "https://slack.com/api/conversations.replies" payload = { "channel": channel_id, "ts": ts } headersAuth = { 'Authorization': 'Bearer '+ str(token), } response = requests.get(SLACK_URL, headers=headersAuth, params=payload) json_data = response.json() msgs = json_data["messages"][0] text = msgs["text"] archives_url = "https://******.slack.com/archives/" + channel_id + "/p" + ts result = {"text":text, "archives_url":archives_url} return result
AWS側ですること • AWS Lambdaの用意 ◦ BackLogにチケットを起票する関数のサンプルコード def add_issue(text,archives_url): API_KEY =
"backlogのAPIトークン" PROJECT_ID="11111111" PRIORITY_ID = "3" ISSUE_TYPE_ID = "000000" payload={ 'projectId': PROJECT_ID, 'issueTypeId': ISSUE_TYPE_ID, 'priorityId': PRIORITY_ID, 'summary': archives_url, 'description': text } params = { 'apiKey': API_KEY, } r = requests.post("https://xxxxxx.backlog.jp/api/v2/issues", params=params, data=payload) r.raise_for_status()
AWS側ですること • AWS Lambdaの用意 ◦ 発火した時に他関数をいい感じに動かす関数のサンプルコード def lambda_handler(event, context): event_json
= json.dumps(event, ensure_ascii=False) event_dict = json.loads(event_json) try: body_dict = json.loads(event_dict["body"]) reaction = body_dict["event"]["reaction"] channel = body_dict["event"]["item"]["channel"] ts = body_dict["event"]["item"]["ts"] slack_message = get_slack_message(channel,ts) if(reaction=="リアクションの ID"): add_issue(slack_message["text"],slack_message["archives_url"]) result = post_slack("reaction added : "+ reaction, event, context) return { 'statusCode': 200, 'body': reaction, } except KeyError: print("body message from slack is not found.")
AWS側ですること • AWS Lambdaの用意 ◦ Slackにメッセージを投下する関数のサンプルコード def post_slack(argStr, event, context):
message = argStr send_data = { "text": message } send_text = json.dumps(send_data) request = urllib.request.Request( "https://hooks.slack.com/services/xxxxxx/yyyyy/zzzzz", data=send_text.encode('utf-8') ) with urllib.request.urlopen(request) as response: slack_message = response.read() return send_text
コピペするだけ
AWS側ですること • AWS APIGateWayの用意(3分) ◦ lambdaから[トリガーを追加]をクリック ◦ →を参考にぽちぽち
ポチポチするだけ
BackLog側ですること • 各種キーを確認する(5分) ◦ apiKey ◦ projectId ◦ issueTypeId •
上記のキーをlambdaのコードに設定する(1分)
BackLog側ですること • apiKey a. BackLogのAPI発行画面(https://xxxx.backlog.jp/EditApiSettings.action)へ移動 i. 画面右上の自分のアイコンから「個人設定」をクリック ii. 個人設定画面の左メニューから「 API」をクリック
b. 適当なコメントを入力し、発行して完了。
BackLog側ですること • projectId a. BackLogプロジェクト設定画面 (https://xxxx.backlog.jp/projects/yyyyyyy)へ移動 i. 画面左のメニューから「プロジェクト設定」をクリック b. URLをにある「projectid=????」確認
BackLog側ですること • issueTypeId a. BackLog種別設定画面(https://xxxxx.backlog.jp/ListIssueType.action?projectId=zzzzz)へ移動 i. 画面左のメニューから「プロジェクト設定」をクリック ii. 画面左のプロジェクト設定メニューから「種別」をクリック b.
設定したいカテゴリを選択 c. URLをにある「issueType.id=????」確認
コピペするだけ
Slack側ですること • Appを作る(5分) ◦ API用のトークンを発行する ◦ EventBotの設定 • challenge認証を通す
Slack側ですること • Appを作る ◦ https://api.slack.com/apps でAPPを新しく作る
Slack側ですること • Appを作る ◦ API用のトークンを発行する
Slack側ですること • Appを作る ◦ EventBotの設定
ポチポチするだけ
Slack側ですること • challenge認証を通す
コードをなくしました
認証通すだけ def lambda_handler(event:, context:) { statusCode: 200, body: JSON.generate(event["body"]) }
end
注意すること • lambdaに必要な外部ライブラリが importされているか? • 各種トークンは間違っていない? • botをチャンネルに招待した?
まとめ • 意外と簡単に作れる! • 1時間もあれば作れる(と思います) • しっかり動いてくれて嬉しい!
ご清聴ありがとうございました!