🦔
Notionで契約管理DBを作成して、更新前にslack通知
はじめに
契約のことをNotionに書き始めた。書いてることはこんな感じ
- 更新日
- 日付。更新したら来年に手動更新する
- ステータス
- 例:契約中、候補、解約済み、無料契約
- 事業範囲
- FAQ
- オンボーディングのここ見てね!なページに主要契約(≒SaaS)のFAQのリンクを書いている
- 手順
- 機密情報は書いてないけど、それ以外の手順は記載している
- 環境のDB
- 例えばkintoneのAppのDBなどを本文に置いている。Appを書いたのはそれぞれのAppの使用方法などを書くため。
Notionを選んだのはmarkdownが使用できることと、画像が添付しやすいことだが、通知がネックなのでGASでプログラムを書いた。
code
main.gs
function alertSaaSUpdate(){
const alertList = getSaaSList().reduce((alertList, saas) => {
const alertText = saas.getAlertText();
if(alertText) alertList.push(alertText);
return alertList;
}, []);
if(!alertList.length) return;
slackChannel(
<slack token>,
'契約更新確認\n\n' + alertList.join('\n')
);
}
SaaS.gs
class SaaS{
constructor(json){
this.name = json.properties.契約名.title.map(t => t.plain_text).join('');
this.status = json.properties.ステータス.status.name;
this.tagList = json.properties.タグ.multi_select;
this.updateDate = dayjs.dayjs(
json.properties['契約更新日'].date?.start ? json.properties['契約更新日'].date?.start : '-'
);
}
getAlertText(){
if(this.status === '契約中' && dayjs.dayjs().add(4, 'months').isAfter(this.updateDate)){
return `契約確認 ${this.name}, 更新日${this.updateDate.format('YYYY/MM/DD')}`;
}
}
getUpdateDate(){
return this.updateDate;
}
}
notion.gs
const NOTION = {
token: <token>,
db: {
saas: <id>,
},
};
function getSaaSList(){
return Notion.initManager(NOTION.token).query(NOTION.db.saas).map(json => new SaaS(json));
}
なお、「Notion」とは以下のライブラリ
結果
やっぱりプログラミングしたほうが柔軟に通知設定できるな〜
Discussion