slack에게 TwitterDM이 왔음을 알리는 도구를 무료로 만들었습니다.

어떤 것을 만들었습니까?





slack에서 지정한 채널에 DM이 왔을 때 알림을 보내는 slack 앱을 만들었습니다.

작성한 경위


  • 그룹간에 공유하는 트위터 계정이 있었지만, DM의 대응 등이 지연되기 쉽다
  • slack을 채팅 도구로 주로 사용하고 있기 때문에 통지 할 수 있으면 좋다는 이야기에

  • 공식적으로 제공되는 것 그렇다면 타임 라인이나 트윗은 할 수있는 것 같지만 DM 조작까지는 할 수 없었습니다.
  • 전송 메일이라면 특정 채널로 보낼 수 없습니다
  • 메일 전송을 터치하여 열어야했습니다.

  • 특정 채널에 이메일을 알릴 수 있는 앱은 유료 작업 공간 만 사용할 수 있었기 때문에

  • 작성에 사용한 것


  • 트위터 메일 설정
  • DM 알림을 수신하도록 설정

  • gmail 필터 만들기
  • DM의 통지 메일에 label를 붙이기 위해
  • 참고: gmail - 필터 만들기

  • GAS
  • label이 붙어 있고 ☆를 붙이지 않은 경우, slack에게 통지하고 ☆를 붙이는 프로그램의 작성
  • 트위터의 DM 통지 메일이 HTML 형식으로되어 있기 때문에 정규 표현식을 사용하여 원하는 정보를 추출합니다.
  • 참고: GAS-Class GmailMessage

  • slack incoming webhooks
  • 이것을 사용하여 특정 채널에 통지하기
  • 참고: Slack의 Incoming Webhooks를 쓰러뜨리다


  • 소스 코드



    main.gs
    function fetchContactMail() {
    
      /* Gmailから特定条件のスレッドを検索しメールを取り出す */
      var strTerms = 'label:twitterdm';
      var myThreads = GmailApp.search(strTerms, 0, 10); //条件にマッチしたスレッドを取得
      var myMsgs = GmailApp.getMessagesForThreads(myThreads); //スレッドからメールを取得する →二次元配列で格納  var valMsgs = [];
    
      var br = /[\r\n]+/g; //改行
      var rep = ""; //置換文字列
      /* 各メールから日時、送信元、件名、内容を取り出す*/
      for(var j =0;j<myMsgs.length;j++){
      for(var i =0;i<myMsgs[j].length;i++){
        if(!myMsgs[j][i].isStarred()){
          valMsgs[i] = myMsgs[j][i].getBody().replace(br,""); //html形式の取得と空白削除
          var myRegexp = /<td class=\"preheader\" style=\"padding:0;margin:0;line-height:1px;font-size:1px;font-size:1px;color:#ffffff;\">([\s\S]*?)<d><\/d><\/td>/;
          //↑tdタグで囲われた場所を抽出するための正規表現。gmailだとstyleで書かれるため大変汚い。
          var text = valMsgs[i].match(myRegexp);// matchを用いると0に素のテキスト1に抽出したテキストが入る 
          var date = myMsgs[j][i].getDate();
          var formatD = Utilities.formatDate(date, "Asia/Tokyo", "yyyy-MM-dd HH:mm"); //見やすいようにフォーマットをかける
          myMsgs[j][i].star();// starをつけることで次回以降引っかからないように
          notice_slack(text[1],formatD);
          }
        }
      }
    }
    
    // slackへの通知
    var postUrl = 'web hook URL';
    var username = 'twitterDM';  // 通知時に表示されるユーザー名
    var icon = ':bird:';  // 通知時に表示されるアイコン
    var message = 'test';  // 投稿メッセージ
    
    function notice_slack(text,date) {
      var jsonData =
      {
         "username" : username,
         "icon_emoji": icon,
         "attachments":[
          {
             "fallback":"fallback Test",
             "pretext":"DMが届きました\n"+date,
             "color":"#4169e1",
             "fields":[
                {
                   "value":text
                }
             ]
          }
       ]
      };
      var payload = JSON.stringify(jsonData);
    
      var options =
      {
        "method" : "post",
        "contentType" : "application/json",
        "payload" : payload
      };
    
      UrlFetchApp.fetch(postUrl, options);
    }
    

    결론



    무료로 동등한 것을 만들 수 있었다. GAS는 역시 강하다.
    텍스트 형식에서도 제대로 볼 수 있는 메일 내용이라고 더욱 고맙다.

    좋은 웹페이지 즐겨찾기