# Как мигрировать заявки из Omnidesk в Swarmica
:::danger
Данная инструкция работает в Swarmica версии 5.11 и выше! [Инструкции по обновлению](https://support.swarmica.com/category/14).
:::

:::caution
Рекомендации:

*   Скрипт умеет объединять повторяющихся клиентов и агентов, однако во избежание потенциальных проблем и несоответствий рекомендуется производить миграцию из Omnidesk на "чистую" установку Swarmica.&#x20;
*   Удостоверьтесь, что лицензия Swarmica позволяет создать соответствующее количество Администраторов и Агентов. Скрипт переносит всех сотрудников по схеме:&#x20;
    Администратор Omnidesk -> Администратор Swarmica&#x20;
    Сотрудник Omnidesk -> Агент Swarmica
:::

# Инструкция

Скрипты, используемые в этой инструкции берут данные о заявках (с комментариями и вложениями), клиентах, компаниях и сотрудниках из Omnidesk и импортируют эти данные в Swarmica.

0\. Отключите почту: в **Swarmica - Настройки - Настройки Swarmica** переключите **Email** конфигурация на **Файл**.&#x20;

:::danger
Если этого не сделать, по всем мигрированным тикетам уйдут письма клиентам!
:::

1\. Авторизуйтесь в Swarmica как Администратор.

2\. Добавьте новый скрипт в **Swarmica - Настройки - Скрипты**

3\. Загрузите скрипт [prefetch\_tickets.py](https://support.swarmica.com/attachments/5/M/5MP7g-D33JJ3drkK_a/prefetch_tickets.py) и добавьте следующие Параметры веб-формы и нажмите **Сохранить**:

```yaml
[
  {
    "name": "omnidesk_url",
    "type": "string",
    "required": true,
    "displayName": "Omnidesk URL"
  },
  {
    "name": "omnidesk_user",
    "type": "string",
    "required": true,
    "displayName": "API Пользователь Omnidesk"
  },
  {
    "name": "omnidesk_token",
    "type": "string",
    "required": true,
    "displayName": "API токен"
  },
  {
    "name": "omnidesk_delay",
    "type": "number",
    "required": true,
    "displayName": "Таймаут API запроса(10 с. по умолчанию)"
  },
  {
    "name": "date_from",
    "type": "date",
    "required": true,
    "displayName": "Дата с"
  },
  {
    "name": "date_to",
    "type": "date",
    "required": true,
    "displayName": "Дата по"
  }
]
```

Выглядеть это должно вот так:

![](https://support.swarmica.com/attachments/R/7/R7yvSsh7g247o-1W_a/изображение.png)

здесь:

**Omnidesk URL** - URL панели Omnidesk. Например, https://domain.omnidesk.tld

**API Пользователь Omnidesk** - логин(email) администратора Omnidesk

**API Токен** - сгенерированный API токен

**Задержка для API запроса(10 с. по умолчанию)** - промежуток времени между API запросами(по умолчанию 10 сек.)

**Дата с** - дата создания заявок, с которой будет производится выборка

**Дата по** - дата создания заявок, до которой будет производится выборка

4\. В панели администратора Omnidesk создайте [API токен](https://omnidesk.ru/api/introduction/authentication), заполните поля веб-формы и нажмите Отправить.

Как результат, в контейнере swarmica-django-1 будет создана директория /swarmica/swarmica/uploads/omnidesk\_migration со следующей структурой:

```bash
└── omnidesk_migration
    ├── {case1_id}
    │   ├── {attachment1_id}.data
    │   ├── {attachment2_id}.data
    │   ├── attachments.json
    │   ├── comments.json
    │   └── ticket.json
    ├── {case2_id}
    │   ├── comments.json
    │   └── ticket.json    
    ├── companies.json
    ├── omnidesk_to_swarmica.log
    ├── staff.json
    └── users
        ├── {user_id}.json
```

5\. Создайте резервную копию Swarmica по [этой инструкции](https://support.swarmica.com/article/ru/408-rezervnoe-kopirovanie-i-vosstanovlenie-swarmica-na-svoem-oborudovanii.html). Данный пункт можно пропустить, если миграция производится на чистую установку Swarmica.

6\. Создайте скрипт в **Swarmica - Настройки - Скрипты.** Загрузите скрипт [convert\_import\_omnidesk.py](https://support.swarmica.com/attachments/P/a/PaIk0ZeXlkIGxvlr_a/convert_import_omnidesk.py) и добавьте следующие Параметры веб-формы и нажмите **Сохранить**:

```yaml
[
  {
    "name": "omnidesk_data_path",
    "type": "string",
    "required": false,
    "displayName": "Путь к папке с данными (omnidesk_migration)"
  },
  {
    "name": "force_use_existing_users",
    "type": "boolean",
    "required": false,
    "displayName": "Принудительно привязывать пользователей при конфликте ext_id"
  },
  {
    "name": "force_use_existing_orgs",
    "type": "boolean",
    "required": false,
    "displayName": "Принудительно привязывать организации при конфликте ext_id"
  }
]
```

Выглядеть это должно вот так:

![](https://support.swarmica.com/attachments/s/P/sPujsIKIzEBccCHI_a/изображение.png)

Поле **Путь к папке с данными (omnidesk\_migration)** можно оставить пустым, если данные полученные в шаге 4 не перемещались.

7\. Нажмите **Отправить**

В результате скрипт сконвертирует данные из полученных данных и импортирует их в Swarmica в виде заявок, пользователей, клиентов и организаций.

8\. Создайте скрипт в **Swarmica - Настройки - Скрипты.** Загрузите скрипт [post\_migration.py](/attachments/8/h/8huFkb3KXVq_LBse_a/post_migration.py), добавьте следующие **Параметры веб-формы** и нажмите **Сохранить**:

```yaml
[
  {
    "name": "omnidesk_data_path",
    "type": "string",
    "required": false,
    "displayName": "Путь к папке с данными (omnidesk_migration)"
  }
]
```

Выглядеть должно вот так:

![](https://support.swarmica.com/attachments/k/W/kWEjRNVGAwlX6js6_a/изображение.png)

9\. Нажмите **Отправить**

В результате произойдет пост-обработка заявок в виде создания внутренних соответствующих тасок для статусов.

10\. Включите почту в **Swarmica - Настройки - Настройки Swarmica** переключите **Email** конфигурация на **SMTP**.

### Траблшутинг

Для прерывания и повторного запуска скрипта перезапустите celeryworker контейнер:

```bash
docker compose up -d --scale celeryworker=0; docker compose up -d
```

&#x20;в логах можно отследить процесс и что пошло не так:

```bash
docker logs swarmica-celeryworker-1 2>&1 | grep "Omnidesk import:" > script.log
```