対象プランOFFLINEBUSINESSPRO
実装にかかる想定時間:約30分
イベント毎に設定する必要がある:No
イベント開催終了日翌日に、登録者数や参加者数などの結果をSlackへ通知する方法をご紹介します。
セミナー開催後、多くの方が速報値を集計して社内報告しています。
毎回管理画面を確認しに行かなくとも、結果が自動でSlackに通知されることで工数の削減に繋がります。一度設定した後は、イベント毎にメンテナンスの必要がありません。本記事をご参考にSlack連携をご活用ください。
1. APIキーを発行する
まず初めに、APIキーの発行方法を参考にAPIキーを発行してください。
こちらのキーは次の手順のGoogle Apps Scriptに設定します。一度発行したら二度と表示されませんので、発行時 メモに控えるようにしてください。
2. Google Apps ScriptでScriptを作成する
① Google Apps Scriptから[新しいプロジェクト]をクリックします。
② 初期値に設定されているfunction myFunction() {} を削除し、以下のサンプルコードを入力します。
サンプルコード
赤文字
EventHubから発行したAPIキー 部分に手順1で発行したAPIキーを、SlackのWebhookURL には通知させたいチャネルのWebhookURLを挿入してください。
また、GASに埋め込んだAPIキーの取り扱いには十分ご注意ください。APIを含んだScriptの共有をすると、悪意あるユーザーにEventHubの操作を実行される可能性があります。
青文字
解説文を入れています。//コメントアウトで記載しているため、Scriptにそのまま記載しても問題なく実行されますが、必要ない場合は削除しても問題ございません。
function noticeWebinarPerformance() {
const WEBHOOK_URL = 'SlackのWebhookURL';
const API_KEY = 'EventHubから発行したAPIキー';
//Slackメッセージ
var message = '昨日開催されたウェビナーの結果をお知らせします :mega:'
//イベント一覧取得
var events = getEventList(API_KEY);
for(event of events){
//開催終了日の翌日に通知する
var endDate = Utilities.formatDate(new Date(event.endAt), 'JST', "yyyy-MM-dd 00:00");
var today = new Date();
var yesterday = Utilities.formatDate(new Date(today.setDate(today.getDate() - 1)), 'JST', "yyyy-MM-dd 00:00");
if(endDate != yesterday){continue};
//イベント名
message = message + '\n\n' + event.name;
//開催期間
var startAt = Utilities.formatDate(new Date(event.startAt), 'JST', "yyyy-MM-dd HH:mm");
var endAt = Utilities.formatDate(new Date(event.endAt), 'JST', "yyyy-MM-dd HH:mm");
message = message + '\n\n'+ '開催期間:' + startAt + ' 〜 ' + endAt;
//イベント詳細取得
var eventDetail = getEventDetail(API_KEY,event.eventKey)
//集客目標
message = message + '\n'+ '集客目標:' + eventDetail.targetUserCount;
//ユーザー一覧を取得
var limit = 100;
var users = [];
for (var offset = 0; offset === users.length; offset += limit) {
var ary = getUserList(API_KEY,event.eventKey,offset);
users = users.concat(ary);
}
var attendedCount = 0;
var surveyAnswerCount = 0;
for(user of users){
//ユーザー詳細情報取得
var userDetail = getUserDetail(API_KEY,event.eventKey,user.userId);
//参加フラグを集計
if(userDetail.leadReport.attended == true){attendedCount ++}
//アンケート回答を集計
if(userDetail.leadReport.questionnaireAnswers[0].questions[0].value.length != 0){surveyAnswerCount ++}
}
//登録者数
message = message + '\n'+ '登録者数:' + users.length;
//参加者数
message = message + '\n'+ '参加者数:' + attendedCount;
//アンケート回答数
message = message + '\n'+ 'アンケート回答数:' + surveyAnswerCount;
//Slackメッセージ投稿
postSlack(WEBHOOK_URL,message);
break;
}
}
function getEventList(API_KEY){
const requestUrl = 'https://api.eventhub.jp/v1/events?limit=100';
const headers = {
'X-API-KEY': API_KEY,
'Content-Type': 'application/json'
}
var options = {
"method" : "get",
"headers" : headers,
}
var response = UrlFetchApp.fetch(requestUrl, options);
var responseJson = JSON.parse(response.getContentText());
return responseJson.events;
}
function getEventDetail(API_KEY,eventKey){
const requestUrl = 'https://api.eventhub.jp/v1/events/' + eventKey;
const headers = {
'X-API-KEY': API_KEY,
'Content-Type': 'application/json'
}
var options = {
"method" : "get",
"headers" : headers,
}
var response = UrlFetchApp.fetch(requestUrl, options);
var responseJson = JSON.parse(response.getContentText());
return responseJson;
}
function getUserList(API_KEY,eventKey,offset){
var requestUrl = 'https://api.eventhub.jp/v1/users/' + eventKey + '?offset=' + offset + '&limit=100'
var headers = {
'X-API-KEY': API_KEY,
'Content-Type': 'application/json'
};
var data = {
"userType": ["participant"]
};
var options = {
"method" : "post",
"headers" : headers,
"payload": JSON.stringify(data),
};
var response = UrlFetchApp.fetch(requestUrl, options);
var responseJson = JSON.parse(response.getContentText());
return responseJson.users;
}
function getUserDetail(API_KEY,eventKey,userId){
var requestUrl = 'https://api.eventhub.jp/v1/users/' + eventKey + '/' + userId
var headers = {
'X-API-KEY': API_KEY,
'Content-Type': 'application/json'
};
var options = {
"method" : "get",
"headers" : headers,
};
var response = UrlFetchApp.fetch(requestUrl, options);
var responseJson = JSON.parse(response.getContentText());
return responseJson;
}
function postSlack(WEBHOOK_URL,message){
const options =
{
"method" : "post",
"contentType" : "application/json",
"payload" : JSON.stringify(
{
"text" : message
}
)
};
UrlFetchApp.fetch(WEBHOOK_URL, options);
}
3. トリガーを設定する
作成したScriptのトリガーを以下のように設定します。
実行する関数 | noticeWebinarPerformance |
実行するデプロイ | Head |
イベントのソース | 時間主導型 |
時間ベースのトリガーのタイプ | 日付ベースのタイマー |
時間の間隔 | 午前9時〜10時 ※ 通知させたい時間をお選びください |
4. 通知される内容について
トリガーの設定が完了すると、設定した時間に通知が来るようになります。
今回ご紹介したScriptは、開催終了日翌日に通知される実装となっております。
また、通知される値は以下の通りです。通知させたい内容によってScriptを変更してください。
イベント名 | [基本設定]>[イベント情報]で設定したイベント名 |
開催期間 | [基本設定]>[イベント情報]で設定した開催期間 |
集客目標 | [基本設定]>[イベント情報]で設定した集客目標 |
登録者数 | ユーザータイプが来場者の登録者数 |
参加者数 | 開催期間中にイベントページへアクセスしたユーザー数 |
アンケート回答数 | 作成したアンケートに回答したユーザー数 ※ 設定したアンケートの1問目に回答があるユーザー数を計測しています。また、アンケートを複数作成した場合、1つ目のアンケートの1問目へ回答したユーザー数のみ通知されるScriptとなっておりますのでご了承ください。 |
5. サポート対応について
こちらでご紹介する方法は、提供する情報の継続や正確性を完全に保証するものではありません。実装方法に関するご不明な点はGoogleのサポート、もしくは社内エンジニアへお問い合わせください。
機能や取得したいAPI情報が足りない場合は、ご要望としてお伺いしますので、カスタマーサポートへお問い合わせください。