Встраиваемый чат для мобильных приложений iOS
Программные средства разработки (SDK) Pyrus для iOS позволяют встроить удобный чат в ваше мобильное приложение.
Встроенный чат помогает получать мгновенную обратную связь от пользователей вашего мобильного приложения.
Когда клиент пишет в чат, ваша служба поддержки автоматически получает тикет в Pyrus. Специалист отвечает на заявку прямо в Pyrus, а клиенту приходит пуш-уведомление на телефон и ответ в чат вашего мобильного приложения. Это позволяет специалистам поддержки оперативно решать вопросы клиентов.
Основные возможности
- Внешний вид чата настраивается, поэтому чат может выглядеть как часть вашего приложения.
- Push-уведомления приходят клиенту, когда специалист отвечает на заявку.
- История переписки сохраняется в чате.
- Клиент может приложить к сообщению файлы, например фотографии, сделанные на камеру, или из галереи.
Вы можете встроить такой чат в приложение на базе iOS. Вот пошаговая инструкция.
Получить идентификатор приложения (AppID)
Чтобы специалисты службы поддержки могли обрабатывать сообщения из чата в Pyrus, ваше приложение нужно подключить к форме, в которой ведётся работа с обращениями клиентов. Для начала работы вам понадобится аккаунт администратора в Pyrus с доступом к настройке формы, в которой обрабатываются обращения пользователей. Если у вас нет такого аккаунта, обратитесь к коллеге, у которого он есть.
- Включите интеграцию в Pyrus. Убедитесь, что администратор формы в Pyrus включил интеграцию с чатом в приложении.
- Получите AppID в настройке формы в Pyrus. Мы сгенерируем его автоматически, когда администратор формы включит интеграцию. AppID записан на странице настройки интеграции.
Подготовить проект
1. Pods
В файл Pods добавить:
pod 'PyrusServiceDesk', :git => ‘https://github.com/simplygoodsoftware/pyrusservicedesk.git’, :tag => ‘3.0.37’
2. Swift Package Manager
Перейдите в настройки проекта Package Dependencies >> Packages >> Add. Введите в поле "Package URL":
https://github.com/simplygoodsoftware/pyrusservicedeskIOS
Из списка результатов выберите PyrusServiceDeskIOS >> Add Package.
3. Через настройки
Скачайте framework и перейдите в Targets >> General. Перетащите framework в Embedded Binaries.
Обновите информацию в разделе "Описание используемых типов и методов":
Текущая версия 3.0.37 собрана с использованием Xcode 15.4, Swift 5.10.
Запросить разрешение на доступ к камере и галерее
Чтобы пользователи могли прикреплять к сообщениям видео и фотографии, настройте доступ к камере и галерее. В файле Info.plist вашего приложения добавьте
“Privacy - Camera Usage Description”, “Privacy - Photo Library Usage Description”, “Privacy - Microphone Usage Description”.
Выбрать тип авторизации
Библиотека Pyrus Mobile Chat может работать в одном из двух режимов: с анонимной либо с внешней авторизацией.
Анонимный режим работы требует меньше затрат на внедрение. В этом случае данные чата привязаны к устройству. Пользователь на одном устройстве без использования явных логинов и паролей может писать в чат и видеть ответы операторов.
Основной недостаток анонимного режима в том, что если пользователь использует мобильное приложение на другом устройстве, то предыдущую переписку он не видит.
Если вы хотите, чтобы чат с историей переписки был доступен пользователю на разных устройствах, настройте внешнюю авторизацию. Для этого нужно реализовать веб-сервис, сообщающий системе о том, что данному пользователю разрешен доступ к чату.
Обратите внимание, что анонимная и внешняя авторизация взаимно исключают друг друга. Если вы, например, переключаете библиотеку Pyrus Mobile Chat с анонимной авторизации на внешнюю, то старая переписка в чате, сделанная с анонимной авторизацией, пользователям мобильного приложения перестаёт быть доступна.
Как работает авторизационный сервис
В режиме с внешней авторизацией решение о том, есть ли у пользователя доступ к данным чата, бэкенд Pyrus не принимает самостоятельно, а спрашивает об этом специальный авторизационный сервис, который вам необходимо реализовать. Работает это так.
Пользователь любым способом авторизуется в мобильном приложении и после этого получает от вашего бэкенда пару ( userID, securityKey). На этом этапе библиотека Pyrus Mobile Chat и бэкенд Pyrus не участвуют.
При инициализации библиотеки Pyrus Mobile Chat значения userID и securityKey передаются как параметры.
В дальнейшем при любом запросе в бэкенд Pyrus (например, при запросе истории переписки или при отправке комментария пользователя) библиотека Pyrus Mobile Chat автоматически передаёт в бэкенд Pyrus параметры (userID, securityKey).
Перед обработкой запроса по существу бэкенд Pyrus проверяет права доступа, для этого передает пару (userID, securityKey) в ваш авторизационный веб-сервис.
Авторизационный веб-сервис в коммуникации с вашим бэкендом проверяют, являются ли параметры (userID, securityKey) подлинными и передают результат проверки обратно в бэкенд Pyrus.
Если разрешение от авторизационного сервиса получено, бэкенд Pyrus выполняет запрос: отправляет историю переписки, сохраняет комментарий пользователя и т.п.
URL авторизационного сервиса следует указать в форме, к которой подключен мобильный чат. Для этого зайдите в настройки выбранной формы и в разделе Расширения выберите Чат в мобильном приложении.
На открывшейся странице введите URL в соответствующее поле.
Инициализировать чат
При старте приложения вызовите метод createWith() класса PyrusServiceDesk.
Параметры метода createWith():
- appID, объект класса String. Идентификатор вашего приложения. Он записан в настройке формы, к которой подключён чат. Если у вас нет доступа, попросите администратора формы скопировать AppID, как описано в разделе «Получить идентификатор приложения (AppID)».
Данные параметры применяются только при внешней авторизации:
- userID, объект класса String. Строка ID пользователя во внешней системе. Не должен меняться у одного и того же пользователя;
- securityKey, объект класса String. Строка для аутентификации пользователя user_id во внешней системе. Может меняться у одного и того же пользователя, если внешняя система это позволяет.
Инициализация чата в анонимном режиме
Objective-C
Функция чата инициализируется в файле AppDelegate.m.
(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [PyrusServiceDesk createWith:@"your_app_id"]; return YES; }
Swift
Функция чата инициализируется в файле AppDelegate.swift.
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { PyrusServiceDesk.createWith("your_app_id") return true }
Инициализация чата в режиме внешней авторизации
Objective-C:
[PyrusServiceDesk createWith:@"your_app_id" userId:@"userId" securityKey:@"securityKey"];
Swift:
PyrusServiceDesk.createWith("your_app_id", userId: "userId", securityKey: "securityKey")
Если передать параметр userId = nil, то будет работать анонимная авторизация, привязанная к устройству, а не к пользователю.
Запустить пользовательский интерфейс
Чтобы запустить пользовательский интерфейс, вызовите метод start() класса PyrusServiceDesk.
Параметры метода start(): viewController — объект класса UIViewController. Нужен для запуска пользовательского интерфейса.
Objective-c:
[PyrusServiceDesk startOn:self];
Swift:
PyrusServiceDesk.start(on: self)
Для настройки оформления чата передайте параметр configuration.
Параметры метода start():
- viewController, объект класса UIViewController. Нужен для запуска пользовательского интерфейса.
- configuration, объект класса ServiceDeskConfiguration. Используется для настройки оформления чата.
- onStopCallback, объект класса OnStopCallback. Используется для подписки на закрытие чата.
Objective-c:
[PyrusServiceDesk startOn:self configuration:configuration onStopCallback:onStopCallback];
Swift:
PyrusServiceDesk.start(on: self, configuration:configuration, onStopCallback:onStopCallback)
Чтобы кастомизировать навигацию в интерфейсе чата, используйте следующую функцию:
func start(with configuration:ServiceDeskConfiguration?, completion:(() -> Void)? = nil, onStopCallback: OnStopCallback? = nil) -> UINavigationController?
Метод start(with) возвращает чат со службой поддержки — объект класса UINavigationController, который можно отображать так, как нужно вам.
Параметры метода start(with):
- configuration — объект класса ServiceDeskConfiguration, используется для настройки оформления чат;
- onStopCallback — объект класса OnStopCallback, и спользуется для подписки на закрытие чата.
Настроить оформление чата
Метод start(), используемый для запуска пользовательского интерфейса, содержит параметр Configuration, объект класса ServiceDeskConfiguration. Создать и настроить объект ServiceDeskConfiguration можно с помощью объекта ServiceDeskConfiguration.Builder.
Методы объекта ServiceDeskConfiguration.Builder
- setUserName, объект класса String, задаёт имя пользователя (клиента поддержки), которое специалист службы поддержки увидит в Pyrus. Если пользователь авторизовался в приложении, вы можете передавать имя, почту и другие его данные в этот метод, чтобы оператор поддержки понимал, с кем общается, и быстрее решил вопрос.
- setChatTitle, объект класса String — задаёт заголовок в окне чата.
- setWelcomeMessage, объект класса String — приветственное сообщение, которое увидит пользователь, открыв чат.
- setThemeColor, объект класса UIColor — цвет основных элементов интерфейса.
- setAvatarForSupport, объект класса UIImage — аватар сотрудника службы поддержки.
- build — создает объект класса ServiceDeskConfiguration.
Детальная настройка внешнего вида чата
В дополнение к описанным выше кратким настройкам внешнего вида чата вы можете с помощью объекта ServiceDeskConfiguration уточнить вид отдельных элементов интерфейса. Все представленные далее настройки использовать необязательно: если вы пропустите часть из них, сработают соответствующие краткие настройки.
Вы можете детально оформить чат используя следующие параметры.
setKeyboardAppearance, объект класса UIKeyboardAppearance — внешний вид клавиатуры для ввода сообщения.
setKeyboardColor, объект класса UIColor — цвет клавиатуры для ввода сообщения.
setFontName, объект класса String — название шрифта, который используется в чате.
setUserMessageBackgroundColor, объект класса UIColor — цвет фона для сообщений пользователей. По умолчанию имеет значение UIColor.secondarySystemBackground.
setSupportMessageBackgroundColor, объект класса UIColor — цвет фона для сообщений службы поддержки. По умолчанию имеет значение UIColor.secondarySystemBackground.
setUserTextColor, объект класса UIColor — цвет текста для сообщений пользователя. По умолчанию имеет значение nil. Если данный параметр не установлен, цвет текста будет автоматически подогнан под цвет фона сообщения.
setSupportTextColor, объект класса UIColor — цвет текста для сообщений службы поддержки. По умолчанию имеет значение UIColor.label.
setChatTitleColor, объект класса UIColor — цвет заголовка чата. Может использоваться, если не установлен параметр chatTitleView. Если chatTitleView установлен, он имеет наивысший приоритет.
setToolbarColor, объект класса UIColor — цвет навигационной панели чата.
setToolbarButtonColor, объект класса UIColor — цвет кнопки Назад. Используется, если не установлен параметр customLeftBarButtonItem. В последнем случае customLeftBarButtonItem имеет наивысший приоритет.
setBackgroundColor, объект класса UIColor — цвет фона чата.
setAttachmentMenuTextColor, объект класса UIColor — цвет текста для меню выбора вложенных файлов.
setAttachmentMenuButtonColor, объект класса UIColor — цвет кнопки для выбора прикрепляемого файла.
setSendButtonColor, объект класса UIColor — цвет кнопки для отправки сообщения.
setStatusBarStyle, объект класса UIStatusBarStyle — внешний вид строки состояния устройства.
setToolbarStyle, объект класса UIBarStyle — темная тема оформления чата. Установка этого параметра в значении false отключает функцию автоматического затемнения. Установка параметра в значение true автоматически сделает тему темной. По умолчанию параметр установлен в значении false.
setCustomRightBarButtonItem, объект класса UIBarButtonItem — вид правой кнопки в верхней панели управления.
setCustomLeftBarButtonItem, объект класса UIBarButtonItem — вид левой кнопки в верхней панели управления ( если установлен, то окно невозможно закрыть).
setInfoView, объект класса UIView — внешний вид информационного блока над чатом.
setChatTitleView, объект класса UIView — внешний вид кастомизированного заголовка чата.
Примеры кратких и расширенных настроек оформления чата
Objective-C:
ServiceDeskConfigurationBuilder *builder = [[ServiceDeskConfigurationBuilder alloc] init]; [builder setUserName: @"Иван Петров"]; [builder setChatTitle: @"Поддержка ИмяОрганизации"]; [builder setWelcomeMessage: @"Добрый день! Как я могу вам помочь?"]; [builder setThemeColor: [UIColor redColor]]; [builder setAvatarForSupport: [UIImage imageNamed:@"logo.png"]]; [builder setKeyboardAppearance: UIKeyboardAppearanceDark darkKeyboardAppearance: UIKeyboardAppearanceDark]; [builder setBackgroundColor: [UIColor systemBackgroundColor]]; ServiceDeskConfiguration* configure = [builder build];
Swift:
let configuration : ServiceDeskConfiguration = ServiceDeskConfiguration.Builder() .setUserName("Иван Петров") .setChatTitle("Поддержка ИмяОрганизации") .setWelcomeMessage("Добрый день! Как я могу вам помочь?") .setThemeColor(.red) .setAvatarForSupport(UIImage(named: "logo.png")) .setKeyboardAppearance(.dark, .dark) .setBackgroundColor(.systemBackground) .build()
В функции, принимающие цвет в качестве параметра, можно передавать объект UIColor, который адаптируются под текущую, светлую или тёмную, тему интерфейса. Пример вспомогательной функции для создания изменяемого цвета:
extension UIColor { static func themedColor(lightColor: UIColor, darkColor: UIColor) -> UIColor { return { if #available(iOS 13.0, *) { return UIColor { switch $0.userInterfaceStyle { case .dark: return darkColor default: return lightColor } } } return lightColor }() } }
Уведомления о новом сообщении в чате
Вы можете настроить отправку push-уведомлений, чтобы оповещать пользователя о новых сообщениях в чате. В этом разделе описан альтернативный вариант. Он проще в реализации, но уведомления будут приходить с задержкой и вы не увидите содержимое нового комментария. Настроить push-уведомления
Чтобы получать уведомления о новых сообщениях от сотрудника поддержки в чате, реализуйте интерфейс NewReplySubscriber и передайте реализацию интерфейса в метод subscribeToReplies() класса PyrusServiceDesk.
Если вы используете библиотеку Pyrus Mobile Chat на нескольких устройствах, что возможно с внешней авторизацией, то мобильному приложению полезно знать, что все новые комментарии уже прочитаны на другом устройстве. В этом случае библиотека вызовет функцию onNewReply с параметром hasUnreadComments равным false. Если чат открыт, функция не будет вызвана, даже если придут новые сообщения.
@objcpublicprotocol NewReplySubscriber{ @objcfunc onNewReply( hasUnreadComments: Bool, lastCommentText: String?, lastCommentAttachmentsCount: Int, lastCommentAttachments: [String]?, utcTime: Double ) }
Objective-C:
В файле ViewController.h
@interface ViewController : UIViewController<NewReplySubscriber>
В файле ViewController.m
-(void)onNewReplyWithHasUnreadComments:(BOOL)hasUnreadComments lastCommentText:(NSString *)lastCommentText lastCommentAttachmentsCount:(NSInteger)lastCommentAttachmentsCount lastCommentAttachments:(NSArray<NSString *> *)lastCommentAttachments utcTime:(double)utcTime { print("Есть непрочитанные сообщения") }
Swift:
func onNewReply(hasUnreadComments: Bool, lastCommentText: String?, lastCommentAttachmentsCount: Int, lastCommentAttachments: [String]?, utcTime: Double) { print("Есть непрочитанные сообщения") }
Push-уведомления
Вы можете настроить отправку push-уведомлений, чтобы пользователь узнавал, когда специалист поддержки отправит комментарий в чат. Общая схема оповещения выглядит так: специалист отвечает на обращение клиента в Pyrus, из Pyrus с помощью вебхука ответ специалиста и push-токен отправляется на ваш сервер. Затем push-сервер Apple отправляет в приложение клиента push-уведомление о новом сообщении в чате.
Push-сервер Apple должен знать токен, уникальный для устройства и вашего приложения. При запуске ваше приложение связывается с push-сервером Apple и получает токен устройства, который записывается в Pyrus.
Вызывать функцию setPushToken можно не более одного раза в пять минут для одного пользователя, и не более чем 5 раз в пять минут в целом.
Чтобы подписаться на уведомления о новых сообщениях в чате, зарегистрируйте push-токен.
Objective-C:
[PyrusServiceDesk setPushToken:@”your_token” completion:^(NSError* error){ if(error) { //error NSLog(@"error = %@",error.localizedDescription); } else{ //success } }];
Swift:
PyrusServiceDesk.setPushToken(“your_token”, completion: { (error) in if error != nil{ //error print(error!.localizedDescription) ... } else{ //success ... } })
Чтобы отписаться от push-уведомлений, нужно передать nil в функцию setPushToken:
Objective-C:
[PyrusServiceDesk setPushToken:nil completion:^(NSError* error){ if(error) { //error NSLog(@"error = %@",error.localizedDescription); } else{ //success } }];
Swift:
PyrusServiceDesk.setPushToken(nil, completion: { (error) in if error != nil{ //error print(error!.localizedDescription) ... } else{ //success ... } })
На стороне сервера приложения нужно реализовать вебхук, который будет получать уведомления о новых комментариях в чате. И в настройке формы добавьте его URL.
При появлении нового ответа от поддержки на URL вебхука будет отправляться POST-запрос со следующим содержанием:
ticket_id — номер задачи, в которую добавлен комментарий.
token — идентификатор пользователя, включающий:
- user_id — идентификатор пользователя, который передается при каждом запросе;
- app_id — идентификатор мобильного приложения/веб-чата;
- device_id — идентификатор устройства;
- type — тип устройства: «ios».
comment — информация о новом комментарии:
- comment_id — номер нового комментария;
- body — текст комментария;
- is_inbound — всегда false, показывает, что комментарий исходящий, то есть ответ поддержки.
author — информация об авторе комментария:
- name — имя автора;
- avatar_id — идентификатор аватара автора;
- avatar_color — цвет аватара автора. Используется, если avatar_id не заполнено.
created_at — дата и время создания комментария.
attachments — описание приложенных файлов:
- id — идентификатор файла;
- name — имя файла;
- size — размер файла в байтах.
Уведомления о закрытии чата
Чтобы получать сообщения о закрытии окна чата, реализуйте интерфейс OnStopCallback и передайте реализацию интерфейса в метод start() класса PyrusServiceDesk.
@objc public protocol OnStopCallback{ @objc func onStop() }
Включаем оценку сервиса
В уведомлении о закрытии заявки вы можете предложить пользователю оценить качество обслуживания с помощью смайликов, соответствующих оценке от пяти до одного.
Чтобы подключить оценку, зайдите в раздел Формы в левом меню и выберите форму, в которой работает Pyrus Mobile Chat.
На странице настройки формы в списке доступных расширений нажмите значок Оценка сервиса.
Установите переключатель в положение Включено.
Настройка меню отправки файлов в чат
По умолчанию пользователь может отправлять в чат фотографии, сделанные камерой, или выбирать изображения из галереи. Чтобы дать пользователю возможность отправлять другие типы файлов (например, техническую информацию, файлы конфигурации и т. д.), используйте метод registerFileChooser() класса PyrusServiceDesk.
PyrusServiceDesk.registerFileChooser (chooser: (FileChooser & UIViewController)?)
Chooser — реализация интерфейса FileChooser. Для того, чтобы перестать использовать настроенный FileChooser, в метод нужно передать null.
FileChooser имеет параметр label, в котором должна храниться строка с названием соответствующего пункта меню, например, «Прикрепить файл», и параметр chooserDelegate, протокол типа FileChooserDelegate.
Objective-C:
В CustomViewController.h:
@import PyrusServiceDesk; @interface CustomViewController : UIViewController <FileChooser> @end
В CustomViewController.m:
#import "CustomViewController.h" @interface CustomViewController () @end @implementation CustomViewController @synthesize chooserDelegate; @synthesize label; //label необходимо задать при инициализации CustomViewController ... @end
Swift:
class CustomViewController: UIViewController, FileChooser{ var chooserDelegate: FileChooserDelegate? var label: String = "Отправить логи" ... }
CustomViewController может отсылать своему делегату (chooserDelegate):
- Сообщение об отмене. Закрывает CustomViewController.
Objective-C:
[self.chooserDelegate didEndWithCancel];
Swift:
self.chooserDelegate?.didEndWithCancel()
- Сообщение об успехе. Должно содержать данные и путь к ним. Закрывает CustomViewController и отправляет данные в виде вложения в чат.
Objective-C:
[self.chooserDelegate didEndWithSuccess:data url:url];
Swift:
self.chooserDelegate?.didEndWithSuccess(data, url: url) //data — данные, которые необходимо отправить в чат, а url — путь к ним.
Закрытие окна
Для принудительного закрытия окна чата используйте метод stop():
Swift : PyrusServiceDesk.stop() Objective-C: [PyrusServiceDesk stop];
Описание используемых типов и методов
Текущая версия 3.0.10 собрана с использованием Xcode 13.0, Swift 5.5.
PyrusServiceDesk
@objc public class PyrusServiceDesk: NSObject
Класс для создания чата в приложении.
createWith
@objc public func createWith(_ appId: String?)
Параметры
appID: | Используется для всех запросов. Если appId не задан, PyrusServiceDesk Controller не будет создан. |
createWith
@objc static public func createWith(_ clientId: String?, userId: String, securityKey: String)
Параметры
userID: | Строка ID пользователя во внешней системе. Не должен меняться у одного и того же пользователя. |
securityKey: | Строка, для аутентификации пользователя user_id во внешней системе. Может меняться у одного и того же пользователя, если внешняя система это позволяет. |
registerFileChooser
@objc public static func registerFileChooser(_ chooser: (FileChooser & UIViewController)?)
Параметры
chooser | UIViewController с расширением FileChooser. Запускает интерфейс для выбора файлов. Для отключения можно передавать null. |
setPushToken
@objc public static func setPushToken(_ token:String?, completion: @escaping(Error?) -> Void)
Отправляет идентификатор устройства на сервер.
Параметры
completion | Ошибка. Не nil, если всё прошло успешно. Чтобы разобраться, что случилось, проверьте error.localizedDescription. |
token | Строка с идентификатором устройства. |
start
@objcpublicstaticfunc start(on viewController:UIViewController, onStopCallback: OnStopCallback? = nil)
Показать чат.
Параметры
viewController | Представляет чат. |
onStopCallback: Объект OnStopCallback или nil. | Объект, который будет получать сообщения о том что чат был закрыт. |
start
@objcpublicstaticfunc start(on viewController:UIViewController, configuration:ServiceDeskConfiguration?, onStopCallback: OnStopCallback? = nil)
Показать чат.
Параметры
configuration | onStopCallback: Объект OnStopCallback или nil. Объект, который будет получать сообщения о том, что чат был закрыт. |
configuration | Объект ServiceDeskConfiguration или nil. ServiceDeskConfiguration — это объект, который создаёт внешний вид интерфейса: основной цвет, приветственное сообщение, аватар специалиста поддержки, заголовок окна с чатом. Если nil, используется стандартная конфигурация. |
viewController | Представляет чат. |
subscribeToReplies
@objc public static func subscribeToReplies(_ subscriber: NewReplySubscriber?)
Подписывает [subscriber] на уведомления о том, что в чате появились новые сообщения от поддержки.
unsubscribeFromReplies
@objc public static func unsubscribeFromReplies(_ subscriber: NewReplySubscriber?)
Отписывает [subscriber] от оповещений о новых сообщениях от поддержки в чате.
Вызывается, когда параметры securityKey и userID не прошли проверку валидности
ServiceDeskConfiguration
@objc class ServiceDeskConfiguration: NSObject
Класс для настройки оформления чата. Создать и настроить ServiceDeskConfiguration можно с помощью объекта ServiceDeskConfiguration.Builder.
ServiceDeskConfiguration.Builder
@objc(ServiceDeskConfigurationBuilder)public class Builder: NSObject
Вспомогательный класс для конструирования объектов типа ServiceDeskConfiguration, описывающих внешний вид чата.
setAvatarForSupport
@objc public func setAvatarForSupport(_ avatarForSupport: UIImage?) -> Builder
Аватар специалиста поддержки. Отображается, если у специалиста поддержки не установлен аватар в Pyrus.
setChatTitle
@objc public func setChatTitle(_ chatTitle: String?) -> Builder
Содержит текст для заголовка чата. По умолчанию используется «Поддержка».
setThemeColor
@objc public func setThemeColor(_ themeColor: UIColor?) -> Builder
Цвет чата. По умолчанию используется tintColor приложения; если и он не задан, то (red: 0, green: 0.4784313725, blue: 1, alpha: 1).
setUserName
@objc public func setUserName(_ userName: String?) -> Builder
Имя пользователя (клиента поддержки), которое специалист службы поддержки увидит в Pyrus. По умолчанию используется «Гость» или "Guest" в зависимости от локали. Если пользователь авторизовался в приложении, вы можете передавать имя, эл.почту и другие его данные в этот метод, чтобы оператор поддержки понимал, с кем общается, и быстрее решил вопрос.
setWelcomeMessage
@objc public func setWelcomeMessage(_ welcomeMessage: String?) -> Builder
Первое сообщение, которое пользователь видит в чате. Если текст не задан, чат будет отображаться без приветственного сообщения.
setChatTitleView
@objc public func setChatTitleView(_ chatTitleView: UIView?) -> Builder
Используется для создания кастомизированного внешнего вида заголовка чата.
setCustomRightBarButtonItem
@objc public func setCustomRightBarButtonItem(_ customRightBarButtonItem: UIBarButtonItem?) -> Builder
Изменяет правую кнопку в верхней панели управления.
setCustomLeftBarButtonItem
@objc public func setCustomLeftBarButtonItem(_ customLeftBarButtonItem: UIBarButtonItem?) -> Builder
Изменяет левую кнопку в верхней панели управления. Если кнопка задана, то закрыть окно чата будет нельзя.
setInfoView
@objc public func setInfoView(_ infoView: PSDInfoView?) -> Builder
Используется для показа информационного блока над чатом.
setStatusBarStyle
@objc(setStatusBarStyle: darkBarStyle:) public func setStatusBarStyle(_ barStyle: UIStatusBarStyle, _ darkBarStyle: UIStatusBarStyle) -> Builder
Задает внешний верхней панели управления.
setKeyboardAppearance
@objc(setKeyboardAppearance: darkKeyboardAppearance:) public func setKeyboardAppearance(_ keyboardAppearance: UIKeyboardAppearance, _ darkKeyboardAppearance: UIKeyboardAppearance)
Задаёт внешний вид клавиатуры.
setKeyboardColor
@objc public func setKeyboardColor(_ color: UIColor) -> Builder
Задаёт цвет поля для ввода сообщения.
setFontName()
@objc public func setFontName(_ fontName: String?) -> Builder
Задаёт кастомизированный шрифт для всех элементов чата.
setFontName
@objc public func setFontName(_ fontName: String?) -> Builder
Задаёт кастомизированный шрифт для всех элементов чата.
setUserTextColor
@objc public func setUserTextColor(_ color: UIColor?) -> Builder
Задаёт цвет текста сообщений от пользователя.
setUserMessageBackgroundColor
@objc public func setUserMessageBackgroundColor(_ color: UIColor?) -> Builder
Задаёт цвет фона сообщений от пользователя.
setSupportTextColor
@objc public func setSupportTextColor(_ color: UIColor?) -> Builder
Задаёт цвет текста сообщений от службы поддержки.
setSupportMessageBackgroundColor
@objc public func setSupportTextColor(_ color: UIColor?) -> Builder
Задаёт цвет фона сообщений от службы поддержки.
setChatTitleColor
@objc public func setChatTitleColor(_ color: UIColor?) -> Builder
Задаёт цвет заголовка экрана.
setToolbarStyle
@objc(setToolbarStyle: darkBarStyle:) public func setToolbarStyle(_ barStyle: UIBarStyle, _ darkBarStyle: UIBarStyle) -> Builder
Задаёт тему верхней панели управления.
setToolbarColor
@objc public func setToolbarColor(_ color: UIColor?) -> Builder
Задаёт цвет верхней панели управления.
setToolbarButtonColor
@objc public func setToolbarButtonColor(_ color: UIColor?) -> Builder
Задаёт цвет кнопки "Назад".
setBackgroundColor
@objc public func setBackgroundColor(_ color: UIColor?) -> Builder
Задаёт цвет окна, в котором расположен чат.
setAttachmentMenuTextColor
@objc public func setAttachmentMenuTextColor(_ color: UIColor?) -> Builder
Задаёт цвет кнопок в меню добавления файлов к сообщению. По умолчанию используется цвет, который был передан в setThemeColor().
setAttachmentMenuButtonColor
@objc public func setAttachmentMenuButtonColor(_ color: UIColor?) -> Builder
Задаёт цвет для кнопки в меню добавления файлов к сообщению. По умолчанию используется цвет, который был передан в setThemeColor().
setSendButtonColor
@objc public func setSendButtonColor(_ color: UIColor?) -> Builder
Задаёт цвет для кнопки отправки сообщения. По умолчанию используется цвет, который был передан в setThemeColor().
build
@objc public func build -> ServiceDeskConfiguration
Возвращает объект ServiceDeskConfiguration, который можно передать при запуске чата.
NewReplySubscriber
@objc public protocol NewReplySubscriber
Протокол для отправки оповещений о новых сообщениях.
onNewReply
@objcfunc onNewReply( hasUnreadComments: Bool, lastCommentText: String?, lastCommentAttachmentsCount: Int, lastCommentAttachments: [String]?, utcTime: Double )
Отправлено новое сообщение.
Параметры
hasUnreadComments: | Уведомление о новом сообщении в чате. |
lastCommentText: | Текст последнего непрочитанного сообщения. Возвращает значение nil, если новых сообщений нет. |
lastCommentAttachmentsCount: | Общее число приложенных к сообщению файлов. Возвращает значение nil если новых сообщений или приложенных файлов нет. |
lastCommentAttachments: | Список названий вложенных файлов. Возвращает значение nil, если новых сообщений или приложенных файлов нет. |
utcTime: | Время создания последнего непрочитанного сообщения в формате UTC. Возвращает значение nil, если новых сообщений нет. |
FileChooser
@objc public protocol FileChooser
Расширение для передачи файлов.
chooserDelegate
@objc var chooserDelegate : FileChooserDelegate? { get set }
Отправляет статусные сообщения о завершении.
label
@objc var label : String { get set}
Название пункта меню, которое видит пользователь.
FileChooserDelegate
@objc public protocol FileChooserDelegate
Отправляет статусные сообщения о завершении.
didEndWithSuccess
@objc func didEndWithSuccess(_ data : Data?, url : URL?)
Отправляет статус «Успешно».
Параметры
data | Данные вложения, которые нужно отправить в чат. Если пустое или nil, отобразится предупреждение об ошибке. |
url | Путь к файлу. |
didEndWithCancel
@objc func didEndWithCancel()
Отправляет статус «Отменено».
OnStopCallback
@objc public protocol OnStopCallback
Протокол для отправки оповещений о закрытии чата.
onStop
@objc func onStop()
Окно чата PyrusServiceDesk было закрыто.
Авторизационный веб-сервис
Получает вызов HTTP POST c параметрами:
- app_id: строка, создается Pyrus в настройках мобильного чата;
- user_id: строка до 100 символов, ID пользователя во внешней системе. Никогда не должен меняться. Не может совпадать у разных пользователей, в том числе бывших;
- security_key: строка до 100 символов, для аутентификации пользователя user_id во внешней системе. Логика формирования и использования security_key полностью отдается на ваше усмотрение. Не рекомендуем использовать без хеширования с солью пароли, секретные ключи и другие параметры, которые позволяют авторизоваться в мобильном приложении или дают доступ к каким-либо другим вашим системам.
Ожидаемый ответ:
- в случае успешной авторизации: HTTP 200 OK;
- в случае некорректно сформированного запроса (неправильные поля либо security_key неверного для вашей системы формата): HTTP 400 Bad Request;
- в случае неуспешной авторизации: HTTP 403 Forbidden.