Фильтрация по параметрам в REST API
Фильтрация по параметрам позволяет находить диалоги, соответствующие заданным условиям. Запрос возвращает идентификаторы подходящих диалогов. Подробнее о том, как получить информацию о диалоге по его идентификатору, см. в инструкции.
Вы можете использовать фильтрацию отдельно или как дополнение к полнотекстовому поиску. При использовании с полнотекстовым поиском в ответе вернутся только идентификаторы запросов, которые удовлетворяют и критериям полнотекстового поиска, и дополнительным фильтрам.
Перед началом работы
Чтобы искать данные через REST API Yandex Cloud:
-
В консоли управления создайте сервисный аккаунт.
- Добавьте сервисный аккаунт в пространство с ролью
Data viewer. Это позволит сервисному аккаунту работать с данными в SpeechSense. -
Чтобы аутентифицироваться в API Yandex Cloud, создайте API-ключ или IAM-токен для сервисного аккаунта.
- Загрузите аудиозаписи или чаты в SpeechSense.
Фильтрация по параметрам
-
Создайте файл
search.jsonи укажите в нем нужные идентификаторы и фильтрыfilters:{ "organizationId": "<идентификатор_организации>", "spaceId": "<идентификатор_пространства>", "connectionId": "<идентификатор_подключения>", "projectId": "<идентификатор_проекта>", "filters": [ { "key": "<характеристика_диалога_для_фильтрации>", "channelNumber": "<номер_канала>", // Укажите один или несколько фильтров "anyMatch": { "values": [ "<поисковый_запрос>" ] }, "intRange": { "fromValue": "<нижняя_граница>", "toValue": "<верхняя_граница>", "boundsInclusive": { "fromInclusive": "<включать_нижнюю_границу>", "toInclusive": "<включать_верхнюю_границу>" } }, "doubleRange": { "fromValue": "<нижняя_граница>", "toValue": "<верхняя_граница>", "boundsInclusive": { "fromInclusive": "<включать_нижнюю_границу>", "toInclusive": "<включать_верхнюю_границу>" } }, "dateRange": { "fromValue": "<нижняя_граница>", "toValue": "<верхняя_граница>", "boundsInclusive": { "fromInclusive": "<включать_нижнюю_границу>", "toInclusive": "<включать_верхнюю_границу>" } }, "durationRange": { "fromValue": "<нижняя_граница>", "toValue": "<верхняя_граница>", "boundsInclusive": { "fromInclusive": "<включать_нижнюю_границу>", "toInclusive": "<включать_верхнюю_границу>" } }, "booleanMatch": { "value": "<фильтр_по_значению_true_или_false>" } } ], "sortData": { "fields": [{ "field": "<характеристика_диалога_для_сортировки>", "order": "<порядок_сортировки>", "position": "<приоритет_поля_сортировки>" }] }, "pageSize": "<количество_документов_на_странице>", "pageToken": "<токен_следующей_страницы_с_результатами_фильтрации>" }Где:
organizationId— идентификатор организации, в которой выполняется запрос. Чтобы получить идентификатор, перейдите в сервис Cloud Center и нажмите кнопку под названием организации, в разделе .spaceId— идентификатор пространства, в котором выполняется запрос. Чтобы получить идентификатор, перейдите в сервис SpeechSense , откройте страницу нужного пространства и нажмите кнопку ID.connectionId— идентификатор подключения, в котором выполняется запрос. Чтобы получить идентификатор, перейдите в сервис SpeechSense , откройте страницу нужного пространства, на вкладке Подключение откройте страницу нужного подключения и нажмите кнопку ID.projectId— идентификатор проекта, в котором выполняется запрос. Чтобы получить идентификатор, перейдите в сервис SpeechSense , откройте страницу нужного пространства, на вкладке Проекты откройте страницу нужного проекта и нажмите кнопку ID.
-
filters— тело запроса на фильтрацию по отдельным параметрам. Поддерживает следующие параметры:-
key— характеристика диалога, по которой производится фильтрация. Возможные значения:-
userMeta.<имя_поля>— фильтрация по метаданным. Здесь<имя_поля>— это поле метаданных, которое было указано при загрузке диалога. Пример:userMeta.date. -
talk.classifiers.<имя_классификатора>.count— фильтрация по классификаторам. Учитывает, сколько раз в диалоге сработал определенный классификатор. -
talk.summarization.points.<идентификатор_вопроса>— фильтрация по резюме диалога. Идентификаторы вопросов из резюме диалога вы можете получить вместе с данными о диалоге. -
talk.statistics.<название_статистики>— фильтрация по статистикам:-
Для аудио:
talk.statistics.duration_seconds— длительность диалога, в секундах.talk.statistics.simultaneous_silence.duration_seconds— длительность одновременной тишины, в секундах.talk.statistics.simultaneous_silence.ratio— доля одновременной тишины.talk.statistics.simultaneous_silence.max_duration_seconds— максимальная длительность одновременной тишины, в секундах.talk.statistics.silence.duration_seconds— длительность тишины клиента или оператора, в секундах.talk.statistics.silence.ratio— доля тишины клиента или оператора.talk.statistics.simultaneous_speech.duration_seconds— длительность одновременной речи, в секундах.talk.statistics.simultaneous_speech.ratio— доля одновременной речи.talk.statistics.simultaneous_speech.max_duration_seconds— максимальная длительность одновременной речи, в секундах.talk.statistics.speech.duration_seconds— длительность речи клиента или оператора, в секундах.talk.statistics.speech.ratio— доля речи клиента или оператора.talk.statistics.interrupts.count— количество прерываний собеседника.talk.statistics.phrases.count— количество фраз в диалоге.talk.statistics.words.count— количество слов в диалоге.talk.statistics.letters.count— количество символов в диалоге.talk.statistics.words.count_per_second— количество слов в секунду.talk.statistics.letters.count_per_second— количество символов в секунду.talk.statistics.interrupts.duration_seconds— длительность прерываний одним из участников речи другого участника, в секундах.
-
Для чатов:
talk.statistics.duration_seconds— длительность диалога, в секундах.talk.statistics.reactions.count— количество реакций оператора на сообщения клиента.talk.statistics.reactions.first_duration_seconds— длительность первой реакции оператора на сообщение клиента, в секундах.talk.statistics.reactions.min_duration_seconds— минимальная длительность реакции, в секундах.talk.statistics.reactions.max_duration_seconds— максимальная длительность реакции, в секундах.talk.statistics.phrases.count— количество фраз в диалоге.talk.statistics.words.count— количество слов в диалоге.talk.statistics.letters.count— количество символов в диалоге.
-
-
-
channelNumber— номер канала. Если номер указан, фильтр применяется к метаданным, срабатываниям классификатора или статистикам, относящимся к этому каналу.Нумерация каналов в подключениях для чатов:
0— канал оператора;1— канал клиента;2— канал бота.
Нумерация каналов для аудио предустанавливается на уровне подключения и отличается от нумерации каналов для чатов.
Доступны следующие фильтры:
anyMatch— определяет, встречается ли значение из фильтра в метаданных, классификаторах, статистиках, резюме диалога. Например, фильтр с параметрамиkey = userMeta.ticket_idиvalues = [123, 345]вернет диалоги, у которых в поле метаданныхticket_idпередано значение123или345.intRange— проверяет, что заданное целочисленное значение попадает в диапазон, указанный в фильтре. Подходит для фильтрации по классификаторам, полям метаданных целочисленного типа и статистикам со значениями целочисленного типа.doubleRange— проверяет, что заданное число с плавающей точкой попадает в диапазон, указанный в фильтре. Подходит для фильтрации по классификаторам, полям метаданных и статистикам со значениями с плавающей точкой.dateRange— проверяет, что заданное значение даты попадает в диапазон, указанный в фильтре.durationRange— проверяет, что заданная длительность попадает в диапазон, указанный в фильтре. Подходит для фильтрации по длительности диалога, прерываний, одновременной речи или тишины.booleanMatch— проверяет, что заданное значение типаbooleanсоответствует значению в фильтре (TrueилиFalse). Подходит для фильтрации по резюме диалога и полям метаданных типаboolean.
Для каждого фильтра вы можете задать параметр
boundsInclusive. Он определяет, включать ли в фильтр границы диапазона:fromInclusive— нижняя граница:true— включать,false— не включать;toInclusive— верхняя граница:true— включать,false— не включать.
-
-
sortData— параметры сортировки данных в ответе на запрос.fields— список характеристик диалога, по которым производится сортировка. Поддерживает следующие параметры:field— характеристика диалога, по которой производится сортировка.order— порядок сортировки: по возрастанию или убыванию.position— приоритет поля сортировки (при сортировке по нескольким характеристикам диалога одновременно).
-
pageSize— количество документов на странице. -
pageToken— токен следующей страницы с результатами запроса.
Если результаты запроса разделены на несколько страниц, каждая страница имеет свой токен. В ответе на каждый запрос содержится токен следующей страницыnextPageToken(если она существует). Вставьте его в параметрpageTokenзапроса, чтобы получить следующую страницу с результатами.
Подробнее о параметрах search-запроса см. в справочнике API.
-
Задайте API-ключ сервисного аккаунта:
export API_KEY=<API-ключ_сервисного_аккаунта>Если вы используете IAM-токен, передайте его вместо API-ключа:
export IAM_TOKEN=<IAM-токен_сервисного_аккаунта> -
Отправьте search-запрос к API SpeechSense при помощи cURL:
curl -X POST https://rest-api.speechsense.yandexcloud.net/speechsense/v1/talks/search \ -H "Content-Type: application/json" \ -H "authorization: Api-Key ${API_KEY}" \ -d @search.jsonГде
Api-Key— API-ключ для аутентификации. Если вы используете IAM-токен, укажитеBearer ${IAM_TOKEN}вместоApi-Key ${API_KEY}.Идентификаторы диалогов, которые удовлетворяют условиям фильтрации, будут выведены в терминал в JSON-формате.
Пример тела запроса для фильтрации по отдельным параметрам
Например, нужно найти все диалоги с техподдержкой провайдера в промежуток между 11:00 и 12:00 24 сентября 2024 года. JSON-файл с параметрами запроса будет выглядеть так:
{
"organizationId": "yc.organization****************",
"spaceId": "f3fuclf1kufs********",
"connectionId": "eag0u346n4hn********",
"projectId": "eag9t3rm3o43********",
"filters": [
{
"key": "userMeta.date",
"dateRange": {
"fromValue": "2024-09-24T11:00:00Z",
"toValue": "2024-09-24T12:00:00Z"
}
}
]
}
Результат выполнения запроса:
{
"talkIds": [
"aud95sn63lra********"
],
"talksCount": "1",
"nextPageToken": ""
}
Где:
talkIds— идентификаторы диалогов, которые удовлетворяют условиям фильтрации.talksCount— количество диалогов, которые удовлетворяют условиям фильтрации.nextPageToken— токен следующей страницы с результатами. Если результаты разделены на несколько страниц, этот токен используется в следующем запросе, чтобы запросить следующую страницу. Если это поле вернулось пустым, результаты заканчиваются на текущей странице.