【非エンジニアによる業務の自動化大作戦！】契約終了日を営業チームのSlackに通知させるBotで契約継続率アップを狙います！！！

Qiitaの記事を書くようになって、2ヶ月経ちました。

が！！！私の本業は__エンジニアではありません！！！__

これまで勉強してきたプログラミングの技術を、どうにか本業にも活かしたい！！！

ということで、__非エンジニアによる業務の自動化大作戦__をここに決行いたします！！！


#私が働いている会社の課題とは？
私は、創立３期目のHRベンチャーで営業企画とマーケティングを1人で担当しています。

社員も現在20名弱ということもあり、まだシステムを導入せず、顧客管理はスプレッドシートで行っています。


そんな弊社ですが、来月から大きく組織編制を変えることになりました！

これまで営業チームは、提案～受注～フォロー～継続提案まで一貫して担当していたのですが、
来月からカスタマーサクセスチームを立ち上げることに・・・！

そのため、営業チームは提案～受注まで、
カスタマーサクセスはフォロー～継続提案まで、という風に担当フェーズが分割されます。

なぜ、こうした組織編制にしたのでしょうか？
それは、__契約継続率を上げるため__です。

ただ、この組織が力を発揮するには、２チームの連携が必要となります！

そこで私は、日ごろアナログで管理している契約日を自動的に通知するようにし、
両チームの工数削減、かつフォロー＆継続提案の漏れがないようにできないか挑戦してみることにしました！

#Slackに通知を送れるようにする

弊社では、ほぼSlackで社員間のコミュニケーションをとっております。

そのため、契約日の通知もSlackに送れるようにしました。
Slackに送るためには、Webhookに繋げなきゃですが、その方法は以下の記事にまとめたので、ご覧ください♪

▶__[SlackのIncoming WebhooksでWebhook URLを取得する方法](https://qiita.com/twtjudy1128/items/1fa1b4d6494fae2d8259)__

まず、これでSlackに送信できるようにするためのURLを取得できました！


#GASを使って、スプレッドシートから契約終了日を取得し、Slackに送信する
次に、スプレッドシートから契約終了日を取得できるようにします！

Google Apps Scriptに、以下のようにコードを書きました！
AA列にある契約終了日を取得し、今日から30日以内だったら通知文を作成します。
そして、先ほど取得したSlackのWebhook URLへデータを送信すれば、指定したSlackチャンネルに通知文が送られます。

```javascript
function alertContract() {
    var mySheet = SpreadsheetApp.openById('SheetId').getSheetByName('シート名'); //スプレッドシートを取得
    var lastRow = mySheet.getLastRow(); //スプレッドシートの最終行を取得
    var today = new Date(); //今日の日付を取得
  
    /* 契約終了日まで30日だったらSlack投稿 */
    for (var i = 5; i <= lastRow; i++) {
      　var Di = mySheet.getRange(i, 4).getValue(); //企業名（Di列）を取得
        var dateAAi = new Date(mySheet.getRange(i, 27).getValue()); //契約終了予定日（AAi列）を取得
        var period = Math.ceil((dateAAi - today) / (1000 * 60 * 60 * 24)); //今日から契約終了予定日までの期間を取得
      if (period >= 0 && period <= 30) { //終了30日前の企業に通知
          //通知文を作成
          var strText = Di + "／契約終了日：" + dateAAi;
          //Slackへ投稿
          postSlack(strText);
        }
      
    }
}

function postSlack(strText) {
 
  //payload
  var payload  = { 
    'username'  : "契約終了日を教えてくれる●●パイセンBot",
    'text'      : strText, //
  };
  var options = {
    'method'      : 'post'                 ,
    'contentType' : 'application/json'     ,
    'payload'     : JSON.stringify(payload),
  };
 
  // Webhook URL へPOSTする
  var url = 'https://hooks.slack.com/services/xxxxxxxxx'; //Incoming WebHooksのURL
  UrlFetchApp.fetch(url, options);
}
```

ところが・・・！このデータだと、正しい数値が取れず・・・。

Qiitaで質問を投げてみたところ、
@rf_p　さんからすぐに回答をいただくことができました（大感謝） 

▶__[GASで契約終了日が今日から30日以内だったらSlackに通知が来るようにしたい](https://qiita.com/twtjudy1128/questions/516384223a2ac2988af0)__

どうやら年月日ではなく、日付だけをとって計算していたため、数値が合っていなかったようです・・・。
そこで、教えていただいた通りにコードを修正。

```javascript
        var period = Math.ceil((dateAAi - today) / (1000 * 60 * 60 * 24)); //今日から契約終了予定日までの期間を取得
      if (period >= 0 && period <= 30) { //終了30日前の企業に通知
```

これで、無事に契約終了まで30日以内の企業データを抽出することができました！！！

せっかくなので、Webhookを設定した画面で、アイコンもカスタマイズ♪

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670338/a58a0b46-a217-6d10-dcbf-dfd5fdc66652.png)

以下のように通知が来るようになりました♪

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670338/cb853147-f327-5c34-1a99-3e86dee27de2.png)

#現場からのダメ出しにより改善

やった～～！完成した～～！嬉しくて、すぐさまカスタマーサクセスチームに共有♪
　

__私『●●さん！見てください！契約終了30日以内の企業を通知できるようにしましたよ！』__

__●●さん『いや、30日だと遅い。それに何回も通知きても微妙だから、毎朝60日前と30日前と7日前の企業を通知させて』__

__私『・・・』__

　
作る前にヒアリングしなかった私が悪いなと反省。

何事もユーザーの声が一番大事だということに、改めて気づかされました。

ということで、作り直し。

```javascript
      if (period === 0) { //終了日の企業に通知
          //通知文を作成
          var strText = Di + "◆本日、契約終了します◆";
          //Slackへ投稿
          postSlack(strText);
        } else if (period === 7) { //終了7日前の企業に通知
          //通知文を作成
          var strText = Di + "は、あと7日で契約終了します！";
          //Slackへ投稿
          postSlack(strText);
        } else if (period === 30) { //終了30日前の企業に通知
          //通知文を作成
          var strText = Di + "は、あと30日で契約終了します！";
          //Slackへ投稿
          postSlack(strText);
        } else if (period === 60) { //終了60日前の企業に通知
          //通知文を作成
          var strText = Di + "は、あと60日で契約終了します！";
          //Slackへ投稿
          postSlack(strText);
        }
```

少し追加で、本日終了する企業も出てくるように。
また、契約終了日ではなく、あと～～日とした方が見やすいので通知文も修正しました！

完成したものがこちらです！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670338/2c18d919-9b71-6fab-9bb5-6d9613a063bf.png)


だいぶ見やすくなりましたね！先輩からもOKいただきました！！！良かった！！！まじで！！！

#身につけたスキルを活かせる喜び

プログラミングを勉強して、これまで__[ジェイソン・ステイサムのBot](https://qiita.com/twtjudy1128/items/88f3e8f09c449f49456c)__とか、__[ジェイソン・ステイサムの防犯システム](https://qiita.com/twtjudy1128/items/d67670f7a994cb0c8e23)__とか、とにかく私利私欲に満ちたサービスしか作ってこなかった私。

__今回おそらく初めて、本業の仕事に直結する仕組みを作りました。__

もちろん、私得なサービス作りも、自分のスキル向上にとって有意義な時間です。
ただ、こうして身近な人に使ってもらえるサービスを作り、直接的に役に立てることは、また違った喜びを感じられるなと実感しました。

プログラミングを勉強してから、めちゃくちゃ忙しくなったけど、
感じることが多くて、本当充実しているなぁと思うばかりです。

もっともっとスキルアップして、自分のためにも、周りの人達のためにも、アウトプットを続けていくぞ～～～～！

最後までお付き合いいただき、ありがとうございます！

###(*^^)v「よろしければLGTMもよろしくお願いします！」