2016年10月25日火曜日

ChatWorkとGmailの連携。非FileMakerネタです。


ChatWorkにメッセージが投稿されると [To:*****] ○○さん 宛にメールを送信します。
送信元のGmailに返信するとChatWorkにメールの内容が投稿されます。

コミュニケーションツールは、ChatWork をメインに使っていますが、営業の社用携帯がガラケーなので、いちいちメール送るのが面倒!!!!!
なのでガラケーとの連絡もChatWork ですませてしましまいます。
イチイチメールソフト起動してメールアドレス選んで....とうっとうしい作業をしなくて良くなります。

ChatWorkメッセージの最初が [To:*****] で始まっていれば、メールを送信します。
なので、メール送受信用のルームでも[To:*****] で始まっていないメッセージなら通常通り使用できます。

「var Members =」にメールを送信したい人の「ChatWork ID」と「メールアドレス」を記述する必要があります。


以下のコードをGoogle Apps Scriptに記述。

「プロジェクトのトリガー」で「fire」を1分ごとに設定。





var CW_TOKEN = '********************'; //チャットワークAPIトークン
var ROOM_ID = '**********'; //チャットワークルームID



//{チャットワークID:メールアドレス}
var Members = {
   "264000" : "aaa@aaa.ne.jp"
,  "264000" : "bbb@bbb.ne.jp"
,  "263000" : "ccc@ccc.ne.jp"
,  "263000" : "ddd@ddd.ne.jp"
,  "264000" : "eee@eee.ne.jp"
,  "264000" : "fff@fff.ne.jp"
,  "271000" : "ggg@ggg.ne.jp"
}

function fire(){
  fetchContactMail();
  SendMailFromChatWork();
}



function fetchContactMail() {

  /* Gmailから特定条件のスレッドを検索しメールを取り出す */
  var strTerms = '(is:unread -from:cwmail "[cwmail]")';
  var thds = GmailApp.search(strTerms, 0, 500); //条件にマッチしたスレッドを取得、最大500通と決まっている
  //var thds = GmailApp.getMessagesForThreads(myThreads); //スレッドからメールを取得する →二次元配列で格納

    var row = 1;
    for(var n in thds){
        var thd = thds[n];
        var msgs = thd.getMessages();
        for(m in msgs){
            var msg = msgs[m];
            var from = msg.getFrom();
            var to = msg.getTo();
            var date = msg.getDate();
            var subject = msg.getSubject();
            var body = msg.getBody();
          var PlainBody = msg.getPlainBody().slice(0,200);

          Logger.log(subject+from);
       
       
              msg.markRead(); //メッセージを既読にする

          if ( from.match(/cwmail/)) {
          }else{
    /* メッセージを生成しチャットワークにを送る */
    var msgBody = "[hr]" + "\n" +
               "date:" + date + "\n" +
               "from:" + from + "\n" +
               subject +"\n" +
               PlainBody ;

    sendMessage(msgBody);
          }
       
            row++;
       
        }
    }

}



/*ROOM_IDのメッセージを読み込みメールを送信*/
function SendMailFromChatWork() {
    var params = {
    headers : {"X-ChatWorkToken" : CW_TOKEN },
    method : "get"
  };

  var url = "https://api.chatwork.com/v1/rooms/" + ROOM_ID + "/messages?force=0"; //指定のグループチャットからメッセージを取得
  var strRespons = UrlFetchApp.fetch(url, params); //チャットワークAPIエンドポイントからレスポンスを取得
try{
  var json = JSON.parse(strRespons.getContentText()); //文字列をJSON形式として解析しJSONオブジェクトとして返す
  }catch(e){
  return;
    }
  Utilities.sleep(500);
  //Logger.log(json);
  var sent_number = 0;//メール送信数
  /*
  for each(var obj in json){
  Logger.log(obj.body);
  }
  */
  for(var i=0;i// 処理
    var body =json[i].body + "\n\n" +
      json[i].account.name;

  /*宛先メールアドレス*/
  var myRegexp = /^\[To:(.*?)\]+/i;
  var match = myRegexp.exec(body);
    Logger.log(match);
  var ToCwID = match[1];
  var EmailTo=Members[ToCwID];
     //Logger.log(EmailTo);
    if(EmailTo){
      /*2行目をSubjectに設定*/
      var textArray = body.split(/\r\n|\r|\n/);
      var Subject = textArray[1];
      Subject += "[cwmail]";
   
      var EmailCc=Members[json[i].account.account_id];
      Logger.log(EmailCc);
      GmailApp.sendEmail(EmailTo,
                     Subject,
                     body,
                     {
                       /*
                       attachments: [file.getAs(MimeType.PDF)],
                       bcc: 'abc@g.com',
                     
                       from: 'abc@g.com',
                       */
                       cc: EmailCc,
                       name: 'cwmail'
                     });
      sent_number+=1;
      Utilities.sleep(500);
    }
  }//for(var.....
  if(sent_number>0){
  var notification="[info]メール送信済:"+sent_number+"[/info]";
  sendMessage(notification);
  }
}

/* 本文を受け取りメッセージを送る */
function sendMessage(body){
       var params = {
               headers : {"X-ChatWorkToken" : CW_TOKEN},
               method : "post",
               payload : {
                    body : body
               }
        };

     var url = "https://api.chatwork.com/v1/rooms/" + ROOM_ID + "/messages";
     UrlFetchApp.fetch(url, params);
  Utilities.sleep(500);
}


※いろんなサイトを参考にさせていただきました。ちゃんと記録していなかったので、参照元の表記ができません.....。コードは、コピペな部分が多々あります。

0 件のコメント:

コメントを投稿