Asterisk (PBX) (Private Branch Exchange) – открытая коммуникационная платформа, используемая для внедрения программных АТС, систем голосовой связи, VoIP-шлюзов, IVR-систем (интерактивное голосовое меню), голосовой почты, телефонных конференций и call-центров.
На основе этой технологии работает много телефоний, которые вы можете подключить к KeyCRM, чтобы:
- совершать звонки с CRM и обрабатывать входящие;
 - видеть, кто вам звонит, если покупатель уже есть в системе;
 - создавать покупателей, заказы или заявки прямо с карточки звонка;
 - видеть всю историю вызовов с записями разговоров.
 
Шаг 1. Создаем канал телефонии в KeyCRM
Перейдите в «Настройки» → «Коммуникации» → вкладка «Телефония» и нажмите кнопку «Добавить новую службу».
В появившемся окне на вкладке «Основные»:
- Название – ведите название телефонии;
 - Сервис телефонии – выберите «Other».
 - Ссылка для инициализации звонка — URL создается на стороне телефонии. После начала звонка менеджером в CRM, на него будет отправлен POST запрос в формате json;
 - Ссылка для завершения звонка — URL создается на стороне телефонии. На него будет отправлен POST запрос в формате json, когда менеджер завершит звонок с карточки звонка в CRM. 
Если не указать, то в карточке звонка НЕ будет кнопки для завершения вызова и его нужно завершать напрямую через IP телефон, софтфон и т.д.; - Ссылка на Webhook — ссылка на которую телефония должна отправлять запросы с информацией по звонкам в CRM. Скопируйте её для дальнейших настроек на стороне телефонии;
 - Использовать deep link — активируйте, только если вы используете софтфон, поддерживающий эту технологию;
 - Связь с воронками – включите и выберите значение:
• Нет — карточки НЕ будут создаваться автоматически;
• Одноразовый — карточки будут созданы только один раз при условии, что еще нет карточки с этим номером;
• Повторяющийся — карточки будут создаваться всегда при повторных звонках при условии, что у номера нет карточки в рабочих статусах (все статусы кроме успешного и отклоненных). - Тип звонка — выберите тип звонков с которых будут создаваться карточки: только входящие, только исходящие или все — входящие и исходящие;
 - Воронка — укажите воронку для создания карточек. Если у вас только одна воронка, она выбирается автоматически, а самого поля с выбором не будет;
 - Источник — выберите источник, с которым будет создаваться карточка. Если не выбрать – карточка создается с пустым значением в поле источника.
 

Как работает функция deep link
Deep link – функция, которая сразу совершает звонок в программе по умолчанию на устройстве.
Особенности работы:
- Если у вас на устройстве приложение по умолчанию для звонков софтфон, он активен и в настройках телефонии активирована функция deep link: когда вы нажимаете «Позвонить» в CRM – открывается сразу это приложение для совершения звонка клиенту.
 - Использование deep link нужно активировать только при использовании софтфона, который поддерживает эту технологию (например, MicroSIP или платный Zoiper). Если не уверены, можете протестовать. Сначала активируйте, если исходящие вызовы с CRM не будут работать, то деактивируйте.
 - Если отключить deep link - вызов будет происходить через телефонию. Сначала CRM отправит в телефонию запрос на начало звонка, телефония получив его совершит вызов на софтфон или IP телефон менеджеру, менеджер поднимает трубку и начинается соединение с клиентом.
 - IP телефоны функцию deep link не поддерживают, поэтому при работе с ними она должна быть выключена.
 
Шаг 2. Подключение номеров
В открывшемся окне настроек перейдите на вкладку «Номера пользователей» и заполните данные:
- Внутренний номер — номер внутренней линии телефонии;
 - Менеджер — пользователь CRM, который соответствует этому номеру.
 
В списке для выбора будут пользователи, которым предоставлен доступ к телефонии.

После внесенной информации обязательно сохраните канал и переходите к следующему шагу.
Шаг 3. Настройка на стороне телефонии
KeyCRM принимает информацию о вызовах из телефонии и отображает ее внутри системы. Поэтому необходимо реализовать передачу данных из телефонии в CRM.
Все запросы нужно передавать методом POST в формате json, описание параметров:
| Параметр | Тип данных | Обязательно | Описание | 
| action | string | да | 
  | 
| call | objects | да | объект с подробной информацией по звонку, включает параметры: | 
| id | string | да | уникальный идентификатор звонка, генерируемый на стороне телефонии | 
| direction | string | да | 
 направление звонка: 
  | 
| destination_number | string | да | 
 всегда номер телефона клиента  | 
| caller | string | да | всегда номер внутренней линии менеджера из телефонии | 
| state | string | да | 
 статус звонка: 
  | 
| duration | int | нет | продолжительность звонка в секундах, нужно передавать только после завершения звонка | 
| audio_url | string | нет | ссылка на аудиозапись звонка в телефонии, нужно передавать только после завершения звонка | 
Пример запроса для сохранения звонка:
{
  "action": "call",
   "call": {
      "id": "1233123",  
      "direction": "outgoing", 
      "destination_number": "380730000001",
      "caller": "301",
      "state": "started", 
      "duration": 5666, 
      "audio_url": "https://google.mp3" 
   }
}
Примеры сценариев работы интеграции
1. Исходящий вызов при выключенном deep link
- Менеджер нажимает на «Позвонить» в CRM;
 - CRM отправляет POST запрос в формате json на ссылку указанную в настройках телефонии «Ссылка для инициализации звонка»:
 
{
  "caller": "333", // номер внутренней линии менеджера, который инициировал звонок
  "destination_number": "380730000001"  // номер телефона клиента
}
- Телефония принимает запрос и инициирует вызов на своей стороне. И отправляет запрос начала звонка в CRM на Webhook, указанный в настройках телефонии:
 
{
  "action": "call",
   "call": {
      "id": "1233123",  
      "direction": "outgoing", 
      "destination_number": "380730000001",
      "caller": "333",
      "state": "started"
   }
}
- После поднятия трубки телефония отправляет в CRM тот же запрос, но со статусом звонка answered.
 - После завершения звонка телефония отправляет в CRM такой же запрос, но со статусом звонка completed и дополнительными параметрами: duration и audio_url.
 
2. Входящий звонок
- При поступлении входящего вызова телефония отправляет сразу в CRM POST запрос начала входящего вызова в формате json на Webhook, указанный в настройках телефонии:
 
{
  "action": "call",
   "call": {
      "id": "1233123",  
      "direction": "incoming", 
      "destination_number": "380730000001",
      "caller": "333",
      "state": "started"
   }
}
- Далее телефония отправляет запросы в соответствии с изменениями статуса звонка.
 
3. Сохранение аудиозаписи звонка в историю вызовов CRM
Вы можете отправить продолжительность вызова и аудиозапись сразу с передачей запроса со статусом завершения звонка.
Или, если получаете эти данные позже, то в любой момент можете передать их, указав обязательно идентификатор этого звонка(id):
{
  "action": "call",
   "call": {
      "id": "1233123",  
      "direction": "incoming", 
      "destination_number": "380730000001",
      "caller": "333",
      "state": "completed", 
      "duration": 5666, 
      "audio_url": "https://google.mp3" 
   }
}
4. Пример получения информации о покупателе
- Чтобы получить данные покупателя из базы CRM, нужно из телефонии отправить POST запрос в формате json на Webhook. 
В параметре «action» для этого запроса всегда значение «route», а в параметре «route» номер телефона покупателя: 
{
  "action": "route",
  "route": "380730000001"
}
- В ответе вы получите:
 
{
    "client": {
        "id": 47820,    // идентификатор покупателя в CRM
        "profile_url": "https://demo.keycrm.app/app/clients?id=47820",     // ссылка на карточку покупателя в CRM
        "name": "Пономарь Владислав",    // полное имя покупателя
        "manager": {
            "id": 81,     // идентификатор ответственного менеджера покупателя в CRM
            "name": "Владислав Пономарь",  //имя ответственного менеджера покупателя в CRM
            "number": null      // номер телефона ответственного менеджера покупателя, указанный у него в профиле в CRM
        }
    }
}