# Обработка звонков за период

{% 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](https://docs.itgrix.ru/for-admins/pages/-M0SZwZn5pERjpAzqeP-#3.3.3) (Битрикс24) и [Itgrix\_amo 2.5.2](https://docs.itgrix.ru/for-admins/pages/-MFFgLMt-w7Eq-gUqvP2#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](https://docs.itgrix.ru/for-admins/pages/-M0SZwZn5pERjpAzqeP-#3.4.0) (Битрикс24) и [Itgrix\_amo 2.6.0](https://docs.itgrix.ru/for-admins/pages/-MFFgLMt-w7Eq-gUqvP2#2.6.0) (amoCRM).

В предыдущих версиях запрос поддерживает только параметр `id`. Для таких версий поддерживается специальный скрипт (см. [раздел ниже](#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](https://docs.itgrix.ru/for-admins/pages/-M0SZwZn5pERjpAzqeP-#3.3.3) (Битрикс24) и [Itgrix\_amo 2.5.2](https://docs.itgrix.ru/for-admins/pages/-MFFgLMt-w7Eq-gUqvP2#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.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.itgrix.ru/for-admins/obrabotka-zvonkov-za-period.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
