googleフォームに回答が来たら内容込みでメール通知して、必要な部分だけ自動で紙に印刷する方法
このページはあくまで方法の伝達のみを目的としています
方法を実行して仮に損害が発生したとしても補償はできません
無理やりやり方を考えましたが、powerautomateとかでやる方法もあるかもしれません
タイトルについて、ピンポイントの情報があまりなくて調べました
飲食店のオンライン経由のテイクアウト注文管理とかに便利かもと思って考えました
飲食店において、テイクアウト注文をネット経由で受けるとして、
問題点① 業者のサービスを契約すると手数料とか月額料金を取られる
ので、googleフォームなどの無料or安いサービスがいい
問題点② 注文をパソコン画面を見る必要があると、現場の人数が少ない場合にそれが負担
ので、注文が入ると紙が自動で出力されると運用しやすい
というのがあると思います
この2つの要件を満たす方法として手順を考えました
私は実際のビジネス運用で使用したわけではありませんので、環境に合わせて適宜調整お願いします
方法はこれだけではないと思いますが、通常のビジネス環境において、追加費用の少なめな方法ではないかと思います
バッドノウハウの塊みたいな方法で恐縮です
必要なもの
googleアカウント
googleフォーム(とGAS)
MS Outlook
稼働しているPC
稼働しているプリンター
ポイントは2つです
googleフォームに回答があったら、GASを使って自動的に回答内容を含んだ通知メールが届くようにする
その届いたメールを、MS Outlookの「仕分けルール」を使って自動的に印刷する
通知メールに関して説明します
まず、googleフォームを作成します
googleフォームを以下のリンク先に沿って設定します
以下の設定をする理由は、googleフォームにはデフォルトで回答が発生した場合に通知をする機能がありますが、内容はメールに載ってないためです。内容をメールに載せるための手順です。
【GAS】Googleフォームに入力があったら内容をメールで送信するぞ
https://www.pnkts.net/2019/12/23/google-form-to-mail
上のリンク先のコードの公式ドキュメントの該当箇所
Class UrlFetchApp  |  Apps Script  |  Google Developers
https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app#fetch(String,Object)
Class SpreadsheetApp  |  Apps Script  |  Google Developers
https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app#getActiveSheet()
Class Sheet  |  Apps Script  |  Google Developers
https://developers.google.com/apps-script/reference/spreadsheet/sheet?hl=en#getDataRange()
Class Range  |  Apps Script  |  Google Developers
https://developers.google.com/apps-script/reference/spreadsheet/range#getValues()
Class GmailApp  |  Apps Script  |  Google Developers
https://developers.google.com/apps-script/reference/gmail/gmail-app#sendEmail(String,String,String)
「ウェブアプリケーションとして公開」するときに、編集をしたらバージョンを新しいものにする必要があります。個人的に設定するときにここでつまりました。
「ウェブアプリケーションとして公開したときのURL」で、リンクに設定するのは、https://script.google.com/macros/s/ で始まるURLです。
上のリンクのscriptの、URLとメールアドレスの[]は削除します。残しません。
「ウェブアプリケーションとして公開したときのURL」は誰からも見られる状態になります。少しだけ文字列が表示されるようですが、ここでフォームの回答の情報が流出するリスクがないか今調べています。
https://gyazo.com/717ffff4c1e616f56790dd7b1f4ca46e
アプリへのアクセスを誰でもにしないとうまく動かないようで、ここがセキュリティ上の懸念点です
上のリンク先のfor文のところ、
code:GAS
for (var i = 0; i < data0.length; i++) {
if (datadata.length - 1i === ''){
continue;
}
result = result + data0i + ':' + datadata.length - 1i + '\n';
}
こんな感じにすると、各コラムで入力のないところをスキップしてくれて、印刷した情報が見やすくなります
上で設定した受取先のメールアドレスを、メールで受信できるようにします。
上のリンクの、
https://gyazo.com/86fd8f1683e29fe68fa53ef8e0797cb2
ここのアドレスです。
繰り返しですが、[]は削除します
届いたメールの自動印刷について解説します
メールが届いたことをトリガーにして、自動で印刷する方法をいろいろ調べてみましたが、素直にOutlookで設定するのが比較的簡単そうでしたので、それをおすすめします
上のメールをOutlookで受信して、Ourlookの仕分けルールで、通知メールが届いたら自動で印刷されるようにします
How to Automatically Print an Email When It Is Received
https://smallbusiness.chron.com/automatically-print-email-received-48455.html
説明すると、
Outlookの
「仕分けルールと通知」で、
新しい仕分けルール
受信メッセージにルールを適用する
条件を設定(「件名に「」が含まれる」とか。上の例だと「Googleフォームの入力がありました」)
印刷する を選ぶ
例外条件を設定
以上です
一応私の環境ではうまくできました。
windows 10
MS365の最新版Outlook
補足
Outlookでの印刷がうまくいかない可能性として、Outlookで受信したときに既読になっていると印刷のトリガーがうまく行かない感じです
私はgmailをOutlookで同期してやってみましたが、gmailに届いた通知メールを即開いたところ、Outlook側に届いたときにメールが既読になっていて印刷されませんでした。このへんは条件設定で改善できるかもしれません。
検証したこと
複数の通知がほぼ同時に来ても、用紙は分かれてちゃんと印刷された
デフォルトの日付情報が読みにくい(英語式の長い文字表記)→月と日だけの入力規則にすれば比較的まし
デフォルトの時刻情報が読みにくい(英語式の長い文字表記)→15分or30分ごとのプルダウン選択式にすれば比較的まし
項目を後から追加していくと、form上の質問の順番と、spread sheet上の質問の順番がズレる
こちら↓↓で解決
Googleフォームの回答がスプレッドシートに順番通りに反映されない時の解決法 | 詐欺被害者Kの部屋
https://deaitei.biz/archives/338
要するにフォームとspreadsheetのリンクをし直すだけだが、過去の回答が再度メール通知されるので、印刷されないように対処したほうがいいです(トリガーを停止する or gmailと連携しているなら、gmail側で先に既読にするなど)
手動でスプレッドシートの列を入れ替えることによる対処も可能
プリンタで縮尺印刷したいときは、Outlookの印刷設定から設定すると毎回リセットがかかるようなので、システムのプリンタの設定から設定するとよさげ
フォームの受付時間を限定したいときは、以下の記事が参考になります
Googleフォームを朝の時間だけ受け付けたい。自動で回答の開始・締切時間を設定する方法。|わきたせんせい ICT*Edutainment|note
https://note.com/edup/n/nefbdc5e562ca
公式ドキュメントの該当箇所
Class FormApp  |  Apps Script  |  Google Developers
https://developers.google.com/apps-script/reference/forms/form-app#openByUrl(String)
Class Form  |  Apps Script  |  Google Developers
https://developers.google.com/apps-script/reference/forms/form#setAcceptingResponses(Boolean)
通し番号
回答(スプレッドシート)に通し番号を打ちたいときは、以下の動画のとおり、A1セルに
code:gss
=ArrayFormula(IF(LEN(B:B),if(ROW(B:B)=1,"ID",TEXT(ROW(A:A)-1,"0000")),))
と入力しましょう
https://www.youtube.com/watch?v=NKS5KsqDZbc
厳重注意
フォームの設定の全般の、回答者が行える操作は両方ともOFFにしましょう。(デフォルトはOFFのはず)
注文送信後に編集できると店側が困ります
他のユーザーの回答が見れると、名前や電話番号が閲覧できてしまうと思われますので大問題です。
個人情報流出事件になってしまいます
くれぐれもお気をつけください
https://gyazo.com/543dd449551e9e81e5b1584ba8253d29
回答者が行える操作の二項目はチェックしてはいけない!!
google app scriptの制限(クオータ)の公式情報
google app scriptの利用には制限があります。制限を超えないようにうまく利用し、無料版の制限を超えるようなら有料版のgoogle workspaceの契約を検討しましょう
Quotas for Google Services  |  Apps Script  |  Google Developers
https://developers.google.com/apps-script/guides/services/quotas
Email recipients per day (100/day)
Email recipients per day within domain (100/day)
Triggers total runtime (90min/day)
の所が、本文書の関係するところかと思います
https://gyazo.com/425e3be86de0e277fe09100d6ef998a2
文献
詳解! Google Apps Script完全入門 第3版 高橋宣成 (著)
https://www.amazon.co.jp/dp/4798064742
通知メール用のscriptでfor文をいじったところは、この本を参考にしました