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

Как починить 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'
    

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