Skip to content

Commit d12570c

Browse files
committed
update for 1.1.0
1 parent 546d717 commit d12570c

15 files changed

Lines changed: 393 additions & 366 deletions
Binary file not shown.

README.md

Lines changed: 71 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -1,107 +1,104 @@
11
# UseDesk
22
[![Swift Package Manager](https://img.shields.io/badge/Swift_Package_Manager-compatible-orange?style=flat-square)](https://img.shields.io/badge/Swift_Package_Manager-compatible-orange?style=flat-square)
33

4-
5-
- [Добавление библиотеки в проект](#добавление-библиотеки-в-проект)
6-
- [Классы базы знаний](#классы-базы-знаний)
7-
- [Документация](#Документация)
8-
9-
104
# Добавление библиотеки в проект:
115

126
### Swift Package Manager
137

148
```swift
15-
.package(url: "https://github.com/usedesk/UseDeskSPM.git", from: "1.0.0")
9+
.package(url: "https://github.com/usedesk/UseDeskSPM.git", from: "1.1.0")
1610
```
1711

18-
## Подключение SDK
19-
20-
- Выполняем операцию инициализации чата параметрами без GUI:
21-
22-
| Переменная | Тип | Описание |
23-
| -------------| ------------- | ------------- |
24-
| CompanyID\* | String | Идентификатор компании. Как найти описано в [документации](https://docs.usedesk.ru/article/61) |
25-
| ChanelId\* | String | Идентификатор канала (добавлен в v1.1.5). Как найти описано в [документации](https://docs.usedesk.ru/article/10167) |
26-
| UrlAPI\* | String | Адрес API. Стандартное значение `secure.usedesk.ru/uapi` |
27-
| API Token\* | String | Личный API ключ |
28-
| Url\* | String | Адрес сервера в формате - pubsubsec.usedesk.ru |
29-
| Knowledge Base ID | String | Идентификатор базы знаний. Если не указан, база знаний не используется |
30-
| Email | String | Почта клиента |
31-
| Phone | String | Телефон клиента |
32-
| UrlToSendFile | String | Адрес для отправки файлов. Стандартное значение `https://secure.usedesk.ru/uapi/v1/send_file` |
33-
| Port | String | Порт сервера |
34-
| Name | String | Имя клиента |
35-
| NameOperator | String | Имя оператора |
36-
| FirstMessage | String | Автоматическое сообщение. Отправиться сразу после иницилизации от имени клиента |
37-
| Note | String | Текст заметки |
38-
| AdditionalFields | [Int : String] | Массив дополнительный полей в формате - id : "значение". Для текстовых полей значение - строка, для списка - строка с точно совпадающим значением списка, для флага - строка "false" или "true" |
39-
| AdditionalNestedFields | [[Int : String]] | Массив допл полей типа вложенный список. Каждый подмассив представляет один вложенный список. Формат фложенного списка - [id1: "значение", id2 : "значение", id3 : "значение"], где id1, id2, id3 идентификаторы значений по уровням вложенности |
40-
| AdditionalId | String | Дополнительный идентификатор клиента |
41-
| Token | String | Подпись, однозначно идентифицирующая пользователя и его чат на любых устройствах для сохранения истории переписки. (генерирует наша система, ограничение не меньше 64 символа) |
42-
| isSaveTokensInUserDefaults | Bool | Сохранять ли токен юзера ("Token", смотреть выше) в UserDefaults приложения. При занчении "True" позволяет не хранить токены в ваших системах, но он будет храниться только в текущем устройстве. Для доступа к переписке клиента с других устройств и платформ необходимо хранить токен в вашей системе и передавать его при инициализации. В этом случае значение параметра должно быть "False" |
43-
44-
\* - обязательный параметр
45-
46-
#### Пример:
12+
## Инициализация SDK
13+
14+
### Параметры, используемые в конфигурации SDK
15+
16+
Где * — обязательный параметр
17+
18+
| **Переменная** | **Тип** | **Описание** |
19+
| --- | --- | --- |
20+
| **CompanyID*** | String | **Идентификатор компании в Юздеске**<br/>[Как найти ID компании](https://docs.usedesk.ru/article/61) |
21+
| **ChannelID*** | String | **Идентификатор канала чата, через который в Юздеск будут поступать обращения из приложения**<br/>[Как создать и настроить канал](https://docs.usedesk.ru/article/858) |
22+
| **Url*** | String | **Адрес сервера для работы с чатами SDK**<br/>Стандартное значение: `pubsubsec.usedesk.ru`<br/>Если вы используете коробочную версию Юздеска на собственном сервере, то этот параметр у вас может отличаться. Уточните актуальный адрес у поддержки — support@usedesk.ru |
23+
| **Port** | String | **Порт сервера для работы с чатами SDK**<br/>Стандартное значение: `443` |
24+
| **UrlAPI*** | String | **URL для работы с API**<br/>Стандартное значение: `secure.usedesk.ru/uapi`<br/>Если вы используете коробочную версию Юздеска на собственном сервере, то этот параметр у вас будет отличаться. Уточните актуальный адрес у поддержки — support@usedesk.ru |
25+
| **API_token** | String | **Ключ для доступа к API Юздеска**<br/>[Как получить API ключ](https://docs.usedesk.ru/article/10167) |
26+
| **KnowledgeBaseID** | String | **Идентификатор базы знаний**<br/>[Как создать Базу знаний](https://docs.usedesk.ru/article/1678)<br/>**Если ID не указан, база знаний не используется** |
27+
| **UrlToSendFile** | String | **Адрес для отправки файлов**<br/>Стандартное значение: `https://secure.usedesk.ru/uapi/v1/send_file` |
28+
| **Name** | String | **Имя клиента** |
29+
| **Email** | String | **Почта клиента** |
30+
| **Phone** | String | **Телефон клиента** |
31+
| **Avatar** | Data? | **Изображение аватара клиента** |
32+
| **Token** | String | **Подпись, однозначно идентифицирующая пользователя и его чат**<br/>Токен выдается в коллбэке после инициализации чата и привязывается к связке почта-телефон-имя пользователя.<br/>Для идентификации различных пользователей на одном устройстве вы должны хранить и передавать полученный токен в метод инициализации |
33+
| **AdditionalId** | String | **Дополнительный идентификатор клиента** |
34+
| **Note** | String | **Текст заметки** |
35+
| **AdditionalFields** | [Int : String] | **Массив дополнительный полей запроса**<br/>Формат: `id : "значение"`<br/>Для текстовых полей значение - строка, для списка - строка с точно совпадающим значением списка, для флага - строка `false` или `true` |
36+
| **AdditionalNestedFields** | [[Int : String]] | **Массив дополнительных полей типа вложенный список**<br/>Каждый подмассив представляет один вложенный список. <br/>Формат вложенного списка: `[id1: "значение", id2 : "значение", id3 : "значение"]`, где `id1`, `id2`, `id3` — идентификаторы значений по уровням вложенности |
37+
| **FirstMessage** | String | **Автоматическое сообщение**<br/>Отправится сразу после инициализации от имени клиента |
38+
| **LocaleIdentifier** | String | **Идентификатор языка**<br/>Доступные языки: русский (`ru`), английский (`en`), португальский (`pt`), испанский (`es`). <br/>Если переданный идентификатор не поддерживается, будет использоваться русский язык |
39+
| **CustomLocale** | [String : String] | **Свой словарь переводов**<br/>Если SDK нужно показывать на языке, который мы не поддерживаем, можно самостоятельно создать словарь переводов и использовать его |
40+
| **isSaveTokensInUserDefaults** | Bool | **Флаг сохранения токена пользователя в UserDefaults приложения**<br/>Стандартное значение: `true`<br/>Если указан `true`, то токен будет храниться в текущем устройстве. Недостатки такого подхода — при переустановке приложения, смене устройства или платформы доступ к переписке будет утрачен. <br/>Для сохранения доступа к переписке клиента с других устройств и платформ, токен необходимо хранить в вашей системе и передавать его при инициализации. В этом случае нужно использовать значение параметра `false` |
41+
42+
43+
### Инициализация SDK
44+
4745
```swift
48-
class ViewController: UIViewController {
49-
50-
let usedesk = UseDeskSDK()
51-
52-
override func viewDidLoad() {
53-
super.viewDidLoad()
54-
usedesk.startWithoutGUI(companyID: "companyID",
55-
chanelId: "chanelId",
56-
urlAPI: "secure.usedesk.ru",
57-
knowledgeBaseID: "knowledgeBaseID",
58-
api_token: "api_token",
59-
email: "test@gmail.com",
60-
url: "pubsubsec.usedesk.ru",
61-
urlToSendFile: "https://secure.usedesk.ru/uapi/v1/send_file",
62-
port: "port number",
63-
name: "Name",
64-
operatorName: "NameOperator",
65-
firstMessage: "message",
66-
note: "Note text",
67-
additionalFields: [1 : "value"],
68-
additionalNestedFields: [[1 : "value1", 2 : "value2", 3 : "value3"]],
69-
additional_id: "additional_id",
70-
token: "Token",
71-
connectionStatus: { success, feedbackStatus, token in
72-
print(self.usedesk.historyMess)
73-
}, errorStatus: { _, _ in})
46+
let usedesk = UseDeskSDK()
47+
usedesk.start(
48+
companyID: "1234567",
49+
chanelId: "1234",
50+
url: "pubsubsec.usedesk.ru",
51+
port: "443",
52+
urlAPI: "pubsubsec.usedesk.ru",
53+
api_token: "143ed59g90ef093s",
54+
urlToSendFile: "https://secure.usedesk.ru/uapi/v1/send_file",
55+
knowledgeBaseID: "12",
56+
name: "Name",
57+
email: "lolo@yandex.ru",
58+
phone: "89000000000",
59+
avatar: avatarData,
60+
token: "Token",
61+
additional_id: "additional_id",
62+
note: "Note text",
63+
additionalFields: [1 : "value"],
64+
additionalNestedFields: [[1 : "value1", 2 : "value2", 3 : "value3"]],
65+
firstMessage: "message",
66+
localeIdentifier: "en",
67+
customLocale: customLocaleDictionary,
68+
isSaveTokensInUserDefaults: true,
69+
connectionStatus: {
70+
success, error in
7471
}
75-
}
72+
)
7673
```
7774

78-
### Блок возвращает следующие параметры:
75+
### Параметры, которые возвращает блок
7976

80-
#### СonnectionStatus:
77+
****СonnectionStatus****
8178

8279
| Тип | Описание |
83-
| ------------- | ------------- |
80+
| --- | --- |
8481
| Bool | Успешность подключения к чату |
8582
| UDFeedbackStatus | Статус показа формы обратной связи |
8683
| String | Токен пользователя |
8784

88-
#### ErrorStatus:
85+
****ErrorStatus****
8986

9087
| Тип | Описание |
91-
| ------------- | ------------- |
88+
| --- | --- |
9289
| UDError | Задокументированый тип ошибки |
93-
| UDFeedbackStatus | Описание ошибки |
90+
| String? | Описание ошибки |
9491

9592

96-
# Документация:
93+
## Документация:
9794

98-
Документация находится по адресу - http://sdk.usedocs.ru/
95+
Методы для работы с SDK и ошибки описаны в нашей документации: [http://sdk.usedocs.ru](http://sdk.usedocs.ru/)
9996

100-
## Author
97+
## Автор
10198

10299
Сергей, kon.sergius@gmail.com
103100

104-
## License
101+
## ****License****
105102

106-
UseDesk_SDK_Swift is available under the MIT license. See the LICENSE file for more info.
103+
UseDesk_SDK_Swift is available under the MIT license. See the LICENSE file for more info
107104

Sources/UseDesk/UDBaseArticle.swift

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import Foundation
1919

2020
@objc public enum OrderArticle: Int {
2121
case asc
22-
case desc
22+
case desc
2323
}
2424

2525
@objc public class UDArticle: NSObject {
@@ -35,7 +35,6 @@ import Foundation
3535
public var created_at: String = ""
3636

3737
init?(json: [String: Any]) {
38-
3938
guard
4039
let id = json["id"] as? Int,
4140
let title = json["title"] as? String,
@@ -50,8 +49,8 @@ import Foundation
5049
else { return nil }
5150

5251
self.id = id
53-
self.title = title
54-
self.text = text
52+
self.title = title.udRemoveSubstrings(with: ["<b>", "</b>"])
53+
self.text = text.udRemoveSubstrings(with: ["<b>", "</b>"])
5554
self.category_id = category_id
5655
self.collection_id = collection_id
5756
self.category_title = category_title
@@ -65,6 +64,11 @@ import Foundation
6564
}
6665
}
6766

67+
init(id: Int, title: String) {
68+
self.id = id
69+
self.title = title
70+
}
71+
6872
static func get(from jsonObject: Any) -> UDArticle? {
6973
guard let jsonObject = jsonObject as? [String: Any] else { return nil }
7074
if let article = UDArticle(json: jsonObject) {

Sources/UseDesk/UDBaseCollection.swift

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ import UIKit
5858
public var id: Int = 0
5959
public var imageUrl: String = ""
6060
public var image: UIImage? = nil
61-
public var сategories: [UDBaseCategory] = []
61+
public var categories: [UDBaseCategory] = []
6262
public var open: Bool = true
6363

6464
init?(json: [String: Any]) {
@@ -80,7 +80,7 @@ import UIKit
8080
}
8181
for categoryObject in categoriesArray {
8282
if let category = UDBaseCategory(json: categoryObject) {
83-
self.сategories.append(category)
83+
self.categories.append(category)
8484
}
8585
}
8686
}
@@ -98,5 +98,3 @@ import UIKit
9898
return collections
9999
}
100100
}
101-
102-

Sources/UseDesk/UDConfiguration.swift

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -25,18 +25,19 @@ let UD_STATUS_SEND_SUCCEED = 3
2525
let UD_AUDIOSTATUS_STOPPED = 1
2626
let UD_AUDIOSTATUS_PLAYING = 2
2727

28-
public typealias UDSStartBlock = (Bool, UDFeedbackStatus, String) -> Void
29-
public typealias UDSBaseBlock = (Bool, [UDBaseCollection]?) -> Void
30-
public typealias UDSArticleBlock = (Bool, UDArticle?) -> Void
31-
public typealias UDSArticleSearchBlock = (Bool, UDSearchArticle?) -> Void
32-
public typealias UDSConnectBlock = (Bool) -> Void
33-
public typealias UDSNewMessageBlock = (UDMessage?) -> Void
34-
public typealias UDSErrorSocketBlock = ([Any]?) -> Void
35-
public typealias UDSErrorBlock = (UDError, String?) -> Void
36-
public typealias UDSFeedbackMessageBlock = (UDMessage?) -> Void
37-
public typealias UDSFeedbackAnswerMessageBlock = (Bool) -> Void
38-
public typealias UDSVoidBlock = () -> Void
39-
public typealias UDSProgressUploadBlock = (Progress) -> Void
28+
public typealias UDStartBlock = (Bool, UDFeedbackStatus, String) -> Void
29+
public typealias UDBaseBlock = (Bool, [UDBaseCollection]?) -> Void
30+
public typealias UDArticleBlock = (Bool, UDArticle?) -> Void
31+
public typealias UDArticleSearchBlock = (Bool, UDSearchArticle?) -> Void
32+
public typealias UDConnectBlock = (Bool) -> Void
33+
public typealias UDNewMessageBlock = (UDMessage?) -> Void
34+
public typealias UDNewMessagesBlock = ([UDMessage]) -> Void
35+
public typealias UDErrorBlock = (UDError, String?) -> Void
36+
public typealias UDFeedbackMessageBlock = (UDMessage?) -> Void
37+
public typealias UDFeedbackAnswerMessageBlock = (Bool) -> Void
38+
public typealias UDVoidBlock = () -> Void
39+
public typealias UDProgressUploadBlock = (Progress) -> Void
40+
public typealias UDValidModelBlock = (UseDeskModel) -> Void
4041

4142
@objc public enum UDFeedbackStatus: Int {
4243
case null
@@ -53,10 +54,6 @@ public typealias UDSProgressUploadBlock = (Progress) -> Void
5354
}
5455
}
5556

56-
protocol UDUISetupable {
57-
func setupUI()
58-
}
59-
6057
@objc public protocol UDStorage {
6158
func getMessages() -> [UDMessage]
6259
func saveMessages(_ messages: [UDMessage])
@@ -72,21 +69,29 @@ public struct UseDeskModel {
7269
var urlWithoutPort = ""
7370
var urlAPI = ""
7471
var knowledgeBaseID = ""
72+
var knowledgeBaseSectionId: Int = 0
73+
var knowledgeBaseCategoryId: Int = 0
74+
var knowledgeBaseArticleId: Int = 0
75+
var baseSections: [UDBaseCollection] = []
7576
var api_token = ""
7677
var port = ""
7778
var name = ""
78-
var operatorName = ""
79+
var avatar: Data? = nil
80+
var nameOperator = ""
81+
var nameChat = ""
7982
var firstMessage = ""
8083
var note = ""
8184
var token = ""
8285
var additional_id = ""
86+
var localeIdentifier = ""
8387
var additionalFields: [Int : String] = [:]
8488
var additionalNestedFields: [[Int : String]] = []
8589
var idLoadingMessages: [String] = []
8690
var isSaveTokensInUserDefaults = true
91+
var isOnlyKnowledgeBase = false
8792
// Lolace
8893
var locale: [String:String] = [:]
89-
94+
9095
func stringFor(_ key: String) -> String {
9196
if let word = locale[key] {
9297
return word

0 commit comments

Comments
 (0)