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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

Slack

Slackは、Tiny Speckという企業からリリースされたコミュニケーションツールです。GoogleDriveやGitHubなど、さまざまな外部サービスと連携することができます。

Q&A

1回答

4573閲覧

Googleフォームに入力した内容をSlackに反映したい

neko_prevent

総合スコア4

Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

Slack

Slackは、Tiny Speckという企業からリリースされたコミュニケーションツールです。GoogleDriveやGitHubなど、さまざまな外部サービスと連携することができます。

1グッド

2クリップ

投稿2019/11/19 15:05

編集2022/01/12 10:55

前提・実現したいこと

Googleフォームからslackに通知できるよう設定しようとしています
Googleフォームとslackは連携出来ているようですが、フォームに入力した内容が反映出来ません。

発生している問題・エラーメッセージ

通知を飛ばしたいチャンネルには「心理検査が予約されました」のみ通知されます。

イメージ説明

該当のソースコード

GAS

1function sendToSlack(fallback, fields, channel) { 2 const url = "https://hooks.slack.com/services/*****/*****1/********" 3 const data = { 4 "channel" : channel, 5 "username" : "ネコちゃん", // 1: bot 名 6 "attachments" : [{ 7 "fallback" : fallback, 8 "text" : "心理検査が予約されました", 9 "fields": fields, 10 "color": "good", // 3: 左線の色 11 }], 12 "icon_emoji" : "https://*****.slack.com/services/*****1" // 2: アイコン画像 13 }; 14 const payload = JSON.stringify(data); 15 const options = { 16 "method" : "POST", 17 "contentType" : "application/json", 18 "payload" : payload, 19 "muteHttpExceptions": true, 20 }; 21 const response = UrlFetchApp.fetch(url, options); 22 Logger.log(response) 23} 24 25function test() { 26 sendToSlack("テスト通知確認です", [], "#16-会議メンバー共有事項"); 27} 28 29function responseToText(itemResponse) { 30 switch (itemResponse.getItem().getType()) { 31 case FormApp.ItemType.CHECKBOX: 32 return itemResponse.getResponse().join("\n"); 33 break; 34 case FormApp.ItemType.GRID: 35 const gridResponses = itemResponse.getResponse(); 36 return itemResponse.getItem().asGridItem().getRows().map(function(rowName, index) { 37 Logger.log(rowName); 38 return rowName + ": " + gridResponses[index]; 39 }).join("\n"); 40 break; 41 case FormApp.ItemType.CHECKBOX_GRID: 42 const checkboxGridResponses = itemResponse.getResponse() 43 return itemResponse.getItem().asCheckboxGridItem().getRows().map(function(rowName, index) { 44 Logger.log(rowName); 45 return rowName + ": " + checkboxGridResponses[index]; 46 }).join("\n"); 47 break; 48 default: 49 return itemResponse.getResponse(); 50 } 51} 52 53function onFormSubmit(e){ 54 var body = "Slack通知テストフォームが来たよ!\n"; 55 var applicant = ""; 56 var itemResponse = e.response.getItemResponses(); 57 58 for (var j = 0; j < itemResponse.length; j++){ 59 var formData = itemResponse[j]; 60 var title = formData.getItem().getTitle(); 61 var response = formData.getResponse(); 62 63 switch (title) { 64 case "被験者ID": 65 id = response; 66 break; 67 case "予約日": 68 date = response; 69 break; 70 case "曜日": 71 content = response; 72 break; 73 case "検査名": 74 content = response; 75 break; 76 case "備考1": 77 content = response; 78 break; 79 case "備考2": 80 content = response; 81 break; 82 default: 83 break; 84 } 85 } 86 var bodyPublic = body + "被験者ID:" + id + "\n予約日:" + date + "\n曜日:" + content + "\n検査名:" + content + "\n備考1:" + content + "\n備考2:" + content  ; 87 sendToSlack(bodyPublic, "#16-会議メンバー共有事項"); 88} 89 90 91

修正したところ、Googleフォーム送信時に内容が連携されましたが、response内容が誤って反映されます

function sendToSlack(body, channel) { var url = "https://hooks.slack.com/services/●●●●●"; var data = { "channel" : channel, "username" : "ネコちゃん", "text" : body, "icon_emoji" : ":date: " }; var payload = JSON.stringify(data); var options = { "method" : "POST", "contentType" : "application/json", "payload" : payload }; var response = UrlFetchApp.fetch(url, options); } function test() { sendToSlack("テスト通知確認です", "#16-会議メンバー共有事項"); } function onFormSubmit(e){ var body = "<! @●●● >心理検査が予約されました!\n"; var applicant = ""; var itemResponse = e.response.getItemResponses(); for (var j = 0; j < itemResponse.length; j++){ var formData = itemResponse[j]; var title = formData.getItem().getTitle(); var response = formData.getResponse(); switch (title) { case "被験者ID": date = response; break; case "予約日": name = response; break; case "曜日": language = response; break; case "検査名": language = response; break; case "備考1": language = response; break; case "備考2": language = response; break; default: break; } } var bodyPublic = body + "被験者ID:" + date + "\n予約日:" + name + "\n曜日:" + language + "\n検査名:" + language + "\n備考1:" + language + "\n備考2:" + language ; sendToSlack(bodyPublic, "#16-会議メンバー共有事項"); }

### ”●●● = response” の●●●部分を修正したら反映出来ました

switch (title) { case "被験者ID": date = response; break; case "予約日": name = response; break; case "曜日": language = response; break; case "検査名": kensamei = response; break; case "備考1": bikou1 = response; break; case "備考2": bikou2 = response; break; default: break; } } var bodyPublic = body + "被験者ID:" + date + "\n予約日:" + name + "\n曜日:" + language + "\n検査名:" + kensamei + "\n備考1:" + bikou1 + "\n備考2:" + bikou2 ; sendToSlack(bodyPublic, "#16-会議メンバー共有事項"); }
Naoki.Y👍を押しています

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

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

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

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

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

guest

回答1

0

回答としてはちょっとずれているとは思いますが渡しの場合はIFTTTやZapeirを使って

Google フォーム→スプレッドシート→Slack

というフローで通知を行っていますよ。

投稿2020/03/20 04:53

bassmyryo

総合スコア13

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

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

neko_prevent

2020/03/20 07:11

ありがとうございます。IFTTT,Zapeirを勉強してみます。
bassmyryo

2020/03/20 07:41

iftttだと新しい行が追加されたら通知をするというものがあるのでそれをSlackにつなげればOKです。 iftttのほうが操作は簡単なのでおすすめです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問