LoginSignup

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

TwitterのDMをSlackにBotとして通知させたいです。

解決したいこと

TwitterのDMをSlackにBotとして通知させたいです。

初投稿です。足りない説明などございましたらお伝えください。

会社で使っているTwitterに送られてくるDMを、Gメール経由でSlackの希望のチャンネルに通達させたいです。

var FindSubject = 'label:twitterdm ';

function fetchContactMail() {

  /* Gmailから特定条件のスレッドを検索しメールを取り出す */
  
  var myThreads = GmailApp.search(FindSubject); //条件にマッチしたスレッドを取得
  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 = 'https://hooks.slack.com/services/XXXXXXXXXXXXXX';// 会社Slackチャンネルの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);
}

発生している問題

スクリーンショット 2022-04-29 3.38.49.png

エラー文は吐かないですが、個人のアカウントで会社のアカウントへDMしてみたところ、画像のように「undefined」と表示されてしまいます。

おそらくGメールを取得できていないのかな?と個人的に思いました。

自分で試したこと

こちらの記事を参考にGASに書き込みました。
非エンジニアですが用語などは調べますのでご指導ご鞭撻のほどよろしくお願いします。。

0

1Answer

GASでは実行する関数を選択する必要があります。
fetchContactMail をターゲットに選択して実行してみてください。

0

Your answer might help someone💌