Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

1. Описание

Интеграция функционала «Онлайн-звонок» с мобильным приложением производится с помощью Webitel Mobile SDK.

Webitel предоставляет набор библиотек, которые могут встраивать в мобильное приложение Заказчика. Библиотеки поддерживают функционал:

  • инициации исходящего вызова клиентом - клиент может позвонить в КЦ;
  • инициация исходящего чата клиентом - клиент может написать в чат.

Все исходящие звонки/чаты пользователей мобильного приложения попадают в отдельную схему маршрутизации для постановки в очередь ожидания. Больше о схемах можно посмотреть здесь.

В звонке возможно следующее:

  • удержание звонка;
  • отключить/включить микрофон;
  • включить/отключить громкую связь;
  • отправить DTMF.

 В чате возможно следующее:

  • отправить/получить текстовое сообщение;
  • отправить/получить медиа-файл;
  • посмотреть историю сообщений.
Info

Исполнитель предоставляет исходный код Mobile SDK и описание примера использования - webitel_portal_sdk.docx

2. Webitel Mobile SDK

Программируемый Webitel Mobile SDK упрощает добавление чата и голосовых вызовов по IP (VoIP) в ваше приложение. SDK позволяет совершать и принимать звонки, отправлять и получать текстовые и мультимедийные сообщения. 

Для работы с этой библиотекой понадобится устройство Android с уровнем Android API 24, или более поздней версии. 


Пример программы для интеграции и тестирования: 
https://github.com/webitel/mobile-demo-app

Для установки необходимо: 

  1. Добавить SDK в свое приложение;
  2. Настроить push-уведомления;
  3. Настроить сервер Webitel.

2.1. Добавление SDK в свое приложение

Добавьте репозиторий JitPack в файл сборки.

Добавьте его в свой корневой build.gradle в конце репозитория:

Code Block
allprojects {
	repositories {
		maven { url "https://jitpack.io" }
	}
}

Добавьте зависимость:

Code Block
dependencies {
	implementation 'com.github.webitel:mobile-sdk:0.2.4'
}

Включите разрешения микрофона.

Вам необходимо убедиться, что ваше приложение запрашивает разрешения для доступа к микрофону во время выполнения. Для этого выполните следующие два шага:

а) Добавьте следующее в файл Android Manifest :

Code Block
	<uses-permission
android:name="android.permission.RECORD_AUDIO"/>

б) Запросите разрешения микрофона из кода вашего приложения:

Code Block
ActivityCompat.requestPermissions(this,
	new String[]{Manifest.permission.RECORD_AUDIO}, 
MIC_PERMISSION_REQUEST_CODE)

2.2. Настройка push-уведомления

Добавьте Firebase в свой проект Android:
https://firebase.google.com/docs/android/setup

Настройка клиентского приложения Firebase Cloud Messaging на Android:
https://firebase.google.com/docs/cloud-messaging/android/client

2.3. Настроить сервер Webitel

2.3.1. Webitel Mobile SDK  

2.3.2. Начало работы

Для получения точки входа в SDK:

Code Block
// PORTAL_CLIENT - Webitel (Client: Portal App) token issued.
// ADDRESS -  service host address ; e.g.:
	grpcs://dev.webitel.com:443

	val portalClient = PortalClient.Builder(
        			application = this,
        			address = ADDRESS,
        			token = PORTAL_CLIENT
    		).build()

Следующий шаг - авторизация пользователя:

// iss - идентификатор отправителя ответа. Значение iss — это URL-адрес с учетом регистра, использующий схему https, которая содержит компоненты схемы, хоста и, при необходимости, номера порта и пути, а не компоненты запроса или фрагмента.

// sub -идентификатор субъекта. Локально уникальный и никогда не переназначаемый идентификатор внутри эмитента для конечного пользователя, который предназначен для использования клиентом, например 24400320 или AItOawmwtWwcT0k51BayewNvutrJUqsvl6qs7A4. Его длина НЕ ДОЛЖНА превышать 255 символов ASCII. Подзначение представляет собой строку, чувствительную к регистру.

// name - полное имя конечного пользователя в отображаемой форме, включая все части имени, возможно, включая заголовки и суффиксы, упорядоченные в соответствии с языковыми стандартами и предпочтениями конечного пользователя.

Code Block
val user = User.Builder(
        			iss = iss ,
        			sub = sub,
        			name = name
    		).build()


portalClient.userLogin(user, object: LoginListener {
    		override fun onLoginFinished(session: Session) {
        			// authorization was successful
    		}

    		override fun onError(e: Error) {
        			// authorization failed
    		}

override fun onLogoutFinished() {}
})

Создание нового исходящего звонка:

Code Block
portalClient.getVoiceClient(object : 							
		CallbackListener<VoiceClient> {

    	override fun onSuccess(t: VoiceClient) {
        		// Received VoiceClient
    	}

    	override fun onError(e: Error) {}
})


voiceClient.makeCall(object : CallStateListener {

		override fun onCreateCall(call: Call) {
			// Created new call
    	}

    	override fun onCallStateChanged(
			call: Call, oldState: List<CallState>) {}

    	override fun onCreateCallFailed(e: Error) {}
}

Отправление текстового сообщения:

Code Block
chatClient.getServiceDialog(object : CallbackListener<Dialog> {

    		override fun onSuccess(t: Dialog) {
        			// Received chat dialog
    		}

    		override fun onError(e: Error) {}
})


chatDialog.sendMessage(
    		Message
       			 .options()
        			.withText(text),
object : MessageCallbackListener {

        	override fun onSend(m: Message) {}

        	override fun onSent(m: Message) {}

			override fun onError(e: Error) {}
})

Получить историю диалогов:

Code Block
chatDialog.getHistory(callback = object : 
			CallbackListener<List<Message>>{

    override fun onSuccess(t: List<Message>) { }

    override fun onError(e: Error) {}
})


Table of Contents