Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Slackでスタンプを押すとBackLogに起票する仕組みを作る__1_.pdf
Search
Hitoki
February 01, 2023
900
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
Measuring & Analyzing Core Web Vitals
bluesmoon
9
1.1k
Navigating Weather and Climate Data
rabernat
0
580
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
670
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.3k
The Cult of Friendly URLs
andyhume
79
7.1k
SEO for Brand Visibility & Recognition
aleyda
0
4.8k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
560
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
620
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.7k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
970
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.9k
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時間もあれば作れる(と思います) • しっかり動いてくれて嬉しい!
ご清聴ありがとうございました!