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