| Оглавление | ||
|---|---|---|
|
Функции общего назначения
del(varName string)
Назначение: удаление локальной или модульной переменной.
...
| Блок кода | ||
|---|---|---|
| ||
$localVar = 123
#moduleVar = true
del("$localVar") // Удаляет локальную переменную $localVar
del("localVar") // Тоже самое что и del("$localVar")
del("#moduleVar") // Удаляет переменную с областью видимости в пределах модуля |
Математические функции
math.pos(num mixed) number
Назначение: фактически преобразует аргумент к числу. Эквивалент унарной операции "+".
...
| Блок кода | ||
|---|---|---|
| ||
$a = math.pos(true) // $a будет равно 1 $a = math.pos(false) // $a будет равно 0 $a = math.pos(nil) // $a будет равно 0 $a = +true // $a будет равно 1, то же что и math.pos(true) |
math.neg(num number) number
Назначение: меняет знак числа. Эквивалент унарной операции "-".
...
| Блок кода | ||
|---|---|---|
| ||
$a = math.neg(-1) // $a будет равно 1 $a = math.neg(1) // $a будет равно -1 $a = math.neg(0) // $a будет равно 0 $a = -(-10) // $a будет равно 10, то же что и math.neg(-10) |
math.inv(num number) number
Назначение: инверсия бит числа. Эквивалент унарной операции "~".
...
| Блок кода | ||
|---|---|---|
| ||
$a = math.inv(5) // $a равно 3 $a = ~5 // то же, что и предыдущая строка |
math.not(num number) bool
Назначение: логическое отрицание числа. Эквивалент унарной операции "!".
...
| Блок кода | ||
|---|---|---|
| ||
$a = math.not(5) // $a равно false $a = math.not(0) // $a равно true $a = !0 // то же, что и предыдущая строка |
math.add(num1 number, num2 number, precision int = 12) number
Назначение: сложение чисел. Эквивалент бинарной операции "+".
...
| Блок кода | ||
|---|---|---|
| ||
$a = math.add(1.5, 3.5) // $a равно 5 $a = 1.5 + 3.5 // то же, что и предыдущая строка $a = math.add(1.000006, 2.1, 5) // $a равно 3.10001 |
math.sub(num1 number, num2 number, precision int = 12) number
Назначение: разность чисел. Эквивалент бинарной операции "-".
...
| Блок кода | ||
|---|---|---|
| ||
$a = math.sub(1.5, 3.5) // $a равно -2 $a = 1.5 - 3.5 // то же, что и предыдущая строка $a = math.sub(2.100006, 1.1, 5) // $a равно 1.00001 |
math.mul(num1 number, num2 number, precision int = 12) number
Назначение: произведение чисел. Эквивалент бинарной операции "*".
...
| Блок кода | ||
|---|---|---|
| ||
$a = math.mul(1.5, 3.5) // $a равно 5.25 $a = 1.5 * 3.5 // то же, что и предыдущая строка $a = math.mul(1.2345, 1.234, 5) // $a равно 1.52337 |
math.div(num1 number, num2 number, precision int = 12) number
Назначение: частное чисел. Эквивалент бинарной операции "/".
...
| Блок кода | ||
|---|---|---|
| ||
$a = math.div(1.5, 3.5) // $a равно 0.428571428571 $a = 1.5 / 3.5 // то же, что и предыдущая строка $a = math.div(1, 3, 5) // $a равно 0.33333 |
math.idiv(num1 number, num2 number) int
Назначение: целочисленное деление чисел. Эквивалент бинарной операции "\".
...
| Блок кода | ||
|---|---|---|
| ||
$a = math.idiv(2.5, 0.3) // $a равно 8 $a = 2.5 \ 0.3 // то же, что и предыдущая строка |
math.mod(num1 number, num2 number, precision int = 12) number
Назначение: остаток от деления двух чисел. Эквивалент бинарной операции "%".
...
| Блок кода | ||
|---|---|---|
| ||
$a = math.mod(3.5, 1.5) // $a равно 0.5 $a = 3.5 % 1.5 // то же, что и предыдущая строка $a = math.mod(1/3, 2/7, 5) // $a равно 0.04762 |
math.pow(base number, power number, precision int = 12) number
Назначение: возведение числа base в степень power. Эквивалент бинарной операции "**".
...
| Блок кода | ||
|---|---|---|
| ||
$a = math.pow(1.5, 3.5) // $a равно 4.133513940947 $a = 1.5 ** 3.5 // то же, что и предыдущая строка $a = math.pow(1.3, 7.1, 5) // $a равно 0.44166 |
math.sqrt(num number, precision int = 12) number
Назначение: извлечение квадратного корня.
...
| Блок кода | ||
|---|---|---|
| ||
$a = math.sqrt(3.14) // $a равно 1.772004514667 $a = math.sqrt(1.7, 5) // $a равно 0.30384 |
math.round(num number, precision int) number
Назначение: округление числа до требуемого знака после запятой.
...
| Блок кода | ||
|---|---|---|
| ||
$a = math.round(3.14159265358979323846264338327950288419716, 17) // $a равно 3.14159265358979324 $a = math.round(3.14159265358979323846264338327950288419716, 2) // $a равно 3.14 $a = math.round(3.14159265358979323846264338327950288419716, 0) // $a равно 3 |
Функции для работы со строками
str.len(str string) int
Назначение: определение длины строки в символах.
...
| Блок кода | ||
|---|---|---|
| ||
$str = "Какая-то строка" $len = str.len($str) // $len будет содержать 15 |
str.lower(str string) string
Назначение: преобразовапние символов строки в нижний регистр.
...
| Блок кода | ||
|---|---|---|
| ||
$str = "СтРоКа" $lower = str.lower($str) // $lower будет содержать "строка" |
str.upper(str string) string
Назначение: преобразование символов строки в верхний регистр.
...
| Блок кода | ||
|---|---|---|
| ||
$str = "СтРоКа" $upper = str.upper($str) // $lower будет содержать "СТРОКА" |
str.ucfirst(str string) string
Назначение: преобразование первого символа строки в верхний регистр.
...
| Блок кода | ||
|---|---|---|
| ||
$str = str.ucfirst("строка") // $str будет содержать "Строка" |
str.lcfirst(str string) string
Назначение: преобразование первого символа строки в нижний регистр.
...
| Блок кода | ||
|---|---|---|
| ||
$str = str.ucfirst("Строка") // $str будет содержать "строка" |
str.letter(str string, index int) string
Назначение: получение указанного символа строки.
...
| Блок кода | ||
|---|---|---|
| ||
$str = "Слово" $firstLetter = str.letter($str, 0) // Первая буква $lastLetter = str.letter($str, -1) // Последняя буква |
str.first(str string, index int = 0) string
Назначение: получение указанного символа строки начиная с начала строки.
...
| Блок кода | ||
|---|---|---|
| ||
$str = "Слово" $firstLetter = str.first($str) // Первая буква $secondLetter = str.first($str, 1) // Вторая буква |
str.last(str string, index int = 0) string
Назначение: получение указанного символа строки начиная с конца строки.
...
| Блок кода | ||
|---|---|---|
| ||
$str = "Слово" $lastLetter = str.last($str) // Последняя буква $penultLetter = str.last($str, 1) // Предпоследняя буква |
str.concat(str1 string, str2 string) string
Назначение: объединяет две строки в одну.
...
| Блок кода | ||
|---|---|---|
| ||
$str1 = "один" $str2 = "два" $str = str.concat($str1, $str2) // $str будет содержать "одиндва" |
str.sub(str string, offset int, length int = nil) string
Назначение: возвращает подстроку строки str, начинающейся с offset символа по счету и длиной length символов.
...
| Блок кода | ||
|---|---|---|
| ||
$sub = str.sub("abcdef", 1) // $sub равен bcdef
$sub = str.sub("abcdef", 1, 3) // $sub равен bcd
$sub = str.sub("abcdef", 0, 4) // $sub равен abcd
$sub = str.sub("abcdef", 0, 8) // $sub равен abcdef
$sub = str.sub("abcdef", -1, 1) // $sub равен f
$sub = str.sub("abcdef", -1) // $sub равен f
$sub = str.sub("abcdef", -2) // $sub равен ef
$sub = str.sub("abcdef", -3, 1) // $sub равен d
$sub = str.sub("abcdef", 0, -1) // $sub равен abcde
$sub = str.sub("abcdef", 2, -1) // $sub равен cde
$sub = str.sub("abcdef", 4, -4) // $sub равен пустой строке
$sub = str.sub("abcdef", -3, -1) // $sub равен de |
str.join(arr Collection, separator string = "") string
Назначение: объединяет элементы коллекции (кортежа, списка или ассоциативного массива) в строку.
...
| Блок кода | ||
|---|---|---|
| ||
$str = str.join([1, 2, 3, 4, 5], "-") // $str будет содержать "1-2-3-4-5"
$str = str.join(("a", "b", "c")) // $str будет содержать "abc"
$str = str.join({"a": "один", "b": "два"}, " + ") // $str будет содержать "один + два"
$str = str.join(["одно"], "/") // $str будет содержать "одно"
$str = str.join([], "/") // $str будет содержать "" |
str.split(str string, separator string = "", limit int = 0) List
Назначение: разбивает строку на части использую separator в качестве разделителя.
...
| Блок кода | ||
|---|---|---|
| ||
$letters = str.split("абвгде") // Получили список букв слова
$words = str.split("один два три", " ") // Получили список слов
$words = str.split("один два три", " ", 1) // words содержит ["один", "два три"] |
str.replace(str string, search string, replace string) string
Назначение: ищет все вхождения подстроки в строке и заменяет их на заданное значение.
...
| Блок кода | ||
|---|---|---|
| ||
$str = str.replace("мама мыла раму", "рам", "Даш") // $str содержит "мама мыла Дашу" |
str.match(str string, pattern string) bool
Назначение: выполняет проверку данной строки регулярному выражению.
...
| Блок кода | ||
|---|---|---|
| ||
$isIntNumber = str.match("1.234", "/^[0-9]+$/") // $isIntNumber будет равен false
$isIntNumber = str.match("1234", "/^[0-9]+$/") // $isIntNumber будет равен true |
str.distance(str1 string, str2 string) number
Назначение: вычисляет степень сходства двух строк.
...
| Блок кода | ||
|---|---|---|
| ||
$d = str.distance("", "abc") // $d равен 0
$d = str.distance("Да", "да") // $d равен 1
$d = str.distance("корыто", "открыто") // $d равен 0.714
$d = str.distance("Да, верно", "таверна") // $d равен 0.625
$d = str.distance("жутко косые бананы", "жуй кокосы, ешь бананы") // $d равен 0.714
$d = str.distance("сошел с ума от раны", "Пошел он в пусурманы") // $d равен 0.45
$d = str.distance("ёж", "дезоксирибонуклеиновая кислота") // $d равен 0.033 |
Функции хэширования
hash.of(text string, algo string = "md5", binary bool = false) string
Назначение: вычисляет хэш строки согласно указанному алгоритму.
...
| Блок кода | ||
|---|---|---|
| ||
$hash = hash.of("Наглый коричневый лисёнок прыгает вокруг ленивой собаки.") // $hash будет содержать bff8b4bc8b5c1c1d5b3211dfb21d1e76
$hash = hash.of("Наглый коричневый лисёнок прыгает вокруг ленивой собаки.", "ripemd160") // $hash будет содержать 8817ca339f7f902ad3fb456150a1bb9b4cb5dde9
$hash = hash.of("Наглый коричневый лисёнок прыгает вокруг ленивой собаки.", "sha256", true) // $hash будет содержать бинарную строку (содержащую неотображаемые символы) |
Функции кодирования/декодирования
codec.base64Encode(str string) string
Назначение: кодирует заданную строку в base64.
...
| Блок кода | ||
|---|---|---|
| ||
$encoded = codec.base64Encode("Привет!") // $encoded будет содержать строку "0J/RgNC40LLQtdGCIQ==" |
codec.base64Decode(str string) ?string
Назначение: декодирует заданную в base64 строку.
...
| Блок кода | ||
|---|---|---|
| ||
$decoded = codec.base64Decode("0J/RgNC40LLQtdGCIQ==") // $decoded будет содержать строку "Привет!"
$failed = codec.base64Decode("Привет!") // $failed будет равен nil |
Функции для работы с датой и временем
dt.add(d1 int|string, d2 int|string) string
Назначение: складывает две даты, заданные в виде строки либо как число секунд.
...
| Блок кода | ||
|---|---|---|
| ||
$d = dt.add("2022-01-01 12:30:00", 59) // $d содержит строку "2022-01-01 12:30:59"
$d = dt.add(3600, "2022-01-01 12:30:00") // $d содержит строку "2022-01-01 13:30:00"
$d = dt.add("2022-01-01 00:00:00", "2022-01-02 00:00:00") // $d содержит строку "2022-01-03 00:00:00" |
dt.sub(d1 int|string, d2 int|string) int|string
Назначение: вычисляет разность двух дат, заданных в виде строк либо количеством секунд.
...
| Блок кода | ||
|---|---|---|
| ||
$d = dt.sub(100, 50) // $d содержит 50
$d = dt.sub("2022-01-01 12:30:00", 3600) // $d содержит строку "2022-01-01 11:30:00"
$d = dt.sub(3600, "2022-01-01 12:30:00") // Такой вызов недопустим и приведёт к остановке программы
$d = dt.sub("2022-01-01 01:00:00", "2022-01-01 00:00:00") // $d содержит 3600 |
dt.format(dt int|string, format string) string
Назначение: форматирует дату согласно заданному формату.
...
| Блок кода | ||
|---|---|---|
| ||
$dt = dt.format('2022-12-20 08:34:05', 'y.MM.dd h-mm-ss') // $dt будет содержать строку "22.12.20 8-34-05"
$dt = dt.format('16:30:47', '\Hour\s an\d \minute\s: HH/mm') // $dt будет содержать строку "Hours and minutes: 16/30" |
date.nearFuture(day int) string
Назначение: возвращает ближайшую будущую к текущей дату по заданному дню.
...
| Блок кода | ||
|---|---|---|
| ||
// Допустим сейчас 2022-12-20 $d = date.nearFuture(25) // $d содержит 2022-12-25 $d = date.nearFuture(10) // $d содержит 2023-01-10 |
date.nearPast(day int) string
Назначение: возвращает ближайшую прошлую к текущей дату по заданному дню.
...
| Блок кода | ||
|---|---|---|
| ||
// Допустим сейчас 2022-12-20 $d = date.nearPast(25) // $d содержит 2022-11-25 $d = date.nearPast(10) // $d содержит 2023-12-10 |
date.future(day int) string
Назначение: возвращает дату соответствующую указанному дню в следующем месяце.
...
| Блок кода | ||
|---|---|---|
| ||
// Допустим сейчас 2022-12-20 $d = date.future(25) // $d содержит 2023-01-25 $d = date.future(10) // $d содержит 2023-01-10 |
date.past(day int) string
Назначение: возвращает дату соответствующую указанному дню в прошлом месяце.
...
| Блок кода | ||
|---|---|---|
| ||
// Допустим сейчас 2022-12-20 $d = date.past(25) // $d содержит 2022-11-25 $d = date.past(10) // $d содержит 2022-11-10 |
time.nearFuture(minute int) string
Назначение: возвращает ближайшее будущее к текущему время по заданному количеству минут.
...
| Блок кода | ||
|---|---|---|
| ||
// Допустим сейчас 23:30:00 $t = time.nearFuture(45) // $t содержит 23:45:00 $t = time.nearFuture(15) // $t содержит 00:15:00 |
time.nearPast(minute int) string
Назначение: возвращает ближайшее прошлое к текущему время по заданному количеству минут.
...
| Блок кода | ||
|---|---|---|
| ||
// Допустим сейчас 23:30:00 $t = time.nearPast(45) // $t содержит 22:45:00 $t = time.nearPast(15) // $t содержит 23:15:00 |
time.future(minute int) string
Назначение: возвращает время соответствующее указанному числу минут в следующем часе.
...
| Блок кода | ||
|---|---|---|
| ||
// Допустим сейчас 23:30:00 $t = time.future(45) // $t содержит 00:45:00 $t = time.future(15) // $t содержит 00:15:00 |
time.past(minute int) string
Назначение: возвращает время соответствующее указанному числу минут в прошедшем часе.
...
| Блок кода | ||
|---|---|---|
| ||
// Допустим сейчас 23:30:00 $t = time.past(45) // $t содержит 22:45:00 $t = time.past(15) // $t содержит 22:15:00 |
Функции по работе с очередью сообщений пользователя
queue.size() int
Назначение: определение размера очереди сообщений пользователя.
...
| Блок кода | ||
|---|---|---|
| ||
$messageCount = queue.size() // $messageCount содержит число сообщений пользователя за всё время диалога |
queue.last() ?UserMessage
Назначение: возвращает последнее сообщение пользователя либо nil, если очередь сообщений пуста.
...
| Блок кода | ||
|---|---|---|
| ||
$lastMessage = queue.last() // $lastMessage содержит последнее на данный момент сообщение пользователя |
queue.first() ?UserMessage
Назначение: возвращает первое сообщение пользователя либо nil, если очередь сообщений пуста.
...
| Блок кода | ||
|---|---|---|
| ||
$firstMessage = queue.first() // $firstMessage содержит первое сообщение пользователя за всё время диалога |
queue.nth(index int) ?UserMessage
Назначение: возвращает сообщение пользователя по его порядковому номеру, начиная с 1.
...
| Блок кода | ||
|---|---|---|
| ||
$message = queue.nth(1) // $message содержит первое сообщение пользователя $message = queue.nth(5) // $message содержит пятое сообщение пользователя |
queue.lastNth(index int) ?UserMessage
Назначение: возвращает сообщение пользователя по его порядковому номеру считая с конца очереди. Последнее сообщение соответствует порядковому номеру 1.
...
| Блок кода | ||
|---|---|---|
| ||
$message = queue.lastNth(1) // $message содержит последнее сообщение пользователя $message = queue.lastNth(5) // $message содержит пятое с конца очереди сообщение пользователя |
Функции для работы с фактами
fact.save(context string, factName string, factValue mixed, botId string = nil, clientId string = nil)
Назначение: сохраняет факт в базе фактов.
...
| Блок кода | ||
|---|---|---|
| ||
fact.save("место", "город", "Екатеринбург") // Факт доступный всем ботам компании
fact.save("место", "город", "Екатеринбург", nil, @clientId) // Факт с привязкой к клиенту
fact.save("место", "город", "Екатеринбург", @botId) // Факт с привязкой к боту
fact.save("место", "город", "Екатеринбург", @botId, @clientId) // Факт с привязкой к боту и клиенту |
fact.load(context string, factName string, botId string = nil, clientId string = nil) mixed
Назначение: извлекает факт из базы фактов.
...
| Блок кода | ||
|---|---|---|
| ||
fact.save("место", "город", "Екатеринбург", @botId, @clientId) // Сохраняет факт с привязкой к боту и клиенту
$city = fact.load("место", "город", @botId, @clientId) // Загружаем факт в переменную. $city содержит "Екатеринбург" |
fact.delete(context string, factName string, botId string = nil, clientId string = nil)
Назначение: удаляет факт из базы фактов.
...
| Блок кода | ||
|---|---|---|
| ||
fact.save("место", "город", "Екатеринбург", @botId, @clientId) // Сохраняет факт с привязкой к боту и клиенту
$city = fact.load("место", "город", @botId, @clientId) // Загружаем факт в переменную. $city содержит "Екатеринбург"
fact.delete("место", "город", @botId, @clientId) // Удаляем факт.
$city = fact.load("место", "город", @botId, @clientId) // Пытаемся загрузить удалённый факт. Теперь $city содержит nil. |
fact.query() FactQuery
Назначение: возвращает экземпляр FactQuery для построения и выполнения запросов к базе фактов.
...
| Блок кода | ||
|---|---|---|
| ||
// Добавили пару фактов в базу
fact.save("место", "страна", "Россия")
fact.save("место", "город", "Екатеринбург")
// Загрузили в $places список мест отсортированных по имени факта в порядке убывания:
// [{"name": "город", "value": "Россия"}, {"name": "страна", "value": "Екатеринбург"}]
$places = fact.query().
select("name,value").
where("context", "=", "место").
sortBy("-name").
rows() |
fact.cond() FactQueryCondition
Назначение: возвращает экземпляр FactQueryCondition для построения составных условий в запросах к базе фактов.
...
| Блок кода | ||
|---|---|---|
| ||
// Добавили факты в базу
fact.save("города", "екатеринбург", "Екатеринбург")
fact.save("города", "москва", "Москва")
fact.save("города", "санкт-петербург", "Санкт-Петербург")
fact.save("города", "новосибирск", "Новосибирск")
// Найдём один город начинающийся с буквы "м" или с буквы "т" и не равный городам "Екатеринбург" и "Новосибирск"
$city = fact.query().
select("value").
where("context", "=", "города").
where(fact.cond().
where("name", "^@", "м").
orWhere("name", "^@", "т")).
where("name", "not in", ("екатеринбург", "новосибирск")).
one() |
Функции для работы с таймером
timer.start(time int, nodeId string) string
Назначение: запускает таймер обратного отсчёта. По истечении указанного времени бот осуществит переход на указанный узел (блок).
...
| Блок кода | ||
|---|---|---|
| ||
$timerId = timer.start(60, "760b9732-4bfb-4846-a348-faae5138fcb2") // $timerId содержит уникальный идентификатор таймера на 60 секунд |
timer.stop(timerId string)
Назначение: останавливает (удаляет) таймер обратного отсчёта.
...
| Блок кода | ||
|---|---|---|
| ||
$timerId = timer.start(60, "760b9732-4bfb-4846-a348-faae5138fcb2") timer.stop($timerId) // останавливаем (удаляем) таймер |
Функции для работы с текстом на естественном языке (NLP)
nlp.parse(message string|UserMessage) Sentence
Назначение: парсит текст на естественном языке.
...
| Блок кода | ||
|---|---|---|
| ||
$sentence = nlp.parse(queue.first()) // парсим первое сообщение пользователя |
nlp.join(message1 string|UserMessage, message2 string|UserMessage) Sentence
Назначение: объединяет два текста на естественном языке в одно и затем парсит его.
...
| Блок кода | ||
|---|---|---|
| ||
$sentence = nlp.join(queue.lastNth(2), queue.lastNth(1)) // объединяем предпоследнее и последнее сообщения пользователя и затем парсим его |
nlp.setPerception($sentence Sentence)
Назначение: позволяет установить сообщение пользователя для обработки в других узлах (блоках) схемы бота.
...
| Блок кода | ||
|---|---|---|
| ||
$sentence = nlp.join(queue.lastNth(2), queue.lastNth(1)) // объединяем предпоследнее и последнее сообщения пользователя и затем парсим его nlp.setPerception($sentence) // Теперь остальные узлы схемы будут работать с cообщением $sentence |
Функции для "понимания" естественного языка.
nlu.parse(text string, agentId string, timezoneOffset int = 0) Sentence
Назначение: разбор текста на естественном языке. Выявление намерений и сущностей.
...
| Блок кода | ||
|---|---|---|
| ||
$sentence = nlu.parse("Доброе утро Вася!", "d926726a-5acb-4233-8c1e-ce4300921de0") |
Функции для работы с HTTP
http.request(url string, method string, params Collection, headers Map) Map
Назначение: отправляет HTTP запрос на указанный URL.
...
| Блок кода | ||
|---|---|---|
| ||
// Выполняем запрос на получение списка юзеров
$response = http.request("https://iam.twin24.ai/api/v1/users", "GET", {"limit": 15, "offset": 5}, {"Authorization": "Bearer authToken"})
// Извлекаем информацию о запросе
$statusCode = $response.get("statusCode")
$body = $response.get("body")
$headers = $response.get("headers")
$exception = $response.get("exception")
// Можно извлечь так
{"statusCode": $statusCode, "body": $body, "headers": $headers, "exception": $exception} = $response
// Или даже так (тут важен порядок перечисления переменных)
($statusCode, $body, $headers, $exception) = $response
// или
[$statusCode, $body, $headers, $exception] = $response
// получаем общее количество юзеров и их список
$userCount = $body.get("count")
$userList = $body.get("items") |
Системные функции
sys.sleep(microseconds int)
Назначение: останавливает работу бота на указанное количество микросекунд. Если количество микросекунд превышает 1 минуту, то пауза будет уменьшена до 1 минуты.
...
| Блок кода | ||
|---|---|---|
| ||
sys.sleep(3_000_000) // Пауза в 3 секунды |
Функции для работы с GPT-3
gpt3.ask(text string) string
Назначение: отправляет сообщение в демо версию нейросети RuGTP-3 и возвращает её ответ.
...
| Блок кода | ||
|---|---|---|
| ||
$answer = gpt3.ask("Есть ли жизнь на Марсе?") // В $answer будет ответ нейросети на заданный вопрос |
Объект FactQuery
Используя методы этого объекты вы можете выполнять и строить разнообразные запросы к базе фактов. База фактов представляет собой список записей. Каждая запись представляет собой единичный факт состоящий из следующих частей (полей):
- Контекст (context). Произвольная строка длина которой не превышает 255 символов. Обозначает некоторую предметную область в рамках которой существует факт. Может участвовать в поиске.
- Имя факта (name). Произвольная строка длина которой не превышает 255 символов. Служит для идентификации факта в заданном контексте. Может участвовать в поиске.
- Значение факта (value). Любое значение. Это собственно и есть та информация которую мы трактуем как факт. Не может участвовать в поиске (технически может, но результат недетерминирован).
- Идентификатор бота (botId). Может быть задан при сохранении факта с целью привязки факта к боту. Может участвовать в поиске.
- Идентификатор клиента (clientId). Может быть задан при сохранении факта с целью привязки факта к клиенту. Может участвовать в поиске.
select(fields string|Collection) FactQuery
Назначение: задаёт список полей из базы фактов значения которых следует вернуть в результате запроса. Если метод select не вызыался, то будут возвращены поля context,name и value.
...
| Блок кода | ||
|---|---|---|
| ||
$facts = fact.query().rows() // select не вызван возвращаем все поля.
$facts = fact.query().select(["value", "context"]).rows() // Возвращаем список фактов для которых нам нужны только value и context.
$facts = fact.query().select("botId").rows() // Возвращаем только поле botId к которым привязаны факты. |
where(field string, operator string, value mixed) FactQuery
Назначение: задаёт условие поиска фактов. Несколько методов where объединяются по принципу логического "И", т.е. все условия должны быть выполнены. Метод where равносилен методу andWhere(field, operator, value).
...
| Блок кода | ||
|---|---|---|
| ||
// Ищем факты у которых context содержит подстроку test
$facts = fact.query().
select("name,value").
where("context", "~", "^.*test.*$").
rows() |
andWhere(field string, operator string, value mixed) FactQuery
Эквивалентен where(field, operator, value).
orWhere(field string, operator string, value mixed) FactQuery
Аналогичен where, с той лишь разницей, что несколько вызовов этого метода объединяются по принципу логического "ИЛИ", т.е. должно выполняться хотя бы одно условие.
where(cond FactQueryCondition) FactQuery
Назначение: задаёт сложное (вложенное) условие. Несколько вызвов метода объединяются по принципу логического "И". Эквивалентен методу andWhere(cond).
...
| Блок кода | ||
|---|---|---|
| ||
// Ищем факты у которых context содержит подстроку test и при этом name равен "слово" или name начинается на "оп".
$facts = fact.query().
select("name,value").
where("context", "~", "^.*test.*$").
andWhere(fact.cond().
where("name", "=", "слово").
orWhere("name", "^@", "оп")).
rows() |
andWhere(cond FactQueryCondition) FactQuery
Эквивалентен where(cond)
orWhere(cond FactQueryCondition) FactQuery
Аналогичен where(cond), с той лишь разницей, что несколько вызовов этого метода объединяются по принципу логического "ИЛИ", т.е. должно выполняться хотя бы одно условие.
sortBy(fields string|Collection) FactQuery
Назначение: задаёт сортирову фактов по указанным полям.
...
| Блок кода | ||
|---|---|---|
| ||
// Получаем все факты для бота с двойной сортировкой:
// сначала по контексту по возрастанию (т.е. в алфавитном порядке)
// и далее по имени факта по убыванию.
$facts = fact.query().
select("name,value").
where("botId", "=", @botId)
sortBy("+context,-name"). // можно также использовать коллеции. Например, sortBy(["+context", "-name"])
rows() |
limit(limit int) FactQuery
Назначение: ставит ограничение на максимальное количество извлекаемых фактов.
...
| Блок кода | ||
|---|---|---|
| ||
// Получаем первые 10 фактов
$facts = fact.query().
select("name,value").
sortBy("name").
limit(10).
rows() |
skip(count int) FactQuery
Назначение: задаёт количество фактов которые следует пропустить при поиске.
...
| Блок кода | ||
|---|---|---|
| ||
// Пропускаем 5 первых фактов и извлекаем следующие 10
$facts = fact.query().
select("name,value").
sortBy("name").
skip(5).
limit(10).
rows() |
one() mixed
Назначение: возвращает первое указанное через select поле первого найденного факта.
...
| Блок кода | ||
|---|---|---|
| ||
// Извлекает имя первого найденного факта
$firstFactName = fact.query().
select("name,value"). // value хоть и указано, но будет проигнорировано
one() |
column() List
Назначение: возвращает список состоящий из всех значений первого выбранного поля найденных фактов.
...
| Блок кода | ||
|---|---|---|
| ||
// Извлекает список имён всех найденных фактов
$names = fact.query().
select("name,value"). // value хоть и указано, но будет проигнорировано
column() |
row() Map
Назначение: возвращает все выбранные поля в виде ассоциативного массива для первого найденного факта.
...
| Блок кода | ||
|---|---|---|
| ||
// Извлекает имя и значение первого найденного факта
$names = fact.query().
select("name,value").
row() |
rows() List<Map>
Назначение: возвращает список всех найденных фактов. Каждый факт возвращается как ассоциативный массив ключами которого являются поля факта, а значениями - значения полей.
...
| Блок кода | ||
|---|---|---|
| ||
// Извлекает имя и значение всех фактов
$names = fact.query().
select("name,value").
rows() |
Объект FactQueryCondition
Используйте методы этого объекта чтобы строить сложные вложенные условия к базе фактам.
where(field string, operator string, value mixed) FactQueryCondition
Аналогичен методу where(field string, operator string, value mixed) объекта FactQuery.
andWhere(field string, operator string, value mixed) FactQueryCondition
Аналогичен методу andWhere(field string, operator string, value mixed) объекта FactQuery.
orWhere(field string, operator string, value mixed) FactQueryCondition
Аналогичен методу orWhere(field string, operator string, value mixed) объекта FactQuery.
and(field string, operator string, value mixed) FactQueryCondition
Аналогичен методу andWhere(field string, operator string, value mixed) объекта FactQuery.
or(field string, operator string, value mixed) FactQueryCondition
Аналогичен методу orWhere(field string, operator string, value mixed) объекта FactQuery.
where(cond FactQueryCondition) FactQueryCondition
Аналогичен методу where(cond FactQueryCondition) объекта FactQuery.
andWhere(cond FactQueryCondition) FactQueryCondition
Аналогичен методу andWhere(cond FactQueryCondition) объекта FactQuery.
orWhere(cond FactQueryCondition) FactQueryCondition
Аналогичен методу orWhere(cond FactQueryCondition) объекта FactQuery.
and(cond FactQueryCondition) FactQueryCondition
Аналогичен методу andWhere(cond FactQueryCondition) объекта FactQuery.
or(cond FactQueryCondition) FactQueryCondition
Аналогичен методу orWhere(cond FactQueryCondition) объекта FactQuery.
Объект UserMessage
message string
Назначение: оригинальный текст сообщения.
| Блок кода | ||
|---|---|---|
| ||
$msg = queue.last().message // $msg содержит текст последнего сообщения пользователя |
attachments List
Назначение: список идентификаторов файлов приложенных к сообщению.
| Блок кода | ||
|---|---|---|
| ||
$attachments = queue.first().attachments // $attachments содержит список вложений первого сообщения пользователя. |
isEmpty() bool
Назначение: определяет пустое ли сообщение.
...
| Блок кода | ||
|---|---|---|
| ||
$isEmpty = queue.last().isEmpty() // $isEmpty содержит true, если последнее сообщение пользователя пустое и false в противном случае |
hasAttachments() bool
Назначение: определяет есть ли вложения в данном сообщении.
...
| Блок кода | ||
|---|---|---|
| ||
$hasAttachments = queue.first().hasAttachments() // $hasAttachments содержит true, если первое сообщение пользователя имеет вложения и false в противном случае |
Объект Sentence
intent string
Назначение: распознанное намерение.
| Блок кода | ||
|---|---|---|
| ||
$sentence = nlu.parse("Привет Вася", "d926726a-5acb-4233-8c1e-ce4300921de0")
$intent = $sentence.intent // $intent содержит "greeting" |
intentConfidence number
Назначение: степень достоверности распознанного намерения (1 - однозначное распознавание, 0 - намерение фактически нераспознанно).
| Блок кода | ||
|---|---|---|
| ||
$sentence = nlu.parse("Привет Вася", "d926726a-5acb-4233-8c1e-ce4300921de0")
$confidence = $sentence.intentConfidence // $confidence содержит 0.98 |
entities List<Tuple>
Назначение: список распознанных сущностей. Каждый элемент списка содержит кортеж из трёх элементов: тип сущности (string), значение сущности (строка), достоверность распознавания сущности (number).
...