[Chatwork版]GASでGoogleフォームの結果を通知したい!-2019年版

\Chatwork版/GASでGoogleフォームの結果を通知したい!-2019年版
\Chatwork版/GASでGoogleフォームの結果を通知したい!-2019年版
ビジネス

便利なGASレシピ集!に戻る場合は以下から

便利なGASレシピ集! – [2019年最新版]

2019年5月22日

はじめに

今回のビジボットは、以下記事でコメントでいただいた『[slack版] GASでGoogle フォームの 結果を通知したい! – 2019年版』より、Chatwork版をみてみたいとのことでしたのでGoogleフォームから結果をChatworkに通知する方法を紹介したいと思います。

前回同様、記事は以下から確認できますが、前回のツールをアップデートする形でSlackに送る処理とメールに送る処理両方をそのまま記載しています。

[slack版]GASでGoogle フォームの 結果を通知したい!– 2019年版

[slack版]GASでGoogleフォームの結果を通知したい!– 2019年版

2019年4月8日

それでは早速始めていきます!

1.Googleフォームの作成

POINT

Googleフォームは前回作成したものを利用して、今回は『Chatwork』と『Slack』と『メール』両方に通知を送るコードを記載します。前回の方法と途中まで同じです。
動きを見たい人はGoogleフォームを簡単に作成してもらってOKです。

GoogleDriveから作成する場合、『新規』 > 『その他』 > 『Googleフォーム』を選択すると、Googleフォームを新規作成することができます。

googleフォーム作成方法 - GAS
googleフォーム作成方法 – GAS

今回は前回作成した内容をそのままコピーして使ってみようと思います。
※コピーして利用する場合、連携承認を必ず実施してください

googleフォーム設問作成 - GAS
googleフォーム設問作成 – GAS

簡単に設問を作成したら、スクリプトエディタ画面を立ち上げます。
点3つある右上の部分から『スクリプト エディタ』を選択してエディタを立ち上げます。

注意

送信したいGoogleフォームからエディタを立ち上げないと、送信時に実行される『トリガー』で、作成した関数をGoogleフォームの送信時に指定できない〜なんてことが起きるので注意が必要です

googleフォームエディタ表示 - GAS
googleフォームエディタ表示 – GAS
注意

コピーした場合、以下Googleサービスを外部連携に承認しますか?と言った処理をしないで作成しているので、『コード』と『トリガー』の両方で承認する必要があります
※新規作成手順も同様に発生しますが、コピーした場合は忘れがちです

google許可を確認 - GAS
google許可を確認 – GAS

2.GASコード

POINT

詳細は後ほど説明しますが、大きく分けて『GASでGoogleフォームからのデータを加工する』『GASでメールに送る』『GASでChatworkに送る』という処理に別れていて、それぞれを好きなように使うことができます。

GASでGoogleフォームからのデータを加工する

GASコード
GASログ

Googleフォームから受けとった情報を、for文で処理を繰り返し取得してそれぞれ通知したい通知先(MailかSlackかChatwork)にデータを渡します。

GASでGoogleフォームの通知をメールに送る

GASコード
GASログ

メールはシンプルに渡す情報が限られているので、アドレスとタイトルをセットします!

GASでGoogleフォームの通知をSlackに送る

GASコード
GASログ

Slackに通知があった表示は以下。アイコンは自由に決められるので”:sneezing_face:”をいじってみてください。Slackに設定されているアイコンであれば使えるみたいです!

slackの通知 - slack
slackの通知 – slack

GASでGoogleフォームの通知をChatworkに送る

GASコード
GASログ

Chatworkに通知があった表示は以下。

Chatworkにフォームの通知
Chatworkにフォームの通知

全体コード

GASコード
GASログ

3.ChatworkのルームID取得

POINT

Chatworkでグループチャットを開いた時に表示されるURLの数字部分がルームIDです。

chatworkのルームID
chatworkのルームID

すべてのチャットの横に表示されている『グループチャットを新規作成』をクリックするとグループチャットが作成できて通知先として利用することができます。

グループチャットを新規作成
グループチャットを新規作成

4.ChatworkのAPI Token取得

POINT

ChatworkのAPIトークンはChatworkの右上画面に表示されたアカウント名をクリックし、『API設定』からそのまま発行することができます。

Chatwork APi設定
Chatwork APi設定

以下APIトークンを発行、表示する場合は、Chatworkのパスワードを入力してくださいと記載されているので、その通り入力すればAPIトークンが生成されます。

Chatwork APIトークン生成画面
Chatwork APIトークン生成画面

ルームIDとAPIトークンがわかったら以下GASコードの該当変数に値をセットすれば完了です。

GASコード

実行すると以下のように通知がきます。

Chatworkにフォームの通知
Chatworkにフォームの通知

今回はここまでです!
Slackのwebhook取得方法は前回Slackに通知を送るにて作成した記事に記載されているので、以下記事をご確認ください。
最後までありがとうございました!

[slack版]GASでGoogle フォームの 結果を通知したい!– 2019年版

[slack版]GASでGoogleフォームの結果を通知したい!– 2019年版

2019年4月8日

6 件のコメント

    • 山中さん
      こちらこそリクエスト頂きありがとうございました。
      お力になれて嬉しいです。
      今後ともよろしくお願いいたします。

  • いつも勉強させていただいてます!ありがとうございます。
    全体コードを利用し、GASにコードを入力したのですが、
    ReferenceError: 「ChatWorkClient」が定義されていません。
    at sendToChatwork(コード:30)
    at submitForm(コード:21)
    上記のエラーがでてしまい、チャットワークへの送信ができません。

    原因、対策方法など、もしよろしければ教えていただけますと幸いです。
    どうぞよろしくお願いいたします。

    • イワシさん
      コメントありがとうございます!

      コピーしてペーストしたコードは全てでしょうか?
      それとも一部変更して実行されてますでしょうか?

  • 管理人さま、ご確認いただきありがとうございます。
    全体コードをコピーして、
    メールやスラックに送付するコードを削除し、
    マイチャットのRID,チャットワークのAPIを追記しただけになります。

    • こんな感じのコードってことでしょうか?

      このコードであれば「sendToChatwork」を選択してコードを実行させるとChatwork側に中身のデータがないけど通知が行くことが確認できると思います。
      もし、届かないようであればridとトークンの取得で何か誤った指定方法をしている可能性がありそうです。

      ただ、トークンを間違えた場合のエラーは

      「https://api.chatwork.com のリクエストに失敗しました(エラー: 401)。サーバー応答の一部: {“errors”:[“Invalid API Token”]}(応答の全文を見るには muteHttpExceptions オプションを使用してください)(行 78、ファイル「client」、プロジェクト「ChatWorkClient」)」

      ridが間違えた場合は

      https://api.chatwork.com のリクエストに失敗しました(エラー: 403)。サーバー応答の一部: {“errors”:[“You don’t have permission to send/edit message.”]}(応答の全文を見るには muteHttpExceptions オプションを使用してください)(行 78、ファイル「client」、プロジェクト「ChatWorkClient」)

      いただいているエラーとマッチしないのかな?という印象を受けました。
      できれば、コピペしたコードをこちらのコメントでいただけますでしょうか?
      純粋にコピペをするだけだと、シングルクォーテーションやダブルクォーテーションなどが異なる形式でコピーされる場合があります。

      などなど、一概にコピペしたからといって全く同じって状況にならないこともあるんですよね。

      お手数ですが、ridとかトークンとかは伏せていただけると助かります。


      function submitForm(e){
      var itemResponses = e.response.getItemResponses();
      var message = ”;


      //itemResponsesに入っている分だけ繰り返す
      for (var i = 0; i < itemResponses.length; i++) { var itemResponse = itemResponses[i]; //formの質問内容を取得 var question = itemResponse.getItem().getTitle(); //formの選択内容を取得 var answer = itemResponse.getResponse(); Logger.log(i + '回目question:' + question); Logger.log(i + '回目answer:' + answer);


      //ループごとに増えていく情報を改行してくっつけていく(/nは改行)
      message += (i + 1).toString() + '. ' + question + ': ' + answer + '\n';
      }
      Logger.log('message:' + message);
      var content = '評価シート入力結果——————–\n\n' + message;


      //chatworkに送りたい場合
      sendToChatwork(content);
      }


      function sendToChatwork(body) {
      Logger.log('chatwork' + body);
      var msg = '[info][title]GoogleFormからの通知です' + '[/title]' + body + '[/info]';
      var roomId = '**********'//ルームIDを入力
      var client = ChatWorkClient.factory({token: '******************************'});//チャットワークのアクセストークンを入力
      client.sendMessage({room_id: roomId, body: msg});
      }

  • コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です