Symbl.ai является непредполагаемым, неинвазивным, полностью расширяемым и имеет удобный API для анализа настроений, который обеспечивает понимание полярности сообщений в режиме реального времени. Давайте посмотрим, что все это значит.

1. Непредполагаемый

API не является предполагаемым, поскольку результаты для полярности передаются не как конкретная эмоция, а как значение относительно. негатив или позитив. Он не предполагает эмоций.

2. Неинвазивный

API является неинвазивным, поскольку результатом анализа является завершенное сообщение, из которого состоит разговор, а не голос, очень личный, неотменяемый биометрический аспект человеческой личности.

3. Полностью расширяемый

API является расширяемым в том смысле, что анализ, который может касаться самого разговора, его говорящих или их собственных отдельных или совокупных сообщений, полностью программируется. Вы, как разработчик, решаете, как создавать статистику или данные о значениях, полученных из настроений, в любое время и в любом месте.

4. Удобный API

Пользователи, чья средняя количественная оценка не раскрывает их уникальные, индивидуальные «учетные данные», могут не бояться каких-либо аспектов анализа настроений Symbl.ai, что делает API чрезвычайно удобным для пользователя. Например, это не анализатор тона.

Веб-сокеты для Symbl.ai

WebSockets — это компьютерный протокол для связи, являющийся значительным улучшением по сравнению с моделью запроса/ответа HTTP. Они обеспечивают полнодуплексные каналы по одному соединению протокола управления передачей (TCP). Веб-сокеты облегчают связь между клиентами или обслуживают в режиме реального времени, при этом соединение не страдает от жесткого обмена, высокой задержки и интенсивного использования полосы пропускания по протоколу HTTP. Указанная как ws или wss, незашифрованная или зашифрованная, конечная точка WebSocket представляет собой постоянный двунаправленный канал связи без каких-либо накладных расходов из-за остатков HTTP, таких как заголовки, файлы cookie или артефакты. Вот API Symbl.ai для WebSockets:

wss://api.symbl.ai/v1/realtime/

JavaScript API WebSocket от Symbl.ai

В следующем блоге вы включите API-интерфейс Symbl.ai JavaScript WebSocket для расшифровки в реальном времени в вашем браузере. Чтобы включить динамическую транскрипцию с помощью API Symbl.ai JavaScript WebSocket в браузере, вы: 1) настраиваете свою учетную запись, 2) настраиваете конечную точку WebSocket, 3) запускаете код в браузере, 4) транскрибируете в реальном времени. После настройки транскрипции в реальном времени вы внедряете непредполагаемый, неинвазивный, полностью расширяемый и удобный API для анализа настроений Symbl.ai.

Настраивать

Зарегистрируйте учетную запись на Symbl (например, https://platform.symbl.ai/). Хватай и appId, и appSecret. С обоими из них вы должны аутентифицироваться либо с помощью команды cURL, либо с помощью Postman, чтобы получить свой x-api-key. Вот пример с cURL:

curl -k -X POST "https://api.symbl.ai/oauth2/token:generate" \
     -H "accept: application/json" \
     -H "Content-Type: application/json" \
     -d "{ \"type\": \"application\", \"appId\": \"<appId>\", \"appSecret\": \"<appSecret>\"}"

В идеале сервер токенов должен обрабатывать аутентификацию (с кодом, который вызывает RESTful API для создания токена), чтобы ни appSecret, ни appId никогда не были раскрыты. Однако cURL все равно сразу настраивает. С помощью x-api-key теперь вы готовы установить конечную точку WebSocket для выполнения транскрипции в реальном времени.

Конечная точка WebSocket

Чтобы включить WebSocket, вы настраиваете два значения в качестве параметров запроса, которые передаются непосредственно в конечную точку API WebSocket. В свою очередь, вы передаете конечную точку WebSocket API напрямую в собственное программное обеспечение JavaScript для обеспечения диалогов в реальном времени.

Вот первые два значения:

const uniqueMeetingId = btoa('EMAIL@ADDRESS.COM');
const accessToken = '';

С этими двумя значениями для конечной точки API WebSocket вы передаете их непосредственно в конечную точку API WebSocket:

const symblEndpoint = `wss://api.symbl.ai/v1/realtime/insights/${uniqueMeetingId}?access_token=${accessToken}

Если вы хотите протестировать свой WebSocket перед дальнейшей интеграцией, вы загружаете эту конечную точку с данными для uniqueMeetingId вместе с accessToken в Hoppscotch.io, бесплатный, быстрый и элегантный конструктор запросов API.

Создание экземпляра собственного WebSocket API JavaScript

Следующим шагом является создание экземпляра собственного API WebSocket для JavaScript:

const ws = new WebSocket(symblEndpoint);

В этом случае вы вызываете методы, специфичные для обработки живой транскрипции.

// Fired when a message is received from the WebSocket server
ws.onmessage = (event) => {
  console.log(event);
};
// Fired when the WebSocket closes unexpectedly due to an error or lost connetion
ws.onerror  = (err) => {
  console.error(err);
};
// Fired when the WebSocket connection has been closed
ws.onclose = (event) => {
  console.info('Connection to websocket closed');
};
// Fired when the connection succeeds.
ws.onopen = (event) => {
  ws.send(JSON.stringify({
    type: 'start_request',
    meetingTitle: 'Websockets How-to', // Conversation name
    insightTypes: ['question', 'action_item'], // Will enable insight generation
    config: {
      confidenceThreshold: 0.5,
      languageCode: 'en-US',
      speechRecognition: {
        encoding: 'LINEAR16',
        sampleRateHertz: 44100,
      }
    },
    speaker: {
      userId: 'example@symbl.ai',
      name: 'Example Sample',
    }
  }));
};

Чтобы настроить поток для доступа к мультимедийным устройствам пользователя, таким как микрофон его ноутбука, соответствующим образом запрограммируйте навигатор браузера:

const stream = await navigator.mediaDevices.getUserMedia({ audio: true, video: false });

Приведенный выше код запрашивает у пользователя разрешение на доступ к его или ее устройству через всплывающее окно. В мобильных приложениях разрешение на доступ к устройствам жестко закодировано в управляющем каталоге двоичного файла приложения, например, в манифесте для Android списка свойств для iOS. JavaScript не компилируется, поэтому нет необходимости запрашивать разрешение, чтобы вы могли запросить разрешение!

Чтобы настроить поток для обработки событий, запрограммируйте следующее:

const handleSuccess = (stream) => {
  const AudioContext = window.AudioContext;
  const context = new AudioContext();
  const source = context.createMediaStreamSource(stream);
  const processor = context.createScriptProcessor(1024, 1, 1);
  const gainNode = context.createGain();
  source.connect(gainNode);
  gainNode.connect(processor);
  processor.connect(context.destination);
  processor.onaudioprocess = (e) => {
    // convert to 16-bit payload
    const inputData = e.inputBuffer.getChannelData(0) || new Float32Array(this.bufferSize);
    const targetBuffer = new Int16Array(inputData.length);
    for (let index = inputData.length; index > 0; index--) {
        targetBuffer[index] = 32767 * Math.min(1, inputData[index]);
    }
    // Send to websocket
    if (ws.readyState === WebSocket.OPEN) {
      ws.send(targetBuffer.buffer);
    }
  };
};

Опробовать код

Это может быть отличной идеей попробовать подключение вашего WebSocket прямо сейчас. После запуска вашего кода непосредственно в браузере вы видите, как консоль записывает события в режиме реального времени, пока вы говорите.

Прекращение разговора

Чтобы остановить запись в реальном времени, вы закрываете браузеры или отправляете stop_request непосредственно на сервер из консоли браузера.

ws.send(JSON.stringify({
  "type": "stop_request"
}));

Анализ настроений в реальном времени

В методе ws для onmessage запрограммируйте конечную точку API для захвата полярности сообщений разговора Symbl.ai, записывая значение через консоль.

Первый шаг — зафиксировать conversationId как константу. Вы фиксируете conversationId с помощью проанализированных данных, которые поступают из метода onmessage WebSocket API.

const conversationId = data.message.data.conversationId;

Второй шаг — создание запроса. Существует несколько библиотек для обработки HTTP-запросов, поэтому не стесняйтесь рефакторить theXMLHttpRequest здесь.

const request = new XMLHttpRequest();

Третий шаг — настроить запрос, установив тип ответа на text.

request.responseType = "text";

Четвертый шаг — настроить конечную точку:

const sentimentEndpoint = `https://api.symbl.ai/v1/conversations/${conversationId}/messages?sentiment=true`;

Пятый шаг – задать запрос.

request.open("GET", sentimentEndpoint)

Шестой шаг — установить заголовки запроса.

request.setRequestHeader('Authorization', `Bearer ${accessToken}`);
request.setRequestHeader('Content-Type', 'application/json');

Седьмой шаг — создать функцию для регистрации настроений в консоли.

request.onreadystatechange=(e)=> {
      console.log(request.responseText)
    }

Последний шаг — отправить запрос.

request.send()

Вот полностью программируемый API анализа настроений, реализованный в вашем методе ws для onmessage в вашем WebSocket:

// Fired when a message is received from the WebSocket server
ws.onmessage = (event) => {
  // You can find the conversationId in event.message.data.conversationId;
  const data = JSON.parse(event.data);
  if (data.type === 'message' && data.message.hasOwnProperty('data')) {
    console.log('conversationId', data.message.data.conversationId);
    const conversationId = data.message.data.conversationId;
    console.log('onmessage event', event);
    // You can log sentiments on messages from data.message.data.conversationId 
    const request = new XMLHttpRequest();
    request.responseType = "text";
    const sentimentEndpoint = `https://api.symbl.ai/v1/conversations/${conversationId}/messages?sentiment=true`;
    request.open("GET", sentimentEndpoint)
    request.setRequestHeader('Authorization', `Bearer ${accessToken}`);
    request.setRequestHeader('Content-Type', 'application/json');
    request.onreadystatechange=(e)=> {
      console.log(request.responseText)
    }
    request.send()
  }
};

Если ваша консоль регистрировала настроения при изменении состояния событий, значит, ваш код предоставлял анализ настроений в режиме реального времени в API!

Что дальше?

Диалог Symbl.ai, настроенный для передачи сообщений через веб-сокет в реальном времени с его API анализа тональности, не является ни началом, ни концом данных беседы.

Если вы внимательно посмотрите на данные из вашего активного соединения WebSocket, conversationId может применяться к новым вызовам API для доступа к большему количеству идей ИИ для действий, тем или аналитики. В рамках полностью программируемой беседы Symbl.ai вы получаете не только анализ настроений, но и доступ к аналитическому API, который обеспечивает доступ к следующим данным беседы:

  1. Соотношение динамика — соотношение говорящего и слушающего, а также время.
  2. Время разговора — общая продолжительность разговора.
  3. Тишина — общая продолжительность тишины.
  4. Темп — количество слов в минуту, произносимых в разговоре.
  5. Перекрытие — когда более 1 говорящего говорят одновременно, разговор перекрывается.

С помощью функций Speaker Ratio, Talk Time, Silence, Pace или Overlap у вас есть возможность создавать логику приложения или уведомления, которые дополняют разговорный опыт до уровня, выходящего далеко за рамки простой расшифровки говорящего или говорящих в приложении для преобразования речи в текст в реальном времени. или автоматизировать распознавание речи не более чем через одну конечную точку API.

Поскольку анализ тональности в реальном времени основан на сообщениях, а не на тональности, API-интерфейс Symbl.ai для тем, который объединяет наиболее важные темы разговора в наборе групп слов, называемых «темами», полностью программируется, поскольку данные о сообщениях мало чем отличаются. данные о сообщениях для спикерских событий.

Анализ данных о настроениях или событиях выступающих в целом — это лишь часть расширяемой, полностью программируемой платформы разработчиков Symbl.ai для разговоров. Анализ тональности Symbl.ai в режиме реального времени или аналитические API-интерфейсы работают по протоколам, каналам, компаниям бесплатно, чтобы разработчики могли свободно создавать расширенные возможности общения.

Сообщество

Застрявший? Не стесняйтесь задавать нам любые вопросы на нашем Slack Channel или отправьте нам электронное письмо по адресу devrelations@symbl.ai.