Подключение телефонии Voximplant
Содержание
Подключение телефонии
1. Чтобы подключить телефонию Voximplant к Юздеску, откройте раздел «Каналы» и нажмите кнопку «Добавить канал».
2. Выберите раздел «Телефония».
3. Заполните обязательное поле «Название канала». Название будет отображаться в общем списке каналов в разделе «Каналы» и при работе с обращениями.
4. Выберите любую телефонию, кроме «Гравител», «Манго», «Телфин», «Дом.ру».
5. В профиле агента в блоке «Телефония» выберите «voximplant» и укажите логин и пароль оператора, которые предоставил провайдер и сохраните.
При этом запрос с информацией о разговоре автоматически будет назначаться на агента, который общается с клиентом по телефону.
6. Настройте права доступа, чтобы нужные вам агенты могли работать в канале телефонии (важно — сотрудник с правами «Внутренний сотрудник» не может совершать звонки). Как настроить права, рассказываем в статье по ссылке.
Важно! Настройки могут отличаться от оператора к оператору, поэтому надёжнее всего будет связаться с поддержкой Voximplant для помощи с подключением. Если вам понадобятся совет или дополнительная помощь, напишите нам на support@usedesk.ru.
Дополнительно о работе телефонии в Юздеске смотрите здесь.
Исходящие звонки
Для исходящих звонков у агента в настройках профиля должен быть прописан ID оператора — его можно найти в личном кабинете вашей телефонии.
Чтобы позвонить клиенту, нажмите на его номер телефона в карточке клиента, списке клиентов или в блоке «Информация о клиенте» в карточке запроса.
Входящие звонки
Важно! Эта инструкция — для разработчиков сценариев Voximplant. По вопросам разработки сценариев можете обращаться в службу поддержки Voximplant с любыми вопросами.
Для входящих звонков требуется внедрить дополнительные функции в сценарий вашего приложения Voximplant и создать правило в Юздеске. Подробнее об этом можно узнать в документации для разработчиков по ссылке.
Библиотека Юздеска для работы с запросами
Создайте новый сценарий с произвольным именем и вставьте в него следующий код:
function jsonRequest(url, cb, opt) { opt = opt || {}; opt.headers = opt.headers || []; opt.headers.push('Content-type: application/json'); if('json' in opt) { opt.postData = JSON.stringify(opt.json); } Net.httpRequest(url, cb, opt); } class SafeJson { static parse(raw) { try { return JSON.parse(raw); }catch(e) { return null; } } } class Usedesk { constructor(token, baseUrl = '<https://api.usedesk.ru>') { this.token = token; this.baseUrl = baseUrl; } createTicket(data) { data.api_token = this.token; return new Promise((resolve) => { jsonRequest( this.baseUrl + '/create/ticket', ({text}) => { const maybeJson = SafeJson.parse(text); const result = maybeJson && 'ticket_id' in maybeJson ? maybeJson.ticket_id : -1; resolve(result); }, {method: 'POST', json: data} ) }) } createComment(ticketId, message) { const data = { api_token: this.token, ticket_id: ticketId, message: message, type: "private" } return new Promise(resolve => { jsonRequest( this.baseUrl + '/create/comment', ({text}) => { const maybeJson = SafeJson.parse(text); const result = !!maybeJson && 'comment_id' in maybeJson; resolve(result); }, {method: 'POST', json: data} ) }) } }
Внимание! Если вы используете коробочную версию Юздеска на собственном сервере, baseUrl у вас будет отличаться. Уточните URL для работы с API у нашей поддержки — support@usedesk.ru
Внедрение библиотеки в сценарий
1) В сценарии нужно определить глобальную константу TOKEN со значением вашего API-токена и определить Usedesk. О том, как получить токен, рассказываем в статье по ссылке.
const TOKEN = 'Ваш API-токен Юздеска'; const usedesk = new Usedesk(TOKEN);
2) При успешном звонке вызывается коллбэк CallEvents.Connected. Таким образом, при установлении соединения нужно создавать запрос в Юздеске. Ниже показан пример участка кода, при котором будет создан запрос в канале, указанный в параметре channel_id, со следующими данными:
- Тема запроса: Новый звонок с агентом %логин пользователя в Voximplant%;
- Сообщение в запросе: Новый успешный звонок от номера %номер клиента%;
- Запрос будет привязан к клиенту с именем %номер клиента%, в карточку запишем номер.
inc.addEventListener(CallEvents.Connected, <<<<<$1>$1>$1>$1>$1> () => { sessionTicketId = await usedesk.createTicket({ subject: "Новый звонок с агентом " + inc.username(), message: "Новый успешный звонок от номера " + inc.callerid(), client_name: inc.callerid(), client_phone: inc.callerid(), channel_id: 12345 }) })<< $1>$1><< $1>$1><< $1>$1><< $1>$1><< $1>$1><< $1>$1><< $1>$1> </< $1>$1></< $1>$1></< $1>$1></< $1>$1></< $1>$1></< $1>$1></< $1>$1></< $1>$1></ $1></ $1></ $1></ $1></ $1></ $1></ $1></ $1></ $1></ $1></ $1></ $1></ $1></ $1></ $1></ $1>
3) Также можно добавить обработчик для случаев, если соединиться по каким-то причинам не удалось:
inc.addEventListener(CallEvents.Disconnected, <<<<<$1>$1>$1>$1>$1> () => { if(sessionTicketId > 0) { await usedesk.createComment(sessionTicketId, 'Не получилось соединиться'); } }); });<< $1>$1><< $1>$1><< $1>$1><< $1>$1><< $1>$1><< $1>$1><< $1>$1> </< $1>$1></< $1>$1></< $1>$1></< $1>$1></< $1>$1></< $1>$1></< $1>$1></< $1>$1></ $1></ $1></ $1></ $1></ $1></ $1></ $1></ $1></ $1></ $1></ $1></ $1></ $1></ $1></ $1></ $1>
Создание правил в Юздеске
В Юздеске с помощью правил можно установить соответствие пользователя в Voximlant и агента в Юздеске. Ниже показан пример правила, когда звонки для пользователя Voximplant с ником ivanov будут назначены на агента Sergey в Юздеске: