Подключение телефонии 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 в Юздеске: