対象プランOFFLINEBUSINESSPRO
実装にかかる想定時間:約30分~1時間
イベント毎に設定する必要がある:No
毎月複数回のセミナーを開催する場合、開催の度に社内へセミナー情報を周知しなければいけません。
そこで、APIを活用することでセミナー開催当日に、セミナー情報をSlackに自動で通知することができるようになります。1度設定するだけで、EventHub上で開催されるイベント全てが通知されるようになります。
社内への集客の協力依頼にもお使いいただけますので、ぜひご活用ください!
1. APIキーを発行する
まず初めに、APIキーの発行方法を参考にAPIキーを発行してください。
こちらのキーは手順3のGoogle Apps Scriptに設定します。一度発行したら二度と表示されませんので、発行時 メモに控えるようにしてください。
2. スプレッドシートを準備する
次に、スプレッドシートを準備します。以下のように、A列からE列までヘッダーにタイトルを入力しましょう。
A1 | B2 | C3 | D4 | E5 |
eventKey | イベント名 | 開催日時 | イベント概要 | チケットフォーム |
*参考:スプレッドシート(1シート目)
3. Google Apps ScriptにScriptを入力する
① 作成したスプレッドシートから、Google Apps Scriptを起動します。
② Scriptには、以下のサンプルコードを入力します。
サンプルコード
※ 赤文字部分は説明文となりますので、Script内に含めず適切な値に差し替えてください。
また、GASに埋め込んだAPIキーの取り扱いには十分ご注意ください。APIを含んだScriptの共有をすると、悪意あるユーザーにEventHubの操作を実行される可能性があります。
function getEvents() {
const SHEET_ID = "スプレッドシートのID";
const POSTURL = 'Incoming Webhookで取得した通知させるチャネル先URL';
var requestUrl = 'https://api.eventhub.jp/v1/events?limit=100'
var headers = {
'X-API-KEY': 'EventHubから発行したAPIキー'
}
var options = {
"method" : "get",
"headers" : headers,
}
var response = UrlFetchApp.fetch(requestUrl, options)
var responseJson = JSON.parse(response.getContentText())
var ss = SpreadsheetApp.openById(SHEET_ID)
var sheet = ss.getSheetByName('EventList')
lastRow = sheet.getLastRow()
lastCol = sheet.getLastColumn()
sheet.getRange(2, 1, lastRow, lastCol).clearContent()
var count = 2
for(event of responseJson.events){
sheet.getRange(count, 1).setValue(event.eventKey)
sheet.getRange(count, 2).setValue(event.name)
var startAtPublish = Utilities.formatDate(new Date(event.startAt), 'JST', "yyyy-MM-dd HH:00");
sheet.getRange(count, 3).setValue(startAtPublish)
var description = getEventDetails(event.eventKey)
sheet.getRange(count, 4).setValue(description)
var responseTickets = getTicketDetails(event.eventKey)
var t = 5
for(ticket of responseTickets.tickets){
sheet.getRange(count, t).setValue(ticket.title)
t++;
sheet.getRange(count, t).setValue(ticket.ticketId)
t++;
}
count++;
}
var lastRow = sheet.getLastRow();
var lastColumn = sheet.getLastColumn();
var values = sheet.getRange(1,1,1,lastColumn).getValues();
var indexOfEventName = values[0].indexOf("イベント名")+1;
var indexOfStartAt = values[0].indexOf("開催日時")+1;
var indexOfDescription = values[0].indexOf("イベント概要")+1;
var date = Utilities.formatDate(new Date(), 'JST', "yyyy-MM-dd");
for(var i = 2; i<= lastRow; i++) {
var eventName = sheet.getRange(i,indexOfEventName).getDisplayValue();
var startAtDateTime = sheet.getRange(i,indexOfStartAt).getDisplayValue();
startAtDate = startAtDateTime.slice(0,10)
startAtTime = startAtDateTime.slice(11,16)
var description = sheet.getRange(i,indexOfDescription).getDisplayValue();
if(date == startAtDate){
var ticketURL = "";
var getRowValues = sheet.getRange(i,1,1,lastColumn).getValues();
for (var r = 4; r < getRowValues[0].length; r++){
if(getRowValues[0][r] == ""){
break;
}
if(r%2 == 0){
ticketURL = ticketURL + getRowValues[0][r] + ":"
}else{
ticketURL = ticketURL + "https://client.eventhub.jp/form/" + getRowValues[0][r] + "\n"
}
}
var message =
//通知するメッセージやメンション先はご自由にご設定ください。
"<!here>\n" + '📣*\今日 ' + startAtTime + ' から開催されるWebinarの情報です/* ' + '🗓 \n\n* '
+ eventName + '*\n\n【イベント概要】\n' + description + "\n\n" + ticketURL;
sendSlack(message,POSTURL);
}
}
}
function getEventDetails(eventKey){
var requestUrl = 'https://api.eventhub.jp/v1/events/' + eventKey + '?lang=ja'
var headers = {
'X-API-KEY': 'EventHubから発行したAPIキー'
}
var options = {
"method" : "get",
"headers" : headers,
}
var response = UrlFetchApp.fetch(requestUrl, options)
var responseJson = JSON.parse(response.getContentText())
return responseJson.description
}
function getTicketDetails(eventKey){
var requestUrl = 'https://api.eventhub.jp/v1/tickets/' + eventKey + '?lang=ja'
var headers = {
'X-API-KEY': 'EventHubから発行したAPIキー'
}
var options = {
"method" : "get",
"headers" : headers,
}
var response = UrlFetchApp.fetch(requestUrl, options)
var responseJson = JSON.parse(response.getContentText())
return responseJson
}
function sendSlack(message,POSTURL){
var jsonData = {
'text':message
};
var payload = JSON.stringify(jsonData);
var options = {
'method':'post',
'contentType':'application/json',
'payload':payload
};
UrlFetchApp.fetch(POSTURL, options);
}
4. 実行する
上記Scriptを試しに実行してみましょう。
以下の画像のように、スプレッドシートへ作成しているイベント全ての情報が取得され、設定したチャネルにSlackが送信されます。
*参考:スプレッドシート (2シート目)
ただし、今回は「イベント開催当日に」Slackへ通知する、というScriptを組んでいるため、実装している今日の日付に開催されるイベントがないとSlackへ通知されません。Slackにどのように通知されるか確認したい場合は、一時的にEventHub管理画面の[基本設定]>[イベント情報]から[開始日時]を本日に変更してから実行してください。
Slackに通知される内容例は以下の通りです。
5. トリガーを設定する
問題なく作動したら、トリガーを設定します。
以下のように、実行する関数に[getEvents]、時間主導型で[午前8時~9時]を選択すると、毎日午前8時~9時の間にScriptが実行されるようになります。通知させたい時間を時間主導型で自由に設定してください。
[保存]をクリックして実装は完了です 🎊
本記事では、「開催当日にSlackに通知する」というサンプルコードをご紹介していますが、本コードを少し応用することで「開催1週間前に社内周知して、集客協力依頼をする」という実装も可能です。
さまざまなアイディアでご活用ください。
6. サポート対応について
こちらでご紹介する方法は、提供する情報の継続や正確性を完全に保証するものではありません。実装方法に関するご不明な点はGoogleまたはSlackのサポート、もしくは社内エンジニアへお問い合わせください。
機能や取得したいAPI情報が足りない場合は、ご要望としてお伺いしますので、カスタマーサポートへお問い合わせください。