На этой странице:
Для тестирования сценариев, содержащих BPL-операции, необходимо использовать веб-виджет или интеграцию с каким-либо мессенджером, так как данные операции не работают в тестовом чате внутри редактора. Как создать тестовый виджет: Создание тестового виджета |
Назначение: удаление локальной или модульной переменной.
Аргументы:
Возвращаемое значение: отсутствует.
$localVar = 123
#moduleVar = true
del("$localVar") // Удаляет локальную переменную $localVar
del("localVar") // Тоже самое что и del("$localVar")
del("#moduleVar") // Удаляет переменную с областью видимости в пределах модуля |
Назначение: изменяет текущее смещение временной зоны собеседника бота.
Аргументы:
Возвращаемое значение: отсутствует.
Примечание: вызов этой функции также приведёт к изменению значений системных переменных now, today и time согласно новой временной зоне.
setClientTimezoneOffset(-1800) |
Назначение: преобразует аргумент к булеву значению.
Аргументы:
Возвращаемое значение: булево значение.
Примечание: в BPL все значения могут быть преобразованы к булеву типу.
$bool = asBool(nil) // $bool содержит false
$bool = asBool("") // $bool содержит false
$bool = asBool(0) // $bool содержит false
$bool = asBool([]) // $bool содержит true
$bool = asBool(123) // $bool содержит true |
Назначение: преобразует аргумент к строковому значению.
Аргументы:
Возвращаемое значение: строковое значение.
Примечание: в BPL все значения могут быть преобразованы к строковому типу.
$str = asString(123) // $str равно "123"
$str = asString(1.23) // $str равно "1.23"
$str = asString(true) // $str равно "true"
$str = asString({1: "a b c", 2: 0.5}) // $str равно "{1: "a b c", 2: 0.5}" |
Назначение: преобразует аргумент к целочисленному значению.
Аргументы:
Возвращаемое значение: целочисленное значение, 0 в случае невозможности преобразования.
$int = asInt(5.67) // $int равно 5
$int = asInt("123") // $int равно 123
$int = asInt(true) // $int равно 1
$int = asInt(nil) // $int равно 0
$int = asInt("abc") // $int равно 0 |
Назначение: преобразует аргумент к вещественному числу.
Аргументы:
Возвращаемое значение: вещественное число, 0 в случае невозможности преобразования.
$float = asFloat("5.67") // $float равно 5.67
$float = asFloat(123) // $float равно 123.0
$float = asfloat(true) // $float равно 1.0
$float = asfloat(nil) // $float равно 0.0
$float = asFloat("abc") // $float равно 0.0 |
Назначение: фактически преобразует аргумент к числу. Эквивалент унарной операции "+".
Аргументы:
Возвращаемое значение: число.
$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) |
Назначение: меняет знак числа. Эквивалент унарной операции "-".
Аргументы:
Возвращаемое значение: число со знаком обратному исходному.
$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) |
Назначение: инверсия бит числа. Эквивалент унарной операции "~".
Аргументы:
Возвращаемое значение: инвертированное число.
$a = math.inv(5) // $a равно -6 $a = ~5 // то же, что и предыдущая строка |
Назначение: логическое отрицание числа. Эквивалент унарной операции "!".
Аргументы:
Возвращаемое значение: true, если num не равно 0 и false в противном случае.
$a = math.not(5) // $a равно false $a = math.not(0) // $a равно true $a = !0 // то же, что и предыдущая строка |
Назначение: сложение чисел. Эквивалент бинарной операции "+".
Аргументы:
Возвращаемое значение: сумма чисел.
$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 |
Назначение: разность чисел. Эквивалент бинарной операции "-".
Аргументы:
Возвращаемое значение: разность чисел.
$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 |
Назначение: произведение чисел. Эквивалент бинарной операции "*".
Аргументы:
Возвращаемое значение: произведение чисел.
$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 |
Назначение: частное чисел. Эквивалент бинарной операции "/".
Аргументы:
Возвращаемое значение: частное чисел.
$a = math.div(1.5, 3.5) // $a равно 0.428571428571 $a = 1.5 / 3.5 // то же, что и предыдущая строка $a = math.div(1, 3, 5) // $a равно 0.33333 |
Назначение: целочисленное деление чисел. Эквивалент бинарной операции "\".
Аргументы:
Возвращаемое значение: целая часть частного чисел.
$a = math.idiv(2.5, 0.3) // $a равно 8 $a = 2.5 \ 0.3 // то же, что и предыдущая строка |
Назначение: остаток от деления двух чисел. Эквивалент бинарной операции "%".
Аргументы:
Возвращаемое значение: остаток от деления.
$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 |
Назначение: возведение числа 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 |
Назначение: извлечение квадратного корня.
Аргументы:
Возвращаемое значение: квадратный корень либо ошибка, если число отрицательное.
$a = math.sqrt(3.14) // $a равно 1.772004514667 $a = math.sqrt(1.7, 5) // $a равно 0.30384 |
Назначение: округление числа до требуемого знака после запятой.
Аргументы:
Возвращаемое значение: округлённое с заданной точностью число.
$a = math.round(3.14159265358979323846264338327950288419716, 17) // $a равно 3.1415926535898 $a = math.round(3.14159265358979323846264338327950288419716, 2) // $a равно 3.14 $a = math.round(3.14159265358979323846264338327950288419716, 0) // $a равно 3 |
Назначение: генерация псевдослучайного числа в диапазоне от min до max включительно.
Аргументы:
Возвращаемое значение: число в диапазоне от min до max.
$r = math.rand(-10, 10) |
Назначение: определение длины строки в символах.
Аргументы:
Возвращаемое значение: целое число, равное количеству символов в строке.
$str = "Какая-то строка" $len = str.len($str) // $len будет содержать 15 |
Назначение: преобразование символов строки в нижний регистр.
Аргументы:
Возвращаемое значение: строка, все символы которой находятся в нижнем регистре.
$str = "СтРоКа" $lower = str.lower($str) // $lower будет содержать "строка" |
Назначение: преобразование символов строки в верхний регистр.
Аргументы:
Возвращаемое значение: строка, все символы которой находятся в верхнем регистре.
$str = "СтРоКа" $upper = str.upper($str) // $lower будет содержать "СТРОКА" |
Назначение: преобразование первого символа строки в верхний регистр.
Аргументы:
Возвращаемое значение: строка, в которой первый символ записан в верхнем регистре.
$str = str.ucfirst("строка") // $str будет содержать "Строка" |
Назначение: преобразование первого символа строки в нижний регистр.
Аргументы:
Возвращаемое значение: строка, в которой первый символ записан в нижнем регистре.
$str = str.ucfirst("Строка") // $str будет содержать "строка" |
Назначение: получение указанного символа строки.
Аргументы:
Возвращаемое значение: строка, соответствующая указанному символу, либо пустая строка, если символа с такой позицией не существует.
$str = "Слово" $firstLetter = str.letter($str, 0) // Первая буква $lastLetter = str.letter($str, -1) // Последняя буква |
Назначение: получение указанного символа строки, начиная с начала строки.
Аргументы:
Возвращаемое значение: строка, соответствующая указанному символу, либо пустая строка, если символа с такой позицией не существует.
$str = "Слово" $firstLetter = str.first($str) // Первая буква $secondLetter = str.first($str, 1) // Вторая буква |
Назначение: получение указанного символа строки, начиная с конца строки.
Аргументы:
Возвращаемое значение: строка, соответствующая указанному символу, либо пустая строка, если символа с такой позицией не существует.
$str = "Слово" $lastLetter = str.last($str) // Последняя буква $penultLetter = str.last($str, 1) // Предпоследняя буква |
Назначение: объединяет две строки в одну.
Аргументы:
Возвращаемое значение: новая строка, состоящая из первой строки, справа от которой добавлена вторая строка.
$str1 = "один" $str2 = "два" $str = str.concat($str1, $str2) // $str будет содержать "одиндва" |
Назначение: возвращает подстроку строки str, начинающейся с offset символа по счету и длиной length символов.
Аргументы:
Возвращаемое значение: часть str или пустая строка.
$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 = 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 будет содержать "" |
Назначение: разбивает строку на части, используя separator в качестве разделителя.
Аргументы:
Возвращаемое значение: список подстрок, на которые была разбита строка.
$letters = str.split("абвгде") // Получили список букв слова
$words = str.split("один два три", " ") // Получили список слов
$words = str.split("один два три", " ", 2) // words содержит ["один", "два три"] |
Назначение: ищет все вхождения подстроки в строке и заменяет их на заданное значение.
Аргументы:
Возвращаемое значение: новая строка, в которой все search заменены на replace.
$str = str.replace("мама мыла раму", "рам", "Даш") // $str содержит "мама мыла Дашу" |
Назначение: ищет все вхождения соответствующие регулярному выражению в строке и заменяет их на заданное значение.
Аргументы:
Возвращаемое значение: новая строка, в которой все cоответствия pattern заменены на replace.
<b>Примечание:</b> в качестве регулярных выражений используются <a href="http://ru.wikipedia.org/wiki/PCRE" target="_blank">Perl совместимые регулярные выражения (PCRE)</a>. |
<a href="http://www.shtogrin.com/library/web/pcre/" target="_blank">Ссылка на документацию и примеры регулярных выражений.</a> |
<a href="http://myregexp.com/" target="_blank">Онлайн редактор регулярных выражений.</a> |
$str = str.rreplace("раз 1, два 2, три 3", "/[0-9]/", "") // $str содержит "раз, два, три" |
Назначение: выполняет проверку данной строки регулярному выражению.
Аргументы:
Возвращаемое значение: возвращает true, если строка соответствует регулярному выражению и false – в противном случае.
<b>Примечание:</b> в качестве регулярных выражений используются <a href="http://ru.wikipedia.org/wiki/PCRE" target="_blank">Perl совместимые регулярные выражения (PCRE)</a>. |
<a href="http://www.shtogrin.com/library/web/pcre/" target="_blank">Ссылка на документацию и примеры регулярных выражений.</a> |
<a href="http://myregexp.com/" target="_blank">Онлайн редактор регулярных выражений.</a> |
$isIntNumber = str.match("1.234", "/^[0-9]+$/") // $isIntNumber будет равен false
$isIntNumber = str.match("1234", "/^[0-9]+$/") // $isIntNumber будет равен true |
Назначение: вычисляет степень сходства двух строк.
Аргументы:
Возвращаемое значение: возвращает число от 0 до 1 включительно, определяющее степень сходства двух строк: 1 – строки эквивалентны, 0 – строки абсолютно разные.
<b>Примечание:</b> функция фактически вычисляет <a href="https://en.wikipedia.org/wiki/Word_error_rate" target="_blank">Word Error Rate.</a> |
$d = str.distance("", "abc") // $d равен 0
$d = str.distance("Да", "да") // $d равен 1
$d = str.distance("корыто", "открыто") // $d равен 0.571
$d = str.distance("Да, верно", "таверна") // $d равен 0.625
$d = str.distance("жутко косые бананы", "жуй кокосы, ешь бананы") // $d равен 0.714
$d = str.distance("сошел с ума от раны", "Пошел он в пусурманы") // $d равен 0.45
$d = str.distance("ёж", "дезоксирибонуклеиновая кислота") // $d равен 0 |
Назначение: вычисляет хэш строки согласно указанному алгоритму.
Аргументы:
Возвращаемое значение: возвращает строку, содержащую вычисленный хеш-код в шестнадцатеричной кодировке в нижнем регистре. Если binary задан как true, то возвращается хеш-код в виде бинарных данных. В случае ошибки (например, если указан недопустимый алгоритм хэширования) возвращает пустую строку.
Допустимые значения алгоритмов хэширования:
Примечание: если третий параметр true, то передавать возвращаемое функцией значение в качестве сообщения бота или его части нельзя. Это приведёт к падению бота.
$hash = hash.of("Наглый коричневый лисёнок прыгает вокруг ленивой собаки.") // $hash будет содержать bff8b4bc8b5c1c1d5b3211dfb21d1e76
$hash = hash.of("Наглый коричневый лисёнок прыгает вокруг ленивой собаки.", "ripemd160") // $hash будет содержать 8817ca339f7f902ad3fb456150a1bb9b4cb5dde9
$hash = hash.of("Наглый коричневый лисёнок прыгает вокруг ленивой собаки.", "sha256", true) // $hash будет содержать бинарную строку (содержащую неотображаемые символы) |
<b>Назначение:</b> кодирует заданную строку в <a href="https://ru.wikipedia.org/wiki/Base64" target="_blank">Base64</a>. |
Аргументы:
Возвращаемое значение: возвращает строку, закодированную в Base64.
$encoded = codec.base64Encode("Привет!") // $encoded будет содержать строку "0J/RgNC40LLQtdGCIQ==" |
<b>Назначение:</b> декодирует заданную в <a href="https://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D1%81%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B8%D0%B5_%D0%94%D0%B0%D0%BC%D0%B5%D1%80%D0%B0%D1%83_%E2%80%94_%D0%9B%D0%B5%D0%B2%D0%B5%D0%BD%D1%88%D1%82%D0%B5%D0%B9%D0%BD%D0%B0" target="_blank">Base64</a> строку. |
Аргументы:
Возвращаемое значение: возвращает раскодированную строку либо nil, если закодированная строка содержит символы, не входящие в алфавит символов Base64 кодировки.
$decoded = codec.base64Decode("0J/RgNC40LLQtdGCIQ==") // $decoded будет содержать строку "Привет!"
$failed = codec.base64Decode("Привет!") // $failed будет равен nil |
<b>Назначение:</b> кодирует заданное значение в <a href="https://ru.wikipedia.org/wiki/JSON" target="_blank">json</a>. |
Аргументы:
Возвращаемое значение: возвращает значение в формате json.
$encoded = codec.jsonEncode((1, true, "a", {"a": 1, "b": 2})) // $encoded будет содержать строку '[1, true, "a", {"a": 1, "b": 2}]' |
<b>Назначение:</b> декодирует заданное в <a href="https://ru.wikipedia.org/wiki/JSON" target="_blank">json</a> значение. |
Аргументы:
Возвращаемое значение: возвращает раскодированное значение либо nil, в случае невозможности его раскодирования.
$decoded = codec.jsonDecode('[1, true, "a", {"a": 1, "b": 2}]') // $decoded будет содержать список [1, true, "a", {"a": 1, "b": 2}]
|
Назначение: складывает две даты, заданные в виде строки либо как число секунд.
Аргументы:
Возвращаемое значение: возвращает новую дату и время в виде строки.
$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-02 02:00:00", "2022-01-01 01:00:00") // $d содержит строку "2022-01-03 03:00:00" |
Назначение: вычисляет разность двух дат, заданных в виде строк либо количеством секунд.
Аргументы:
Возвращаемое значение: возвращает новую дату и время в виде строки либо число секунд – разность дат.
$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 |
Назначение: форматирует дату согласно заданному формату.
Аргументы:
Возвращаемое значение: строка даты в заданном формате.
Допустимые параметры форматирования:
| Символ в строке format | Описание | Пример возвращаемого значения |
|---|---|---|
| Год | ||
| y | Полное числовое представление года, не менее 4 цифр | 1999, 2012, 10208 |
| yy | Две последние цифры года c дополнением нулями, если необходимо | 99, 05 |
| Месяц | ||
| M | Порядковый номер месяца без ведущего нуля | от 1 до 12 |
| MM | Порядковый номер месяца с ведущим нулём | от 01 до 12 |
| День | ||
| d | День месяца без ведущего нуля | от 1 до 31 |
| dd | День месяца, 2 цифры с ведущим нулём | от 01 до 31 |
| Час | ||
| h | Часы в 12-часовом формате без ведущего нуля | от 1 до 12 |
| hh | Часы в 12-часовом формате с ведущим нулём | от 01 до 12 |
| H | Часы в 24-часовом формате без ведущего нуля | от 0 до 23 |
| HH | Часы в 24-часовом формате с ведущим нулём | от 00 до 23 |
| Минуты | ||
| m | Минуты без ведущего нуля | от 0 до 59 |
| mm | Минуты с ведущим нулём | от 00 до 59 |
| Секунды | ||
| s | Секунды без ведущего нуля | от 0 до 59 |
| ss | Секунды с ведущим нулём | от 00 до 59 |
Примечание: если строка формата содержит символы, совпадающие с вышеперечисленными, но не являющиеся параметрами форматирования, то их следует экранировать с помощью символа обратного слэша "\".
$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" |
Назначение: возвращает полное числовое представление года, не менее 4 цифр.
Аргументы:
Возвращаемое значение: возвращает число, представляющее год аргумента даты dt.
Примечание: если в аргумент dt передано только время, то в качестве даты будет расцениваться 1 января 1970 года, и таким образом возвращаемое функцией значение будет равно 1970.
$dt = dt.year('2022-12-20 08:34:05') // $dt будет содержать число 2022
$dt = dt.year('08:34:05') // $dt будет содержать число 1970 |
Назначение: возвращает порядковый номер месяца.
Аргументы:
Возвращаемое значение: возвращает число, представляющее месяц аргумента даты dt.
Примечание: если в аргумент dt передано только время, то в качестве даты будет расцениваться 1 января 1970 года, и таким образом возвращаемое функцией значение будет равно 1.
$dt = dt.month('2022-12-20 08:34:05') // $dt будет содержать число 12
$dt = dt.month('08:34:05') // $dt будет содержать число 1 |
Назначение: возвращает день месяца.
Аргументы:
Возвращаемое значение: возвращает число, представляющее день месяца аргумента даты dt.
Примечание: если в аргумент dt передано только время, то в качестве даты будет расцениваться 1 января 1970 года, и таким образом возвращаемое функцией значение будет равно 1.
$dt = dt.day('2022-12-20 08:34:05') // $dt будет содержать число 20
$dt = dt.day('08:34:05') // $dt будет содержать число 1 |
Назначение: возвращает часы в 24-часовом формате .
Аргументы:
Возвращаемое значение: возвращает число, представляющее часы аргумента даты dt.
Примечание: если в аргумент dt передана дата без времени, то возвращаемое значение будет равно нулю.
// Допустим сейчас 2023-01-01
$dt = dt.hour('2022-12-20 08:34:05') // $dt будет содержать число 8
$dt = dt.hour('2022-12-20') // $dt будет содержать число 0 |
Назначение: возвращает минуты.
Аргументы:
Возвращаемое значение: возвращает число, представляющее минуты аргумента даты dt.
Примечание: если в аргумент dt передана дата без времени, то возвращаемое значение будет равно нулю.
// Допустим сейчас 2023-01-01
$dt = dt.minute('2022-12-20 08:34:05') // $dt будет содержать число 34
$dt = dt.minute('2022-12-20') // $dt будет содержать число 0 |
Назначение: возвращает секунды.
Аргументы:
Возвращаемое значение: возвращает число, представляющее секунды аргумента даты dt.
Примечание: если в аргумент dt передана дата без времени, то возвращаемое значение будет равно нулю.
// Допустим сейчас 2023-01-01
$dt = dt.second('2022-12-20 08:34:05') // $dt будет содержать число 5
$dt = dt.second('2022-12-20') // $dt будет содержать число 0 |
Назначение: возвращает порядковый номер дня недели.
Аргументы:
Возвращаемое значение: возвращает число, представляющее номер дня недели аргумента даты dt, от 0 (понедельник) до 6 (воскресенье).
Примечание: если в аргумент dt передано только время, то в качестве даты будет расцениваться 1 января 1970 года, и таким образом возвращаемое функцией значение будет равно 3 (четверг).
$dt = dt.weekday('2022-12-20 08:34:05') // $dt будет содержать число 1
$dt = dt.weekday('08:34:05') // $dt будет содержать число 3 |
Назначение: возвращает ближайшую будущую к текущей дату по заданному дню.
Аргументы:
Возвращаемое значение: возвращает ближайшую к day дату.
// Допустим сейчас 2022-12-20 $d = date.nearFuture(25) // $d содержит 2022-12-25 $d = date.nearFuture(10) // $d содержит 2023-01-10 |
Назначение: возвращает ближайшую прошлую к текущей дату по заданному дню.
Аргументы:
Возвращаемое значение: возвращает ближайшую к day дату.
// Допустим сейчас 2022-12-20 $d = date.nearPast(25) // $d содержит 2022-11-25 $d = date.nearPast(10) // $d содержит 2023-12-10 |
Назначение: возвращает дату, соответствующую указанному дню в следующем месяце.
Аргументы:
Возвращаемое значение: дата в будущем.
// Допустим сейчас 2022-12-20 $d = date.future(25) // $d содержит 2023-01-25 $d = date.future(10) // $d содержит 2023-01-10 |
Назначение: возвращает дату, соответствующую указанному дню в прошлом месяце.
Аргументы:
Возвращаемое значение: дата в прошлом.
// Допустим сейчас 2022-12-20 $d = date.past(25) // $d содержит 2022-11-25 $d = date.past(10) // $d содержит 2022-11-10 |
Назначение: возвращает ближайшее будущее к текущему время по заданному количеству минут.
Аргументы:
Возвращаемое значение: возвращает ближайшее к minute время.
// Допустим сейчас 23:30:00 $t = time.nearFuture(45) // $t содержит 23:45:00 $t = time.nearFuture(15) // $t содержит 00:15:00 |
Назначение: возвращает ближайшее прошлое к текущему время по заданному количеству минут.
Аргументы:
Возвращаемое значение: возвращает ближайшее к minute время.
// Допустим сейчас 23:30:00 $t = time.nearPast(45) // $t содержит 22:45:00 $t = time.nearPast(15) // $t содержит 23:15:00 |
Назначение: возвращает время, соответствующее указанному числу минут в следующем часе.
Аргументы:
Возвращаемое значение: время в будущем.
// Допустим сейчас 23:30:00 $t = time.future(45) // $t содержит 00:45:00 $t = time.future(15) // $t содержит 00:15:00 |
Назначение: возвращает время, соответствующее указанному числу минут в прошедшем часе.
Аргументы:
Возвращаемое значение: время в прошлом.
// Допустим сейчас 23:30:00 $t = time.past(45) // $t содержит 22:45:00 $t = time.past(15) // $t содержит 22:15:00 |
Назначение: определение размера очереди сообщений пользователя.
Аргументы: отсутствуют.
Возвращаемое значение: число сообщений пользователя.
$messageCount = queue.size() // $messageCount содержит число сообщений пользователя за всё время диалога |
Назначение: возвращает последнее сообщение пользователя либо nil, если очередь сообщений пуста.
Аргументы: отсутствуют.
Возвращаемое значение: объект UserMessage или nil.
$lastMessage = queue.last() // $lastMessage содержит последнее на данный момент сообщение пользователя |
Назначение: возвращает первое сообщение пользователя либо nil, если очередь сообщений пуста.
Аргументы: отсутствуют.
Возвращаемое значение: объект UserMessage или nil.
$firstMessage = queue.first() // $firstMessage содержит первое сообщение пользователя за всё время диалога |
Назначение: возвращает сообщение пользователя по его порядковому номеру, начиная с 1.
Аргументы:
Возвращаемое значение: объект UserMessage или nil.
$message = queue.nth(1) // $message содержит первое сообщение пользователя $message = queue.nth(5) // $message содержит пятое сообщение пользователя |
Назначение: возвращает сообщение пользователя по его порядковому номеру, считая с конца очереди. Последнее сообщение соответствует порядковому номеру 1.
Аргументы:
Возвращаемое значение: объект UserMessage или nil.
$message = queue.lastNth(1) // $message содержит последнее сообщение пользователя $message = queue.lastNth(5) // $message содержит пятое с конца очереди сообщение пользователя |
Назначение: добавление действия к текущему сообщению бота.
Аргументы:
Возвращаемое значение: отсутствует.
msg.addAction(
"prompter_suggestions",
{
"suggestions": [
{
"message": "some message",
"intent": {
"name": "some name",
"confidence": 0.9999,
},
"something": "bla-bla-bla",
},
],
},
) |
Назначение: загрузка файла по указанному адресу.
Аргументы:
Возвращаемое значение: идентификатор загруженного в систему TWIN файла.
$fileId = file.download("http://some.file.url") // $fileId будет содержать идентификатор файла |
Назначение: сохраняет факт в базе фактов.
Аргументы:
Возвращаемое значение: отсутствует.
fact.save("место", "город", "Екатеринбург") // Факт, доступный всем ботам компании
fact.save("место", "город", "Екатеринбург", nil, @clientId) // Факт с привязкой к клиенту
fact.save("место", "город", "Екатеринбург", @botId) // Факт с привязкой к боту
fact.save("место", "город", "Екатеринбург", @botId, @clientId) // Факт с привязкой к боту и клиенту |
Назначение: извлекает факт из базы фактов.
Аргументы:
Возвращаемое значение: содержимое факта.
fact.save("место", "город", "Екатеринбург", @botId, @clientId) // Сохраняет факт с привязкой к боту и клиенту
$city = fact.load("место", "город", @botId, @clientId) // Загружаем факт в переменную. $city содержит "Екатеринбург" |
Назначение: удаляет факт из базы фактов.
Аргументы:
Возвращаемое значение: отсутствует.
fact.save("место", "город", "Екатеринбург", @botId, @clientId) // Сохраняет факт с привязкой к боту и клиенту
$city = fact.load("место", "город", @botId, @clientId) // Загружаем факт в переменную. $city содержит "Екатеринбург"
fact.delete("место", "город", @botId, @clientId) // Удаляем факт
$city = fact.load("место", "город", @botId, @clientId) // Пытаемся загрузить удалённый факт. Теперь $city содержит nil. |
Назначение: удаляет факты из базы фактов.
Аргументы:
Возвращаемое значение: отсутствует.
// Удалить все факты:
// - для контекста ctx;
// - факты с названиями fact1 и fact2;
// - все факты со значениями 123 и true;
// - все факты бота fa5d268c-bcc9-4734-a10f-3dfd357764ac
// - все факты текущего клиента.
fact.clean("ctx", ["fact1", "fact2"], [123, true], "fa5d268c-bcc9-4734-a10f-3dfd357764ac", @clientId) |
Назначение: возвращает экземпляр FactQuery для построения и выполнения запросов к базе фактов.
Аргументы: отсутствуют.
Возвращаемое значение: объект FactQuery.
// Добавили пару фактов в базу
fact.save("место", "страна", "Россия")
fact.save("место", "город", "Екатеринбург")
// Загрузили в $places список мест, отсортированных по имени факта в порядке убывания:
// [{"name": "город", "value": "Россия"}, {"name": "страна", "value": "Екатеринбург"}]
$places = fact.query().
select("name,value").
where("context", "=", "место").
sortBy("-name").
rows() |
Назначение: возвращает экземпляр 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() |
Назначение: запускает таймер обратного отсчёта. По истечении указанного времени бот осуществит переход на указанный узел (блок).
Аргументы:
Возвращаемое значение: идентификатор таймера.
$timerId = timer.start(60, "760b9732-4bfb-4846-a348-faae5138fcb2") // $timerId содержит уникальный идентификатор таймера на 60 секунд |
Назначение: останавливает (удаляет) таймер обратного отсчёта.
Аргументы:
Возвращаемое значение: отсутствует.
$timerId = timer.start(60, "760b9732-4bfb-4846-a348-faae5138fcb2") timer.stop($timerId) // останавливаем (удаляем) таймер |
Назначение: останавливает (удаляет) все таймеры обратного отсчёта.
Аргументы: отсутствуют.
Возвращаемое значение: отсутствует.
// запускаем два таймера timer.start(60, "760b9732-4bfb-4846-a348-faae5138fcb2") timer.start(120, "760b9732-4bfb-4846-a348-faae5138fcb2") // останавливаем все таймеры timer.stopAll() |
Назначение: парсит текст на естественном языке.
Аргументы:
Возвращаемое значение: объект Sentence, содержащий информацию о всех намерениях и сущностях исходного сообщения.
Примечание: данная функция извлекает из текста только сущности чисел и даты/времени. Для работы с намерениями и остальными сущностями используйте функцию nlu.parse.
$sentence = nlp.parse(queue.first()) // парсим первое сообщение пользователя |
Назначение: объединяет два текста на естественном языке в одно и затем парсит его.
Аргументы:
Возвращаемое значение: объект Sentence, содержащий информацию о всех намерениях и сущностях объединённого сообщения.
$sentence = nlp.join(queue.lastNth(2), queue.lastNth(1)) // объединяем предпоследнее и последнее сообщения пользователя и затем парсим его |
Назначение: позволяет установить сообщение пользователя для обработки в других узлах (блоках) схемы бота.
Аргументы:
Возвращаемое значение: отсутствует.
$sentence = nlp.join(queue.lastNth(2), queue.lastNth(1)) // объединяем предпоследнее и последнее сообщения пользователя и затем парсим его nlp.setPerception($sentence) // Теперь остальные узлы схемы будут работать с cообщением $sentence |
Purpose: разбор текста на естественном языке. Выявление намерений и сущностей.
Arguments:
Возвращаемое значение: объект Sentence.
$sentence = nlu.parse("Доброе утро Вася!", "d926726a-5acb-4233-8c1e-ce4300921de0") |
Назначение: отправляет HTTP запрос на указанный URL.
Аргументы:
Возвращаемое значение: объект HTTP-ответа.
// Выполняем запрос на получение списка юзеров
$response = http.sendRequest("https://iam.twin24.ai/api/v1/users", "GET", {"limit": 15, "offset": 5}, {"Authorization": "Bearer authToken"})
// Извлекаем информацию о запросе
$statusCode = $response.statusCode
$body = $response.body
$headers = $response.headers
$error = $response.error |
Примечание: для типов содержимого запроса json или xml значение body если оно является списком или ассоциативным массивом автоматически конвертируется в строку соответствующего формата. То же касается и тела ответа: если тип содержимого ответа json или xml, то строка тела ответа будет автоматически преобразована в список или ассоциативный массив. Ниже показаны типовые примеры преобразования:
// Тело Json запроса в виде структур данных BPL
$requestBody = [
{
"param1": "value1",
"param2": 123,
},
{
"param3": ["a", "b", "c"],
},
]
// Это тело автоматически будет преобразовано в строку
// [
// {
// "param1": "value1",
// "param2": 123
// },
// {
// "param3": ["a", "b", "c"]
// }
// ]
$response = http.sendRequest("http://some.url", "POST", $requestBody, {"Content-Type": "application/json"})
// Если тип содержимого ответа json, то тело ответа будет автоматически преобразовано в структуру BPL (в переменной $body).
$body = $response.body |
// Тело Xml запроса в виде структур данных BPL
$requestBody = [
{
"tag": "xml",
"value": [
{
"tag": "head",
"value": [
{
"tag": "title",
"value": "chapter 2",
},
],
},
{
"tag": "body",
"value": [
{
"tag": "div",
"attributes": {
"class": "color",
"style": "display:block;",
},
"value": [
"Some",
{
"tag": "br",
},
"text",
],
},
{
"tag": "div",
"attributes": {
"id": "a12",
},
"value": [
{
"tag": "i",
"value": "Another text",
},
{
"tag": "span",
"expand": true, // если true, то тэг с пустым значением будет иметь закрывающий тэг
},
],
},
],
},
],
},
]
// Это тело автоматически будет преобразовано в строку
// <xml><head><title>Chapter 2</title></head><body><div class="color" style="display:block;">Some<br />text</div><div id="a12"><i>Another text</i><span></span></div></body></xml>
$response = http.sendRequest("http://some.url", "POST", $requestBody, {"Content-Type": "text/xml"})
// Если тип содержимого ответа xml, то тело ответа будет автоматически преобразовано в структуру BPL (в переменной $body).
$body = $response.body |
Назначение: формирует новый объект HTTP-запроса.
Аргументы:
Возвращаемое значение: объект, содержащий информацию о HTTP-запросе.
$response = http.request("https://some.url", "POST", {"param1": 123, "param2": true}).
headers({"Content-Type": "application/json"}).
timeout(300).
send() |
Назначение: задаёт максимально допустимое время запроса в секундах. Если запрос отрабатывается дольше указанного времени, то его выполнение прерывается.
Аргументы:
Возвращаемое значение: объект, содержащий информацию о HTTP-запросе.
$response = http.request("https://some.url", "GET").
timeout(300).
send() |
Назначение: задаёт URL запроса.
Аргументы:
Возвращаемое значение: объект, содержащий информацию о HTTP-запросе.
$response = http.request().
url("http://some.url?p1=v1&p2=v2").
method("GET").
send() |
Назначение: задаёт HTTP-метод запроса.
Аргументы:
Возвращаемое значение: объект, содержащий информацию о HTTP-запросе.
$response = http.request().
url("http://some.url?p1=v1&p2=v2").
method("GET").
send() |
Назначение: задаёт тело запроса.
Аргументы:
Возвращаемое значение: объект, содержащий информацию о HTTP запросе.
$response = http.request().
url("http://some.url?p1=v1&p2=v2").
method("PUT").
body("some body").
send() |
Назначение: добавляет HTTP заголовок.
Аргументы:
Возвращаемое значение: объект, содержащий информацию о HTTP запросе.
$response = http.request().
url("http://some.url?p1=v1&p2=v2").
method("POST").
header("Content-Type", "application/json").
header("Accept-Language", "en-US,en;q=0.5").
send() |
Назначение: задаёт HTTP-заголовки.
Аргументы:
Возвращаемое значение: объект, содержащий информацию о HTTP-запросе.
$response = http.request().
url("http://some.url?p1=v1&p2=v2").
method("PUT").
body("some body").
headers({"Content-Type": "application/json", "Accept-Language": "en-US,en;q=0.5"}).
send() |
Назначение: добавляет файл для отправки по HTTP.
Аргументы:
Возвращаемое значение: объект, содержащий информацию о HTTP-запросе.
$response = http.request().
url("http://some.url").
method("POST").
header("Content-Type", "multipart/form-data").
file($fileId, "file").
send() |
Назначение: отправляет сформированный запрос.
Возвращаемое значение: объект ответа сервера.
$response = http.request("http://some.url?p1=v1&p2=v2", "PUT", "some body").
headers({"header1": "...", "header2": "...").
send() |
Назначение: код статуса ответа.
$response = http.sendRequest("http://some.url?p1=v1&p2=v2", "PUT", "some body")
$code = $response.statusCode |
Назначение: тело ответа.
$response = http.sendRequest("http://some.url?p1=v1&p2=v2", "PUT", "some body")
$body = $response.body |
Назначение: заголовки ответа.
$response = http.sendRequest("http://some.url?p1=v1&p2=v2", "PUT", "some body")
$headers = $response.headers |
Назначение: значение элемента error тела ответа или пустая строка, если такого элемента нет.
$response = http.sendRequest("http://some.url?p1=v1&p2=v2", "PUT", "some body")
$error = $response.error |
Назначение: определение успешности ответа.
Возвращаемое значение: возвращает true, если свойство error не пустое или код статуса больше или равен 400, иначе возвращает false.
$response = http.sendRequest("http://some.url?p1=v1&p2=v2", "PUT", "some body")
$isError = $response.isError() |
Назначение: определение успешности ответа.
Возвращаемое значение: возвращает true, если свойство error пустое и код статуса меньше 400, иначе возвращает false.
$response = http.sendRequest("http://some.url?p1=v1&p2=v2", "PUT", "some body")
$isSuccessful = $response.isSuccessful() |
Назначение: определение наличия заголовка.
Аргументы:
Возвращаемое значение: true, если заголовок с указанным именем существует, и false в противном случае.
$response = http.sendRequest("http://some.url?p1=v1&p2=v2", "PUT", "some body")
$hasContentType = $response.hasHeader("Content-Type") |
Назначение: получение значения заголовка.
Аргументы:
Возвращаемое значение: значение заголовка с указанным именем или пустую строку, если такого заголовка нет.
$response = http.sendRequest("http://some.url?p1=v1&p2=v2", "PUT", "some body")
$contentType = $response.header("Content-Type") |
Назначение: получение файла из HTTP-ответа.
Возвращаемое значение: идентификатор загруженного файла.
$response = http.sendRequest("http://some.url", "GET")
$fileId = $response.toFile() |
Назначение: останавливает работу бота на указанное количество микросекунд. Если количество микросекунд превышает 1 минуту, то пауза будет уменьшена до 1 минуты.
Аргументы:
Возвращаемое значение: отсутствует.
sys.sleep(3_000_000) // Пауза в 3 секунды |
<b>Назначение:</b> отправляет сообщение в нейросеть <a href="https://openai.com/blog/chatgpt" target="_blank">ChatGPT3</a> и возвращает её ответ. |
Аргументы:
Возвращаемое значение: ответ нейросети в виде строки.
Примечание: в случае использования контекста текущее сообщение отправленное chat gpt будет добавлено в переменную список $gpt3Context. Все предыдущие сообщения из этого списка будут переданы в качестве контекста запроса.
Если параметр useContext равен false, то текущее сообщение не добавляется в список. Сам список сообщений (значение переменной $gpt3Context) доступен для редактирования.
$answer = gpt3.ask("Есть ли жизнь на Марсе?", 0.5, true, 500, 10) // В $answer будет ответ нейросети на заданный вопрос |
<b>Назначение:</b> отправляет сообщение в нейросеть <a href="https://openai.com/blog/chatgpt" target="_blank">ChatGPT4</a> и возвращает её ответ. |
Аргументы:
Возвращаемое значение: ответ нейросети в виде строки.
Примечание: в случае использования контекста текущее сообщение отправленное chat gpt будет добавлено в переменную список $gpt4Context. Все предыдущие сообщения из этого списка будут переданы в качестве контекста запроса.
Если параметр useContext равен false, то текущее сообщение не добавляется в список. Сам список сообщений (значение переменной $gpt4Context) доступен для редактирования.
$answer = gpt4.ask("Есть ли жизнь на Марсе?", 0.5, true, 500, 10) // В $answer будет ответ нейросети на заданный вопрос |
<b>Назначение:</b> отправляет сообщение в нейросеть <a href="https://openai.com/blog/chatgpt" target="_blank">ChatGPT</a> и возвращает её ответ. |
Аргументы:
Возвращаемое значение: ответ нейросети в виде строки.
Примечание: в случае использования контекста текущее сообщение отправленное chat gpt будет добавлено в переменную список $"context.{MODEL}". Все предыдущие сообщения из этого списка будут переданы в качестве контекста запроса.
Если параметр useContext равен false, то текущее сообщение не добавляется в список. Сам список сообщений (значение переменной $"context.{MODEL}") доступен для редактирования.
$answer = gpt.ask("gpt-4-1106-preview", "Есть ли жизнь на Марсе?", 0.5, true, 500, 10) // В $answer будет ответ нейросети на заданный вопрос |
<b>Назначение:</b> создаёт разговорную сессию с GPT ассистентом. |
Аргументы: отсутствуют.
Возвращаемое значение: идентификатор чат сессии с ассистентом.
$threadId = gpt.createThread() |
<b>Назначение:</b> удаляет разговорную сессию с GPT ассистентом. |
Аргументы:
Возвращаемое значение: отсутствует.
gpt.deleteThread($threadId) |
<b>Назначение:</b> отправляет сообщение в ассистента чат GPT и возвращает его ответ. |
Аргументы:
Возвращаемое значение: ответ нейросети в виде строки.
$answer = gpt.assist($assistId, $threadId, "Есть ли жизнь на Марсе?", "gpt-3.5-turbo-1106", "", "", 0.5, 500, 10) // В $answer будет ответ нейросети на заданный вопрос |
<b>Назначение:</b> отправляет сообщение в нейросеть <a href="https://ya.ru/ai/gpt-3" target="_blank">YandexGPT</a> и возвращает её ответ. |
Аргументы:
Возвращаемое значение: ответ нейросети в виде строки.
Доступные модели: возможны следующие значения для параметра model:
Примечание: для каждой модели можно указать через / "версию" модели (/latest /rc /deprecated). Соответствие "версии" и "модели" можно найти в официальной документации yandex
$answer = ygpt.ask("yandexgpt/latest", "Есть ли жизнь на Марсе?", 0.5, 500, 15) // В $answer будет ответ нейросети на заданный вопрос |
<b>Назначение:</b> отправляет сообщение в нейросеть <a href="https://www.reka.ai/" target="_blank">Reka</a> и возвращает её ответ. |
Аргументы:
Возвращаемое значение: ответ нейросети в виде строки.
Примечание: возможны следующие значения для параметра model (полный список тут):
$answer = reka.ask("reka-core", "Есть ли жизнь на Марсе?", 0.5, 500, 15) // В $answer будет ответ нейросети на заданный вопрос |
<b>Назначение:</b> отправляет сообщение в нейросеть <a href="https://developers.sber.ru/portal/products/gigachat-api" target="_blank">GigaChat</a> и возвращает её ответ. |
Аргументы:
Возвращаемое значение: ответ нейросети в виде строки.
Примечание: возможны следующие значения для параметра model:
$answer = gigachat.ask("GigaChat", "Есть ли жизнь на Марсе?", 0.5, 500, 15) // В $answer будет ответ нейросети на заданный вопрос |
Назначение: установка атрибутов клиента
Аргументы:
/clients/attributesВозвращаемое значение: void
clients.setAttributes(@clientId, {"74eb7a40-36d5-4db9-b4a1-abe435fd5f0d": "Firstame", "b87e9a3e-21ad-4b42-aab1-fdc52a13c769": "Lastname", "d5443075-e79d-4d1c-bdca-1c0a1965a078": "example@email.com"}); |
Для работы с функциями yclients у вас должно быть установлено наше приложение: https://yclients.com/e/mp_364_twin/
Назначение: записывает клиента на услугу.
Аргументы:
staffId int – идентификатор сотрудника (обязательный параметр).
services List – список услуг (обязательный параметр).
где каждый элемент это ассоциативный массив:
id int – идентификатор услуги
client Map – информация о клиенте (обязательный параметр).
phone string – номер телефона клиента (обязательный параметр).
name string – имя клиента (обязательный параметр, если это новый клиент).
email string – email клиента
datetime string - дата и время (обязательный параметр).
seanceLength int - длительность сеанса, сек (обязательный параметр).
saveIfBusy bool - сохранять ли запись если время занято или нерабочее (по умолчанию false)
sendSms bool - отправлять ли смс с деталями записи клиенту (по умолчанию false)
comment string - комментарий к записи
smsRemainHours int - за сколько часов до визита следует выслать смс напоминание клиенту (0 - если не нужно, по умолчанию 1)
emailRemainHours int - за сколько часов до визита следует выслать email напоминание клиенту (0 - если не нужно, по умолчанию 12)
attendance int - статус записи (2 - Пользователь подтвердил запись, 1 - Пользователь пришел, услуги оказаны, 0 - ожидание пользователя, -1 - пользователь не пришел на визит, по умолчанию 0)
customFields Map - ассоциативный массив дополнительных полей, заполняется согласно настроенным полям в филиале
recordLabels List - список идентификаторов категорий записи
customColor string|nil - цвет записи (по умолчанию null)
apiId string|nil - идентификатор внешней системы (по умолчанию null)
Возвращаемое значение: int, если удалось создать запись и nil в случае ошибки.
$recordId = yclients.createRecord(25344, {"staffId": 2303331, "services": [{"id": 11428840}], "client": {"phone": "79876543210", "name": "Семён", "email": "semen@gmail.com"}, "datetime": "2023-06-07 15:00", "seanceLength": 3600,"saveIfBusy": false, "sendSms": false, "comment": "Комментарий к записи", "smsRemainHours": 1, "emailRemainHours": 12, "attendance": 2, "customFields": {"priority":"high"}, "recordLabels": ["67345", "78549"], "customColor": nil, "apiId": "7894"}); |
Назначение: получает данные о записи.
Аргументы:
Возвращаемое значение: ассоциативный массив если запись существует и nil в случае ошибки.
$record = yclients.recordDetails(25344, 52157914);
// $record будет содержать:
// {
// "id": 52157914,
// "client": {
// "id": 167359987,
// "name": "Семён",
// "surname": "",
// "phone": "+79876543210",
// "card": "",
// "email": "semen@gmail.com"
// },
// "staff": {
// "id": 2303331,
// "name": "Анисимова Полина",
// "specialization": "специалист",
// "position": {
// "id": 231647,
// "title": "Парикмахер"
// }
// },
// "services": [
// {
// "id": 11440288,
// "title": "Стрижка",
// "cost": 1000,
// "costToPay": 0,
// "manualCost": 0,
// "costPerUnit": 0,
// "discount": 0,
// "firstCost": 0,
// "amount": 1
// }
// ],
// "date": "2023-06-03T14:33:00+00:00",
// "createDate": "2023-05-31T05:51:44+00:00",
// "comment": "",
// "attendance": 2,
// "length": 4200,
// "lastChangeDate": "2023-06-02T10:26:50+00:00",
// "prepaid": false,
// "prepaidConfirmed": false,
// "deleted": true,
// "apiId": "7894"
//} |
Назначение: переносит запись на новое время.
Аргументы:
Возвращаемое значение: true в случае успеха и false в случае ошибки
$success = yclients.rescheduleRecord(25344, 52157914, "2023-06-07 16:00"); |
Назначение: подтверждает запись.
Аргументы:
Возвращаемое значение: true в случае успеха и false в случае ошибки
$success = yclients.confirmRecord(25344, 52157914); |
Назначение: отменяет запись.
Аргументы:
Возвращаемое значение: true в случае успеха и false в случае ошибки
$success = yclients.cancelRecord(25344, 52157914); |
Назначение: удаляет запись.
Аргументы:
Возвращаемое значение: true в случае успеха и false в случае ошибки
$success = yclients.deleteRecord(25344, 52157914); |
Назначение: поиск записей по филиалу.
Аргументы:
Возвращаемое значение: List в случае успеха и nil в случае ошибки
$records = yclients.searchRecords(25344);
//$records будет содержать:
//[
// {
// "id": 52157914,
// "companyId": 25344,
// "staffId": 2303331,
// "services": [
// {
// "id": 11440288,
// "title": "Стрижка",
// "cost": 1000,
// "manualCost": 1000,
// "costPerUnit": 1000,
// "discount": 0,
// "firstCost": 1000,
// "amount": 1
// }
// ],
// "staff": {
// "id": 2303331,
// "name": "Сотрудник 2",
// "specialization": "мужской мастер",
// "position": {
// "id": 264317,
// "title": "Парикмахер"
// },
// "avatar": "",
// "avatarBig": "",
// "rating": 0,
// "votesCount": 0
// },
// "date": "2023-08-13T07:40:00+00:00",
// "datetime": "2023-08-13T04:40:00+00:00",
// "createDate": "2023-08-08T11:18:04+00:00",
// "comment": "",
// "online": false,
// "visitAttendance": 0,
// "attendance": 0,
// "confirmed": true,
// "seanceLength": 3600,
// "length": 3600,
// "smsBefore": true,
// "smsNow": false,
// "smsNowText": "",
// "emailNow": false,
// "notified": false,
// "masterRequest": true,
// "apiId": "",
// "fromUrl": "",
// "reviewRequested": false,
// "visitId": 0,
// "createdUserId": 787095,
// "paidFull": 1,
// "prepaid": false,
// "prepaidConfirmed": false,
// "lastChangeDate": "2023-08-08T11:18:04+00:00",
// "customColor": "",
// "customFontColor": "",
// "recordLabels": [
// {
// "id": 104474,
// "title": "категория",
// "color": "#3b2c54"
// "icon": "icon"
// "fontColor": "#ffffff"
// }
// ],
// "activityId": 0,
// "documents": [
// {
// "id": 8172893,
// "typeId": 7,
// "storageId": 0,
// "userId": 787095,
// "companyId": 25344,
// "number": 8172893,
// "comment": "",
// "dateCreated": "2023-08-13T06:40:00+00:00",
// "categoryId": 0,
// "visitId": 0,
// "recordId": 52157914,
// "typeTitle": "Визит"
// }
// ],
// "smsRemainHours": null,
// "emailRemainHours": null,
// "bookformId": 0,
// "recordFrom": "",
// "isMobile": false,
// "isSaleBillPrinted": false
// }
//] |
Назначение: поиск записей по истории посещений клиента.
Аргументы:
Возвращаемое значение: List в случае успеха и nil в случае ошибки
Примечание: для использования функции необходимо передать clientId или clientPhone, чтобы идентифицировать клиента.
$records = yclients.recordsByVisits(25344, {"clientId": 2303331});
//$records будет содержать:
//[
// {
// "id": 52157914,
// "comment": "",
// "date": "2023-06-21T15:00:00+00:00",
// "visitId": 550229870,
// "attendance": 0,
// "services": [
// {
// "id": 11440288,
// "title": "Стрижка",
// "firstCost": 1000,
// "discountPercent": 0,
// "costToPay": 1000,
// "paidSum": 0,
// "paymentStatus": "not_paid"
// }
// ],
// "staff": {
// "id": 2331303,
// "name": "Сотрудник 1",
// "companyId": 25344,
// "specialization": "специалист",
// "avatar": "",
// "avatarBig": "",
// "position": {
// "id": 264317,
// "title": "Парикмахер"
// }
// },
// "company": {
// "id": 25344,
// "title": "Twin"
// },
// "tips": {
// "hasTips": false,
// "sum": null
// },
// "comer": null
// }
//] |
Назначение: запрашивает даты доступные для бронирования.
Аргументы:
Возвращаемое значение: Map в случае успеха и nil в случае ошибки
Формат ответа:
// Запрашивает даты доступные для бронирования
$dates = yclients.bookingDates(25344);
// Запрашивает даты доступные для бронирования с фильтром по услугам
$dates = yclients.bookingDates(25344, [75426, 58654]);
// Запрашивает даты доступные для бронирования с фильтром по сотруднику
$dates = yclients.bookingDates(25344, nil, 2303331);
// Запрашивает даты доступные для бронирования с фильтром по дате
$dates = yclients.bookingDates(25344, nil, nil, "2023-06-08");
// Запрашивает даты доступные для бронирования с фильтром по сотруднику и дате
$dates = yclients.bookingDates(25344, nil, 2303331, "2023-06-08");
// Запрашивает даты доступные для бронирования с фильтром по услугам и дате
$dates = yclients.bookingDates(25344, [75426, 58654], nil, "2023-06-08");
// $dates будет содержать:
// {
// "bookingDays": {
// "6": [
// 20,
// 21,
// 22,
// 23,
// 24,
// 25,
// 26,
// 27,
// 28,
// 29,
// 30
// ],
// "7": [
// 1,
// 2,
// 3,
// 4,
// 8,
// 9,
// 12,
// 14,
// 20,
// 26,
// 28
// ],
// "8": [
// 1,
// 5,
// 7
// ]
// },
// "bookingDates": [
// "2023-06-20",
// "2023-06-21",
// "2023-06-22",
// "2023-06-23",
// "2023-06-24",
// "2023-06-25",
// "2023-06-26",
// "2023-06-27",
// "2023-06-28",
// "2023-06-29",
// "2023-06-30",
// "2023-07-01",
// "2023-07-02",
// "2023-07-03",
// "2023-07-04",
// "2023-07-08",
// "2023-07-09",
// "2023-07-12",
// "2023-07-14",
// "2023-07-20",
// "2023-07-26",
// "2023-07-28",
// "2023-08-01",
// "2023-08-05",
// "2023-08-07"
// ],
// "workingDays": {
// "6": [
// 20,
// 21,
// 22,
// 23,
// 24,
// 25,
// 26,
// 27,
// 28,
// 29,
// 30
// ],
// "7": [
// 1,
// 2,
// 3,
// 4,
// 8,
// 9,
// 12,
// 14,
// 20,
// 26,
// 28
// ],
// "8": [
// 1,
// 5
// ]
// },
// "workingDates": [
// "2023-06-20",
// "2023-06-21",
// "2023-06-22",
// "2023-06-23",
// "2023-06-24",
// "2023-06-25",
// "2023-06-26",
// "2023-06-27",
// "2023-06-28",
// "2023-06-29",
// "2023-06-30",
// "2023-07-01",
// "2023-07-02",
// "2023-07-03",
// "2023-07-04",
// "2023-07-08",
// "2023-07-09",
// "2023-07-12",
// "2023-07-14",
// "2023-07-20",
// "2023-07-26",
// "2023-07-28",
// "2023-08-01",
// "2023-08-05"
// ]
// } |
Назначение: запрашивает услуги доступные для бронирования.
Аргументы:
Возвращаемое значение: Map в случае успеха и nil в случае ошибки
Формат ответа:
// Запрашивает доступные услуги
$services = yclients.bookingServices(25344);
// Запрашивает доступные услуги с учетом только необходимых
$services = yclients.bookingServices(25344, [75426, 58654]);
// Запрашивает доступные услуги сотрудника
$services = yclients.bookingServices(25344, nil, 2303331);
// Запрашивает доступные услуги на определенное время
$services = yclients.bookingServices(25344, nil, nil, "2023-06-08 12:00");
// Запрашивает доступные услуги сотрудника на определенное время
$services = yclients.bookingServices(25344, nil, 2303331, "2023-06-08 12:00");
// $services будет содержать:
// {
// "services": [
// {
// "id": 11440288,
// "title": "Стрижка",
// "categoryId": 11440287,
// "priceMin": 1000,
// "priceMax": 2000,
// "discount": 0,
// "comment": "",
// "weight": 2,
// "active": 1,
// "sex": 0,
// "image": "",
// "prepaid": "forbidden",
// "seanceLength": 3600, // в секундах. возвращается если задан фильтр по сотруднику, в ином случае вернется null
// "abonementRestriction": 0,
// "prepaidSettings": {
// "status": "forbidden",
// "prepaidFull": {
// "amount": 1000,
// "currency": "RUB"
// },
// "prepaidMin": {
// "amount": 1000,
// "percent": 100,
// "currency": "RUB"
// }
// }
// },
// {
// "id": 12685752,
// "title": "Окрашивание",
// "categoryId": 11440287,
// "priceMin": 3000,
// "priceMax": 3000,
// "discount": 0,
// "comment": "",
// "weight": 0,
// "active": 1,
// "sex": 0,
// "image": "",
// "prepaid": "forbidden",
// "seanceLength": null,
// "abonementRestriction": 0,
// "prepaidSettings": {
// "status": "forbidden",
// "prepaidFull": {
// "amount": 3000,
// "currency": "RUB"
// },
// "prepaidMin": {
// "amount": 3000,
// "percent": 100,
// "currency": "RUB"
// }
// }
// }
// ],
// "categories": [
// {
// "id": 11440287,
// "title": "Категория услуг",
// "sex": 0,
// "apiId": 0,
// "weight": 1
// }
// ]
// } |
Назначение: запрашивает сотрудников доступных для бронирования.
Аргументы:
Возвращаемое значение: List в случае успеха и nil в случае ошибки
// Запрашивает доступных сотрудников
$staff = yclients.bookingStaff(25344);
// Запрашивает доступных сотрудников с учетом услуг
$staff = yclients.bookingStaff(25344, [75426, 58654]);
// Запрашивает доступных сотрудников с учетом даты
$staff = yclients.bookingStaff(25344, nil, "2023-06-08");
// Запрашивает доступных сотрудников на определенную дату с учетом услуг
$staff = yclients.bookingStaff(25344, [75426, 58654], "2023-06-08");
// $staff будет содержать:
// [
// {
// "id": 2631363,
// "apiId": null,
// "name": "Сотрудник 2",
// "specialization": "мужской мастер",
// "rating": 0,
// "showRating": 1,
// "userId": null,
// "avatar": "https://be.cdn.yclients.com/images/no-master-sm.png",
// "avatarBig": "https://be.cdn.yclients.com/images/no-master.png",
// "commentsCount": 0,
// "votesCount": 0,
// "bookable": true,
// "information": "",
// "positionId": 263147,
// "scheduleTill": "2023-08-31",
// "weight": 2,
// "fired": 0,
// "status": 0,
// "hidden": 0,
// "user": null,
// "prepaid": "forbidden",
// "position": {
// "id": 217643,
// "title": "Парикмахер"
// }
// },
// {
// "id": 2331303,
// "apiId": null,
// "name": "Сотрудник 1",
// "specialization": "специалист",
// "rating": 0,
// "showRating": 1,
// "userId": null,
// "avatar": "https://be.cdn.yclients.com/images/no-master-sm.png",
// "avatarBig": "https://be.cdn.yclients.com/images/no-master.png",
// "commentsCount": 0,
// "votesCount": 0,
// "bookable": true,
// "information": "",
// "positionId": 231647,
// "scheduleTill": "2023-07-02",
// "weight": 1,
// "fired": 0,
// "status": 0,
// "hidden": 0,
// "user": null,
// "prepaid": "forbidden",
// "position": {
// "id": 217643,
// "title": "Парикмахер"
// }
// }
// ]
|
Назначение: запрашивает ближайшие доступные сеансы сотрудника
Аргументы:
Возвращаемое значение: Map в случае успеха и nil в случае ошибки
// Запрашивает доступные сеансы сотрудника
$staffSeances = yclients.bookingStaffSeances(25344, 2331303);
// Запрашивает доступные сеансы сотрудника с учетом услуг
$staffSeances = yclients.bookingStaffSeances(25344, 2331303, [75426, 58654]);
// $staffSeances будет содержать:
// {
// "seanceDate": "2023-06-20",
// "seances": [
// {
// "time": "13:00",
// "seanceLength": 3600,
// "sumLength": 3600,
// "datetime": "2023-06-20T10:00:00+00:00"
// },
// {
// "time": "13:30",
// "seanceLength": 3600,
// "sumLength": 3600,
// "datetime": "2023-06-20T10:30:00+00:00"
// }
// ]
// }
|
Назначение: запрашивает список сеансов доступных для бронирования
Аргументы:
Возвращаемое значение: List в случае успеха и nil в случае ошибки
// Запрашивает доступные сеансы сотрудника
$times = yclients.bookingTimes(25344, 2331303, "2023-06-20");
// Запрашивает доступные сеансы сотрудника на определенные услуги
$times = yclients.bookingTimes(25344, 2331303, "2023-06-20", [75426, 58654]);
// $times будет содержать:
// [
// {
// "time": "6:00",
// "seanceLength": 3600,
// "sumLength": 3600,
// "datetime": "2023-06-21T03:00:00+00:00"
// },
// {
// "time": "6:30",
// "seanceLength": 3600,
// "sumLength": 3600,
// "datetime": "2023-06-21T03:30:00+00:00"
// },
// {
// "time": "19:00",
// "seanceLength": 3600,
// "sumLength": 3600,
// "datetime": "2023-06-21T16:00:00+00:00"
// }
// ]
|
Назначение: производит поиск клиента по передаваемым фильтрам
Аргументы:
Возвращаемое значение: int, если клиент найден и nil, если клиент не найден.
// Поиск клиента по номеру телефона
$clientId = yclients.searchClient(1, {'phone': '11111111111'});
// Поиск клиента по почте
$clientId = yclients.searchClient(1, {'email': 'test@mail.com'});
|
Назначение: получает данные о клиенте
Аргументы:
Возвращаемое значение: Map, если клиент найден и nil, если клиент не найден.
$client = yclients.clientDetails(1, 1);
// $client будет содержать:
// {
// "id": 1,
// "email": "test@mail.com",
// "name": "name",
// "surname": "",
// "patronymic": "",
// "phone": "+111111111",
// "categories": [],
// "sex": "Неизвестно",
// "discount": 0,
// "importance": "Без класса важности",
// "card": "",
// "birthDate": "",
// "comment": "",
// "smsCheck": false,
// "smsNot": false,
// "spent": 0,
// "balance": 0,
// "visits": 0,
// "lastChangeDate": "2022-12-19T10:47:21+0400",
// "customFields": []
//}
|
Назначение: создает нового клиента
Аргументы:
Возвращаемое значение: int, если клиент создан и nil, если нет.
$clientId = yclients.createClient(1, {'name': 'Имя', 'phone': '1111111111111', 'email': 'testclient@mail.com', 'sexId': 1, 'birthDate': '1999-01-01'});
|
Назначение: редактирует информацию клиента
Аргументы:
Возвращаемое значение: true, если клиент успешно отредактирован и false, если нет.
$client = yclients.updateClient(1, 1, {'name': 'Имя', 'phone': '1111111111111', 'email': 'updateclient@mail.com'});
|
Назначение: добавляет комментарий к клиенту
Аргументы:
Возвращаемое значение: int, если комментарий создан и nil, если нет.
$commentId = yclients.createClientComment(1, 1, 'text'); |
Используя методы этого объекты, вы можете выполнять и строить разнообразные запросы к базе фактов. База фактов представляет собой список записей. Каждая запись представляет собой единичный факт, состоящий из следующих частей (полей):
Назначение: задаёт список полей из базы фактов, значения которых следует вернуть в результате запроса. Если метод select не вызывался, то будут возвращены поля context, name и value.
Аргументы:
Возвращаемое значение: тот же объект FactQuery.
$facts = fact.query().rows() // select не вызван возвращаем все поля.
$facts = fact.query().select(["value", "context"]).rows() // Возвращаем список фактов, для которых нам нужны только value и context.
$facts = fact.query().select("botId").rows() // Возвращаем только поле botId, к которому привязаны факты. |
Назначение: задаёт условие поиска фактов. Несколько методов where объединяются по принципу логического "И". Т.е. все условия должны быть выполнены. Метод where равносилен методу andWhere(field, operator, value).
Аргументы:
Возвращаемое значение: тот же объект FactQuery.
Список доступных операций:
// Ищем факты, у которых context содержит подстроку test
$facts = fact.query().
select("name,value").
where("context", "~", "^.*test.*$").
rows() |
Эквивалентен where(field, operator, value).
Аналогичен where с той лишь разницей, что несколько вызовов этого метода объединяются по принципу логического "ИЛИ" (т.е. должно выполняться хотя бы одно условие).
Назначение: задаёт сложное (вложенное) условие. Несколько вызвов метода объединяются по принципу логического "И". Эквивалентен методу andWhere(cond).
Аргументы:
Возвращаемое значение: тот же объект FactQuery.
// Ищем факты, у которых context содержит подстроку test, и при этом name равен "слово", или name начинается на "оп".
$facts = fact.query().
select("name,value").
where("context", "~", "^.*test.*$").
andWhere(fact.cond().
where("name", "=", "слово").
orWhere("name", "^@", "оп")).
rows() |
Эквивалентен where(cond).
Аналогичен where(cond), с той лишь разницей, что несколько вызовов этого метода объединяются по принципу логического "ИЛИ", т.е. должно выполняться хотя бы одно условие.
Назначение: задаёт сортирову фактов по указанным полям.
Аргументы:
Возвращаемое значение: тот же объект FactQuery.
// Получаем все факты для бота с двойной сортировкой:
// Сначала по контексту по возрастанию (т.е. в алфавитном порядке)
// И далее по имени факта по убыванию.
$facts = fact.query().
select("name,value").
where("botId", "=", @botId)
sortBy("+context,-name"). // Можно также использовать коллеции. Например, sortBy(["+context", "-name"])
rows() |
Назначение: ставит ограничение на максимальное количество извлекаемых фактов.
Аргументы:
Возвращаемое значение: тот же объект FactQuery.
// Получаем первые 10 фактов
$facts = fact.query().
select("name,value").
sortBy("name").
limit(10).
rows() |
Назначение: задаёт количество фактов, которые следует пропустить при поиске.
Аргументы:
Возвращаемое значение: тот же объект FactQuery.
// Пропускаем 5 первых фактов и извлекаем следующие 10
$facts = fact.query().
select("name,value").
sortBy("name").
skip(5).
limit(10).
rows() |
Назначение: возвращает первое указанное через select поле первого найденного факта.
Аргументы: отсутствуют.
Возвращаемое значение: значение поля.
// Извлекает имя первого найденного факта
$firstFactName = fact.query().
select("name,value"). // value хоть и указано, но будет проигнорировано
one() |
Назначение: возвращает список, состоящий из всех значений первого выбранного поля найденных фактов.
Аргументы: отсутствуют.
Возвращаемое значение: список значений поля.
// Извлекает список имён всех найденных фактов
$names = fact.query().
select("name,value"). // value хоть и указано, но будет проигнорировано
column() |
Назначение: возвращает все выбранные поля в виде ассоциативного массива для первого найденного факта.
Аргументы: отсутствуют.
Возвращаемое значение: значения всех полей первого факта.
// Извлекает имя и значение первого найденного факта
$names = fact.query().
select("name,value").
row() |
Назначение: возвращает список всех найденных фактов. Каждый факт возвращается как ассоциативный массив, ключами которого являются поля факта, а значениями – значения полей.
Аргументы: отсутствуют.
Возвращаемое значение: значения всех полей всех фактов.
// Извлекает имя и значение всех фактов
$names = fact.query().
select("name,value").
rows() |
Используйте методы этого объекта, чтобы строить сложные вложенные условия к базе фактов.
Аналогичен методу where(field string, operator string, value mixed) объекта FactQuery.
Аналогичен методу andWhere(field string, operator string, value mixed) объекта FactQuery.
Аналогичен методу orWhere(field string, operator string, value mixed) объекта FactQuery.
Аналогичен методу andWhere(field string, operator string, value mixed) объекта FactQuery.
Аналогичен методу orWhere(field string, operator string, value mixed) объекта FactQuery.
Аналогичен методу where(cond FactQueryCondition) объекта FactQuery.
Аналогичен методу andWhere(cond FactQueryCondition) объекта FactQuery.
Аналогичен методу orWhere(cond FactQueryCondition) объекта FactQuery.
Аналогичен методу andWhere(cond FactQueryCondition) объекта FactQuery.
Аналогичен методу orWhere(cond FactQueryCondition) объекта FactQuery.
Назначение: оригинальный текст сообщения.
$msg = queue.last().message // $msg содержит текст последнего сообщения пользователя |
Назначение: список идентификаторов файлов, приложенных к сообщению.
$attachments = queue.first().attachments // $attachments содержит список вложений первого сообщения пользователя. |
Назначение: определяет пустое ли сообщение.
Аргументы: отсутствуют.
Возвращаемое значение: true, если сообщение пустое, и false в противном случае.
$isEmpty = queue.last().isEmpty() // $isEmpty содержит true, если последнее сообщение пользователя пустое, и false в противном случае |
Назначение: определяет, есть ли вложения в данном сообщении.
Аргументы: отсутствуют.
Возвращаемое значение: true, если сообщение имеет вложения, и false в противном случае.
$hasAttachments = queue.first().hasAttachments() // $hasAttachments содержит true, если первое сообщение пользователя имеет вложения, и false в противном случае |
Назначение: распознанное намерение.
$sentence = nlu.parse("Привет Вася", "d926726a-5acb-4233-8c1e-ce4300921de0")
$intent = $sentence.intent // $intent содержит "greeting" |
Назначение: степень достоверности распознанного намерения (1 – однозначное распознавание, 0 – намерение фактически нераспознанно).
$sentence = nlu.parse("Привет Вася", "d926726a-5acb-4233-8c1e-ce4300921de0")
$confidence = $sentence.intentConfidence // $confidence содержит 0.98 |
Назначение: список распознанных намерений. Каждый элемент списка содержит кортеж из двух элементов: название намерения (string) и его достоверность распознавания (float).
$sentence = nlu.parse("Доброе утро Вася, пора вставать", "d926726a-5acb-4233-8c1e-ce4300921de0")
$intents = $sentence.intents // $entities допустим содержит [("greetings", 0.97), ("wakeup", 0.88)]
$first = $intents.get(0) // $first содержит ("greetings", 0.97)
$intent = $first.get(0) // $intent содержит "greetings" |
Назначение: список распознанных сущностей. Каждый элемент списка содержит кортеж из трёх элементов: тип сущности (string), значение сущности (строка), достоверность распознавания сущности (float).
$sentence = nlu.parse("Доброе утро Вася", "d926726a-5acb-4233-8c1e-ce4300921de0")
$entities = $sentence.entities // $entities содержит [("human-name", "Вася", 0.96), ("time", "2023-01-09 23:30:00", 0.87)]
$first = $entities.get(0) // $first содержит ("human-name", "Вася", 0.96)
$type = $first.get(0) // $type содержит "human-name" |