Skip to main content
April 11, 2018

WebhookでSpreadSheetと連携する方法 Part2

  • April 11, 2018
  • 3 replies
  • 1601 views

JMUGのみなさま、こんにちは大里です。

最近はNetflixの「クィア・アイ」を見て、泣いたり笑ったりしています。

さて、前回の続きで具体的な実装方法について紹介をさせていただきます

MarketoからWebhookを使ってデータを飛ばす方法について入っていきます。

-----------------------

【1】まずはこの記事を一読むべし

  https://qiita.com/kunichiko/items/7f64c7c80b44b15371a3

いきなり他力本願ですが、とある方がこの記事をFacebookでシェアしていたので何となく読んでいたら

「おっ!これってMarketoでもいけるんじゃね?」と思ったのがそもそもの始まりです。

この記事を読んで理解できれば、本連携の90%は完了していると思って間違いないです。

【2】SpreadSheet用意する(これは説明不要)

【3】スクリプトエディタを立ち上げる(これも説明不要)

【4】スクリプトエディタに下記のコードをコピペ

 (1)のページにあるスクリプトをそのまま使用する

// POSTリクエストに対する処理

function doPost(e) {

  // JSONをパース

  if (e == null || e.postData == null || e.postData.contents == null) {

return;

  }

  var requestJSON = e.postData.contents;

  var requestObj = JSON.parse(requestJSON);

// 

  // 結果をスプレッドシートに追記

  //

  var ss = SpreadsheetApp.getActive()

  var sheet = ss.getActiveSheet();

  // ヘッダ行を取得

  var headers = sheet.getRange(1,1,1,sheet.getLastColumn()).getValues()[0];

  // ヘッダに対応するデータを取得

  var values = [];

  for (i in headers){

var header = headers[i];

var val = "";

switch(header) {

case "date":

val = new Date();

break;

case "mimeType":

val = e.postData.type;

break;

default:

val = requestObj[header];

break;

    }

values.push(val);

  }

  // 行を追加

sheet.appendRow(values);

}

【5】Webアプリとしてとして公開

詳しくは【1】のページに書いてある内容を参考に


**** 注意点 ****
プロジェクトバージョンを新しいものにしないといけないという更新が反映されません。

ちなみに、私はソースコードを編集しても変更が反映されないので

2時間以上悩んでしまいました。お気をつけください。

ここまでやれば、あとはMarketoからWebhookでPostするだけです。

【6】Webhookを作成する

 

URLの設定
https://script.google.com/macros/s/AKfycbz7GhdcCsFPz8RCr_qA7RLK68Qe5vlCzWTlrkh3JRxxxxxxxx/exec

上記のURLはサンプルですので「ウェブアプリケーションとして導入」に記載されているURLを使ってください。

・リクエストタイプ         ;POST

・テンプレート

             {

              "key1"    :             "{{campaign.name}}",

              "key2"    :             "{{lead.First Name}}"

}

Webhookで飛ばしている内容ですが、トークンを使うことが可能です。

必要な内容に合わせてセットしてください。

【7】スマートキャンペーンの設定
Webhookはトリガーでのみ動かせますので注意してください。

-----------------------

以上です。うまく行けば下記のようにSpreadSheetに表示されるはずです。

 

これでマルケトのデータをスプレッドシートに飛ばすことができます。

試してみてください。

次回Part3(最終回)では、上記の設定をカスタマイズする方法についてお伝えします。

WebhookでSpreadSheetと連携する方法(概要編) Part1

WebhookでSpreadSheetと連携する方法 Part2

WebhookでSpreadSheetと連携する方法(カスタマイズ編) Part3

This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.

3 replies

October 26, 2019

このページとても参考になりました。
ありがとうございます!


このページをもとに、少し編集した別verを作ったので共有しておきます。
変更点
・スプレッドシートを指定できる
・スプレッドシートの中のシートを指定できる

こちらを使ってGASのプロジェクトをわけることで、同じスプレッドシートの中にある別のシートに異なるwebhookを利用できます!

<イメージ>
『テスト』というスプレッドシートの中にある
「シート1」にweboohk Aを使って書き込み
「シート2」にweboohk Bを使って書き込み

// POSTリクエストに対する処理
function doPost(e) {
// JSONをパース
if (e == null || e.postData == null || e.postData.contents == null) {
return;
}
var requestJSON = e.postData.contents;
var requestObj = JSON.parse(requestJSON);

//
// 結果をスプレッドシートに追記
//

var spreadsheet = SpreadsheetApp.openById('<キー>')
//キーは、URL https://docs.google.com/spreadsheets/d/xxxxxxxxxxxxxxxx/edit の xxxxxxxxxxxxxxxx の部分です。

var sheet = spreadsheet.getSheetByName('<シート名>');

// ヘッダ行を取得
var headers = sheet.getRange(1,1,1,sheet.getLastColumn()).getValues()[0];

// ヘッダに対応するデータを取得
var values = [];
for (i in headers){
var header = headers[i];
var val = "";
switch(header) {
case "date":
val = new Date();
break;
case "mimeType":
val = e.postData.type;
break;
default:
val = requestObj[header];
break;
}
values.push(val);
}

// 行を追加
sheet.appendRow(values);
}
TAI_Proteras
Level 1
December 28, 2020

大変お世話になったのでお礼と、私が引っかかってしまったエラーについての情報共有です。

 

まず一番役に立った使い方として、弊社では問合せ対応を以下のフローにしております。

(商材の関係でSFAは使用しておりません)

 

・サイト内の問合せフォームをマルケトに差し替え

 ↓

・問合せが入った際に

 ①管理者のアドレスに転送(漏れチェックのため)

 ②エリア毎の営業マンChatworkグループに転送(拙稿にまとめています)

 ③スプレッドシートに問合せログを残す(定量観察と後追いのため)

 

この③の部分を丸々使わせて頂きました。

しかし当初、テストでは上手くいくのに問合せフォームとの連携が上手くいきませんでした。

オチとしてはシンプルで、引用内容に「改行」が含まれているとスプレッドシートに反映されないようです。

 

マルケト上はwebhookがちゃんと起動しているので6時間くらい頭をひねってしまいました。(もっと早く気づけましたね……)

 

とはいえ問合せのログなので詳細がないとどうしようもなく、

仕方ないので詳細部分だけは後から手作業で入力することにしました。

 

それでも手間としてはかなり減りましたので、GASを使ったスプレッドシート連携はかなり有用そうです。

教本も買ってみたのでGASで何か面白いことが出来たら投稿しようと思っています。

 

まぁSFAで済むと言えばそこまでですが……

March 28, 2022

マルケトを使用した問い合わせフォームをWebhookでSpreadSheetと連携してみたのですが、2点ご質問させていただきます。

 

1点目
フォームの値に「改行」が含まれてしまうとスプレッドシートに反映されないのですが、何か解決策はありますでしょうか。

 

2点目
現状、大里さんの書かれていた【4】の部分のコードでは電話番号などが0落ちするため、0落ちしないようにSpreadSheet内のjavascriptで「appendRow」ではなく、「setValue」で値を1セルごとに出力しているのですが、1セルごとに追加していくため同じタイミングで複数の人がフォーム入力された場合、最下行に値を追加していく仕様なので、先に処理が走った人のデータが上書きされてしまう問題が発生しました。そのため、排他制御を行って無理やりデータの出力を遅延させています。
javascriptについては詳しくないので、上記の回避が正しく動作してるのわかりません。また、ソースも複雑で見にくくなっております。

 

大里さんの書かれていた【4】の「appendRow」を使って0落ちしないようにする設定はありますでしょうか。

よろしくお願いいたします。