В данной статье рассмотрим пример реализации кейса, в котором происходит аналитика по транскрипции записи разговора
Анализируем звонки с помощью ChatGPT и Rev.Ai
В этом кейсе мы настроим автоматический анализ телефонных разговоров с помощью сервисов Rev.Ai (транскрипция аудио) и ChatGPT (анализ текста).
Записи разговоров будут приходить из amoCRM
Результаты анализа будут сохраняться в примечании к сделке
Что будем делать
Общая схема работы:
- amoCRM создает запись разговора и отправляет webhook в MoreKit
- MoreKit принимает ссылку на аудиофайл и отправляет его в Rev.Ai
- Rev.Ai возвращает текстовую расшифровку разговора
- Эта расшифровка передается в ChatGPT для анализа
- Готовый анализ записывается в amoCRM в примечание к сделке
Подготовка к работе
Перед началом убедитесь, что:
- MoreKit подключен к вашему amoCRM
- У вас есть API-ключ от Rev.Ai (можно получить на сайте https://www.rev.ai/)
- У вас есть доступ к OpenAI API
Подключение сервисов
Первым делом — подключим сервисы в MoreKit.
Подключение amoCRM
В MoreKit в разделе Сервисы — ищем в списке сервисов amoCRM, нажимаем на кнопку Добавить, произойдет перенаправление на страницу переадресации amoCRM, где необходимо выбрать нужную CRM, которую надо подключить в MoreKit


Подключение Rev.AI
В данной статье описан процесс создания токена доступа API в сервисе Rev.AI
Чтобы начать работу с API, вам нужно зарегистрировать учётную запись на главной странице Rev.ai. После этого войдите в свою учётную запись и перейдите в раздел «access token» на боковой панели. Вы попадёте на страницу, которая выглядит примерно так. Скопируйте сгенерированный API ключ и вставьте его в меню подключения сервиса rev.ai в MoreKit



Подключение OpenAi
Следующим шагом — подключим OpenAi. В списке сервисов ищем OpenAi
Так-же потребуется сгенерировать токен доступа к API в личном кабинете OpenAI

После создания ключа доступа к API — по аналогии ищем OpenAi в списке сервисов MoreKit и подключаем сервис


Настраиваем процесс в MoreKit
Создайте процесс в MoreKit с типом amocrm Webhook. Скопируйте ссылку из первоначального блока, перейдите в настройки web hooks в маркете amoCRM. Событие должно срабатывать при создании примечания в сущности контакта, так как штатная интеграция sipUni создает примечания с записями разговоров в контакте

Данный кейс можно использовать не только с sipUni, но и с другими сервисами, которые предоставляют публичную ссылку на запись разговора
Когда примечания с записью разговоров создастся — в MoreKit придет событие со входящими данными, в которых будет состав созданного примечания, из которого достанем ссылку на запись разговора. Здесь важно обратить внимание на тип созданного примечания

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

Далее — выстроим логическую схему. Данная схема будет:
- Искать контакт, к которому прикрепилось примечание
- Искать сделки из контакта в нужных воронках
- Доставать ссылку на запись разговоров из примечания
- Отправлять запись на транскрипцию в Rev.AI
- Записывать в техническое поле сделки ID задания на расшифровку, чтобы проверять статус готовности транскрипции
- Формировать диалог для передачи в OpenAi
- Отправлять запрос в OpenAi с транскрипцией записи разговора для анализа звонка
- Передавать анализ звонка обратно в контакт

Описание блоков схемы

#6 Найти контакты — ищем контакт в crm системе, к которому прикрепилась запись разговора

#1 Найти сделки — ищем активную сделку из контакта по двум воронкам

#7 JSON декодировать — данный сервисный блок нужен для того, чтобы разложить строку с данными примечания из sipuni в формат «Ключ»: «Значение».

Данный сервисный блок нужен для удобства работы с данными, так как sipUni в записях звонков передает JSON внутри строки
Вот пример, как будет представлена строка с данными примечания в этом блоке

#9 Проверка — проверяем, что ссылка в примечании не пустая

Если ссылка пустая — создаем примечание в сделке с текстом Не дозвонились

#8 Создать задание — Функциональный блок Rev.Ai, отправляем ссылку на запись в Rev.Ai для получения транскрипции

#46 Обновить сделку — записываем в технической поле сделки ID созданного задания в Rev.Ai, чтобы получать статус выполнения транскрипции дальше в процессе

#10 Отложить событие — после перехода на этот блок — схема задержится на 10 секунд. Короткие аудиозаписи в Rev.Ai обрабатываются достаточно быстро

#17 Получить задание — получаем статус транскрипции. Если транскрипция была выполнена, среди данных в блоке получения будет:
{
"status":"transcribed"
}
#16 Проверка — проверяем, завершена ли транскрипция записи. Если запись не завершена — уводим на блок #18 Отложить событие. В схеме будет «Змейка» из таких проверок, чтобы дождаться завершения транскрипции

Данные блоки в схеме получают статус и проверяют статус готовности. Максимально разрешенное время в секундах в блоке Отложить событие — 90 секунд

#11 Получить транскрипцию — если транскрипция выполнена, получаем данные транскрипции

#12 Создать переменную — формируем из полученной транскрипции диалог между спикерами для передачи его в OpenAi. Здесь перебираем монологи с помощью цикла {% for %}
Подробнее о циклах можно прочитать в нашей документации

#24 Дата и время — формируем текущую дату для передачи в OpenAi в формате TimeStamp, она будет использовать в системном промпте (инструкции для ИИ)

#21 — отправляем запрос в OpenAi на генерацию ответа от ИИ
- Модель — в данном кейсе использовалась модель gpt-4.1-mini
- Инструкции от разработчика — объясняем ИИ, что нужно сделать. Данное поле одно из самых важных для получения нужного ответа. Следите за пунктуацией при написании инструкций, так как когда посылается запрос на генерацию — он чувствительно относится к пунктуации в русском языке, это нужно учитывать, т.к. изначально OpenAi настроен под промты на английском языке. Данный промпт требует от ИИ отдавать ответ в формате JSON. В данном ответе будет формироваться две переменные, «analytics» — будет содержать в себе анализ звонка, «pushdate» — будет содержать в себе дату перезвона, если клиент попросил перезвонить. На данную дату будем ставить задачу для перезвона
- Сообщение от пользователя — сюда передаем сформированный текст из переменной по монологам транскрипции
На что стоит обратить внимание:
В блоке отправки запроса к OpenAi присутствуют настройки для более точной работы с ИИ.

Если вы заметили неточность в ответах — используйте настройки. К примеру — можно попробовать поиграться с параметром Рандомность ответа в блоке — он управляет креативностью модели.
Для более точных задач, где не нужно придумывать креативные идеи лучше ставить значение меньше одного.
Например, если поставить «Рандомность ответа» на значение 0,8 — при ответе ии будет меньше «придумывать», больше опираясь на инструкции, которые ему даны.
Краткое описание настроек:
- Повторение токенов в ответах (-2.0 до 2.0) — параметр
frequency_penalty. Уменьшает (или увеличивает) повтор слов - Отклонение от темы (-2.0 до 2.0) —
> 0: поощряет упоминание новых тем,< 0: остаётся ближе к текущей теме. - Ссылка на изображение — если модель мультимодальная, можно передавать изображения.
- Рандомность ответа (0 до 2.0) —
0: максимально детерминированный (одинаковые ответы).
1: умеренная случайность.2: креативный и непредсказуемый. - Уровень рассуждений — средний, низкий, или высокий. При выставлении
Высокий— потребует больше токенов для ответа, но точность ответа будет выше - Приоритетность (scale tier) — Это может относиться к приоритету обработки запроса, если есть несколько тарифов.
- Максимальное количество используемых токенов — максимальное кол-во токенов для ответа. Чем выше число — тем более обширный ответ получится
- ID пользователя — Это служебное поле, передаваемое в имя пользователя при отправке запроса.
Помогает OpenAI идентифицировать пользователя (например, для анализа злоупотреблений). - Искать данные в интернете — возможность искать данные в интернете, если поддерживается выбранной моделью. Данный параметр может негативно сказаться на времени ожидания готовности генерации от ИИ (ответа). Если инструкция задано достаточно точно — лучше не использовать

#25 JSON декодировать — раскладываем JSON строку с ответом от ИИ в формат «Ключ»: «Значение»

#15 Создать примечание — создаем примечание, в текст которого кладем полученный анализ текста

#30 Проверка — проверка на наличие анализа. Если не дозвонился — поставим задачу

#47 Создать задачу — ставим задачу, если не дозвонились

#27 Проверка — проверяем, есть ли в ответе pushdate (дата для перезвона). Как было ранее задано в инструкции от разработчика к ИИ — если в диалоге клиент попросил перезвонить, то в ответе должна сгенерироваться дата перезвона в формате timestamp

#29 Создать задачу — если дата перезвона была сгенерирована — ставим задачу со сроком выполнения до этой даты
Проверка в amoCRM и получение результата
Теперь остается совершить звонок или дождаться звонка, провести диалог и дождаться генерации анализа звонка от ИИ


Как видим — анализ встречи успешно записан в примечание сделки.

Пример с постановкой задачи, если в диалоге договорились о перезвоне
В событиях также видим можно отследить, как прошел процесс



Итог
Теперь при появлении новой записи разговора в amoCRM, система автоматически отправит аудио в Rev.Ai, расшифрует текст, проанализирует его с помощью OpenAi и добавит результат в примечание карточки сделки.
Если звонок не состоится — также получим примечание, что разговор не состоялся. Если в диалоге клиент попросит перезвонить нам — получим автоматическую постановку задачи на дату перезвона.