И мы верим, что новый REST поможет интегрировать Битрик24 с любой другой телефонией – как облачными, так и офисными АТС.
Описание методов вы уже можете
Чем это отличается от интеграции через SIP-коннектор?
Ключевой момент состоит в том, что тут не будет никаких посредников между Битрикс24 и вашей АТС. Не надо никуда «перенаправлять звонок» и т.п. – есть ваша АТС, которая занимается «разговорами» и «маршрутизацией» по сценариям, которые там и так уже работают. IVR-меню, короткие номера, вот это всё, что есть в вашей АТС – продолжает работать, как и раньше, и не требует изменения. Не придется настраивать виртуальную АТС, встроенную в Битрикс24 – она нужна для работы со встроенной телефонией. Понимаете? Любые самые сложные и нетиповые сценарии, которые вы использовали в своей АТС и которые, возможно, не могли быть реализованы встроенной телефонией Битрикс24, теперь доступны и при этом вы даете своим пользователям дополнительную пользу – прямое взаимодействие с CRM!
[spoiler]
Как связать телефонию и CRM?
Все очень просто, мы даем 4-е метода и одно событие, чтобы вы могли с минимальными трудозатратами сделать удобную интеграцию, а для хитрых сценариев вы можете использовать все богатство REST API.
От любой интеграции мы сейчас ожидаем реализацию 4-х базовых сценариев:
- При входящем звонке с неизвестного номера в CRM должен создавать лид, а стандартная карточка звонка должна показываться сотруднику, на которого АТС по своим правилам перенаправляет звонок.
- При входящем звонке с известного в CRM номера, должна показываться карточка звонка сотруднику, ответственному за клиента, и АТС должна перенаправить звонок на этого сотрудника
- Сотрудник должен иметь возможность, нажав на иконку звонка в интерфейсе CRM, увидеть карточку звонка, а АТС за сотрудника должна «набрать» и запустить исходящий звонок на соответствующий номер.
- По завершении любого звонка, факт звонка должен фиксировать в виде стандартного дела вида «звонок», прикрепляемого к соответствующему объекту CRM и
- сотруднику, который обрабатывал звонок. Должен быть зафиксирован статус звонка и его длительность. Крайне желательно передать запись звонка, чтобы пользователи Битрикс24 смогли прослушать ее, используя стандартный интерфейс с проигрывателем.
Как это технически выглядит?
Как я уже сказал, все очень просто. Например, приходит входящий звонок с номера 555666777 и при этом человек набрал короткий номер 101 конкретного сотрудника.
Вы просто вызываете метод
$result = restCommand('telephony.externalCall.register', array( "USER_PHONE_INNER" => ‘101’, "PHONE_NUMBER" => '555666777 ', "TYPE" => '2', "CRM_CREATE" => true ), 'xxx.bitrix24.ru', oauth_tokens); |
единственное не самое очевидное место здесь – это получение актуального access_token для аутентификации по протоколу OAuth 2.0. Но этот вопрос уже неоднократно рассматривался, в частности, в
Для интеграций, которые делаются под конкретного заказчика и не предполагают тиражирования в каталоге Приложений24, чуть позже мы дадим упрощенный вариант работы с REST API без OAuth 2.0 и все будет еще легче.
Продолжим!
Метод не просто регистрирует звонок в CRM, он на самом деле подыскивает подходящий объект (лид, контакт или компанию) и возвращает его идентификатор в качестве результата. Если номер в CRM отсутствует, то будет создан новый лид – и вам для этого не придется отдельно использовать REST API из модуля CRM. Все работает само! Один вызов telephony.externalCall.register и вы не просто сообщили Битрикс24 о звонке, а вы сразу показали карточку пользователю, сразу получили ответ от CRM, сразу создали новое дело и при этом вам не пришлось дергать методы REST модуля CRM отдельно!
А когда ваш клиент через 2 минуты общения закончил разговор и АТС завершила звонок, вы просто вызывается метод
$result = restCommand('telephony.externalCall.finish', array( "CALL_ID" => идентификатор звонка из результатов вызова метода telephony.externalCall.register, "USER_ID" => идентификатор пользователя, "DURATION" => '120', "STATUS_CODE" => '200', "ADD_TO_CHAT" => true, "RECORD_URL" => ‘https:// ваш_сервер /…/recordXXX.mp3’ ), 'xxx.bitrix24.ru', oauth_tokens); |
Звонок завершается с успешным статусом, вы указываете длительность, которая попадет в отчеты телефонии, прикладываете запись, которая автоматически будет подтянута в Битрикс24, а параметром ADD_TO_CHAT создаете нотификацию о звонке текущему пользователю.
Остаются еще два метода - telephony.externalCall.show и telephony.externalCall.hide, которые ничего не делают, кроме показа или закрытия карточки звонка. Они не влияют на фиксирование факта звонка, никак не привязывают дело «звонка» к пользователю, не позволят прервать звонок – только показывают и прячут карточку. Методы очень полезны в визуализации более сложных сценариев интеграции. Например, обработка одновременной очереди: АТС направляет звонок на всех и, как говорится, «кто первый встал, того и тапки». Соответственно, вы вызываете один раз метод telephony.externalCall.register, привязывая звонок к любому пользователю из своей очереди, а для всех остальных участников очереди вызываете метод telephony.externalCall.show. А как только кто-то из сотрудников реально взял трубку, кто бы он ни был – вы тут же гасите у всех остальных участников карточку звонка методом telephony.externalCall.hide, запоминаете сотрудника и по завершению звонка указываете идентификатор этого сотрудника в параметрах метода telephony.externalCall.finish. Профит!
В этом вся простота – обработка звонка и реальная очередь «живет» на стороне вашей АТС, все софтфоны, гарнитуры, мобильники сотрудников и прочие аппараты и софт управляются АТС, как они уже управлялись до интеграции, а при помощи наших новых методов в Битрикс24 вы только фиксируете начало звонка, окончание звонка и играетесь карточками и ничего лишнего!
Остается последний важный сценарий – обработка исходящих звонков. Для того, чтобы АТС «узнавала» о том, что сотрудник инициировал звонок, интеграция должна повесить свой обработчик события onexternalcallstart. В него Битрикс24 будет передавать идентификатор сотрудника, который хочет совершить исходящий звонок и данные клиента. Есть один важный нюанс, чтобы событие заработало – администратор Битрикс24 должен задать ваше приложение в настройках телефонии в качестве исходящей линии:
Дальше все просто – срабатывает событие, ваш обработчик получает данные от Битрикс24 и (опа!) снова просто вызывает метод telephony.externalCall.register, а после завершения telephony.externalCall.finish.
Для еще большей простоты мы подготовили
Ждем новых интеграций в
Событие onexternalcallstart присылает USER_ID неплохо бы если бы оно присылало и USER_PHONE_INNER
метод telephony.externalcall.show и telephony.externalcall.hide хорошо бы иметь возможность передать USER_ID массивом или USER_PHONE_INNER (отсутствует) тоже массивом что бы можно было за один вызов открыть у всех карточки или погасить их.
метод telephony.externalcall.finish тоже не хватает USER_PHONE_INNER
метод
telephony.externalcall.register при попытке использовать только USER_PHONE_INNER все равно требует USER_ID
так же есть проблема с отображением карточки звонка:
1) если открыт портал на 2х ПК и десктоп приложение то карточка отображается непонятно по какому принципу на любом из устройств, хотелось бы что бы на всех сразу,
2) если приложение свернуто в трей и браузер свернут, то никакого оповещения не происходит нужно развернуть битрикс десктоп или браузер и угадать где будет карточка входящего звонка
в чате после окончания звонка появляется информация о звонке, в этой информации видно только успешный или не успешный, хотелось бы иметь привязку к сущностям CRM с этого звонка
Fatal error: Call to undefined function restCommand() in
делаю так:
$result = restCommand('telephony.externalCall.register',
array(
"USER_PHONE_INNER" => ‘270’,
"PHONE_NUMBER" => '77273927295',
"TYPE" => '2',
"CRM_CREATE" => true
),
'abc.bitrix24.ru', oauth_tokens);
Модифицируйте под себя
Так любую рандомную функцию можно написать.
И человек просто спросил, потому что больше негде.
Я понимаю ЧСВ и прочая гадость, но писать то об этом зачем?
Зачем вы человека унижаете, он ничуть не хуже вас.
Вы тоже родились не сразу программистом, тоже косячили и учились.
и почему именно "USER_ID" => идентификатор пользователя,
на АТС же четко знаешь какой внутренний ответил или с какого звонили
проверено
в "telephony.externalCall.finish" и "telephony.externalCall.register"
"USER_PHONE_INNER" => номер сотрудника, работает
хороший подарок к новому году
спасибо
Есть вопросы по работе:
1) Какой статус "STATUS_CODE" нужно ставить для переведенного звонка от одного сотрудника другому?
2) Какой статус "STATUS_CODE" ставить для неотвеченных исходящих звонков(Оператор не долждался ответа или провайдер отключили набор по таймауту)
3) Еще интересует можно ли при входящем звонке в карточке клиента отображать название входящей линии и как это сделать?
2. выбирайте на свой вкус
3. а вот никак пока что. но мы дадим такую возможность
когда указано "RECORD_URL" => ‘https:// ваш_сервер /…/recordXXX.mp3’ )
тк у нас жесткая политика безопасности для IP PBX
Подскажите, каким образом можно реализовать этот функционал?
Спасибо.
Нам очень нужно побыстрее посмотреть и подпилиться под него - клиенты очень ждут "скрипты продаж" там.
{ "error": "ERROR_EVENT_NOT_FOUND", "error_description": "Event not found"}
Вы просто вызываете метод
это "вы просто вызываете" осуществляется на стороне приложения ATC?
я не нашел событий чтобы подрубится на входящий звонок и применить свою логику.
Надо при совершении звонка (инициализация идёт в Битрикс24) подменить у пользователя телефонии номер телефона исходящий.
Укажите направление для поиска или изучения материала.