CodaAPI.authenticate('abcd1234-efgh-5678-ijkl-1234mnop5678'); // Replace with your token.
// Replace as needed below.
TASKS_DOC_ID = 'UPDATE WITH YOUR DOC ID';
TASKS_TABLE_NAME = 'Tasks';
TASKS_TABLE_TASK_COLUMN = 'Task';
TASKS_TABLE_STATUS_COLUMN = 'Status';
EMAIL_SUBJECT = 'Coda ' + TASKS_TABLE_NAME + ' Reminders';
EMAIL_RECIPIENTS = 'leslie@example.com, ron@example.com';
function sendReminders() {
// Fetch overdue items.
var overdueQuery = '"' + TASKS_TABLE_STATUS_COLUMN + '":"Overdue"';
var overdueItems = CodaAPI.listRows(TASKS_DOC_ID, TASKS_TABLE_NAME, {query: overdueQuery, useColumnNames: true}).items;
Logger.log('Fetched %s overdue task(s)', overdueItems.length);
// Fetch items due today.
var dueTodayQuery = '"' + TASKS_TABLE_STATUS_COLUMN + '":"Due today"';
var dueTodayItems = CodaAPI.listRows(TASKS_DOC_ID, TASKS_TABLE_NAME, {query: dueTodayQuery, useColumnNames: true}).items;
Logger.log('Fetched %s task(s) due today', overdueItems.length);
// Exit early if there are no items.
if (!overdueItems.length && !dueTodayItems.length) {
Logger.log('No overdue tasks or tasks due today. Won\'t send an email!');
}
// Construct the email body.
var messageBody = 'Hi!\n\nHere\'s a friendly automated reminder, sent with Google Apps Script using the Coda API.';
if (overdueItems.length) {
messageBody += '\n\nThe following task(s) are overdue. Please complete them or update their due date:\n';
for (var item of overdueItems) {
messageBody += '\n • ' + item.values[TASKS_TABLE_TASK_COLUMN] + ' [' + item.browserLink + ']';
}
}
if (dueTodayItems.length) {
messageBody += '\n\nThe following task(s) are due today. Don\'t forget to finish them:\n';
for (var item of dueTodayItems) {
messageBody += '\n • ' + item.values[TASKS_TABLE_TASK_COLUMN] + ' [' + item.browserLink + ']';
}
}
// Add a signature. :)
var name = CodaAPI.whoami().name.split(" ")[0];
messageBody += '\n\nThanks,\n' + name;
// Send the email.
Logger.log('Sending email(s) to %s', EMAIL_RECIPIENTS);
MailApp.sendEmail(EMAIL_RECIPIENTS, EMAIL_SUBJECT, messageBody);
}