...
Далее, и в случае, когда клиент выбрал «Да» в элементе Beesender: Сообщение с кнопками «Можем ли мы позвонить по этому номеру?», чатбот запрашивает предпочтительное время для звонка с помощью элемента Beesender: Сообщение с кнопками «В какое время Вы хотите, чтобы мы Вам позвонили?». После этого чат-бот чатбот подтверждает пользователю, что с ним скоро свяжутся, используя элемент текстового сообщения Beesender: «Спасибо! Мы Вам скоро вам позвоним». Затем с помощью элемента формулы set Subject Записать значение текстовый параметр Subject Значение заполняется следующим значением: "Принять заявку на обратный звонок. Источник: чат-ботчатбот. Имя: " +{Имя контакта}+", номер телефона: "+ {Телефон}+", время звонка: "+{Ответить}+"."
Затем с помощью элемента данных Add Добавить данные «Создать активность» создается новая активность со следующими параметрами:
Контакт: ContactID
Тема: текстовый параметр Значение
Тип: Звонок
Показать в календаре: True
Срок: Текущее время + 1 день
Beesender Chat: ID текущего чата
Beesender – Frequently Asked Questions
...
The Beesender - Frequently Asked Questions состоит из трех подпроцессов:
Beesender – Find question category
Beesender – Find Question
Beesender – Find Answer
и FAQ меню.
Если результатом процесса Beesender - Find question category является Вернуться в главное меню, то заполняется параметр FAQResult, который берется в основном процессе Welcome Bot.
Если результатом процесса Beesender — Find Question является Возврат в главное меню, то также заполняется параметр FAQResult, который берется в основном процессе Welcome Bot.
Если результатом процесса Beesender — Find Question является изменение категории, то чатбот возвращается к подпроцессу выбора категории.
В FAQ меню есть такие кнопки, как
Вернуться назад
Изменить категорию
Вернуться в главное меню
Закрыть чат
В зависимости от выбранной опции чат-бот возвращается к подпроцессу выбора вопроса или к подпроцессу выбора категории.
При выборе вариантов Вернуться в главное меню или Закрыть чат заполняется параметр FAQResult, который берется в основном процессе Welcome Bot.
Beesender – Find question category
...
В начале процесса Beesender - Find question category process коллекция категорий часто задаваемых вопросов, соответствующих выбранному пользователем языку, получается с помощью элемента сценария «Получить коллекцию категорий».
Code Block | ||
---|---|---|
| ||
var phraseTranslationId = Get<Guid>("BeesenderWelcomeBotPhraseTranslationId");
var sel = new Select(UserConnection)
.Distinct()
.Column("BFAQC","Id")
.Column("BFAQC","BeesenderFAQCategoryName")
.From("BeesenderFAQCategory").As("BFAQC")
.InnerJoin("BeesenderFAQQuestion").As("BFAQQ").On("BFAQC","Id").IsEqual("BFAQQ","BeesenderCategoryId")
.Where("BFAQC","BeesenderWelcomeBotPhraseTranslationId").IsEqual(Column.Parameter(phraseTranslationId))
as Select;
var selection = new List<string>();
using (DBExecutor dbExecutor = UserConnection.EnsureDBConnection())
{
using (IDataReader dataReader = sel.ExecuteReader(dbExecutor))
{
while(dataReader.Read())
{
if(!dataReader.IsDBNull(1))
{
var item = dataReader.GetGuid(0).ToString() + "|" + dataReader.GetString(1);
selection.Add(item);
}
}
}
};
ObjectList<string> records = ObjectList.Create(selection);
Set<ObjectList<string>>("ButtonsCollection", records);
if(selection.Count == 0)
{
Set<bool>("EmptyQuery", true);
}
return true; |
Если таких категорий нет, процесс завершается.
В остальных случаях элемент скрипта 'заполнение кнопок' используется для заполнения кнопок, которые будут отображаться в элементе Beesender: Сообщение с кнопками 'Выберите категорию'.
Code Block | ||
---|---|---|
| ||
int maxcount = 8;
int currentPage = Get<int>("CurrentPage");
List<string> records = Get<ObjectList<string>>("ButtonsCollection");
var phrasePrevious = Get<string>("PhrasePrevious");
var phraseNext = Get<string>("PhraseNext");
for (int i = 0; i < maxcount; i++)
{
Set<string>($"Button{i+1}","");
}
int countPage = (records.Count-(maxcount-1)-(records.Count-(maxcount-1))%(maxcount-2))/(maxcount-2)+1;
int recordsCountLastPage = (records.Count-(maxcount-1))%(maxcount-2);
if (recordsCountLastPage>0 && maxcount!=records.Count)
{
recordsCountLastPage = (records.Count-(maxcount-1))%(maxcount-2);
if (recordsCountLastPage>1)
{
countPage++;
}
}
if (countPage==1 || records.Count==1)
{
int i=1;
foreach (string record in records)
{
string text = record.Substring(record.IndexOf("|")+1);
Set<string>($"Button{i}", text);
i++;
}
}
else
{
if (currentPage<=countPage)
{
for (int b=1; (b<=maxcount) || (b <recordsCountLastPage);b++)
{
int index = b-1+(currentPage-1)*(maxcount-2);
if (b==1 && currentPage!=1)
{
Set<string>($"Button{b}", phrasePrevious);
}
else
{
if (b==maxcount && currentPage!=countPage)
{
Set<string>($"Button{b}", phraseNext);
}
else
{
if (index<records.Count)
{
string text = records[index].Substring(records[index].IndexOf("|")+1);
Set<string>($"Button{b}", text);
}
}
}
}
}
else
{
return true;
}
}
return true; |
Если пользователь нажимает кнопку категории, значение выбранного идентификатора категории сохраняется с помощью элемента сценария.
Далее с помощью элемента чтения данных Читать текущий FrequencyCount получают значение поля Frequency Count для выбранной категории, а с помощью элемента модификации данных Записать FrequencyCount+1 значение Frequency Count увеличивают на 1. Это необходимо для анализа частоты выбора категории. На этом процесс Beesender — Find question category завершается.
Если категорий более 8, среди кнопок появляется кнопка → для перехода на следующую страницу выбора категории, а кнопка ← появляется для возврата на предыдущую страницу выбора категории.
Точно так же сообщение Beesender: Сообщение с кнопками «Выбрать категорию» всегда включает в себя кнопку «Назад в главное меню» в конце. Если пользователь выбирает опцию «Вернуться в главное меню», параметр «GoTo» заполняется «Вернуться в главное меню» с использованием элемента формулы, который используется в процессе Beesender — Часто задаваемые вопросы. На этом процесс Beesender — Find question category завершается.
Beesender – Find Question
...
Процесс Beesender - Find question аналогичен процессу Beesender - Find question category, но элемент сценария 'список вопросов' используется для получения набора вопросов, соответствующих категории, выбранной пользователем.
Code Block | ||
---|---|---|
| ||
var categoryId = Get<Guid>("CategoryId");
var phraseTranslationId = Get<Guid>("BeesenderWelcomeBotPhraseTranslationId");
var noCategory = Get<bool>("NoCategory");
Select sel;
if (noCategory)
{
sel = new Select(UserConnection)
.Column("Id")
.Column("BeesenderQuestion")
.From("BeesenderFAQQuestion")
.Where("BeesenderCategoryId").IsNull()
.And("BeesenderWelcomeBotPhraseTranslationId").IsEqual(Column.Parameter(phraseTranslationId))
as Select;
}
else
{
sel = new Select(UserConnection)
.Column("Id")
.Column("BeesenderQuestion")
.From("BeesenderFAQQuestion")
.Where("BeesenderCategoryId").IsEqual(Column.Parameter(categoryId))
.And("BeesenderWelcomeBotPhraseTranslationId").IsEqual(Column.Parameter(phraseTranslationId))
as Select;
}
var selection = new List<string>();
using (DBExecutor dbExecutor = UserConnection.EnsureDBConnection())
{
using (IDataReader dataReader = sel.ExecuteReader(dbExecutor))
{
while(dataReader.Read())
{
if(!dataReader.IsDBNull(1))
{
var item = dataReader.GetGuid(0).ToString() + "|" + dataReader.GetString(1);
selection.Add(item);
}
}
}
};
ObjectList<string> records = ObjectList.Create(selection);
Set<ObjectList<string>>("QuestionCollection", records);
if(selection.Count == 0)
{
Set<bool>("EmptyQuery", true);
}
return true; |
Элемент Beesender: Сообщение с кнопками «Выберите вопрос» аналогичен элементу «Выберите категорию», за исключением добавления новой кнопки — «Изменить категорию». При выборе этой кнопки параметр GoTo заполняется значением «Изменить категорию». Этот параметр используется в процессе Beesender — FAQ.
В конце процесса Beesender - Find Question частота выбранного вопроса также увеличивается на 1. Затем с помощью элемента «прочитать Контакт» получается контакт, связанный с чатом, и создается новая запись в FAQ в объекте чата с помощью элемента Добавить данные «добавить вопрос в FAQ в чате». Запись включает в себя следующую информацию:
Beesender Chat – идентификатор текущего чата
Контакт — идентификатор идентифицировать контакта в чате.
Дата создания — текущая дата и время
Категория FAQ – значение категории выбранного вопроса
FAQ Question – значение вопроса, выбранного пользователем.
Этот элемент используется в качестве детали, которая отображается на вкладке FAQ в карточке чата и вкладке Интересует в карточке контакта. Также используется в аналитике в разделе Чаты.
Beesender – Find Answer
...
Элемент данных Читать данные «если ответ существует» используется для получения ответа на выбранный вопрос.