1. Описание

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

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

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

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

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

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

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

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

Исполнитель предоставляет исходный код 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 в конце репозитория:

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

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

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

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

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

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

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

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

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:

// 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 - полное имя конечного пользователя в отображаемой форме, включая все части имени, возможно, включая заголовки и суффиксы, упорядоченные в соответствии с языковыми стандартами и предпочтениями конечного пользователя.

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() {}
})

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

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) {}
}

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

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) {}
})

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

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

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

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

  • No labels