Загрузка переписки из чата
Вы можете загрузить текстовые сообщения из переписки клиента, оператора или бота в чате с помощью API SpeechSense. Так сообщения будут доступны для анализа, например, в отчетах SpeechSense.
Текстовые сообщения передаются в формате JSON. Также для загрузки данных используется отдельный JSON-файл с метаданными разговора.
Аутентификация происходит от имени сервисного аккаунта с помощью IAM-токена или API-ключа.
Если вы хотите загрузить аудиозапись разговора вместо переписки, обратитесь к инструкции.
Перед началом работы
Для работы с API Yandex Cloud потребуется Git, Python 3.6 или старше и пакет grpcio-tools
. Узнайте, как установить Python
Чтобы подготовиться к загрузке переписки из чата:
-
Создайте подключение типа Чат.
Если вы хотите загрузить связанные диалоги, добавьте в общих метаданных подключения строковый ключ
ticket_id
. По этому ключу чаты будут связаны. -
Создайте проект с новым подключением.
В созданные проект и подключение будут загружены текстовые сообщения.
-
В консоли управления создайте сервисный аккаунт.
-
Добавьте сервисный аккаунт в пространство с ролью
Data editor
. Это позволит сервисному аккаунту загружать данные в SpeechSense. -
Чтобы аутентифицироваться в API Yandex Cloud, создайте API-ключ или IAM-токен для сервисного аккаунта.
-
Склонируйте репозиторий API Yandex Cloud
:git clone https://github.com/yandex-cloud/cloudapi
-
Установите пакет
grpcio-tools
с помощью менеджера пакетов pip :pip install grpcio-tools
Загрузить данные
-
Перейдите в папку с репозиторием API Yandex Cloud, создайте папку
upload_data
, сгенерируйте в ней код интерфейса клиента и перейдите в папкуupload_data
:Bashcd <путь_к_папке_cloudapi> && \ mkdir upload_data && \ python3 -m grpc_tools.protoc -I . -I third_party/googleapis \ --python_out=./upload_data/ \ --grpc_python_out=./upload_data/ \ google/api/http.proto \ google/api/annotations.proto \ yandex/cloud/api/operation.proto \ google/rpc/status.proto \ yandex/cloud/operation/operation.proto \ yandex/cloud/validation.proto \ yandex/cloud/speechsense/v1/*.proto \ yandex/cloud/speechsense/v1/*/*.proto cd upload_data
-
В папке
upload_data
создайте Python-скриптupload_text.py
, который загрузит переписку из чата в SpeechSense:import argparse import json from typing import Dict import grpc from yandex.cloud.speechsense.v1 import talk_service_pb2 from yandex.cloud.speechsense.v1 import talk_service_pb2_grpc from yandex.cloud.speechsense.v1 import text_pb2 from google.protobuf.timestamp_pb2 import Timestamp # Для аутентификации с IAM-токеном замените параметр api_key на iam_token def upload_talk(connection_id: str, metadata: Dict[str, str], api_key: str, text_data): credentials = grpc.ssl_channel_credentials() channel = grpc.secure_channel('api.speechsense.yandexcloud.net:443', credentials) talk_service_stub = talk_service_pb2_grpc.TalkServiceStub(channel) messageList = [] for message in text_data['messages']: timestamp = Timestamp() timestamp.FromJsonString(value=str(message['timestamp'])) messageProto = text_pb2.Message( user_id=str(message['user_id']), text=text_pb2.TextPayload(text=str(message['text'])), timestamp=timestamp ) messageList.append(messageProto) # Формирование запроса к API request = talk_service_pb2.UploadTextRequest( metadata=talk_service_pb2.TalkMetadata( connection_id=str(connection_id), fields=metadata), text_content=text_pb2.TextContent( messages=messageList) ) # Тип аутентификации — API-ключ response = talk_service_stub.UploadText(request, metadata=( ('authorization', f'Api-Key {api_key}'), # Для аутентификации с IAM-токеном передавайте заголовок # ('authorization', f'Bearer {iam_token}'), )) # Вывести идентификатор диалога print(f'Dialog ID: {response.talk_id}') if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('--key', required=True, help='API key or IAM token', type=str) parser.add_argument('--connection-id', required=True, help='Connection ID', type=str) parser.add_argument('--text-path', required=True, help='JSON with text chat data', type=str) parser.add_argument('--meta-path', required=False, help='JSON with the dialog metadata', type=str, default=None) args = parser.parse_args() with open(args.meta_path, 'r') as fp: metadata = json.load(fp) with open(args.text_path, 'r') as fp: text_data = json.load(fp) upload_talk(args.connection_id, metadata, args.key, text_data)
-
В папке
upload_data
создайте файлmetadata.json
с метаданными разговора:{ "operator_name": "<имя_оператора>", "operator_id": "<идентификатор_оператора>", "client_name": "<имя_клиента>", "client_id": "<идентификатор_клиента>", "bot_name": "<имя_бота>", "bot_id": "<идентификатор_бота>", "date": "<дата_начала>", "direction_outgoing": "<исходящее_направление:_true_или_false>", "language": "<язык>", <дополнительные_параметры_подключения> }
Значение поля
date
задайте в форматеГГГГ-ММ-ДДTЧЧ:ММ:СС.ССС
.Поля в файле должны соответствовать параметрам подключения, в которое вы загружаете текстовые сообщения. В шаблоне выше указаны обязательные поля для подключений типа Чат. Если вы добавляли другие параметры в подключение, укажите их в файле
metadata.json
. Например, если вы загружаете связанные чаты, добавьте в файл параметр:{ ... "ticket_id": "номер_задачи" }
-
В папке
upload_data
создайте файлchat.json
с текстовыми сообщениями в следующем формате:{ "messages": [ { "user_id": <идентификатор_автора_сообщения>, "text" : "<текстовое_сообщение>", "timestamp" : "<время_отправки_сообщения>" }, ... ] }
Где:
messages
— массив текстовых сообщений. Для каждого сообщения создайте отдельный объект в этом массиве.user_id
— идентификатор автора сообщения. Идентификатор должен совпадать с идентификатором клиента, оператора или бота в JSON-файле с метаданными.timestamp
— момент времени, когда сообщение было отправлено. Укажите значение в форматеГГГГ-ММ-ДДTЧЧ:ММ:СС.СССZ
.
-
Задайте API-ключ сервисного аккаунта:
export API_KEY=<API-ключ_сервисного_аккаунта>
Если вы используете IAM-токен, передайте его вместо API-ключа:
export IAM_TOKEN=<IAM-токен_сервисного_аккаунта>
-
Запустите скрипт
upload_text.py
с нужными параметрами:python3 upload_text.py \ --text-path chat.json \ --meta-path metadata.json \ --connection-id <идентификатор_подключения> \ --key ${API_KEY}
Где:
--text-path
— путь к файлу с перепиской.--meta-path
— путь к файлу с метаданными разговора.--connection-id
— идентификатор подключения, в которое вы загружаете данные.--key
— API-ключ для аутентификации. Если вы используете IAM-токен, укажите переменную окруженияIAM_TOKEN
вместоAPI_KEY
.
-
С главной страницы
SpeechSense перейдите на страницу проекта, который вы создали для текстовых сообщений. Убедитесь, что во вкладке Диалоги появилась загруженная переписка.