@softomnitel/omnicall-kit 0.1.1 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/README.md +70 -15
  2. package/package.json +1 -10
package/README.md CHANGED
@@ -39,6 +39,7 @@ console.log(snapshot.revision);
39
39
  - [Основные понятия](#основные-понятия)
40
40
  - [Состояния и события](#состояния-и-события)
41
41
  - [API Reference](#api-reference)
42
+ - [Форматы успешных ответов](#форматы-успешных-ответов)
42
43
  - [Рецепты](#рецепты)
43
44
  - [Ошибки и FAQ](#ошибки-и-faq)
44
45
  - [Миграция и совместимость](#миграция-и-совместимость)
@@ -66,7 +67,7 @@ npm install @softomnitel/omnicall-kit
66
67
  закрытом npm registry:
67
68
 
68
69
  ```bash
69
- npm install @softomnitel/omnicall-kit@0.1.1
70
+ npm install @softomnitel/omnicall-kit@0.1.3
70
71
  ```
71
72
 
72
73
  Пакет ESM-only. Импортируйте его через `import`, а не `require`.
@@ -101,7 +102,7 @@ const client = createOmniCallClient({
101
102
  url: 'ws://127.0.0.1:17341/omnicall/v1/ws',
102
103
  origin: window.location.origin,
103
104
  application: { name: 'my-crm', version: '1.0.0' },
104
- sdkVersion: '0.1.1',
105
+ sdkVersion: '0.1.3',
105
106
  requestedProfile: 'call_controller',
106
107
  requestedCapabilities: [
107
108
  'session.read.redacted',
@@ -206,6 +207,61 @@ console.log(result.callId, result.revision);
206
207
  Не повторяйте автоматически `originate`, `hangup`, `logout` или
207
208
  `activateProfile` после reconnect. Эти действия могут сработать дважды.
208
209
 
210
+ ## Форматы успешных ответов
211
+
212
+ Асинхронная команда либо завершается типизированным успешным результатом, либо
213
+ отклоняет `Promise` с `OmniCallClientError`. Ошибка никогда не приходит как
214
+ частично успешный объект. Поле `revision` в успешном результате — версия Desktop
215
+ после команды; перед следующей мутацией всё равно получите свежий snapshot, если
216
+ события или другая вкладка могли изменить состояние.
217
+
218
+ | Команда | Успешный ответ | Как обрабатывать |
219
+ | --- | --- | --- |
220
+ | `calls.*` | `{ callId, revision }` | Команда принята для этого звонка. Фазу звонка показывайте по событию или snapshot, а не предполагаемому результату команды. |
221
+ | `operator.getReasons()` | `{ reasons: [{ id, label, kind }], revision }` | Фильтруйте по `kind`; в следующую команду передавайте выбранный числовой `id`. |
222
+ | `operator.changeStatus()` | `{ accepted: true, kind, targetStatus, reasonId, revision }` | Обязательно ветвитесь по `kind`: `applied` меняет статус сейчас, `reserved` только бронирует `targetStatus`/`reasonId` до конца обращения. |
223
+ | `operator.finishAppeal()` | Та же форма, что у `changeStatus()` | Разрешён только при `post_call_processing`; применяет бронь либо Desktop-default Ready. |
224
+ | `account.logout()` | `{ loggedOut: true, revision }` | Очищайте UI сессии после ответа/события или подтверждающего snapshot. `interaction_required` — это отклонение Promise, а не вариант успеха. |
225
+ | `account.activateProfile()` | `{ activated: true, mode, profileLabel?, alreadyAuthenticated?, revision }` | `alreadyAuthenticated: true` — успешный no-op. В ответе никогда нет пароля или ключа OCP. |
226
+ | `window.show()` / `hide()` / `getState()` | `{ visible, revision }` | Используйте фактическое `visible`; `show()` и `getState()` не требуют `expectedRevision`. |
227
+
228
+ ### Смена статуса и резервирование
229
+
230
+ `changeStatus()` — единственная публичная команда для намерения Ready/Break.
231
+ Не создавайте отдельный reserve API и не решайте на стороне CRM, занят ли оператор:
232
+ Desktop сам выбирает результат.
233
+
234
+ ```ts
235
+ const result = await client.operator.changeStatus({
236
+ target: 'break',
237
+ reasonId: 12,
238
+ expectedRevision: await getRevision()
239
+ });
240
+
241
+ if (result.kind === 'applied') {
242
+ // targetStatus применён сейчас; обновление UI всё равно подтвердят событие/snapshot.
243
+ } else {
244
+ // Бронь после текущего обращения: текущий статус-chip не становится Break.
245
+ // result.targetStatus и result.reasonId — забронированные значения.
246
+ }
247
+ ```
248
+
249
+ При `kind: 'reserved'` текущий публичный статус может остаться `unknown` во
250
+ время звонка или стать `post_call_processing` после него. Долгоживущую бронь
251
+ восстанавливайте только из свежего
252
+ `snapshot.sections.operator?.reservedTarget` /
253
+ `reservedReasonId` или `operator:status-changed`, особенно после reconnect.
254
+
255
+ Когда snapshot показывает `post_call_processing`, вызовите
256
+ `finishAppeal({ expectedRevision })`. Его успешный ответ имеет ту же форму:
257
+ `kind: 'applied'`, `targetStatus` и `reasonId` — значения, фактически применённые
258
+ Desktop. Вне post-call команда отклоняется `conflict`
259
+ (`failure_kind: 'not_in_post_call_processing'`); ждите корректный snapshot, а не
260
+ повторяйте запрос в цикле.
261
+
262
+ `error.details` остаётся расширяемым объектом. Не разбирайте его произвольные
263
+ поля: используйте type guard и `read*Details` из раздела API Reference.
264
+
209
265
  ## Состояния и события
210
266
 
211
267
  ### Состояния подключения
@@ -764,9 +820,9 @@ type HeartbeatPolicy = {
764
820
  Ниже перечислены все публичные экспорты пакета. Для структур сообщений протокола
765
821
  `SnapshotMessage`, `SnapshotSections`, `SnapshotCallSummary`,
766
822
  `ApplicationIdentity`, `CapabilityId`, `ProtocolErrorCode`,
767
- `PublicOperatorStatus` и `WireJsonObject` источником истины остаётся
768
- [`etc/api/sdk.api.md`](../../etc/api/sdk.api.md): они re-exported из протокольного
769
- пакета.
823
+ `PublicOperatorStatus` и `WireJsonObject` используйте TypeScript-типы из
824
+ `@softomnitel/omnicall-kit` и `@softomnitel/omnicall-protocol`: они
825
+ re-exported из протокольного пакета.
770
826
 
771
827
  | Группа | Экспорты |
772
828
  | --- | --- |
@@ -875,16 +931,15 @@ namespaces клиента.
875
931
  переименование или изменение смысла API требует новой major-версии. Не опирайтесь
876
932
  на недокументированные поля сетевых сообщений.
877
933
 
878
- Подробности: [upgrade-deprecation.md](../../docs/guide/upgrade-deprecation.md).
934
+ Правила для интегратора:
879
935
 
880
- ## Лицензия
936
+ 1. Используйте только публичные экспорты пакета `@softomnitel/omnicall-kit`.
937
+ 2. Игнорируйте неизвестные необязательные поля во входящих объектах.
938
+ 3. Не стройте логику на недокументированных wire-ключах.
939
+ 4. При `incompatible_version` остановите telephony UI и запросите обновление.
881
940
 
882
- В package.json указано UNLICENSED. Это не open-source лицензия: не предполагайте право на свободное распространение или изменение вне согласованного контура. Уточните условия у владельца пакета.
883
-
884
- ## Дополнительные материалы
941
+ ## Лицензия
885
942
 
886
- - [Отчёт аудита документации](../../docs/guide/README-AUDIT-RU.md)
887
- - [Полный API report, созданный API Extractor](../../etc/api/sdk.api.md)
888
- - [Подробный русскоязычный гайд](../../docs/guide/RU-DEVELOPER-GUIDE.md)
889
- - [Пример pairing CRM](../../examples/crm-pairing-lite/)
890
- - [Поддержка, релизы и откат](../../docs/guide/release-and-support.md)
943
+ В `package.json` указано `UNLICENSED`. Это не open-source лицензия: не
944
+ предполагайте право на свободное распространение или изменение вне согласованного
945
+ контура. Уточните условия у владельца пакета.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@softomnitel/omnicall-kit",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "description": "Browser client for OmniCall Desktop local protocol (OmniCallClient read path + call control)",
5
5
  "type": "module",
6
6
  "private": false,
@@ -33,14 +33,5 @@
33
33
  "publishConfig": {
34
34
  "access": "public",
35
35
  "provenance": false
36
- },
37
- "repository": {
38
- "type": "git",
39
- "url": "git+https://github.com/HailRase/omnicall-kit.git",
40
- "directory": "packages/sdk"
41
- },
42
- "homepage": "https://github.com/HailRase/omnicall-kit#readme",
43
- "bugs": {
44
- "url": "https://github.com/HailRase/omnicall-kit/issues"
45
36
  }
46
37
  }