質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.51%

  • Google Apps Script

    1259questions

    Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

  • Google

    822questions

    Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

  • ChatWork

    32questions

    業務の効率化を目的としたコミュニケーションツール。 グループチャット、ビデオ・音声通話、ファイル共有、タスク管理などの機能を備えています。マルチデバイス対応で、ブラウザだけでなくタブレットやスマートフォンでも利用可能です。

googleFormの回答結果をchatworkに通知したい

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 197
退会済みユーザー

退会済みユーザー

gooleFormで回答した結果(食べたいものアンケートを作っています)をchatworkに通知したいです。
ログ出力でchatwork_doSendまで値が渡されていることはわかっています。

(トリガーはchatwork_doSendです)
(formの権限は承認しています。)

var CHATWORK_APIKEY = "hoge";
var CHATWORK_APIURL = "hoge";
var CHATWORK_ROOM_ID = hoge;

function chatwork_doSend(title, body, roomId) {
  FormApp.getActiveForm();
  var text = Format.chatworkText(title, body);
  Chatwork.messageToRoom(roomId, text);
}

var Format = {
  chatworkText: function(title, body) {
    var text = "";
    text += "[info][title]" + title + "[/title]" + body + "[/info]";
    return text;
  }
 }

var Chatwork = {
  post: function(apiPath, payload){
    var url = CHATWORK_APIURL + apiPath;
    var options = {
      headers: {
        "X-ChatWorkToken": CHATWORK_APIKEY
      },
      'method': 'POST',
      'payload': payload
    }
    try {
      var response = UrlFetchApp.fetch(url, options);
      return JSON.parse(response);
    } catch(error) {
      Logger.log(error);
      return;
    }
  },
  messageToRoom: function(roomId, message) {
    var apiPath = "/rooms/" + roomId + "/messages";
    var payload = {
      body: message
    }
    this.post(apiPath, payload);
  }
}
var googleForm = {
  getName: function(e) {
    var value = e.namedValues["名前"][0];
    return value;
  },
  getDate: function(e) {
    var value = e.namedValues["日付"][0];
    return value;
  },
  getEat: function(e) {
    var value = e.namedValues["食べたいもの"][0];
    return value;
  }
}
function notification_formToChatwork(e) {
    notification.apply(e);
}
var notification = {
  apply: function(e) {
    var title = "食べたいものは何ですか!";
    var body = notification.createResult(e);
    var roomId = CHATWORK_ROOM_ID;
    chatwork_doSend(title, body, roomId);
  },
  createResult: function(e) {
    var result = "";
    var name = googleForm.getName(e);
    var date = googleForm.getDate(e);
    var eat = googleForm.getEat(e);
    result += "【名前】\n";
    result += name + "\n";
    result += "\n";
    result += "【日付】\n";
    result += date + "\n";
    result += "\n";
    result += "【食べたいもの】\n";
    result += eat + "\n";
    result += "\n";
    return result;
   }
}

なぜ、通知が行かないのかわかりません。わかる方いらっしゃいましたら、ご回答お願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • 退会済みユーザー

    退会済みユーザー

    2019/01/31 17:40

    ありがとうございます!
    formの方から値が取れる、書き方もあるのですね、、
    奥が深いですね。。

    キャンセル

  • macaron_xxx

    2019/01/31 17:58 編集

    namedValuesで取得するのはSheet側のForm Submit
    responseで取得するのはForm側のForm Submit
    ですね。
    https://developers.google.com/apps-script/guides/triggers/events

    キャンセル

  • 退会済みユーザー

    退会済みユーザー

    2019/02/02 15:36

    なるほどです。。。勉強になります。

    キャンセル

回答 1

checkベストアンサー

0

解決までの道程
・トリガが違ってた
・スクリプトをスプレッドシートにかかなきゃいけなかった
(namedValuesはシートにきたときに取得できる値)
・googleっていうファイルを↓こうすればFormのほうに書いてもできた

var googleForm = {
  items : function(e, name) {
    var itemResponses = e.response.getItemResponses();
    for (var j = 0; j < itemResponses.length; j++) {
      var itemResponse = itemResponses[j];
      if(itemResponse.getItem().getTitle() != name) {continue;}
      return itemResponse.getResponse();
    }
    return "";
  },
  getName: function(e) {
    var value = this.items(e, "名前");
    return value;
  },
  getDate: function(e) {
    var value = this.items(e, "日付");
    return value;
  },
  getEat: function(e) {
    var value = this.items(e, "食べたいもの");
    return value;
  }
}


※やっつけ感あるコードなんでまねしないでね。

--

回答ではないのですが、コードをかくのでこちらに。

↓これを追加して、関数の実行から試したら、通知はされますよね?

function test_doSend() {
  chatwork_doSend("test_title", "testbody", CHATWORK_ROOM_ID);
}

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/01/31 17:06

    ご回答ありがとうございます!
    こちらの関数を実行したら通知は行きました!

    キャンセル

  • 2019/01/31 17:18

    notificationファイルがおかしいのでしょうか、、

    キャンセル

  • 2019/01/31 17:20

    実行方法と書く場所の問題かと思います。質疑に追記しました。
    これで少なくともchatworkファイル(つまり全体の1/3)には瑕疵がないことが確定しました。かなり前進しました。

    キャンセル

  • 2019/01/31 18:02

    ベストになったんで解決ほうほうをまとめました

    キャンセル

  • 2019/02/02 15:36

    ありがとうございます!

    キャンセル

同じタグがついた質問を見る

  • Google Apps Script

    1259questions

    Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

  • Google

    822questions

    Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

  • ChatWork

    32questions

    業務の効率化を目的としたコミュニケーションツール。 グループチャット、ビデオ・音声通話、ファイル共有、タスク管理などの機能を備えています。マルチデバイス対応で、ブラウザだけでなくタブレットやスマートフォンでも利用可能です。