Look over the AI suggestions before sending the bot to your client
Event description
Home screen buttons
Push notifications
Scavenger hunt clues
Voting ideas
Sponsor ideas
🎉
Your Event
Complete setup with the bot →
Home Screen Buttons
🤖
Rallie Bot
Online · Powered by your event data
Step 1 of 6
Event submitted!
Your event has been approved and Robbie has been notified. Let's Rallie!
Create new bot
Fill in your client's event details and select features.
Combined with the transcript when generating push notifications, hunt clues, button choices, and other AI suggestions.
🔔Push Notifications
🗺Interactive Map
🔍Scavenger Hunt
🗳Voting
📍Check-In
📢Sponsors
🎟Giveaway
Bot Preview
Admin view — full event configuration
📊 Google Sheets Integration
One URL handles both writing client submissions and reading data back to the Admin Dashboard.
Setup (one time):
1. Create a new Google Sheet
2. Go to Extensions → Apps Script and paste the full script below
3. Click Deploy → New deployment → Web App
4. Set Execute as: Me — Who has access: Anyone
5. Copy the Web App URL and paste it below — done!
// RALLIE ONBOARDER - Full Apps Script
// Paste into Extensions > Apps Script then Deploy as Web App
var SHEET_NAME = "Submissions";
var HEADERS = ["Submitted At","Bot Name","Client","Event Title",
"Description","Features","Push Notifications","Scavenger Hunt Clues"];
function getOrCreateSheet() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName(SHEET_NAME);
if (!sheet) {
sheet = ss.insertSheet(SHEET_NAME);
sheet.appendRow(HEADERS);
sheet.getRange(1,1,1,HEADERS.length)
.setFontWeight("bold").setBackground("#2b4a7a").setFontColor("#ffffff");
sheet.setFrozenRows(1);
}
return sheet;
}
// doPost: receive new client submission
function doPost(e) {
try {
var sheet = getOrCreateSheet();
var data = JSON.parse(e.postData.contents);
sheet.appendRow([
new Date(data.submittedAt || Date.now()),
data.botName || "", data.client || "",
data.eventName || "", data.eventDesc || "",
(data.features || []).join(", "),
(data.pushNotifs || []).join(" | "),
(data.huntItems || []).join(" | ")
]);
return ContentService.createTextOutput(JSON.stringify({status:"ok"}))
.setMimeType(ContentService.MimeType.JSON);
} catch(err) {
return ContentService.createTextOutput(JSON.stringify({status:"error",message:err.toString()}))
.setMimeType(ContentService.MimeType.JSON);
}
}
// doGet: return all rows as JSON for Admin Dashboard
function doGet(e) {
var sheet = getOrCreateSheet();
var rows = sheet.getDataRange().getValues();
if (rows.length <= 1) {
return ContentService.createTextOutput(JSON.stringify([]))
.setMimeType(ContentService.MimeType.JSON);
}
var headers = rows[0];
var result = [];
for (var i = 1; i < rows.length; i++) {
var obj = {};
headers.forEach(function(h, idx) { obj[h] = rows[i][idx]; });
result.push(obj);
}
return ContentService.createTextOutput(JSON.stringify(result))
.setMimeType(ContentService.MimeType.JSON);
}
📋 Click code block to copy to clipboard
One URL for both POST (write) and GET (read)
Auto-refresh every 30 seconds
Pulls latest Sheet data automatically so you never need to reload
🎉 Bot published!
Send this link to your client to start their onboarding chatbot.
Anyone with this link can open the bot — treat it like a password and only share with the client.