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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Google Apps Script

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

Google

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

ChatWork

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

Q&A

解決済

1回答

2247閲覧

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

退会済みユーザー

退会済みユーザー

総合スコア0

Google Apps Script

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

Google

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

ChatWork

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

0グッド

0クリップ

投稿2019/01/31 07:53

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

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

chatwork

1var CHATWORK_APIKEY = "hoge"; 2var CHATWORK_APIURL = "hoge"; 3var CHATWORK_ROOM_ID = hoge; 4 5function chatwork_doSend(title, body, roomId) { 6 FormApp.getActiveForm(); 7 var text = Format.chatworkText(title, body); 8 Chatwork.messageToRoom(roomId, text); 9} 10 11var Format = { 12 chatworkText: function(title, body) { 13 var text = ""; 14 text += "[info][title]" + title + "[/title]" + body + "[/info]"; 15 return text; 16 } 17 } 18 19var Chatwork = { 20 post: function(apiPath, payload){ 21 var url = CHATWORK_APIURL + apiPath; 22 var options = { 23 headers: { 24 "X-ChatWorkToken": CHATWORK_APIKEY 25 }, 26 'method': 'POST', 27 'payload': payload 28 } 29 try { 30 var response = UrlFetchApp.fetch(url, options); 31 return JSON.parse(response); 32 } catch(error) { 33 Logger.log(error); 34 return; 35 } 36 }, 37 messageToRoom: function(roomId, message) { 38 var apiPath = "/rooms/" + roomId + "/messages"; 39 var payload = { 40 body: message 41 } 42 this.post(apiPath, payload); 43 } 44}

google

1var googleForm = { 2 getName: function(e) { 3 var value = e.namedValues["名前"][0]; 4 return value; 5 }, 6 getDate: function(e) { 7 var value = e.namedValues["日付"][0]; 8 return value; 9 }, 10 getEat: function(e) { 11 var value = e.namedValues["食べたいもの"][0]; 12 return value; 13 } 14}

notification

1function notification_formToChatwork(e) { 2 notification.apply(e); 3} 4var notification = { 5 apply: function(e) { 6 var title = "食べたいものは何ですか!"; 7 var body = notification.createResult(e); 8 var roomId = CHATWORK_ROOM_ID; 9 chatwork_doSend(title, body, roomId); 10 }, 11 createResult: function(e) { 12 var result = ""; 13 var name = googleForm.getName(e); 14 var date = googleForm.getDate(e); 15 var eat = googleForm.getEat(e); 16 result += "【名前】\n"; 17 result += name + "\n"; 18 result += "\n"; 19 result += "【日付】\n"; 20 result += date + "\n"; 21 result += "\n"; 22 result += "【食べたいもの】\n"; 23 result += eat + "\n"; 24 result += "\n"; 25 return result; 26 } 27}

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

papinianus

2019/01/31 07:59 編集

> トリガーはchatwork_doSendです form送信時のトリガーの話ですよね?であれば、トリガーは"notification_formToChatwork"にしないとダメだと思うのですが。 > chatwork_doSendまで値が渡されている title, body, roomIdが、取れているという意味でよいですか? 念の為ですが、同じスクリプトエディタで、以前のコードをバックアップする目的などで「○○.gs」をコピーしていたりしませんか?
退会済みユーザー

退会済みユーザー

2019/01/31 08:14 編集

>form送信時のトリガーの話ですよね?であれば、トリガーは"notification_formToChatwork"にしないとダメだと思うのですが。 トリガーを変更したら、TypeError: undefined からプロパティ「名前」を読み取れません。(行 3、ファイル「googleForm」)とエラーがでました、、googleFormのファイルに不備があるのでしょうか。。
退会済みユーザー

退会済みユーザー

2019/01/31 08:09

> 念の為ですが、同じスクリプトエディタで、以前のコードをバックアップする目的などで「○○.gs」をコピーしていたりしませんか? バックアップする目的でコピーはしていないです!
papinianus

2019/01/31 08:19

> トリガーを変更したら、TypeError: undefined からプロパティ「名前」を読み取れません。(行 3、ファイル「googleForm」)とエラーがでました これはなかなかですね。 まず、「関数の実行」で検証することはできませんが、formを送ってみましたか?そのエラーはどうやって確認しましたか? 次に、このスクリプトはどこに書いていますか?スクリプトエディタは、Formの右上の…を縦にしたものから開きましたか?それともスプレッドシートのツールから開きましたか?どちらですか?このスクリプトはスプレッドシートから開いた画面で書かれることを想定しているように拝見しますがいかがでしょう。
退会済みユーザー

退会済みユーザー

2019/01/31 08:22

このエラーはフォームを送った際に、私のメールに自動で届いたものです!(トリガーでそのような設定している) >次に、このスクリプトはどこに書いていますか?スクリプトエディタは、Formの右上の…を縦にしたものから開きましたか?それともスプレッドシートのツールから開きましたか?どちらですか?このスクリプトはスプレッドシートから開いた画面で書かれることを想定しているように拝見しますがいかがでしょう。 ...を縦にした方から開きました!スプレッドシートから開いた方のスクリプトエディタに書かなければいけないのですね、、
papinianus

2019/01/31 08:25

ちょっとまって!補足するから! e.namedValuesはsheet側でとったときの値。でもdoSendでActiveFormしてるから、逆にシートにこれを移植すると、別のエラーがおきちゃう。今のままで直せる案出すんでちょいまって
退会済みユーザー

退会済みユーザー

2019/01/31 08:31

すいません(。•▿•。) ご丁寧にありがとうございます!
退会済みユーザー

退会済みユーザー

2019/01/31 08:33

あ。。。 スプレッドシートの方から、コード書いたら、通知行きました。。。。
papinianus

2019/01/31 08:38 編集

まぢで。じゃあそれで。 formのほうから回答が取れない謎現象に嵌ってるので。 自己解決しといてくださいな
退会済みユーザー

退会済みユーザー

2019/01/31 08:40

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

退会済みユーザー

2019/02/02 06:36

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

回答1

0

ベストアンサー

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

javascript

1var googleForm = { 2 items : function(e, name) { 3 var itemResponses = e.response.getItemResponses(); 4 for (var j = 0; j < itemResponses.length; j++) { 5 var itemResponse = itemResponses[j]; 6 if(itemResponse.getItem().getTitle() != name) {continue;} 7 return itemResponse.getResponse(); 8 } 9 return ""; 10 }, 11 getName: function(e) { 12 var value = this.items(e, "名前"); 13 return value; 14 }, 15 getDate: function(e) { 16 var value = this.items(e, "日付"); 17 return value; 18 }, 19 getEat: function(e) { 20 var value = this.items(e, "食べたいもの"); 21 return value; 22 } 23}

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

--

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

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

javascript

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

投稿2019/01/31 08:03

編集2019/01/31 09:02
papinianus

総合スコア12705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/01/31 08:06

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

退会済みユーザー

2019/01/31 08:18

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

2019/01/31 08:20

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

2019/01/31 09:02

ベストになったんで解決ほうほうをまとめました
退会済みユーザー

退会済みユーザー

2019/02/02 06:36

ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問