Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 11 Next »

Переписка с пользователями

Простые сценарии, включающие в себя общение с пользователем.

Короткий опрос пользователя и возврат ответов

Сценарий ведет небольшую переписку с пользователем и возвращает ответы в зависимости от реакции пользователя.

Во время работы сценария все реплики пользователя будут передаваться в этот сценарий. После завершения сценария сервис будет ждать ответную реакцию пользователя в течение определенного в настройках времени. Если пользователь напишет реплику - она будет передана в базы знаний. Если пользователь не напишет реплику в указанное время - сервис закроет диалог.

 Нажмите здесь, чтобы развернуть пример сценария
//
// Сценарий простой переписки с пользователем
//
// Приветственное сообщение и первый вопрос
сообщениеПользователю.сШаблоном("Добрый день! Сейчас я помогу!") +
задатьПользователюВопрос("Я правильно понял, что вы заблудились в лесу?").сВариантамиОтвета("Да", "Нет").сохранитьРезультат("answer_1")+
//
// Если пользователь выберет нет - сценарий завершается
если("{answer_1} == Нет").то(
    сообщениеПользователю.сШаблоном("Ок, тогда я отключаюсь. Всего хорошего!") +
    завершить
)+
//
// Сообщения пользователю и начало опроса
сообщениеПользователю.сШаблоном("Если вы заблудились в лесу - главное сохранять спокойствие!") +
сообщениеПользователю.сШаблоном("Ваша главная задача - решить куда идти и выйти из леса.") +
задатьПользователюВопрос("Посмотрите вокруг - вы видите деревья?").сВариантамиОтвета("Да", "Нет").сохранитьРезультат("answer_2")+
//
// Пользователь ответил Нет - сценарий возвращает сообщение для этого случая и завершается 
если("{answer_2} == Нет").то(
    сообщениеПользователю.сШаблоном("Поздравляю! Вы не в лесу. Проблема решена. Всего хорошего") +
    завершить
)+
//
// Пользователь ответил Да - сценарий продолжает передавать сообщения пользователю
сообщениеПользователю.сШаблоном("Посмотрите на мох на стволах деревьев. Мох зеленый, зеленый цвет успокаивает.") +
сообщениеПользователю.сШаблоном("Обратите внимание на какой стороне дерева чаще всего встречается мох - это направление на север.") +
сообщениеПользователю.сШаблоном("Теперь важно вспомнить как вы пришли сюда и идти обратно.") +
задатьПользователюВопрос("Вы можете вспомнить откуда пришли?").сВариантамиОтвета("Да","Нет").сохранитьРезультат("answer_3") +
//
// Пользователь ответил Нет - сценарий возвращает сообщение для этого случая и завершается
если("{answer_3} == Нет").то(
    сообщениеПользователю.сШаблоном("Тогда вам все равно куда идти. Идите на север, ориентируясь на мох. Всего хорошего и удачи!") +
    завершить  
) + 
//
// Пользователь выбрал вариант Да - сценарий возвращает сообщение для этого случая и завершается
сообщениеПользователю.сШаблоном("Отлично! Идите обратно. Всего хорошего и удачи!") +
завершить

Короткий опрос пользователя и передача запроса операторам

Сценарий проведет первичный опрос пользователя и передаст диалог операторам. Сценарий можно использовать в документах базы знаний для предметных опросов или в качестве приветственного сценарий для общих для всех опросов.

 Нажмите здесь, чтобы развернуть пример сценария
//
// Сценарий первичного анкетирования и передачи запроса операторам
//
// Начинается опрос
задатьПользователюВопрос("Уточните, пожалуйста, что для Вас является приоритетным?").сВариантамиОтвета("Получение максимальной суммы","Простота получения").сохранитьРезультат("UserSaid_Priority")+
задатьПользователюВопрос("Укажите, на какие цели предназначается займ?").сохранитьРезультат("UserSaid_Priority_2")+
сообщениеПользователю.сШаблоном("Пожалуйста не закрывайте окно чата оператор подберет для Вас наиболее выгодное предложение!")+
//
// завершаем сценарий и передаем диалог операторам
завершитьИПеревестиНаОператора

Анкетирование пользователя и сохранение результатов в данные о пользователе

Сценарий проверит данные в профиле пользователя по списку и попросит пользователя указать отсутствующие данные. Список переменных указывается в самом сценарии. Для каждого вопроса предусмотрена кнопка Пропустить, нажатие пользователя на эту кнопку фиксируется в переменной пользователя как символ -.

 Нажмите здесь, чтобы развернуть пример сценария
//
// Сценарий заполнения данных пользователя
//
установитьПеременную("enteredEmail", "") +
установитьПеременную("enteredPhone", "") +
установитьПеременную("enteredFIO", "") +
установитьПеременную("enteredTall", "") +
установитьПеременную("enteredRegion", "") +
установитьПеременную("enteredLink", "") +
установитьПеременную("enteredCheck", "") +
//
// Опрос
если("{userFullName} == ").то(
	задатьПользователюВопрос("Укажите как вас зовут").сВариантамиОтвета("Пропустить").сохранитьРезультат("enteredFIO") 	
) +
если("{userEmail} == ").то(
	задатьПользователюВопрос("Укажите адрес вашей электронной почты").сВариантамиОтвета("Пропустить").сохранитьРезультат("enteredEmail") 	
) +
если("{userPhone} == ").то(
	задатьПользователюВопрос("Укажите номер вашего телефона").сВариантамиОтвета("Пропустить").сохранитьРезультат("enteredPhone") 	
) +
если("{userPayload.рост} == ").то(
	задатьПользователюВопрос("Укажите ваш рост").сВариантамиОтвета("Пропустить").сохранитьРезультат("enteredTall") 	
) +
если("{userPayload.регион} == ").то(
	задатьПользователюВопрос("Укажите ваш город").сВариантамиОтвета("Пропустить").сохранитьРезультат("enteredRegion") 	
) +
если("{userPayload.ссылка} == ").то(
	задатьПользователюВопрос("Укажите ссылку на ваш профиль").сВариантамиОтвета("Пропустить").сохранитьРезультат("enteredLink") 	
) +
//
// Замена нажатой кнопки Пропустить на символ -
если("{enteredFIO} == Пропустить").то(
	установитьПеременную("enteredFIO", "-")
) +
если("{enteredEmail} == Пропустить").то(
	установитьПеременную("enteredEmail", "-")
) +
если("{enteredPhone} == Пропустить").то(
	установитьПеременную("enteredPhone", "-")
) +
если("{enteredTall} == Пропустить").то(
	установитьПеременную("enteredTall", "-")
) +
если("{enteredRegion} == Пропустить").то(
	установитьПеременную("enteredRegion", "-")
) +
если("{enteredLink} == Пропустить").то(
	установитьПеременную("enteredLink", "-")
) +
//
// Проверка данных и сохранение тех переменных пользователя для которых в опросе были указаны данные
если("{enteredFIO} != ").то(
	установитьПеременнуюПользователю("userFullName", "{enteredFIO}") +
	установитьПеременную("enteredCheck", "1")
) +
если("{enteredEmail} != ").то(
	установитьПеременнуюПользователю("userEmail", "{enteredEmail}") +
	установитьПеременную("enteredCheck", "1")
) +
если("{enteredPhone} != ").то(
	установитьПеременнуюПользователю("userPhone", "{enteredPhone}") +
	установитьПеременную("enteredCheck", "1")
) +
если("{enteredTall} != ").то(
	установитьПеременнуюПользователю("userPayload.рост", "{enteredTall}") +
	установитьПеременную("enteredCheck", "1")
) +
если("{enteredRegion} != ").то(
	установитьПеременнуюПользователю("userPayload.регион", "{enteredRegion}") +
	установитьПеременную("enteredCheck", "1")
) +
если("{enteredLink} != ").то(
	установитьПеременнуюПользователю("userPayload.ссылка", "{enteredLink}") +
	установитьПеременную("enteredCheck", "1")
) +
//
// Если хоть одно значение было указано сценарий сообщит со сохранении данных
если("{enteredCheck} == 1").то(
	сообщениеПользователю.сШаблоном("Спасибо. Все записал.")
) + 
//
завершить

Опрос пользователя и получение информации из внешнего сервиса

Работа с API вызовами

Создание инцидента в ITSM системе через REST API

Классификация запроса и создание инцидента в ITSM системе через REST API

Регистрация запроса в CRM системе через REST API

Получение списка открытых инцидентов

Создание инцидента в ITSM системе через SOAP вызов

Получение данных через SQL запрос

Приветственные сценарии

Сценарии вызываемые операторами

Работа с таблицами Google Sheets

Простой поиск в таблице

Сценарий запрашивает у пользователя данные для поиска, ищет указанный текст по всем строкам и колонкам таблицы и сообщает о результатах поиска в формате “Да” или “Нет”

 Нажмите здесь, чтобы развернуть пример сценария
//
// Сценарий ищет текст в таблице Google Sheets по значению в любой колонке и возвращает сообщение "Да" если текст найден или "Нет" если не найден
//
// Укажите логин сервисного аккаунта Google
установитьПеременную("email", "autofaqaccount@autofaqproject.iam.gserviceaccount.com") +
// Укажите идентификатор таблицы Google Sheet
установитьПеременную("sheetId", "1UyTG1ag6kb-tKCD0Wc5nD21zE38TvYSiMMQ_vzwxWbs")+
// Укажите название листа в таблице Google Sheet
установитьПеременную("sheetName", "Sheet1")+
//
// Настройка источника текста для поиска - спросить у пользователя или взять текст изначального запроса
// запрос - изначальный запрос
// вопрос - спросить у пользователя
установитьПеременную("querySource", "вопрос")+
//
// Основной код сценария 
//
// Получение текста для поиска в таблице
если("{querySource} == запрос").то(
	установитьПеременную("searchQuery", "{platformInMessageQuery}")
)+
если("{querySource} == вопрос").то(
	задатьПользователюВопрос("Скажи номер").сохранитьРезультат("searchQuery")
)+
//
// Получение временного токена для работы с гугл таблицей
вызвать.внешнийСервис("https://denisk.autofaq.ai/gtoken","GET").сЗаголовками(("Content-Type", "application/json"),("charset", "utf-8")).сПараметрами(("email","{email}")).сохранитьРезультат(("message","message"),("token","token"),("status","status"))+
//
// Проверка результатов запроса, в случае ошибки сценарий сообщит об ошибке и завершится 
если("{http_code} > 210").то(
	комментарий("Сценарий не смог получить токен для работы с таблицей. {message}")+
	сообщениеПользователю.сШаблоном("Спасибо за участие, но что-то сломалось и я не могу связаться с Гугл.")+
	завершить
)+
если("{status} == error").то(
	комментарий("Сценарий не смог получить токен для работы с таблицей. {message}")+
	сообщениеПользователю.сШаблоном("Спасибо за опрос, но что-то сломалось и я не смог сохранить результаты.")+
	завершить
)+
//
// Отправка данных в гугл таблицу
вызвать.внешнийСервис("https://sheets.googleapis.com/v4/spreadsheets/{sheetId}/values/{sheetName}","GET").сЗаголовками(("Authorization", "Bearer {token}"),("Content-Type","application/json")).сПараметрами(("majorDimension", "COLUMNS")).сохранитьРезультатКакСтроку("result")+
если("{http_code} > 210").то(
	комментарий("Сценарий не смог отправить запрос на поиск в гугл таблице. Код {http_code}, ответ {result}")+
	сообщениеПользователю.сШаблоном("Спасибо за участие, но что-то сломалось и я не могу связаться с Google.")+
	завершить
)+
//
// Разбор ответа от гугл таблицы
выполнитьJs("""
var error = 0;
var message = '';
var rowIndex = 0;

try {
    var parsedresult = JSON.parse(result);
} catch(err) {
    var exit = {'error': 1, 'message':'Ошибка разбора ответа от Гугл'};
    var parsedresult = {};
}

if (parsedresult.hasOwnProperty('values')) {

    for (var i = 0; i < parsedresult.values.length; i++) {
        rowIndex = rowIndex + (parsedresult.values[i].indexOf(searchQuery) > -1 ? 1 : 0);
    }

    if (rowIndex > 0) { 
        var exit = {'error': 0, 'message':'Да'};
    } else {
        var exit = {'error': 0, 'message':'Нет'};
    }

} else {
    var exit = {'error': 1, 'message':'В ответе из таблицы не найдено данных'};
}

exit;
""") +
//
// В случае ошибки при поиске данных сценарий сообщит об ошибке и завершится
если("{error} == 1").то(
    сообщениеПользователю.сШаблоном("При получении данных из таблицы возникла ошибка. {message}")+
    завершить
) +
//
// Если при поиске данных ошибки не возникло, то сценарий сообщит о результате поиска и завершится 
сообщениеПользователю.сШаблоном("{message}")+
завершить

Поиск в таблице и возврашение всех данных из строки с заголовками

Сценарий запрашивает у пользователя данные для поиска, ищет указанный текст в первой колонке и возвращает данные из всей строки в формате “Заголовок колонки”: “Значение в строке”

 Нажмите здесь, чтобы развернуть пример сценария
//
// Сценарий ищет строку в таблице Google Sheets по значению в первой колонке и возвращает данные из всей строки
//
// Укажите логин сервисного аккаунта Google
установитьПеременную("email", "account_name@project_name.iam.gserviceaccount.com") +
// Укажите идентификатор таблицы Google Sheet
установитьПеременную("sheetId", "ХХХХХХ-ХХХХХХХХХХХХХ")+
// Укажите название листа в таблице Google Sheet
установитьПеременную("sheetName", "Sheet1")+
//
// Укажите источник текста для поиска - спросить у пользователя или взять текст изначального запроса
// запрос - текст запроса, с которым пользователь пришел в сценария
// вопрос - спросить у пользователя
установитьПеременную("querySource", "вопрос")+
//
// Основной код сценария 
//
// Получение текста для поиска в таблице
если("{querySource} == запрос").то(
	установитьПеременную("searchQuery", "{platformInMessageQuery}")
)+
если("{querySource} == вопрос").то(
	задатьПользователюВопрос("Скажи номер").сохранитьРезультат("searchQuery")
)+
//
// Получение временного токена для работы с гугл таблицей
вызвать.внешнийСервис("https://denisk.autofaq.ai/gtoken","GET").сЗаголовками(("Content-Type", "application/json"),("charset", "utf-8")).сПараметрами(("email","{email}")).сохранитьРезультат(("message","message"),("token","token"),("status","status"))+
//
// Проверка результатов запроса, в случае ошибки сценарий сообщит об ошибке и завершится 
если("{http_code} > 210").то(
	комментарий("Сценарий не смог получить токен для работы с таблицей. {message}")+
	сообщениеПользователю.сШаблоном("Спасибо за участие, но что-то сломалось и я не могу связаться с Гугл.")+
	завершить
)+
если("{status} == error").то(
	комментарий("Сценарий не смог получить токен для работы с таблицей. {message}")+
	сообщениеПользователю.сШаблоном("Спасибо за опрос, но что-то сломалось и я не смог сохранить результаты.")+
	завершить
)+
//
// Отправка запроса в Google Sheets
вызвать.внешнийСервис("https://sheets.googleapis.com/v4/spreadsheets/{sheetId}/values/{sheetName}","GET").сЗаголовками(("Authorization", "Bearer {token}"),("Content-Type","application/json")).сПараметрами(("majorDimension", "COLUMNS")).сохранитьРезультатКакСтроку("result")+
//
// Проверка результатов запроса, в случае ошибки сценарий сообщит об ошибке и завершится
если("{http_code} > 210").то(
	комментарий("Сценарий не смог отправить запрос на поиск в гугл таблице. Код {http_code}, ответ {result}")+
	сообщениеПользователю.сШаблоном("Спасибо за участие, но что-то сломалось и я не могу связаться с Google.")+
	завершить
)+
//
// Разбор ответа от гугл таблицы
выполнитьJs("""
var error = 0;
var message = '';
var rowIndex = 0;

try {
	var parsedresult = JSON.parse(result);
} catch(err) {
	var exit = {'error': 1, 'message':'Ошибка разбора ответа от Гугл'};
	var parsedresult = {};
}

if (parsedresult.hasOwnProperty('values') && parsedresult.values[0].length > 1) {
	var rowIndex = parsedresult.values[0].indexOf(searchQuery);
	
	if (rowIndex > 0) { 
		for (var i = 0; i < parsedresult.values.length; i++) {
			if (parsedresult.values[i].length > rowIndex) {
				message = message + parsedresult.values[i][0].toString() + ': ' + parsedresult.values[i][rowIndex] + '<br>';
			}			
		}
		var exit = {'error': 0, 'message':message};
	} else {
		var exit = {'error': 1, 'message':'Значение не найдено в первой колонке таблицы'};
	}

} else {
	var exit = {'error': 1, 'message':'В ответе из таблицы не найдено данных'};
}

exit;
""") +
//
// В случае ошибки при поиске данных сценарий сообщит об ошибке и завершится
если("{error} == 1").то(
	сообщениеПользователю.сШаблоном("При получении данных из таблицы возникла ошибка. {message}")+
	завершить
) +
//
// Если при поиске данных ошибки не возникло, то сценарий сообщит найденные данные и завершится 
сообщениеПользователю.сШаблоном("Найдены следующие данные")+
сообщениеПользователю.сШаблоном("{message}")+
завершить

Опрос пользователя и запись данных в новую строку таблицы

Сценарий проверяет наличие данных о пользователе в таблце и если данных в таблице нет то проводит опрос и сохраняет полученную информацию в новой строке таблицы.

Сценарий получает адрес электронной почты из данных пользователя. Если адрес не указан - запрашивает его у пользователя. Сценарий ищет адрес в первой колонке таблицы. Если адрес электронной почты пользователя найден, то сценарий завершает работу. Если адрес не найден - проводит опрос и сохраняет данные в новую строку таблицы.

 Нажмите здесь, чтобы развернуть пример сценария
//
// Сценарий ищет текст в таблице Google Sheets по значению в любой колонке и возвращает сообщение "Да" если текст найден или "Нет" если не найден
//
// Укажите логин сервисного аккаунта Google
установитьПеременную("email", "account_name@project_name.iam.gserviceaccount.com") +
// Укажите идентификатор таблицы Google Sheet
установитьПеременную("sheetId", "ХХХХХХ-ХХХХХХХХХХХХХ")+
// Укажите название листа в таблице Google Sheet
установитьПеременную("sheetName", "Sheet1")+
//
// Основной код сценария 
//
//
// Получение временного токена для работы с гугл таблицей
вызвать.внешнийСервис("https://denisk.autofaq.ai/gtoken","GET").сЗаголовками(("Content-Type", "application/json"),("charset", "utf-8")).сПараметрами(("email","{email}")).сохранитьРезультат(("message","message"),("token","token"),("status","status"))+
//
// Проверка результатов запроса, в случае ошибки сценарий сообщит об ошибке и завершится 
если("{http_code} > 210").то(
	комментарий("Сценарий не смог получить токен для работы с таблицей. {message}")+
	сообщениеПользователю.сШаблоном("Спасибо за участие, но что-то сломалось и я не могу связаться с Гугл.")+
	завершить
)+
если("{status} == error").то(
	комментарий("Сценарий не смог получить токен для работы с таблицей. {message}")+
	сообщениеПользователю.сШаблоном("Спасибо за опрос, но что-то сломалось и я не смог сохранить результаты.")+
	завершить
)+
//
// Получение адреса электронной почты
установитьПеременную("enteredEmail", "{userEmail}") +
если("{enteredEmail} == ").то(
	задатьПользователюВопрос("Укажите адрес вашей электронной почты").сохранитьРезультат("enteredEmail") +
	установитьПеременнуюПользователю("userEmail", "{enteredEmail}")
) +
//
// Отправка запроса на поиск адреса в гугл таблицу
вызвать.внешнийСервис("https://sheets.googleapis.com/v4/spreadsheets/{sheetId}/values/{sheetName}","GET").сПараметрами(("majorDimension","COLUMNS")).сЗаголовками(("Authorization", "Bearer {token}"),("Content-Type","application/json")).сохранитьРезультатКакСтроку("checkLoginResult") +
//
// Проверка результатов запроса, в случае ошибки сценарий сообщит об ошибке и завершится 
если("{http_code} > 210").то(
	комментарий("Сценарий не смог отправить запрос на поиск в гугл таблице. Код ответа {http_code}, ответ {checkLoginResult}")+
	сообщениеПользователю.сШаблоном("Спасибо за участие, но что-то сломалось и я не могу связаться с центром.")+    
    завершить
)+
выполнитьJs("""
var checkLoginResultParsed = JSON.parse(checkLoginResult);
if ("values" in checkLoginResultParsed) {
	if (checkLoginResultParsed['values'][0].indexOf(userLogin) != -1) {
		var checkLoginResultData = 1;
	} else {
		var checkLoginResultData = 0;
	}
} else {
	var checkLoginResultData = 0;
}
var exit = {'checkLoginResultData':checkLoginResultData};
exit;
""") +
//
// Если адрес почты пользователя найден в таблице то сценарий сообщает об этом пользователю и завершается
если("{checkLoginResultData} == 1").то(
	комментарий("Логин пользователя {userLogin} уже найден в таблице, поэтому опрос останавливаю")+	
	сообщениеПользователю.сШаблоном("Вы уже проходили этот опрос. Второй раз спрашивать нет необходимости")+	
	завершить
)+
//
// Сценарий начинает опрос пользователя
задатьПользователюВопрос("Пожалуйста назовите ваше ФИО").сохранитьРезультат("fio") +
задатьПользователюВопрос("Пожалуйста назовите ваш отдел").сохранитьРезультат("otdel") +
задатьПользователюВопрос("Пожалуйста назовите вашу должность").сохранитьРезультат("dolznost") +
задатьПользователюВопрос("Оцените удобство нашего сервиса").сВариантамиОтвета("Все устраивает", "Возникают трудности", "Комментарий").сохранитьРезультат("udobstvo_main") +
установитьПеременную("udobstvo_add", " ")+
если("{udobstvo_main} == Возникают трудности").то(задатьПользователюВопрос("Какие у вас трудности?").сохранитьРезультат("udobstvo_add")) +
если("{udobstvo_main} == Комментарий").то(задатьПользователюВопрос("Напишите ваш комментарий").сохранитьРезультат("udobstvo_add")) +
// Открытые вопросы
задатьПользователюВопрос("Напишите какие дополнительные сервисы Вы хотели бы видеть").сохранитьРезультат("new_services") +
задатьПользователюВопрос("Напишите Ваши предложения и пожелания").сохранитьРезультат("suggestions") +
// 
выполнитьJs("""
var now = new Date();
var login = enteredEmail;
var udobstvo = udobstvo_main + udobstvo_add;

var requestBody = {"range": sheetName+"!A1:O1", "majorDimension": "ROWS", "values":[[now, login, fio, otdel, dolznost, udobstvo, new_services, suggestions]]};
var requestBodyJSON = JSON.stringify(requestBody);

var exit = {'requestBodyJSON':requestBodyJSON};
exit;
""") +
//
// Получение временного токена для работы с гугл таблицей
вызвать.внешнийСервис("https://denisk.autofaq.ai/gtoken","GET").сЗаголовками(("Content-Type", "application/json"),("charset", "utf-8")).сПараметрами(("email","{email}")).сохранитьРезультат(("message","message"),("token","token"),("status","status"))+
//
// Проверка результатов запроса, в случае ошибки сценарий сообщит об ошибке и завершится 
если("{http_code} > 210").то(
	комментарий("Сценарий не смог получить токен для работы с таблицей. {message}")+
	сообщениеПользователю.сШаблоном("Спасибо за участие, но что-то сломалось и я не могу связаться с центром.")+    
    завершить
)+
если("{status} == error").то(
	комментарий("Сценарий не смог получить токен для работы с таблицей. {message}")+
	сообщениеПользователю.сШаблоном("Спасибо за опрос, но что-то сломалось и я не смог сохранить результаты.")+    
    завершить
)+
//
// Отправка запроса на добавление строки в таблицу
вызвать.внешнийСервис("https://sheets.googleapis.com/v4/spreadsheets/{sheetId}/values/Sheet1!A1:O1:append","POST").сПараметрами(("valueInputOption","USER_ENTERED")).сЗаголовками(("Authorization", "Bearer {token}"),("Content-Type","application/json")).сТеломСообщения("{requestBodyJSON}").сохранитьРезультатКакСтроку("result")+
//
// Проверка результатов запроса, в случае ошибки сценарий сообщит об ошибке и завершится 
если("{http_code} > 210").то(
	комментарий("Сценарий не смог отправить запрос на добавление строчки в гугл таблице. Код ответа {http_code}")+
	сообщениеПользователю.сШаблоном("Спасибо за участие, но что-то сломалось и я не могу связаться с центром.")+    
    завершить
)+
комментарий("Добавил строчку в гугл таблицу.")+
сообщениеПользователю.сШаблоном("Все записал. Большое спасибо за участие!")+
завершить
  • No labels