80651


### 今回実装したいもの

slackである人がメッセージを送ったり、自分が投稿するたびに投稿した時間と内容をスプレッドシートに書き出していきたい

### 今回悩んでいること・お聞きしたいこと

以下のリンクを参考に(というか必要箇所以外写しました)GASを実行したところ、自分の勤怠報告?がループしてしまいます。for文などを使用していないのに処理が止まらない理由が分からないこと

上記のものを実装するために必要なコードは以下のもので足りるのか。

まだまだ未熟で質問すら下手で申し訳ありませんが、お力添えいただけますと恐縮です。どうぞ宜しくお願い致します。

参考にしたリンク：  
[【GASで作るslack
bot】スプレッドシートと連携してシフト管理botを作る（予定の入力と確認通知）](https://qiita.com/tacos_salad/items/9fe997a34cebc8fcef39)

以下コードです。

[code]

    function doPost(e) {
    /*   //test（Slackからjson形式で以下のようにデータが送られてくる（一部分）。GAS上で実行テストを行う際にはこの部分のコメントアウトを外して実行してください。）
      e = {
        parameter : {
          user_name : "hoge_hoge",
          text : "att_entry yes 23:45",
        }
      }
    */
      var data = e.parameter.text // textを取得
      var username = e.parameter.user_name // user_nameを取得
      data = username + ' ' + data // dataの結合（[user_name] [yes or no] [time]）
      data = data.split(' ') // dataをスペース区切りで分割
      recordData(data);
    }
    
    // botからSlackへの投稿
    function postSlack(text){
      var url = "自分のwebhookのURL";
      var options = {
        "method" : "POST",
        "headers": {"Content-type": "application/json"},
        "payload" : '{"text":"' + text + '"}'
      };
      UrlFetchApp.fetch(url, options);
    }
    
    // Spreadsheetへの入力
    function recordData (data) {
      var spreadsheet = SpreadsheetApp.openById('自分のスプシID');
      var recordsheet = spreadsheet.getSheetByName('シート1');  
      var lastrow = recordsheet.getLastRow();
      var recordrow = lastrow + 1;
      var date = new Date();
      var formatdate = Utilities.formatDate(date, 'Asia/Tokyo', 'yyyy/MM/dd HH:mm:ss');
    
      // セルを指定してdataを入力
      recordsheet.getRange("A" + recordrow).setValue(formatdate);
      recordsheet.getRange("B" + recordrow).setValue(data[0]);
      recordsheet.getRange("C" + recordrow).setValue(data[1]);
      recordsheet.getRange("D" + recordrow).setValue(data[2]);
      recordsheet.getRange("E" + recordrow).setValue(data[3]);
    
      // 入力完了をSlackへ通知
      postSlack(data[0] + "さんの勤務予定を入力しました\n" + "勤務予定時間：" + data[3]);
    }
    
[/code]


CC BY-SA 4.0
2021-08-04T12:51:17.683
80597
2021-08-07T04:21:58.840
2021-08-04T16:45:04.977
3060
43647
question
javascript google-apps-script
Slackでメッセージが届くたびにスプレッドシートに書き出していく


そもそも上記のものはIncomingWebhookを使っているものなので、  
Outgoing Webhookを使用することで解決しました。  
以下のようにスプレッドシート取得と、トークンを記述し、入力をしていくことができるようです！

[code]

    function doPost(e) {
      const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(ここにシート名);
      const token = トークン
    }
    
[/code]


CC BY-SA 4.0
2021-08-07T04:21:58.840
80651
2021-08-07T04:21:58.840
43647
80597
answer