# Как починить click-to-call

**Для упрощения отладки опишем функционал набора номера по клику:**

1. Делаем вызов из Битрикса (кликаем на номер телефона в CRM).
2. Команда на выполнение звонка (originate) поступает на модуль.
3. Модуль составляет запрос и отправляет в Asterisk.
4. После этого звонит ваш ip-телефон или сипфон (номер, которого указан в профиле пользователя).
5. Когда пользователь поднимает трубку, звонок уходит на телефон клиента.

**Выполняем проверку следующих моментов:**

1. **Установлено ли** на портале **приложение**.\
   [Как установить](https://docs.itgrix.ru/how-to-fix/pages/-M0MCmZ0Tov0i9sSKevx#id-1.1.-ustanovka-prilozheniya)
2. **Запущен ли модуль** на сервере.\
   Проверить статус приложения можно с помощью [команд](/for-admins/poleznye-komandy.md).
3. **Внутренний номер в профиле** сотрудника на портале: **указан** и совпадает с тем, который заведен на телефонном аппарате (сип-фоне) пользователя.\
   [Настроить внутренние номера в профиле](https://docs.itgrix.ru/how-to-fix/pages/-M0MAS1SYZAQu981Rnrm#id-2.-nastroika-profilei-polzovatelei-bitriks24)
4. Если при исходящем звонке кликом вы слышите женский голос, который предлагает пополнить баланс телефонии Битрикс24, значит запрос с2с ушел не на приложение, а внутреннюю телефонию Битрикса.\
   \
   Для фикса **повторно выберите** Приложение “Интеграция с Asterisk - Itgrix” в качестве **"приложения по умолчанию для исходящих"**, в том числе у конкретного пользователя. Настройка этого этапа есть в [инструкции](https://docs.itgrix.ru/how-to-fix/pages/-M0MAS1SYZAQu981Rnrm#id-1.-zadat-prilozhenie-po-umolchaniyu-dlya-iskhodyashikh-zvonkov).
5. В коробочном битриксе **в закрытом контуре установлен обработчик**.

{% hint style="danger" %}
Если версия битрикс 23.300.0 и выше - нужен код описанный в [данной статье](/settings/click-to-call/osobennosti-nastroiki-posle-obnovleniya-bitriks24-23.300.0.md)
{% endhint %}

**Данный код актуален только для версий Битрикс24 до 23.300.0, в версиях выше его не должно быть в dbconn.php**

Проверяем, добавлен ли [код из инструкции по интеграции ](/settings/click-to-call.md)в файл dbconn.php

`if($_REQUEST['COMMAND'] === 'startCallViaRest' ||`\
`$_SERVER['REQUEST_URI'] === '/rest/voximplant.call.startViaRest.json') {`\
`define('BITRIXREST_URL', '#asterisk ip-address#:8077');`\
`}`

Где `#asterisk ip-address#` – адрес вашего Asterisk с установленным модулем.

6\. В консоли Asterisk проверяем, что **такой пир есть и он работает**.\
`asterisk -rx 'sip show peer 123'`\
где 123 – внутренний номер сотрудника.\
Если не работает, то проверить подключение аппарата пользователя к Asterisk.

7\. Убедимся, что **запрос доходит до модуля**.

Открываем лог модуля `/var/log/itgrix_bx.log`, перемещаемся в конец лога нажатием Shift+g, ищем снизу вверх по слову Originate, если запрос выполнился видим успешный ответ от Астериска:

```
?originate
{"_ts":"2022-07-26 13:01:03 +05:00","call_stage":"aster","command":"Originate","level":"info","msg":"Originate succeeded from: 101, to: 89021234567"}
```

* **Если ничего не найдено**, значит запрос на вызов вообще не поступил на модуль.
  * Тогда проверим, приходит ли запрос на сервер.\
    Запускаем tcpdump: `tcpdump port 8077`\
    После этого делаем вызов кликом из Битрикс24.
    * Если не появился вывод команды, то проблема может заключаться в следующем:
      * Не проброшен порт (модуль за NAT) либо проблема в с2с-сервере;
      * Б24 отправляет данные на другой адрес/порт – проверяем [настройки модуля](/settings/click-to-call.md);
      * Б24 не отправляет запрос;
    * Если ответ есть, значит запрос пришел на порт, но не был передан модулю.\
      Тогда проверяем настройки файервола.

{% hint style="info" %}
Если в лог приходит сообщение "User has no phone" значит у пользователя в Битрикс24 не указан внутренний номер в профиле пользователя.
{% endhint %}

**8. Если ответ на Originate приходит с ошибкой вида:**

```
{"_ts":"2022-07-27 15:34:46 +05:00","call_stage":"aster","command":"Originate",
"level":"info","msg":"Originate failed from: 101, to: 73431234567. 
AMI replied: Extension does not exist."}
```

Нужно проверить правильный ли технология, контекст указан в настройках модуля в разделе Asterisk, для этого узнаем какой контекст указан в настройках АТС у данного внутреннего номера:

```
asterisk -r
sip show peer 101              // если используется PJSIP - sip show endpoint 101
* Name       : 101
  Description  :
  Secret       : <Set>
  MD5Secret    : <Not set>
  Remote Secret: <Not set>
  Context      : from-internal // название контекста

```

{% hint style="info" %}
По умолчанию в настройках модуля (раздел Asterisk) указано использование протокола SIP, если у вас используется протокол PJSIP нужно указать это в строке Шаблон канала.
{% endhint %}

Выполнение Originate запросов можно проверить напрямую через консоль Астериска:

Пробуем выполнить Originate напрямую в Астериск, с полученными параметрами (звонок с 123 на 71234567890):\
`# asterisk -rvvvvv`\
`> channel originate SIP/123 extension 71234567890@from-internal`

В случае успеха будет следующий отклик:\
`== Using SIP RTP TOS bits 184`\
`== Using SIP RTP CoS mark 5`\
`-- Called 123`\
`-- SIP/123-00001a5e is ringing`

а) Если контекст указан неверный, увидим сообщение:\
`WARNING[9975][C-00004504]: pbx.c:4461 __ast_pbx_run: Channel 'SIP/123-00001a62' sent to invalid extension but no invalid handler: context,exten,priority=bad-context,71234567890,1`

б) Если отсутствует номер:\
`[2018-12-21 17:47:52] ERROR[10555]: chan_pjsip.c:2458 request: Unable to create PJSIP channel - endpoint '123' was not found`

в) Неверный тип канала:`[2018-12-21 17:47:37] WARNING[10527]: channel.c:6083 request_channel: No channel type registered for 'PSSIP'`

Если статья не помогла решить проблему, [обратитесь в техподдержку](/contacts.md).


---

# 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/how-to-fix/kak-pochinit-click-to-call.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.
