Интеграция Twilio Flex с аналитикой разговоров Dynamics 365 (предварительная версия)
[Данная статья посвящена предварительному выпуску и может быть изменена.]
Эта интеграция позволяет вашим продавцам совершать и принимать вызовы Twilio Flex из Dynamics 365, а также получать расшифровки в реальном времени во время звонка и аналитические данные о звонках, созданные ИИ, после звонка.
Внимание
- Это предварительная версия функции.
- Предварительные версии функций не предназначены для использования в производственной среде, а их функциональность может быть ограничена. Для этих функций действуют дополнительные условия использования и они доступны перед официальным выпуском, чтобы клиенты могли досрочно получить доступ и предоставить отзывы.
Предварительные условия
Учетная запись Twilio
Учетная запись Twilio Flex — перейдите по этой ссылке для получения дополнительной информации о настройке учетной записи Flex
Среда Microsoft Dynamics 365 Sales с лицензией Sales Premium или Sales Enterprise, а также привилегиями системного администратора
Аналитика разговоров установлена и настроена — Подробнее
Установлена инфраструктура интеграции каналов Dynamics 365 1.0 Подробнее
Настройка локальной среды Node JS
Приложение create-flex-plugin
Шаг 1. Настройка Twilio Flex в качестве поставщика каналов
В инфраструктуре интеграции каналов Dynamics 365 создайте поставщика каналов для Twilio Flex. См. приведенный ниже снимок экрана в качестве примера:
Введите следующие значения::
URL-адрес канала:https://flex.twilio.com/agent-desktop
Включить исходящую связь: Да
Версия API: 1.0
Порядковый номер канала: 1
Доверенный домен:https://flex.twilio.com/
Выберите приложения единого интерфейса для канала: Центр продаж (или любое другое приложение, для которого вы хотите включить интеграцию)
Выберите роли безопасности для канала: добавьте роли, которые будут использовать Twilio Flex. Например, продавец, менеджер по продажам и т. д. Чтобы встроить Twilio Flex в качестве iFrame внутри Dynamics 365, добавьте URL-адрес организации Dynamics 365 в список разрешенных URL-адресов. Дополнительные сведения см. в этой статье.
Шаг 2. Установка соединителя SIPREC и маршрутизация вызовов в Dynamics 365
Установите надстройку Соединитель SIPREC.
Откройте настройки центра администрирования Twilio и настройте его для разветвления мультимедиа на устройство записи Dynamics 365, как показано на следующем снимке экрана:
Важно отметить следующие поля:
Уникальное имя: укажите имя и запишите его. Его необходимо использовать на следующих шагах
Сервер записи сеанса: укажите URL-адрес сервера записи мультимедиа Dynamics 365. Список поддерживаемых устройств записи и регионов см. в разделе Конечные точки устройств записи и поддерживаемые регионы.
Если вы хотите разветвить мультимедиа на ближайшее устройство записи, используйте следующий URL-адрес: sip:SRS@media.recording.dynamics.com:5061;secure=true
Поля учетных данных могут оставаться пустыми. Аутентификация выполняется с помощью сертификата при настройке TLS между Twilio и Dynamics.
Шаг 3. Настройка потока вызовов для разветвления мультимедиа в Dynamics 365
Перейдите в раздел потоков Studio в консоли и выберите поток голосового IVR.
С правой стороны в разделе Голосовая связь в библиотеке мини-приложений добавьте мини-приложение Разветвление потока:
Теперь настройте мини-приложение для разветвления потока с помощью соединителя SIPREC, который вы определили ранее:
Введите следующие значения:
- Действие потока: Пуск
- Тип потока: Siprec
- Имя соединителя: имя, которое вы дали соединителю SIPREC. В нашем примере это SipRec1.
- Дорожки: Обе дорожки
-
Параметры потока:
Роль: входящие (в нашем примере мы собираемся записывать входящие звонки)
CallerDisplayName: {{trigger.call.From}}
CalleeDisplayName: {{trigger.call.To}}
На вкладке Переходы настройте, чтобы Разветвление потока выполнялось до направления звонка агенту:
Сохраните поток и опубликуйте его.
Шаг 4. Настройка номера телефона Twilio
Вам нужно указать номер телефона Twilio для только что созданного потока Studio.
Выберите номер, которым владеете, — или купите новый номер, — в консоли номеров телефонов Twilio.
Откройте номер телефона, выбрав его, затем прокрутите вниз до раздела Голосовая связь на странице.
Выберите поток, который вы определили ранее, в полях Звонок поступает в , как показано на следующем снимке экрана:
Шаг 5. Настройка Dynamics 365 для интеграции
Давайте настроим Twilio в качестве поставщика звонков и настроим политику записи, чтобы определить, кто может записывать звонки, и другую информацию, используемую для аналитики разговоров.
В приложении Центра продаж перейдите к области "Изменить" и выберите Параметры Sales Insights.
Выберите Аналитика разговоров.
Выберите Twilio в разделе «Поставщики звонков» и укажите SID учетной записи Twilio.
Сохраните изменения.
Настройте политику записи с помощью поставщика вызовов Twilio.
Выберите Создать политику записи и настройте политику. Подробнее.
Выберите Создать, затем опубликуйте настройки.
Шаг 6. Подготовка подключаемого модуля Flex для интеграции работы в режиме реального времени
Flex — это проект React, и настройки, которые вы вносите в пользовательский интерфейс, создаются как компоненты подключаемого модуля.
Подготовка среды Node и установка пустого подключаемого модуля Flex выходят за рамки этой документации. Обратитесь к документации Twilio для получения пошагового руководства по созданию вашего первого подключаемого модуля Flex.
Создайте новый подключаемый модуль, готовый для добавления кода настройки для Dynamics.
На этом этапе ваш JS-файл подключаемого модуля выглядит так:
Добавьте клиентскую библиотеку Microsoft CIF в свой подключаемый модуль. Клиентская библиотека должна загружаться асинхронно при запуске Flex, поэтому добавьте следующий код в функцию инициализации Flex.
import React from 'react';
import \* as Flex from '@twilio/flex-ui';
import { FlexPlugin } from '@twilio/flex-plugin';
import reducers, { namespace } from './states';
const PLUGIN\_NAME = 'SamplePlugin';
export interface CallStartedEvent {
callId: string;
startTime: Date;
isIncomingCall: boolean;
contactNumber: string;
contactName: string;
}
export interface CallEndedEvent {
callId: string;
callDurationInSeconds: number;
callTerminationReason: string; // \['success', 'error'\]
callEndTime: Date;
isCallStarted: boolean;
}
export default class SamplePlugin extends FlexPlugin {
constructor() {
super(PLUGIN\_NAME);
}
/\*\*
\* This code is run when your plugin is being started
\* Use this to modify any UI components or attach to the actions framework
\*
\* @param flex { typeof Flex }
\* @param manager { Flex.Manager }
\*/
async init(flex: typeof Flex, manager: Flex.Manager): Promise<void> {
this.registerReducers(manager);
this.loadCIF();
flex.Actions.addListener('afterAcceptTask', (payload) => {
const callStartedEvent : CallStartedEvent = {
callId: payload.task.\_task.attributes.call\_sid,
startTime: new Date(),
isIncomingCall: true,
contactName: payload.task.\_task.attributes.caller,
contactNumber: payload.task.\_task.attributes.caller
};
// @ts-ignore
Microsoft.CIFramework.raiseEvent('WIDGET\_CALL\_STARTED', callStartedEvent);
});
flex.Actions.addListener('afterCompleteTask', (payload) => {
// @ts-ignore
Microsoft.CIFramework.raiseEvent('WIDGET\_CALL\_ENDED', {
callId: payload.task.\_task.attributes.call\_sid,
callTerminationReason: 'success',
callEndTime: new Date(),
isCallStarted: true
});
const callEndedEvent : CallEndedEvent = {
callId: payload.task.\_task.attributes.call\_sid,
callEndTime: new Date(),
callTerminationReason: 'success',
isCallStarted: true
};
// @ts-ignore
Microsoft.CIFramework.raiseEvent('WIDGET\_CALL\_ENDED', callEndedEvent);
});
const options: Flex.ContentFragmentProps = { sortOrder: -1 };
flex.AgentDesktopView.Panel1.Content.add(<div key="SamplePlugin-component" >Hello Partner!</div>, options);
}
loadCIF = () => {
const script = document.createElement("script");
script.src = \`${window.location.ancestorOrigins\[0\]}/webresources/Widget/msdyn\_ciLibrary.js\`;
script.setAttribute('data-crmurl', window.location.ancestorOrigins\[0\]);
script.setAttribute('data-cifid', 'CIFMainLibrary');
document.body.appendChild(script);
}
/\*\*
\* Registers the plugin reducers
\*
\* @param manager { Flex.Manager }
\*/
private registerReducers(manager: Flex.Manager) {
if (!manager.store.addReducer) {
// eslint-disable-next-line
console.error(\`You need FlexUI > 1.9.0 to use built-in redux; you are currently on ${Flex.VERSION}\`);
return;
}
manager.store.addReducer(namespace, reducers);
}
}
Опубликуйте подключаемый модуль.
Теперь у нас есть подключаемый модуль Flex, который можно протестировать!
Шаг 7. Тестирование аналитики разговоров Dynamics 365 и интеграции Flex
Войдите в приложение "Центр продаж" и выберите значок Позвонить. Вы увидите Twilio Flex, встроенный в правую панель.
Убедитесь, что вы установили свой статус как Доступен в Twilio, и позвоните на номер телефона Twilio, который вы настроили на Шаг 4. Настройка номера телефона Twilio.
Ответив на звонок и начав запись, перейдите на вкладку Расшифровка, чтобы просмотреть расшифровку в реальном времени, а затем просмотрите аналитику звонков на странице Сводка звонка после окончания звонка.