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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Hitoki
February 01, 2023
890
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
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
530
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
530
Designing Powerful Visuals for Engaging Learning
tmiket
1
570
A Modern Web Designer's Workflow
chriscoyier
699
190k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
The untapped power of vector embeddings
frankvandijk
2
1.9k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.7k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
57k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
35
2.8k
The Limits of Empathy - UXLibs8
cassininazir
1
680
A Tale of Four Properties
chriscoyier
163
24k
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時間もあれば作れる(と思います) • しっかり動いてくれて嬉しい!
ご清聴ありがとうございました!