Справка

Встраиваемый чат для мобильных приложений iOS

Облачный Pyrus
Безоблачный Pyrus

Программные средства разработки (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 не принимает самостоятельно, а спрашивает об этом специальный авторизационный сервис, который вам необходимо реализовать. Работает это так.

  1. Пользователь любым способом авторизуется в мобильном приложении и после этого получает от вашего бэкенда пару ( userID, securityKey). На этом этапе библиотека Pyrus Mobile Chat и бэкенд Pyrus не участвуют.

  2. При инициализации библиотеки Pyrus Mobile Chat значения userID и securityKey передаются как параметры.

  3. В дальнейшем при любом запросе в бэкенд Pyrus (например, при запросе истории переписки или при отправке комментария пользователя) библиотека Pyrus Mobile Chat автоматически передаёт в бэкенд Pyrus параметры (userID, securityKey).

    1. Перед обработкой запроса по существу бэкенд Pyrus проверяет права доступа, для этого передает пару (userID, securityKey) в ваш авторизационный веб-сервис.

    2. Авторизационный веб-сервис в коммуникации с вашим бэкендом проверяют, являются ли параметры (userID, securityKey) подлинными и передают результат проверки обратно в бэкенд Pyrus.

    3. Если разрешение от авторизационного сервиса получено, бэкенд 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):

  1. Сообщение об отмене. Закрывает CustomViewController.

Objective-C:

[self.chooserDelegate didEndWithCancel];

Swift:

self.chooserDelegate?.didEndWithCancel()
  1. Сообщение об успехе. Должно содержать данные и путь к ним. Закрывает 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)?)

Параметры

chooserUIViewController с расширением 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)

Показать чат.

Параметры

configurationonStopCallback: Объект 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.

Была ли эта статья полезной?