いつ使うの?
以下の状態のRedmineを使用しているとき
- チケット操作時にメール通知が来ない
- APIアクセスキーが発行されていない
- 管理権限を持っていない
Slack App のRSSインテグレーションも使ったんだけど新規チケットの通知しか来ないし思いの外役立たずでした
前提
- Googleアカウント作成済み
- Slackbot作成済み
コード
Slackへのリクエストは以下のライブラリを使用しています
function myFunction() { // Redmine のチケット情報を取得する const feedURL = 'https://{Redmineのドメイン}/issues.atom?query_id={適当なquery_id}&key={Atomアクセスキー}'; const response = UrlFetchApp.fetch(feedURL); const xml = XmlService.parse(response.getContentText()); const rootDoc = xml.getRootElement(); const atom = XmlService.getNamespace('http://www.w3.org/2005/Atom') const items = rootDoc.getChildren('entry', atom) if (items.length === 0) { return; } const slackUserId = '{SlackのUserId}'; let message = '<@' + slackUserId + '> さん宛の Redmine のチケットが' + items.length + '件あります。\n'; items.forEach((item) => { const title = item.getChild('title', atom).getText(); // `/1111` のようにスラッシュ+数字の羅列をチケットIDとみなして検索 const issueId = item.getChild('id', atom).getText().match(/\/([0-9]+)/)[1]; // タイトルの文字列にチケットのリンクを貼る message += '<https://{Redmineのドメイン}/issues/' + issueId + '|' + title + '>\n'; }) const options = { username: 'Redmine', link_name: true, icon_emoji: ":redmine:" }; // slackに投稿 const slackApp = SlackApp.create('xoxb-XXXXXXXXXXXX'); // Slackbot のtoken slackApp.postMessage("#Slackのチャンネル名", message, options); }
((GASのシンタックスハイライトってjavascript
でいいの…?))
後は定期実行のトリガーを任意で作成してSlackに通知が来ればOK
感想
早くGASでもテンプレートリテラル使えるようにしてくれ
株式会社エイルシステムではWebエンジニア・モバイルアプリエンジニアを募集しています。
実務経験がなくてもOKです。ご興味のある方は弊社HPよりご連絡ください。