![Page 1: teratailで秒速回答を目指す - GoogleAppsScript + SlackWebhook](https://reader034.vdocuments.mx/reader034/viewer/2022052418/58718dc61a28ab2c198b6d2b/html5/thumbnails/1.jpg)
teratailで秒速回答を目指す
泰昌平 @ShoheiTai
![Page 2: teratailで秒速回答を目指す - GoogleAppsScript + SlackWebhook](https://reader034.vdocuments.mx/reader034/viewer/2022052418/58718dc61a28ab2c198b6d2b/html5/thumbnails/2.jpg)
自己紹介
泰昌平スパイスファクトリー株式会社
メディアインテグレーション事業部 事業部長
・平成生まれ
・ペチパー。CakePHP, Phalcon, CMSなど
・フロントエンドの開発、最適化が好き
・趣味はダーツとバイク
・最近鞄の中はChromebookと財布だけ
![Page 3: teratailで秒速回答を目指す - GoogleAppsScript + SlackWebhook](https://reader034.vdocuments.mx/reader034/viewer/2022052418/58718dc61a28ab2c198b6d2b/html5/thumbnails/3.jpg)
最近の悩みごと
![Page 4: teratailで秒速回答を目指す - GoogleAppsScript + SlackWebhook](https://reader034.vdocuments.mx/reader034/viewer/2022052418/58718dc61a28ab2c198b6d2b/html5/thumbnails/4.jpg)
なかなか回答ができていない・・・
![Page 5: teratailで秒速回答を目指す - GoogleAppsScript + SlackWebhook](https://reader034.vdocuments.mx/reader034/viewer/2022052418/58718dc61a28ab2c198b6d2b/html5/thumbnails/5.jpg)
皆さんすごいです...!
![Page 6: teratailで秒速回答を目指す - GoogleAppsScript + SlackWebhook](https://reader034.vdocuments.mx/reader034/viewer/2022052418/58718dc61a28ab2c198b6d2b/html5/thumbnails/6.jpg)
なぜ回答ができていないか
● teratailを開く頻度が少ない
● PHPやjavascriptなどの質問はスピード勝負
● 新規の質問にすぐ反応できない
![Page 7: teratailで秒速回答を目指す - GoogleAppsScript + SlackWebhook](https://reader034.vdocuments.mx/reader034/viewer/2022052418/58718dc61a28ab2c198b6d2b/html5/thumbnails/7.jpg)
teratailを定期的に開こう!
![Page 8: teratailで秒速回答を目指す - GoogleAppsScript + SlackWebhook](https://reader034.vdocuments.mx/reader034/viewer/2022052418/58718dc61a28ab2c198b6d2b/html5/thumbnails/8.jpg)
Pythonで5分に1度teratailを開く
import threading
import webbrowser
def teratail():
webbrowser.open('https://teratail.com')
t = threading.Timer(300, teratail)
t.start()
if __name__ == '__main__':
t = threading.Thread(target = teratail)
t.start()
![Page 9: teratailで秒速回答を目指す - GoogleAppsScript + SlackWebhook](https://reader034.vdocuments.mx/reader034/viewer/2022052418/58718dc61a28ab2c198b6d2b/html5/thumbnails/9.jpg)
jsで5分に1度teratailを開く
setInterval(() => {
window.open('https://teratail.com');
}, 300 * 1000);
(function teratail() {
window.open('https://teratail.com');
setTimeout(teratail, 300 * 1000);
})();
![Page 10: teratailで秒速回答を目指す - GoogleAppsScript + SlackWebhook](https://reader034.vdocuments.mx/reader034/viewer/2022052418/58718dc61a28ab2c198b6d2b/html5/thumbnails/10.jpg)
もう少し情報を絞り込めたら・・・?
![Page 11: teratailで秒速回答を目指す - GoogleAppsScript + SlackWebhook](https://reader034.vdocuments.mx/reader034/viewer/2022052418/58718dc61a28ab2c198b6d2b/html5/thumbnails/11.jpg)
APIとか…
![Page 12: teratailで秒速回答を目指す - GoogleAppsScript + SlackWebhook](https://reader034.vdocuments.mx/reader034/viewer/2022052418/58718dc61a28ab2c198b6d2b/html5/thumbnails/12.jpg)
teratail API
![Page 13: teratailで秒速回答を目指す - GoogleAppsScript + SlackWebhook](https://reader034.vdocuments.mx/reader034/viewer/2022052418/58718dc61a28ab2c198b6d2b/html5/thumbnails/13.jpg)
本日使うもの
![Page 14: teratailで秒速回答を目指す - GoogleAppsScript + SlackWebhook](https://reader034.vdocuments.mx/reader034/viewer/2022052418/58718dc61a28ab2c198b6d2b/html5/thumbnails/14.jpg)
![Page 15: teratailで秒速回答を目指す - GoogleAppsScript + SlackWebhook](https://reader034.vdocuments.mx/reader034/viewer/2022052418/58718dc61a28ab2c198b6d2b/html5/thumbnails/15.jpg)
質問をSlackで通知する
1. GoogleAppsScriptでteratailAPIにアクセス
2. 任意のタグから新着の質問を取得
3. SlackWebhookAPIで通知
4. GoogleAppsScriptの設定で定期的に実行
![Page 16: teratailで秒速回答を目指す - GoogleAppsScript + SlackWebhook](https://reader034.vdocuments.mx/reader034/viewer/2022052418/58718dc61a28ab2c198b6d2b/html5/thumbnails/16.jpg)
実装してみる
![Page 17: teratailで秒速回答を目指す - GoogleAppsScript + SlackWebhook](https://reader034.vdocuments.mx/reader034/viewer/2022052418/58718dc61a28ab2c198b6d2b/html5/thumbnails/17.jpg)
事前に用意するもの
● teratailAPIのアクセストークン
● Slack IncomingWebhookのURL
● Googleアカウント
![Page 18: teratailで秒速回答を目指す - GoogleAppsScript + SlackWebhook](https://reader034.vdocuments.mx/reader034/viewer/2022052418/58718dc61a28ab2c198b6d2b/html5/thumbnails/18.jpg)
teratailAPI
指定したタグの質問を最新のものから数件取得する。
※アクセストークンはマイページから取得
![Page 19: teratailで秒速回答を目指す - GoogleAppsScript + SlackWebhook](https://reader034.vdocuments.mx/reader034/viewer/2022052418/58718dc61a28ab2c198b6d2b/html5/thumbnails/19.jpg)
SlackWebhookのURLを取得
![Page 20: teratailで秒速回答を目指す - GoogleAppsScript + SlackWebhook](https://reader034.vdocuments.mx/reader034/viewer/2022052418/58718dc61a28ab2c198b6d2b/html5/thumbnails/20.jpg)
GoogleAppsScript
● サーバサイドで動作するjavascript
● GoogleAppsと連携した処理が実装可能
● ブラウザ上で実装、実行できる
● トリガーの設定で定期実行もらくらく
● Chromebookにやさしい
![Page 21: teratailで秒速回答を目指す - GoogleAppsScript + SlackWebhook](https://reader034.vdocuments.mx/reader034/viewer/2022052418/58718dc61a28ab2c198b6d2b/html5/thumbnails/21.jpg)
GoogleAppsScript - リクエスト
function request(url, options) {
var response = UrlFetchApp.fetch(url, options);
return response.getContentText('UTF-8');
}
UrlFetchApp.fetch()でHTTPリクエストを発行で
きる。
![Page 22: teratailで秒速回答を目指す - GoogleAppsScript + SlackWebhook](https://reader034.vdocuments.mx/reader034/viewer/2022052418/58718dc61a28ab2c198b6d2b/html5/thumbnails/22.jpg)
GoogleAppsScript - teratailAPI
// 指定したタグの質問を取得する
function getQuestionByTagName(tagName, params) {
var token = '*********';
var url = 'https://teratail.com/api/v1/tags/' + tagName + '/questions/';
if(params) {
url += '?' + queryString(params);
}
var result = request(url, {
headers: {Authorization: 'Bearer ' + token}
});
return JSON.parse(result);
}
![Page 23: teratailで秒速回答を目指す - GoogleAppsScript + SlackWebhook](https://reader034.vdocuments.mx/reader034/viewer/2022052418/58718dc61a28ab2c198b6d2b/html5/thumbnails/23.jpg)
GoogleAppsScript - SlackWebhook
// SlackWebhookにリクエストを投げる
function requestSlack(payload) {
var url = 'https://hooks.slack.com/services/*********';
var result = request(url, {
method : 'POST',
payload : JSON.stringify(payload)
});
return result;
}
![Page 24: teratailで秒速回答を目指す - GoogleAppsScript + SlackWebhook](https://reader034.vdocuments.mx/reader034/viewer/2022052418/58718dc61a28ab2c198b6d2b/html5/thumbnails/24.jpg)
GoogleAppsScript - トリガ設定
GoogleAppsScriptの画面から、このスクリプトのトリガを設定し定期実
行させる。
![Page 25: teratailで秒速回答を目指す - GoogleAppsScript + SlackWebhook](https://reader034.vdocuments.mx/reader034/viewer/2022052418/58718dc61a28ab2c198b6d2b/html5/thumbnails/25.jpg)
Slackへ通知
![Page 26: teratailで秒速回答を目指す - GoogleAppsScript + SlackWebhook](https://reader034.vdocuments.mx/reader034/viewer/2022052418/58718dc61a28ab2c198b6d2b/html5/thumbnails/26.jpg)
最後に
● GoogleAppsScriptが便利すぎた
● SlackもteratailもAPIの設定が非常に簡単
● 各々手軽に扱えるので相性はかなり良い
![Page 27: teratailで秒速回答を目指す - GoogleAppsScript + SlackWebhook](https://reader034.vdocuments.mx/reader034/viewer/2022052418/58718dc61a28ab2c198b6d2b/html5/thumbnails/27.jpg)
THANKS!Any questions?You can find me at✘ facebook: shouhei.tai✘ Twtter: @ShoheiTai
![Page 28: teratailで秒速回答を目指す - GoogleAppsScript + SlackWebhook](https://reader034.vdocuments.mx/reader034/viewer/2022052418/58718dc61a28ab2c198b6d2b/html5/thumbnails/28.jpg)
Credits
Special thanks to all the people who made and released these awesome resources for free:✘ Presentation template by SlidesCarnival✘ Photographs by Unsplash