ИП Горелов Максим Николаевич 8 (915) 093-74-75
Добавляем данные в удаленный промпт с помощью скрипта. Например, один из скриптов забирает задачи из Google календаря или производит парсинг информации с сайта или соцсети или из RSS новостей и т.д. Так же с помощью нашего бота помощника можно сформировать скрипт для других целей.
Если у вас не получается самостоятельно с помощью бота создать нужный скрипт, напишите в группу https://t.me/+KQ6mUbTAtFQ4YWEy и мы поможем.
function updateCalendarEvents() {
var doc = DocumentApp.getActiveDocument();
var body = doc.getBody();
// Найдите начало и конец блока контента
var startElement = body.findText('##WEB_CONTENT_START##');
var endElement = body.findText('##WEB_CONTENT_END##');
if (!startElement || !endElement) {
Logger.log('Не найдены маркеры начала или конца блока контента');
return;
}
var startIndex = body.getChildIndex(startElement.getElement().getParent());
var endIndex = body.getChildIndex(endElement.getElement().getParent());
// Удалите существующий контент между маркерами
for (var i = endIndex - 1; i ﹥ startIndex; i--) {
body.removeChild(body.getChild(i));
}
// Получите события календаря на следующие 60 дней
var calendar = CalendarApp.getDefaultCalendar();
var now = new Date();
var endDate = new Date(now.getTime() + (60 * 24 * 60 * 60 * 1000)); // 60 дней вперед
var events = calendar.getEvents(now, endDate);
// Вставьте события в документ
for (var i = 0; i ﹤ events.length; i++) {
var event = events[i];
var title = event.getTitle();
var startTime = event.getStartTime();
var endTime = event.getEndTime();
var description = event.getDescription() || 'Нет описания';
var eventString = Utilities.formatDate(startTime, Session.getScriptTimeZone(), 'dd.MM.yyyy HH:mm') + ' - ' +
Utilities.formatDate(endTime, Session.getScriptTimeZone(), 'HH:mm') + '\n' +
title + '\n' +
description + '\n\n';
body.insertParagraph(startIndex + i + 1, eventString);
}
}
function createDailyTrigger() {
// Удаляем все существующие триггеры
var triggers = ScriptApp.getProjectTriggers();
for (var i = 0; i ﹤ triggers.length; i++) {
ScriptApp.deleteTrigger(triggers[i]);
}
// Создаем новый ежедневный триггер на 6:00 утра
ScriptApp.newTrigger('updateCalendarEvents')
.timeBased()
.everyDays(1)
.atHour(6)
.create();
}
function updateGoogleSheetData() {
var doc = DocumentApp.getActiveDocument();
var body = doc.getBody();
// Найдите начало и конец блока контента
var startElement = body.findText('##TABLE_START##');
var endElement = body.findText('##TABLE_END##');
if (!startElement || !endElement) {
Logger.log('Не найдены маркеры начала или конца блока контента');
return;
}
var startIndex = body.getChildIndex(startElement.getElement().getParent());
var endIndex = body.getChildIndex(endElement.getElement().getParent());
// Удалите существующий контент между маркерами
for (var i = endIndex - 1; i > startIndex; i--) {
body.removeChild(body.getChild(i));
}
// Получите данные из Google Таблицы
var sheetId = '1-XXXXXXXXXXXXXXXXXXXXXXXXX'; // Замените на ID вашей таблицы
var range = 'Лист1!A1:B300'; // Замените на нужный диапазон
var sheet = SpreadsheetApp.openById(sheetId).getSheetByName('Лист1');
var data = sheet.getRange(range).getValues();
// Вставьте данные в документ
var insertIndex = startIndex + 1; // Увеличиваем индекс на 1, чтобы начать вставку после ##TABLE_START##
for (var i = 0; i < data.length; i++) {
var row = data[i].filter(cell => cell).join(' | ').trim();
if (row) {
body.insertParagraph(insertIndex++, row);
}
}
}
function createDailyTrigger() {
// Удаляем все существующие триггеры
var triggers = ScriptApp.getProjectTriggers();
for (var i = 0; i < triggers.length; i++) {
ScriptApp.deleteTrigger(triggers[i]);
}
// Создаем новый ежедневный триггер на 6:00 утра
ScriptApp.newTrigger('updateGoogleSheetData')
.timeBased()
.everyDays(1)
.atHour(6)
.create();
}
function sendTelegramMessage(chatId, message) {
if (!message) {
Logger.log("Ошибка: текст сообщения пустой");
return;
}
if (!chatId) {
Logger.log("Ошибка: chatId не задан");
return;
}
var token = "7615497024:XXXXXXXXXXXXXXXXXXXXXXX"; // Вставь сюда токен своего Telegram-бота
var url = "https://api.telegram.org/bot" + token + "/sendMessage";
var payload = {
method: "POST",
contentType: "application/json",
payload: JSON.stringify({
chat_id: chatId,
text: message,
}),
muteHttpExceptions: true
};
try {
var response = UrlFetchApp.fetch(url, payload);
Logger.log("Ответ от Telegram: " + response.getContentText());
} catch (e) {
Logger.log("Ошибка при отправке сообщения в Telegram: " + e.toString());
}
}
function doPost(e) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Проекты");
var data = JSON.parse(e.postData.contents);
if (!data.message || !data.message.chat || !data.message.chat.id || !data.message.text) {
Logger.log("Ошибка: данные сообщения не полные");
return;
}
var chatId = data.message.chat.id;
var messageText = data.message.text;
var range = sheet.getDataRange();
var values = range.getValues();
for (var i = 1; i < values.length; i++) {
if (values[i][10] == chatId) { // Колонка K — chatId
sheet.getRange(i + 1, 9).setValue(messageText); // Колонка I — Отчета
sendTelegramMessage(chatId, "Ваш отчет успешно получен!");
break;
}
}
}
function sendMessageToProTalk(chatId, messageId, message) {
var apiKey = "11622_IXEpowAR8ZvHkjYs6WOgvsq6TBV4KCKy"; // Вставьте ваш API ключ
var url = "https://api.pro-talk.ru/api/v1.0/send_message";
var payload = {
"chat_id": chatId,
"message_id": messageId,
"message": message
};
var options = {
method: "POST",
contentType: "application/json",
headers: {
"Authorization": "Bearer " + apiKey
},
payload: JSON.stringify(payload)
};
try {
var response = UrlFetchApp.fetch(url, options);
Logger.log("Ответ от ProTalk: " + response.getContentText());
} catch (e) {
Logger.log("Ошибка при отправке сообщения в ProTalk: " + e.toString());
}
}
function sendMessagesFromSheet() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Проекты");
var data = sheet.getDataRange().getValues();
for (var i = 1; i < data.length; i++) {
var chatId = data[i][10]; // Колонка K — chat_id
var messageId = "m" + (i + 1); // Создаем уникальный message_id
var message = "Напоминание: осталось менее часа до дедлайна вашей задачи!";
if (chatId) {
sendMessageToProTalk(chatId, messageId, message);
} else {
Logger.log("Пропущена строка " + (i + 1) + ": chatId пустой");
}
}
}
function updateWebsiteContent() {
var doc = DocumentApp.getActiveDocument();
var body = doc.getBody();
// Найдите начало и конец блока контента
var startElement = body.findText('##WEBSITE_CONTENT_START##');
var endElement = body.findText('##WEBSITE_CONTENT_END##');
if (!startElement || !endElement) {
Logger.log('Не найдены маркеры начала или конца блока контента');
return;
}
var startIndex = body.getChildIndex(startElement.getElement().getParent());
var endIndex = body.getChildIndex(endElement.getElement().getParent());
// Удалите существующий контент между маркерами
for (var i = endIndex - 1; i > startIndex; i--) {
body.removeChild(body.getChild(i));
}
// Получите HTML-контент с вашего сайта
var url = 'https://wl.atiks.org/ru'; // Замените на ваш URL
var response;
try {
response = UrlFetchApp.fetch(url);
if (response.getResponseCode() !== 200) {
Logger.log('Ошибка получения контента: ' + response.getResponseCode());
return;
}
var html = response.getContentText();
if (!html) {
Logger.log('Получен пустой контент');
return;
}
} catch(e) {
Logger.log('Ошибка при запросе: ' + e.toString());
return;
}
var text = extractTextFromHtml(html);
// Проверка на пустой текст после обработки
if (!text.trim()) {
Logger.log('После обработки HTML получен пустой текст');
return;
}
// Вставьте очищенный текст в документ
body.insertParagraph(startIndex + 1, text);
Logger.log('Контент успешно обновлен');
}
function extractTextFromHtml(html) {
// Удаляем все HTML-теги
var text = html
// Удаляем style и script теги с содержимым
.replace(/<style[^>]*>[\s\S]*?<\/style>/gi, '')
.replace(/<script[^>]*>[\s\S]*?<\/script>/gi, '')
// Заменяем основные HTML-элементы на переносы строк
.replace(/<div>/ig, '\n')
.replace(/<\/div>/ig, '\n')
.replace(/<\/li>/ig, '\n')
.replace(/<li>/ig, ' * ')
.replace(/<\/ul>/ig, '\n')
.replace(/<\/p>/ig, '\n')
.replace(/<br\s*[\/]?>/gi, '\n')
// Удаляем все оставшиеся HTML-теги
.replace(/<[^>]+>/ig, '');
// Декодируем HTML-сущности
text = text
.replace(/ /g, ' ')
.replace(/&/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/"/g, '"')
.replace(/'/g, "'")
.replace(/'/g, "'");
// Удаляем лишние пробелы и пустые строки
text = text
.replace(/\n\s*\n/g, '\n') // Удаляем множественные пустые строки
.replace(/^\s+|\s+$/g, '') // Удаляем пробелы в начале и конце
.replace(/[ \t]+/g, ' '); // Заменяем множественные пробелы одним
return text;
}
function createDailyTrigger() {
// Удаляем все существующие триггеры
var triggers = ScriptApp.getProjectTriggers();
for (var i = 0; i < triggers.length; i++) {
ScriptApp.deleteTrigger(triggers[i]);
}
// Создаем новый ежедневный триггер на 6:00 утра
ScriptApp.newTrigger('updateWebsiteContent')
.timeBased()
.everyDays(1)
.atHour(6)
.create();
Logger.log('Ежедневный триггер успешно создан на 6:00');
}
// Дополнительная функция для тестирования
function testUpdate() {
updateWebsiteContent();
}
function updateAirtableData() {
var doc = DocumentApp.getActiveDocument();
var body = doc.getBody();
// Найдите начало и конец блока контента
var startElement = body.findText('##AIRTABLE_START##');
var endElement = body.findText('##AIRTABLE_END##');
if (!startElement || !endElement) {
Logger.log('Не найдены маркеры начала или конца блока контента');
return;
}
var startIndex = body.getChildIndex(startElement.getElement().getParent());
var endIndex = body.getChildIndex(endElement.getElement().getParent());
// Удалите существующий контент между маркерами
for (var i = endIndex - 1; i > startIndex; i--) {
body.removeChild(body.getChild(i));
}
// Получите данные из Airtable с фильтром
var apiKey = 'patXXXXXXX.XXXXXXXXXXX';
var baseId = 'appXXXXXXXXX';
var tableName = 'Functions';
var url = `https://api.airtable.com/v0/${baseId}/${encodeURIComponent(tableName)}?fields[]=${encodeURIComponent('Название')}&fields[]=${encodeURIComponent('Описание')}&filterByFormula=${encodeURIComponent('AND({Public}=2)')}`;
var options = {
method: 'get',
headers: {
'Authorization': `Bearer ${apiKey}`
}
};
var response = UrlFetchApp.fetch(url, options);
//Logger.log(response);
var data = JSON.parse(response.getContentText());
// Вставьте данные в документ
data.records.forEach(function(record) {
var title = record.fields['Название'] || 'Нет названия';
var description = record.fields['Описание'] || 'Нет описания';
//var recordString = `Название: ${title}\nОписание: ${description}\n\n`;
var recordString = `${title}\r${description.substring(0, 200)}...\r---\r`;
body.insertParagraph(startIndex + 1, recordString);
});
}
function createDailyTrigger() {
// Удаляем все существующие триггеры
var triggers = ScriptApp.getProjectTriggers();
for (var i = 0; i < triggers.length; i++) {
ScriptApp.deleteTrigger(triggers[i]);
}
// Создаем новый ежедневный триггер на 6:00 утра
ScriptApp.newTrigger('updateAirtableData')
.timeBased()
.everyDays(1)
.atHour(6)
.create();
}
© ProTalk 2023 ИП Горелов Максим Николаевич ИНН 500104951533 ОГРН 309500106900065
Новая, 8, 9 Реутов, Московская область 143964 Россия