> For the complete documentation index, see [llms.txt](https://itgro-aly.gitbook.io/test-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://itgro-aly.gitbook.io/test-docs/obrabotka-zvonkov-za-period.md).

# obrabotka zvonkov za period

{% hint style="info" %}
Начиная с версии 3.13.0 (itgrix\_bx) и 3.1.0 (itgrix\_amo) у модуля используется SQLite база данных `state.db` для записи состояния обработки звонков, поэтому перед обработкой звонка нужно удалить сведения о нем из данной базы. Можно использовать команду:\
`delete from calls where linkedid='1740643771.7533';`
{% endhint %}

{% hint style="warning" %}
Если по какой-то причине база данных модуля `state.db` была повреждена, нужно очистить её запуском команды\
\
`/opt/itgrix_bx/itgrix_bx --clean`<br>

В случае если была очищена БД Asterisk, в базе модуля нужно очистить last id (id с которого модуль будет читать события в базе телефонии) командой\
\
`/opt/itgrix_bx/itgrix_bx --clean --cleanlist i`\
\
Список всех команд можно посмотреть командой<br>

`/opt/itgrix_bx/itgrix_bx --help`
{% endhint %}

## Запрос API модуля Itgrix

Если по каким-то причинам модуль Itgrix был отключен, или если при первой установке есть желание обработать уже прошедшие звонки, то можно воспользоваться специальным запросом `/pbx/read_call` в API модуля Itgrix. С его помощью можно запустить обработку определённых звонков.

{% hint style="info" %}
Запрос `/pbx/read_call` поддерживается начиная с версий [Itgrix\_bx 3.3.3](file:///1659967/changelog-bx.md#3.3.3) (Битрикс24) и [Itgrix\_amo 2.5.2](file:///1659967/changelog-amo.md#2.5.2) (amoCRM).
{% endhint %}

Например, можно сделать запрос с помощью `curl` (здесь `<Asterisk IP>` - это адрес сервера, на котором установлен модуль Itgrix, login:password - логин:пароль для админки модуля интеграции):

```
curl --digest -u login:password "<Asterisk IP>:8077/pbx/read_call?<параметры>"
```

У метода есть два варианта использования параметров:

* указать один или несколько идентификаторов звонка `id`;
* указать дату начала периода `start_date` и (опционально) дату окончания `end_date`\
  (в этом случае модуль находит все **записи** CEL в указанных датах, берёт из них `linkedid` и обрабатывает **звонки** уже по ID).

{% hint style="info" %}
Запрос`/pbx/read_call` с указанием периода поддерживается начиная с версий [Itgrix\_bx 3.4.0](file:///1659967/changelog-bx.md#3.4.0) (Битрикс24) и [Itgrix\_amo 2.6.0](file:///1659967/changelog-amo.md#2.6.0) (amoCRM).

В предыдущих версиях запрос поддерживает только параметр `id`. Для таких версий поддерживается специальный скрипт (см. [раздел ниже](broken://pages/e52de4796bd213c51321b35e6cf028ef80aa9fb4#skript-dlya-starykh-versii-modulya)).
{% endhint %}

### Использование ID звонка

Если требуется обработать один звонок, то проще всего сделать GET-запрос с параметром `id`:

```
curl --digest -u login:password "<Asterisk IP>:8077/pbx/read_call?id=1234567890.1"
```

Если требуется обработать несколько звонков, то можно через POST-запрос передать JSON-объект с массивом `id` :

```
curl --digest -u login:password "<Asterisk IP>:8077/pbx/read_call" \
-H "Content-Type: application/json" \
-d '{"id":["1111111111.1", "2222222222.2"]}'
```

### Использование границ периода

Границы периода определяются параметрами `start_date` и `end_date` . При этом параметр `end_date` опциональный, т.е. его можно не указывать, и в таком случае модуль обработает все звонки, начиная с `start_date`.

Параметры могут быть указаны в трёх видах:

* **Дата-время в формате `ГГГГ-ММ-ДД чч:мм:сс`**.\
  При отправке GET-запроса с таким параметром нужно заменить пробел на специальную последовательность `%20`, при отправке POST-запроса с параметрами в формате JSON это не требуется.\
  Например, обработаем звонки за 25 мая 2021 с 10:30 до 22:00:

  ```
  curl --digest -u login:password "<Asterisk IP>:8077/pbx/read_call?\
  start_date=2021-05-25%2010:30:00&\
  end_date=2021-05-25%2022:00:00"
  ```
* **Метка времени в формате UNIX-time** (можно получить [из ID звонка, - это число до точки](https://wiki.asterisk.org/wiki/display/AST/Using+the+CONTEXT%2C+EXTEN%2C+PRIORITY%2C+UNIQUEID%2C+and+CHANNEL+Variables); например, в звонке 1267568856.11 число 1267568856 является меткой времени).\
  Например, обработаем звонки с 27 мая 2021 06:01:59 GMT, т.е. UNIX-time 1622138519:

  ```
  curl --digest -u login:password "<Asterisk IP>:8077/pbx/read_call?start_date=1622138519"
  ```
* **Количество дней назад (отрицательное целое число).**\
  Например, обработать звонки за позавчера:

  ```
  curl --digest -u login:password "<Asterisk IP>:8077/pbx/read_call?start_date=-2&end_date=-1"
  ```

  Пример обработки звонков за неделю:

  ```
  curl --digest -u login:password "<Asterisk IP>:8077/pbx/read_call?start_date=-7"
  ```

  Также есть специальный вариант `start_date=-0` - обработка звонков за сегодня (с полуночи по местному времени):

  ```
  curl --digest -u login:password "<Asterisk IP>:8077/pbx/read_call?start_date=-0"
  ```

### Сброс состояний выбранных шагов одного звонка для повторной обработки .

Если нужно повторно пройти отдельные стадии обработки одного звонка, можно воспользоваться запросом `/crm/reset_state`

`call_id` - указываем ID звонка

`operations` - указываем операции для сброса в формате "шаг" или "шаг.операция"

Список шагов/операций:

```
1_find_entity
2_create_entity
3_create_deal
4_show_call_card
5_hide_call_card
6_update_responsible
7_create_call
    attach record
    update activity
    update entity
8_close_tasks
9_create_task
```

Пример запроса, который сбросит шаги 7 (прикрепление записи) и 8 (закрытие задач)

```
curl "<Asterisk IP>:8077/crm/reset_state"\
-H "Content-Type: application/json" \
-d '{"call_id":"1234567.890","operations":["7_create_call.attach record","8_close_tasks"]}' \
--digest -u admin:123
```

## Скрипт для старых версий модуля

{% hint style="info" %}
Скрипт использует запрос API модуля Itgrix `/pbx/read_call`с параметром `id`, который поддерживается, начиная с версий [Itgrix\_bx 3.3.3](file:///1659967/changelog-bx.md#3.3.3) (Битрикс24) и [Itgrix\_amo 2.5.2](file:///1659967/changelog-amo.md#2.5.2) (amoCRM).
{% endhint %}

Нужно войти в систему (сервер), на которой установлен модуль Itgrix, скачать и запустить скрипт.

Скачать скрипт для Битрикс24:

```
curl -OJ "https://bx24asterisk.ru/download/get_read_calls_script.php?crm=bx"
```

Скачать скрипт для amoCRM:

```
curl -OJ "https://bx24asterisk.ru/download/get_read_calls_script.php?crm=amo"
```

**Использование:**

{% hint style="info" %}
Рассмотрим запуск на примере скрипта `read_calls_bx.php` для Битрикс24.\
Для amoCRM всё то же самое, но скрипт называется `read_calls_amo.php`.
{% endhint %}

* `php read_calls_bx.php <дата-время начала> <дата-время конца>` - обычное использование; по умолчанию URL модуля Itgrix будет получен из конфигурационного файла;
* `php read_calls_bx.php <дата-время начала> <дата-время конца> <URL модуля>` - если нужно указать нестандартный URL модуля Itgrix; ОБЯЗАТЕЛЬНО задавать со схемой (http\:// или `https://`);
* `php read_calls_bx.php --help` - для вывода справки.

**Примеры:**

```
php read_calls_bx.php '2021-04-12 16:07:00' '2021-04-20 16:09:00'
```

```
php read_calls_bx.php '2021-04-12 16:07:00' '2021-04-20 16:09:00' \
'http://<Asterisk IP>:8077'
```

### Скрипт без php-mysqli

По умолчанию скрипт использует **php-mysqli** для запроса в БД. Если по каким-то причинам php-mysqli недоступен, то можно воспользоваться **CLC-версией (MySQL Command-Line Client)** скрипта.

Скачать CLC-скрипт для Битрикс24:

```
curl -OJ "https://bx24asterisk.ru/download/get_read_calls_script.php?crm=bx&type=clc"
```

Скачать CLC-скрипт для amoCRM:

```
curl -OJ "https://bx24asterisk.ru/download/get_read_calls_script.php?crm=amo&type=clc"
```

Запуск такой же, как и для обычной (mysqli) версии скрипта кроме названия файла:

* `read_calls_bx_clc.php` для Битрикс24;
* `read_calls_amo_clc.php` для amoCRM.
