...
| Блок кода | ||
|---|---|---|
| ||
// Допустим сейчас 23:30:00 $t = time.past(45) // $t содержит 22:45:00 $t = time.past(15) // $t содержит 22:15:00 |
Функции
...
по работе с очередью сообщений пользователя
queue.size() int
Назначение: определение размера очереди сообщений пользователя.
Аргументы: отсутствуют.
Возвращаемое значение: число сообщений пользователя
fact.save(context string, factName string, factValue mixed, botId string = nil, clientId string = nil)
Назначение: сохраняет факт в базе фактов.
Аргументы:
- context - строка определяющая контекс в рамках которого существует факт.
- factName - строка определяющая название факта.
- factValue - любое значение определяющее содержимое факта.
- botId - идентификатор бота. По умолчанию не задан.
- clientId - идентификатор клиента, По умолчанию не задан.
Возвращаемое значение: отсутствует.
| Блок кода | ||
|---|---|---|
| ||
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
Назначение: извлекает факт из базы фактов.
Аргументы:
- context - строка определяющая контекс в рамках которого существует факт.
- factName - строка определяющая название факта.
- botId - идентификатор бота. По умолчанию не задан.
- clientId - идентификатор клиента, По умолчанию не задан.
$messageCount = queue.size() // $messageCount содержит число сообщений пользователя за всё время диалога |
queue.last() ?UserMessage
Назначение: возвращает последнее сообщение пользователя либо nil, если очередь сообщений пуста.
Аргументы: отсутствуют.
Возвращаемое значение: объект UserMessage или nil.
| Блок кода | ||
|---|---|---|
| ||
$lastMessage = queue.last() // $lastMessage содержит последнее на данный момент сообщение пользователя |
queue.first() ?UserMessage
Назначение: возвращает первое сообщение пользователя либо nil, если очередь сообщений пуста.
Аргументы: отсутствуют.
Возвращаемое значение: объект UserMessage или nil.
| Блок кода | ||
|---|---|---|
| ||
$firstMessage = queue.first() // $firstMessage содержит первое сообщение пользователя |
queue.nth(index int) ?UserMessage
Назначение: возвращает сообщение пользователя по его порядковому номеру, начиная с 1.
Аргументы:
- index - порядковый номер сообщения пользователя.
Возвращаемое значение: объект UserMessage или nil.
| Блок кода | ||
|---|---|---|
| ||
$message = queue.nth(1) // $message содержит первое сообщение пользователя
$message = queue.nth(5) // $message содержит пятое сообщение пользователя |
queue.lastNth(index int) ?UserMessage
Назначение: возвращает сообщение пользователя по его порядковому номеру считая с конца очереди. Последнее сообщение соответствует порядковому номеру 1.
Аргументы:
- index - порядковый номер сообщения пользователя считая с конца очереди.
Возвращаемое значение: объект UserMessage или nilВозвращаемое значение: содержимое факта.
| Блок кода | ||
|---|---|---|
| ||
fact.save("место", "город", "Екатеринбург", @botId, @clientId$message = queue.lastNth(1) // Сохраняет$message фактсодержит споследнее привязкойсообщение кпользователя $message боту и клиенту $city = fact.load("место", "город", @botId, @clientId) // Загружаем факт в переменную. $city содержит "Екатеринбург" |
...
= queue.lastNth(5) // $message содержит пятое с конца очереди сообщение пользователя |
Функции для работы с фактами
fact.save(context string, factName string, factValue mixed, botId string = nil, clientId string = nil)
Назначение: удаляет факт из базы сохраняет факт в базе фактов.
Аргументы:
- context - строка определяющая контекс в рамках которого существует факт.
- factName - строка определяющая название факта.
- factValue - любое значение определяющее содержимое факта.
- botId - идентификатор бота. По умолчанию не задан.
- clientId - идентификатор клиента, По умолчанию не задан.
...
| Блок кода | ||
|---|---|---|
| ||
fact.save("место", "город", "Екатеринбург", @botId, @clientId) // Сохраняет факт с привязкой к боту и клиенту
$city = fact.load("место", "город", @botId, @clientId) // Факт доступный всем ботам //компании Загружаем факт в переменную. $city содержит "Екатеринбург"
fact.deletesave("место", "город", @botId"Екатеринбург", nil, @clientId) // Факт с привязкой к клиенту
fact.save("место", "город", "Екатеринбург", @botId) // Факт Удаляем факт.
$city = fact.loadс привязкой к боту
fact.save("место", "город", "Екатеринбург", @botId, @clientId) // ПытаемсяФакт загрузитьс удалённыйпривязкой факт.к Теперьботу $city содержит nil.и клиенту |
fact.
...
load(context string, factName string, botId string = nil, clientId string = nil) mixed
Назначение: извлекает факт из базы фактов.
Аргументы:
- context - строка определяющая контекс в рамках которого существует факт.
- factName - строка определяющая название факта.
- botId - идентификатор бота. По умолчанию не задан.
- clientId - идентификатор клиента, По умолчанию не задан
Назначение: возвращает экземпляр FactQuery для построения и выполнения запросов к базе фактов.
...
- .
Возвращаемое значение: объект FactQueryсодержимое факта.
| Блок кода | ||
|---|---|---|
| ||
// Добавили пару фактов в базу fact.save("место", "странагород", "Россия") fact.save("место", "город", "Екатеринбург") Екатеринбург", @botId, @clientId) // ЗагрузилиСохраняет вфакт $placesс списокпривязкой местк отсортированныхботу по имени факта в порядке убывания: // [{"name": "городи клиенту $city = fact.load("место", "value": "Россия"}, {"name": "страна", "value": "Екатеринбург"}] $places = fact.query(). select("name,value"). where("context", "=", "место"). sortBy("-name"). rows() |
fact.cond() FactQueryCondition
Назначение: возвращает экземпляр FactQueryCondition для построения составных условий в запросах к базе фактов.
Аргументы: отсутствуют.
город", @botId, @clientId) // Загружаем факт в переменную. $city содержит "Екатеринбург" |
fact.delete(context string, factName string, botId string = nil, clientId string = nil)
Назначение: удаляет факт из базы фактов.
Аргументы:
- context - строка определяющая контекс в рамках которого существует факт.
- factName - строка определяющая название факта.
- botId - идентификатор бота. По умолчанию не задан.
- clientId - идентификатор клиента, По умолчанию не задан.
Возвращаемое значение: отсутствуетВозвращаемое значение: объект FactQueryCondition.
| Блок кода | ||
|---|---|---|
| ||
// Добавили факты в базу fact.save("городаместо", "екатеринбурггород", "Екатеринбург") fact.save("города", "москва", "Москва") fact.save("города@botId, @clientId) // Сохраняет факт с привязкой к боту и клиенту $city = fact.load("место", "санкт-петербурггород", "Санкт-Петербург")@botId, @clientId) // Загружаем факт в переменную. $city содержит "Екатеринбург" fact.savedelete("городаместо", "новосибирскгород", @botId, "Новосибирск") // Найдём один город начинающийся с буквы "м" или с буквы "т" и не равный городам "Екатеринбург" и "Новосибирск"@clientId) // Удаляем факт. $city = fact.query(). selectload("valueместо"). where("context, "город", "="@botId, "города"@clientId). where(fact.cond(). // Пытаемся where("name", "^@", "м"). orWhere("name", "^@", "т")). where("name", "not in", ("екатеринбург", "новосибирск")). one() |
Функции для работы с таймером
timer.start(time int, nodeId string) string
Назначение: запускает таймер обратного отсчёта. По истечении указанного времени бот осуществит переход на указанный узел (блок).
Аргументы:
- time - время в секундах.
- nodeId - идентификатор блока для перехода после завершения отсчёта.
Возвращаемое значение: идентификатор таймера.
| Блок кода | ||
|---|---|---|
| ||
$timerId = timer.start(60, "760b9732-4bfb-4846-a348-faae5138fcb2") // $timerId содержит уникальный идентификатор таймера на 60 секунд |
timer.stop(timerId string)
Назначение: останавливает (удаляет) таймер обратного отсчёта.
Аргументы:
- timerId - идентификатор таймера.
загрузить удалённый факт. Теперь $city содержит nil. |
fact.query() FactQuery
Назначение: возвращает экземпляр 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 для построения составных условий в запросах к базе фактов.
Аргументы: отсутствуют.
Возвращаемое значение: объект FactQueryConditionВозвращаемое значение: отсутствует.
| Блок кода | ||
|---|---|---|
| ||
$timerId = timer.start(60, "760b9732-4bfb-4846-a348-faae5138fcb2")
timer.stop($timerId) // останавливаем (удаляем) таймер |
Функции для работы с текстом на естественном языке (NLP)
nlp.parse(message string|UserMessage) Sentence
Назначение: парсит текст на естественном языке.
Аргументы:
- message - текст на естественном языке или объект UserMessage.
Возвращаемое значение: объект Sentence содержащий информацию о всех намерениях и сущностях исходного сообщения.
Примечание: данная функция извлекает из текста только сущности. Для работы с намерениями используйте функцию nlu.parse
| Блок кода | ||
|---|---|---|
| ||
$sentence = nlp.parse(queue.first()) // парсим первое сообщение пользователя |
nlp.join(message1 string|UserMessage, message2 string|UserMessage) Sentence
Назначение: объединяет два текста на естественном языке в одно и затем парсит его.
Аргументы:
- message1 - текст на естественном языке или объект UserMessage.
- message2 - текст на естественном языке или объект UserMessage.
Возвращаемое значение: объект Sentence содержащий информацию о всех намерениях и сущностях объединённого сообщения.
| Блок кода | ||
|---|---|---|
| ||
$sentence = nlp.join(queue.lastNth(2), queue.lastNth(1)) // объединяем предпоследнее и последнее сообщения пользователя и затем парсим его |
nlp.setPerception($sentence Sentence)
Назначение: позволяет установить сообщение пользователя для обработки в других узлах (блоках) схемы бота.
Аргументы:
- 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
Назначение: разбор текста на естественном языке. Выявление намерений и сущностей.
Аргументы:
...
// Добавили факты в базу
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
Назначение: запускает таймер обратного отсчёта. По истечении указанного времени бот осуществит переход на указанный узел (блок).
Аргументы:
- time - время в секундах.
- nodeId - идентификатор блока для перехода после завершения отсчёта.
Возвращаемое значение: идентификатор таймераВозвращаемое значение: объект Sentence.
| Блок кода | ||
|---|---|---|
| ||
$sentence$timerId = nlutimer.parse("Доброе утро Вася!"start(60, "d926726a760b9732-5acb4bfb-42334846-8c1ea348-ce4300921de0faae5138fcb2") |
Функции для работы с HTTP
http.request(url string, method string, params Collection, headers Map) Map
// $timerId содержит уникальный идентификатор таймера на 60 секунд |
timer.stop(timerId string)
Назначение: останавливает (удаляет) таймер обратного отсчёта.Назначение: отправляет HTTP запрос на указанный URL.
Аргументы:
- url - URL адрес на который будет оправлен запрос.
- method - HTTP метод. Допустимые значения: GET, POST, PUT, DELETE, PATCH, HEAD и OPTIONS.
- params - параметры запроса. Могут быть представлены как списком так и ассоциативным массивом.
- headers - HTTP заголовки запроса. По умолчанию устанавливается заголовок Content-Type: application/json.
Возвращаемое значение: HTTP ответ на запрос в виде ассоциативного массива со следующими ключами: statusCode - HTTP код ответа, body - тело ответа (преобразованное в соответствии с заголовком Content-Type), headers - HTTP заголовки ответа в виде ассоциативного массива, exception - текст ошибки или nil если запрос прошёл без ошибок.
| Блок кода | ||
|---|---|---|
| ||
// Выполняем запрос на получение списка юзеров
$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 минуты.
Аргументы:
- microseconds - число микросекунд паузы.
Возвращаемое значение: отсутствует.
| Блок кода | ||
|---|---|---|
| ||
sys.sleep(3_000_000) // Пауза в 3 секунды |
Функции для работы с GPT-3
gpt3.ask(text string) string
Назначение: отправляет сообщение в демо версию нейросети RuGTP-3 и возвращает её ответ.
Аргументы:
- text - запрос к нейросети на русском языке.
Возвращаемое значение: ответ нейросети в виде строки.
| Блок кода | ||
|---|---|---|
| ||
$answer = gpt3.ask("Есть ли жизнь на Марсе?") // В $answer будет ответ нейросети на заданный вопрос |
Объект FactQuery
Используя методы этого объекты вы можете выполнять и строить разнообразные запросы к базе фактов. База фактов представляет собой список записей. Каждая запись представляет собой единичный факт состоящий из следующих частей (полей):
- Контекст (context). Произвольная строка длина которой не превышает 255 символов. Обозначает некоторую предметную область в рамках которой существует факт. Может участвовать в поиске.
- Имя факта (name). Произвольная строка длина которой не превышает 255 символов. Служит для идентификации факта в заданном контексте. Может участвовать в поиске.
- Значение факта (value). Любое значение. Это собственно и есть та информация которую мы трактуем как факт. Не может участвовать в поиске (технически может, но результат недетерминирован).
- Идентификатор бота (botId). Может быть задан при сохранении факта с целью привязки факта к боту. Может участвовать в поиске.
- Идентификатор клиента (clientId). Может быть задан при сохранении факта с целью привязки факта к клиенту. Может участвовать в поиске.
select(fields string|Collection) FactQuery
Назначение: задаёт список полей из базы фактов значения которых следует вернуть в результате запроса. Если метод select не вызыался, то будут возвращены поля context,name и value.
Аргументы:
- fields - строка содержащая список неободимых полей разделённых запятой либо коллекция этих полей.
Возвращаемое значение: тот же объект FactQuery.
| Блок кода | ||
|---|---|---|
| ||
$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).
Аргументы:
- field - название поля для которого задаётся условие, т.е. первый аргумент операции operator.
- operator - оператор обозначающий операцию выполняющуюся над field. Список доступных операций смотри ниже.
- value - второй аргумент операции.
Возвращаемое значение: тот же объект FactQuery.
Список доступных операций:
- "=" проверка, что field равно value.
- "!=" или "<>" проверка на неравенство, что field не равно value.
- ">" проверяет, что field больше value.
- "<" проверяет, что field меньше value.
- ">=" проверяет, что field больше или равно value.
- "<=" проверяет, что field меньше или равно value.
- "^@" или "startsWith" ищет совпадение строки value с началом field. Поиск регистрозависимый.
- "~" проверяет соответствие field регулярному выражению value. Поиск регистрозависимый.
- "!~" проверяет несоотвествие field регулярному выражению value. Поиск регистрозависимый.
- "~*" проверяет соответствие field регулярному выражению value. Поиск регистронезависимый.
- "!~*" проверяет несоотвествие field регулярному выражению value. Поиск регистронезависимый.
- "in" проверяет совпадение field хотя бы с одним значением в коллекции value.
- "not in" проверяет несовпадение field со всеми значениями из коллекции 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).
Аргументы:
- timerId - идентификатор таймера.
Возвращаемое значение: отсутствует.
| Блок кода | ||
|---|---|---|
| ||
$timerId = timer.start(60, "760b9732-4bfb-4846-a348-faae5138fcb2")
timer.stop($timerId) // останавливаем (удаляем) таймер |
Функции для работы с текстом на естественном языке (NLP)
nlp.parse(message string|UserMessage) Sentence
Назначение: парсит текст на естественном языке.
Аргументы:
- message - текст на естественном языке или объект UserMessage.
Возвращаемое значение: объект Sentence содержащий информацию о всех намерениях и сущностях исходного сообщения.
Примечание: данная функция извлекает из текста только сущности. Для работы с намерениями используйте функцию nlu.parse
| Блок кода | ||
|---|---|---|
| ||
$sentence = nlp.parse(queue.first()) // парсим первое сообщение пользователя |
nlp.join(message1 string|UserMessage, message2 string|UserMessage) Sentence
Назначение: объединяет два текста на естественном языке в одно и затем парсит его.
Аргументы:
- message1 - текст на естественном языке или объект UserMessage.
- message2 - текст на естественном языке или объект UserMessage.
Возвращаемое значение: объект Sentence содержащий информацию о всех намерениях и сущностях объединённого сообщения.
| Блок кода | ||
|---|---|---|
| ||
$sentence = nlp.join(queue.lastNth(2), queue.lastNth(1)) // объединяем предпоследнее и последнее сообщения пользователя и затем парсим его |
nlp.setPerception($sentence Sentence)
Назначение: позволяет установить сообщение пользователя для обработки в других узлах (блоках) схемы бота.
Аргументы:
- 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
Назначение: разбор текста на естественном языке. Выявление намерений и сущностей.
Аргументы:
- text -текст для разбора.
- agentId - идентификатор (uuid) агента (нейросети) производящего разбор текста.
- timezoneOffset - смещение временной зоны, необходимое для правильного выявления временных сущностей. По умолчанию используется смещение для UTC.
Возвращаемое значение: объект Sentence.
| Блок кода | ||
|---|---|---|
| ||
$sentence = nlu.parse("Доброе утро Вася!", "d926726a-5acb-4233-8c1e-ce4300921de0") |
Функции для работы с HTTP
http.request(url string, method string, params Collection, headers Map) Map
Назначение: отправляет HTTP запрос на указанный URL.
Аргументы:
- url - URL адрес на который будет оправлен запрос.
- method - HTTP метод. Допустимые значения: GET, POST, PUT, DELETE, PATCH, HEAD и OPTIONS.
- params - параметры запроса. Могут быть представлены как списком так и ассоциативным массивом.
- headers - HTTP заголовки запроса. По умолчанию устанавливается заголовок Content-Type: application/json.
Возвращаемое значение: HTTP ответ на запрос в виде ассоциативного массива со следующими ключами: statusCode - HTTP код ответа, body - тело ответа (преобразованное в соответствии с заголовком Content-Type), headers - HTTP заголовки ответа в виде ассоциативного массива, exception - текст ошибки или nil если запрос прошёл без ошибок.
| Блок кода | ||
|---|---|---|
| ||
// Выполняем запрос на получение списка юзеров
$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 минуты.
Аргументы:
- microseconds - число микросекунд паузы.
Возвращаемое значение: отсутствует.
| Блок кода | ||
|---|---|---|
| ||
sys.sleep(3_000_000) // Пауза в 3 секунды |
Функции для работы с GPT-3
gpt3.ask(text string) string
Назначение: отправляет сообщение в демо версию нейросети RuGTP-3 и возвращает её ответ.
Аргументы:
- text - запрос к нейросети на русском языке.
Возвращаемое значение: ответ нейросети в виде строки.
| Блок кода | ||
|---|---|---|
| ||
$answer = gpt3.ask("Есть ли жизнь на Марсе?") // В $answer будет ответ нейросети на заданный вопрос |
Объект FactQuery
Используя методы этого объекты вы можете выполнять и строить разнообразные запросы к базе фактов. База фактов представляет собой список записей. Каждая запись представляет собой единичный факт состоящий из следующих частей (полей):
- Контекст (context). Произвольная строка длина которой не превышает 255 символов. Обозначает некоторую предметную область в рамках которой существует факт. Может участвовать в поиске.
- Имя факта (name). Произвольная строка длина которой не превышает 255 символов. Служит для идентификации факта в заданном контексте. Может участвовать в поиске.
- Значение факта (value). Любое значение. Это собственно и есть та информация которую мы трактуем как факт. Не может участвовать в поиске (технически может, но результат недетерминирован).
- Идентификатор бота (botId). Может быть задан при сохранении факта с целью привязки факта к боту. Может участвовать в поиске.
- Идентификатор клиента (clientId). Может быть задан при сохранении факта с целью привязки факта к клиенту. Может участвовать в поиске.
select(fields string|Collection) FactQuery
Назначение: задаёт список полей из базы фактов значения которых следует вернуть в результате запроса. Если метод select не вызыался, то будут возвращены поля context,name и value.
Аргументы:
- fields - строка содержащая список неободимых полей разделённых запятой либо коллекция этих полейcond - объект FactQueryCondition определяющий сложносоставное условие.
Возвращаемое значение: тот же объект FactQuery.
| Блок кода | ||
|---|---|---|
| ||
// Ищем факты у которых context содержит подстроку test и при этом name равен "слово" или name начинается на "оп"$facts = fact.query().rows() // select не вызван возвращаем все поля. $facts = fact.query(). select(["value"name,value "context"]). where("context", "~", "^.*test.*$"). andWhere(fact.cond(). rows() // Возвращаем список фактов для которых нам нужны только value и context. $facts = fact.query().select("botId").rows() where("name", "=", "слово"). // Возвращаем orWhere("name", "^@", "оп")). rows() |
andWhere(cond FactQueryCondition) FactQuery
Эквивалентен where(cond)
orWhere(cond FactQueryCondition) FactQuery
только поле botId к которым привязаны факты. |
where(field string, operator string, value mixed) FactQuery
Назначение: задаёт условие поиска фактов. Несколько методов where Аналогичен where(cond), с той лишь разницей, что несколько вызовов этого метода объединяются по принципу логического "ИЛИИ", т.е. должно выполняться хотя бы одно условие.
sortBy(fields string|Collection) FactQuery
Назначение: задаёт сортирову фактов по указанным полямвсе условия должны быть выполнены. Метод where равносилен методу andWhere(field, operator, value).
Аргументы:
- field - название поля для которого задаётся условие, т.е. первый аргумент операции operator.
- operator - оператор обозначающий операцию выполняющуюся над field. Список доступных операций смотри ниже.
- value - второй аргумент операции.fields - строка содержащая список полей (через запятую) по которым следует отсортировать факты либо коллекция содержащая названия полей. Каждое поле может содержать префикс "+" для сортировки по возрастанию или "-" для сортировки по убыванию. Если префикс не указан, то используется сортировка по возрастанию.
Возвращаемое значение: тот же объект FactQuery.
| Блок кода | ||
|---|---|---|
| ||
// Получаем все факты для бота с двойной сортировкой:
// сначала по контексту по возрастанию (т.е. в алфавитном порядке)
// и далее по имени факта по убыванию.
$facts = fact.query().
select("name,value").
where("botId", "=", @botId)
sortBy("+context,-name"). // можно также использовать коллеции. Например, sortBy(["+context", "-name"])
rows() |
limit(limit int) FactQuery
Назначение: ставит ограничение на максимальное количество извлекаемых фактов.
Аргументы:
- limit - целое число определяющее лимит на количество извлекаемых фактов.
Возвращаемое значение: тот же объект FactQuery.
| Блок кода | ||
|---|---|---|
| ||
// Получаем первые 10 фактов
$facts = fact.query().
select("name,value").
sortBy("name").
limit(10).
rows() |
skip(count int) FactQuery
Назначение: задаёт количество фактов которые следует пропустить при поиске.
Аргументы:
- count - целое число определяющее количество фактов для пропуска.
...
Список доступных операций:
- "=" проверка, что field равно value.
- "!=" или "<>" проверка на неравенство, что field не равно value.
- ">" проверяет, что field больше value.
- "<" проверяет, что field меньше value.
- ">=" проверяет, что field больше или равно value.
- "<=" проверяет, что field меньше или равно value.
- "^@" или "startsWith" ищет совпадение строки value с началом field. Поиск регистрозависимый.
- "~" проверяет соответствие field регулярному выражению value. Поиск регистрозависимый.
- "!~" проверяет несоотвествие field регулярному выражению value. Поиск регистрозависимый.
- "~*" проверяет соответствие field регулярному выражению value. Поиск регистронезависимый.
- "!~*" проверяет несоотвествие field регулярному выражению value. Поиск регистронезависимый.
- "in" проверяет совпадение field хотя бы с одним значением в коллекции value.
- "not in" проверяет несовпадение field со всеми значениями из коллекции value.
| Блок кода | ||
|---|---|---|
| ||
// ПропускаемИщем 5факты первыху фактовкоторых иcontext извлекаемсодержит следующиеподстроку 10test $facts = fact.query(). select("name,value"). sortBy("namewhere("context", "~", "^.*test.*$"). skip(5). limit(10). rows() |
one() mixed
Назначение: возвращает первое указанное через select поле первого найденного факта.
...
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).
Аргументы:
- cond - объект FactQueryCondition определяющий сложносоставное условие.
Возвращаемое значение: значение полятот же объект FactQuery.
| Блок кода | ||
|---|---|---|
| ||
// Извлекает имя первого найденного факта $firstFactName Ищем факты у которых context содержит подстроку test и при этом name равен "слово" или name начинается на "оп". $facts = fact.query(). select("name,value"). where("context", "~", "^.*test.*$"). // value хоть и указано, но будет проигнорировано one() |
column() List
Назначение: возвращает список состоящий из всех значений первого выбранного поля найденных фактов.
Аргументы: отсутствуют.
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
Назначение: задаёт сортирову фактов по указанным полям.
Аргументы:
- fields - строка содержащая список полей (через запятую) по которым следует отсортировать факты либо коллекция содержащая названия полей. Каждое поле может содержать префикс "+" для сортировки по возрастанию или "-" для сортировки по убыванию. Если префикс не указан, то используется сортировка по возрастанию.
Возвращаемое значение: тот же объект FactQuery. Возвращаемое значение: списокзначений поля.
| Блок кода | ||
|---|---|---|
| ||
// Получаем Извлекаетвсе списокфакты имёндля всехбота найденныхс фактов $names = fact.query(). select("name,value"). двойной сортировкой: // valueсначала хотьпо иконтексту указано, но будет проигнорировано column() |
row() Map
Назначение: возвращает все выбранные поля в виде ассоциативного массива для первого найденного факта.
Аргументы: отсутствуют.
Возвращаемое значение: значения всех полей первого факта.
| Блок кода | ||
|---|---|---|
| ||
// Извлекает имя и значение первого найденного факта $namesпо возрастанию (т.е. в алфавитном порядке) // и далее по имени факта по убыванию. $facts = fact.query(). select("name,value"). rowwhere("botId", "=", @botId) sortBy("+context,-name"). // можно также использовать коллеции. Например, sortBy(["+context", "-name"]) rows() |
...
limit(limit int)
...
FactQuery
Назначение: возвращает список всех найденных фактов. Каждый факт возвращается как ассоциативный массив ключами которого являются поля факта, а значениями - значения полейставит ограничение на максимальное количество извлекаемых фактов.
Аргументы: отсутствуют
- limit - целое число определяющее лимит на количество извлекаемых фактов.
Возвращаемое значение:значения всех полей всех фактов. тот же объект FactQuery.
| Блок кода | ||
|---|---|---|
| ||
// ИзвлекаетПолучаем имяпервые и значение10 всех фактов $names$facts = fact.query(). select("name,value"). rowssortBy() |
Объект 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.
Функции по работе с очередью сообщений пользователя
queue.size() int
Назначение: определение размера очереди сообщений пользователя.
Аргументы: отсутствуют.
Возвращаемое значение: число сообщений пользователя.
| Блок кода | ||
|---|---|---|
| ||
$messageCount = queue.size() // $messageCount содержит число сообщений пользователя за всё время диалога |
queue.last() ?UserMessage
Назначение: возвращает последнее сообщение пользователя либо nil, если очередь сообщений пуста.
Аргументы: отсутствуют.
Возвращаемое значение: объект UserMessage или nil.
| Блок кода | ||
|---|---|---|
| ||
$lastMessage = queue.last() // $lastMessage содержит последнее на данный момент сообщение пользователя |
queue.first() ?UserMessage
Назначение: возвращает первое сообщение пользователя либо nil, если очередь сообщений пуста.
Аргументы: отсутствуют.
Возвращаемое значение: объект UserMessage или nil.
| Блок кода | ||
|---|---|---|
| ||
$firstMessage = queue.first() // $firstMessage содержит первое сообщение пользователя |
queue.nth(index int) ?UserMessage
Назначение: возвращает сообщение пользователя по его порядковому номеру, начиная с 1.
Аргументы:
- index - порядковый номер сообщения пользователя.
Возвращаемое значение: объект UserMessage или nil.
| Блок кода | ||
|---|---|---|
| ||
$message = queue.nth(1) // $message содержит первое сообщение пользователя
$message = queue.nth(5) // $message содержит пятое сообщение пользователя |
queue.lastNth(index int) ?UserMessage
Назначение: возвращает сообщение пользователя по его порядковому номеру считая с конца очереди. Последнее сообщение соответствует порядковому номеру 1.
Аргументы:
- index - порядковый номер сообщения пользователя считая с конца очереди.
Возвращаемое значение: объект UserMessage или nil.
...
| language | php |
|---|
"name").
limit(10).
rows() |
skip(count int) FactQuery
Назначение: задаёт количество фактов которые следует пропустить при поиске.
Аргументы:
- count - целое число определяющее количество фактов для пропуска.
Возвращаемое значение: тот же объект 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
...