kame_san
@kame_san (h km)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

スプレッドシートの特定セルを参照し、Slackにメンションする方法

解決したいこと

初心者のため、初歩の初歩な質問で大変恐縮です。
スプレッドシート内の表のステータスが更新された際、
指定されたSlackチャンネルの、更新された行の担当者宛にメンションが行くように設定をしたいのですが、
『担当者宛にメンション』に苦戦しております。

用途はタスク依頼シートでして、作業者がステータスを変更するたびに担当者が知ることの出来る仕組みがほしいです。
担当者の名前列の横に、各担当者のSlack IDを記載しております。

変更があった行のSlack ID列を参照し、メンションする方法を教えていただけますと幸いです。

GASを理解しておらず、色々とググってみたのですが微妙に状況が違うと混乱してしまい解決できずにおります。

スプレッドシートのD列に担当者名、E列に担当者のSlack ID(vlookup)、F列にステータス選択があります。

キャプチャ.JPG

拙い内容で申し訳ございません。
お力添えをいただけますと幸いです。

現在のソースコード

メンションなしで、指定チャンネルに通知までは問題なく動いております。

function myFunction2() { 
  var activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet(); // スプレッドシート
  var activeSheet = activeSpreadsheet.getActiveSheet(); // アクティブシート
  if(activeSheet.getName() != "依頼シート"){
    return;
  }
  var activeCell = activeSheet.getActiveCell(); // アクティブセル

  if(activeCell.getColumn() == 6 && activeCell.getValues() == "2:作業完了"){ 
    var newInputRow = activeCell.getRow();
    var taskNo = activeSheet.getRange(activeCell.getRow(), 1).getValues();
    // 送信するSlackのテキスト
    var slackText = "〇〇が「依頼シート」の No." + taskNo + " のタスクを完了しました\n" +
    "https://docs.google.com/spreadsheets/d/1xxxxxxxxxxxxxxxxxxxxx/edit#gid=0&range=C" + newInputRow;
    sendSlack(slackText);
  }
}

function sendSlack2(slackText){
  // Step1で取得したWebhook URLを設定
  var webHookUrl = "https://hooks.slack.com/services/xxxxxxxxxxxxxxxxxxxxx";

  var jsonData =
      {
        "channel": "hogehoge",   // 通知したいチャンネル 
        'icon_url' : "https://xxxxxxxxxxxxxxxxxxxxx",
        "text" : slackText,
        "link_names" : 1,
        "username" : "hogehoge"
      };

  var payload = JSON.stringify(jsonData);

  var options =
      {
        "method" : "post",
        "contentType" : "application/json",
        "payload" : payload,
      };

  // リクエスト
  UrlFetchApp.fetch(webHookUrl, options);
}


0

1Answer

うーん、チャンネル指定はせずにアカウントに直接送るのはできるのでしょうか
なんらかのチャンネルのメッセージとして @ユーザー でするのが良いかと思います。
ご自身も、送信できてるか本人に聞かずともチェックができて良いかと思います。

    var taskNo = activeSheet.getRange(activeCell.getRow(), 1).getValues();
+   var userName = activeSheet.getRange(activeCell.getRow(), 2).getValues();
+   var userId = activeSheet.getRange(activeCell.getRow(), 3).getValues();
    // 送信するSlackのテキスト
+   var slackText = "@" + userId + " " + userName + " さん";
    slackText += "〇〇が「依頼シート」の No." + taskNo + " のタスクを完了しました\n" +
    "https://docs.google.com/spreadsheets/d/1xxxxxxxxxxxxxxxxxxxxx/edit#gid=0&range=C" + newInputRow;
    sendSlack(slackText);
0Like

Comments

  1. @kame_san

    Questioner

    お忙しい中閲覧、コメントありがとうございます!
    >、チャンネル指定はせずにアカウントに直接送る
    こちらで試したところ、文章には反映されたのですがメンションとしては機能せずでした・・・
    初心者すぎて申し訳ないです・・・

Your answer might help someone💌