К списку статей

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

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

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

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

  1. Установлено ли на портале приложение.
  2. Запущен ли модуль на сервере.
  3. Внутренний номер в профиле сотрудника на портале: указан и совпадает с тем, который заведен на телефонном аппарате (сип-фоне) пользователя.
  4. Приложение “Интеграция с Asterisk” выбрано в качестве “приложения по-умолчанию” для исходящих: на портале идём Телефония → Настройки телефонии → Общие настройки, в поле “Номер для исходящего звонка по-умолчанию” указано: “Приложение: Интеграция с Asterisk”.
    В том числе у конкретного пользователя: Телефония → Пользователи. Настройка этого этапа есть в инструкции
  5. В коробочном битриксе установлен обработчик.
    Проверяем, добавлен ли код из инструкции по интеграции в файл 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 - внутренний номер сотрудника
  7. Убедимся, что запрос доходит до модуля.
    Открываем лог модуля /var/log/bx24asterisk.log, либо через админку модуля *asterisk-ip:8077/config/#logs *, где asterisk-ip - адрес сервера с модулем.
    Делаем поиск по событию “onExternalCallStart” (Ищем последний). Например, так: grep "onExternalCallStart" /var/log/bx24asterisk.log --max-count=1 Вывод: [2018-12-21 16:45:28.520 +05] debug Start onExternalCallStart event received from user [504] to phone [81234567890]
  • Если ничего не найдено, значит запрос на вызов вообще не поступил на модуль. Тогда проверим, приходит ли запрос на сервер.
    Запускаем tcpdump: tcpdump port 8077 После этого делаем вызов кликом из Битрикс24.
    Если не появился вывод команды, то проблема может заключаться в следующем:
    • Не проброшен порт (модуль за NAT)
    • Б24 отправляет данные на другой адрес/порт
    • Б24 не отправляет запрос

      Если ответ есть:
      Проверяем настройки файервола
  • Если найдено: grep "Result of originate params customization" /var/log/bx24asterisk.log Пример ответа: [2018-12-21 16:41:18.202 +05] debug Result of originate params customization: QHash((caller_id, Звонок на 81234567890 <81234567890>)(extension, 81234567890)(priority, 1)(context, from-internal)(channel, SIP/123))
    Пробуем выполнить Originate напрямую в Астериск, с полученными параметрами (звонок с 123 на 81234567890):
    # asterisk -rvvvvv  
    > channel originate SIP/123 extension 81234567890@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,81234567890,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'
    

Если статья не помогла решить проблему, обратитесь в техподдержку.