Forwarded from Mark Kofman
Я вот недавно составил список по самым популярным CRMкам. Надеюсь поможет
https://www.linkedin.com/posts/markkofman_10-crms-i-actually-recommend-activity-7318675177477742595-9Np6
https://www.linkedin.com/posts/markkofman_10-crms-i-actually-recommend-activity-7318675177477742595-9Np6
LinkedIn
Choosing the right CRM for your needs | Mark Kofman posted on the topic | LinkedIn
Choosing a CRM? Here are 10 I actually recommend...
I’m not here to convince you Parma CRM is the only option.
I’m here to help you choose the right one - for your team, your needs, and your workflow.
Here are 10 CRMs I’d recommend depending on what you’re…
I’m not here to convince you Parma CRM is the only option.
I’m here to help you choose the right one - for your team, your needs, and your workflow.
Here are 10 CRMs I’d recommend depending on what you’re…
Breakcold - очень сильная заявка у ребят, но исполнение оказалось очень грустное 😔
Forwarded from Nick
Я пилю свой тул для автоматизации рассылок, у меня есть представление, где можно улучшить UX, тк сам занимаюсь аутричем, но хочу еще дополнительный фидбэк собрать)
Forwarded from Nick
Итак, для начала нужно зайти сюда и вставить этот скрипт. В excludeEmails мои почты, можете поменять их на свои, если хотите)
function sendCalendarReminders() {
const calendarId = 'primary';
const now = new Date();
const twoHoursLater = new Date(now.getTime() + 2 * 60 * 60 * 1000);
const excludeEmails = [
'nick@kotleron.com',
'nikita.s.rozhkov@gmail.com'
];
const events = CalendarApp.getCalendarById(calendarId)
.getEvents(now, twoHoursLater);
if (events.length === 0) {
Logger.log('Нет событий в ближайшие 2 часа.');
return;
}
events.forEach(event => {
const guests = event.getGuestList();
const eventTitle = event.getTitle();
const eventStartTime = event.getStartTime();
const subject = `Quick check-in: Our upcoming meeting "${eventTitle}"`;
const message = `
Hi there,
Just a quick note to confirm our upcoming meeting "${eventTitle}" scheduled for ${eventStartTime.toLocaleTimeString()}.
Let me know if anything changes or if you need to reschedule — happy to adjust.
Looking forward to chatting with you!
Best,
Ely Amanova
Co-Founder, UTXORD
`;
guests.forEach(guest => {
const emailAddress = guest.getEmail();
if (excludeEmails.includes(emailAddress.toLowerCase())) {
Logger.log(`Пропущен: ${emailAddress}`);
return;
}
GmailApp.sendEmail(emailAddress, subject, message);
Logger.log(`Отправлено: ${emailAddress}`);
});
});
}Google for Developers
Apps Script | Google for Developers
Develop high-quality, cloud-based solutions with ease.
Forwarded from Nick
Вот улучшенная версия скрипта:
function sendCalendarReminders() {
const calendarId = 'primary';
const now = new Date();
// Только события, начинающиеся через 2 часа ±1 минута
const windowStart = new Date(now.getTime() + 2 * 60 * 60 * 1000 - 60 * 1000); // -1 минута
const windowEnd = new Date(now.getTime() + 2 * 60 * 60 * 1000 + 60 * 1000); // +1 минута
const excludeEmails = [
'nick@kotleron.com',
'nikita.s.rozhkov@gmail.com'
];
const events = CalendarApp.getCalendarById(calendarId).getEvents(windowStart, windowEnd);
if (events.length === 0) {
Logger.log('Нет событий, начинающихся ровно через 2 часа.');
return;
}
events.forEach(event => {
const guests = event.getGuestList();
const eventTitle = event.getTitle();
const eventStartTime = event.getStartTime();
const subject = `Quick check-in: Our upcoming meeting "${eventTitle}"`;
const message = `
Hi there,
Just a quick note to confirm our upcoming meeting "${eventTitle}" scheduled for ${eventStartTime.toLocaleTimeString()} (Pacific Time).
Let me know if anything changes or if you need to reschedule — happy to adjust.
Looking forward to chatting with you!
Best,
Ely Amanova
Co-Founder, UTXORD
`;
guests.forEach(guest => {
const emailAddress = guest.getEmail().toLowerCase();
if (excludeEmails.includes(emailAddress)) {
Logger.log(`Пропущен (в списке исключений): ${emailAddress}`);
return;
}
// Отправка письма
GmailApp.sendEmail(emailAddress, subject, message);
Logger.log(`Отправлено: ${emailAddress}`);
});
});
}