Как вы наверняка знаете, в Битрикс24 существует довольно обширный REST API, который позволяет добавлять функционал в облачный Битрикс24, а также создавать всевозможные интеграции с внешними системами. Используя методы REST вы можете создавать и модифицировать объекты CRM, задачи, публиковать сообщения в живую ленту и вообще, делать практически все, что угодно.
Но до недавнего времени существовало в этой идиллии одно небольшое «но», а именно, необходимость в реализации хитрого протокола авторизации OAuth 2.0. Несмотря на то, что этот протокол существует давно и используется многими игроками рынка, он все еще вызывает у разработчиков сложности в реализации «с нуля», а кроме того, имеет неприятное ограничение – если вам необходим постоянный автоматический обмен данными с Битрикс24 без участия пользователя, то из-за требований OAuth вам придется организовывать периодическое обновление авторизационных токенов, чтобы они «не протухли».
А ведь иногда просто надо быстренько связать конкретный Битрикс24 с конкретной внутренней системой, или скажем, отдельно взятой формой обратной связи. Или без лишних заморочек просто запостить в живую ленту портала отчеты из своей складской системы.
Я рад сообщить, что мы внедрили простой механизм интеграций с Битрикс24, который прекрасно подходит для использования in-house. Речь идет о всем известных вебхуках. А даже если и не всем известных, то многим
Это механизм, который позволяет вам использовать практически весь наш богатый REST API, но при этом не заморачиваться с OAuth 2.0. [spoiler]
Входящие вебхуки
Давайте на конкретном примере разберем, как это работает. Предположим, что у нас есть на сайте форма обратной связи по каким-то непонятным причинам еще не переведенная на прекрасные CRM-формы Битрикс24, и вместо того, чтобы использовать нормальные вещи мы все-таки хотим помучаться и допилить нашу существующую форму так, чтобы результат ее заполнения попадал в виде лида в Битрикс24.
Мы просто идем в раздел Приложения – Вебхуки, нажимаем кнопку «Добавить вебхук»
выбираем тип «Входящий вебхук» (ведь мы хотим из внешнего источника обращаться к Битрикс24, верно?) и видим форму редактирования параметров вебхука.
Указываем понятное нам самим название и описание вебхука, включаем галочку прав к нужному нам модулю Битрикс24. В данном случае нам нужен CRM, поскольку мы собираемся добавлять лиды.
После нажатия на кнопку сохранения мы обнаружим, что в форме появилась дополнительная информация
Как ни удивительно, но это все, что нам нужно.
Разберем предложенный URL:
Идентификатор пользователя, пользуясь правами которого будет работать вебхук. Очевидно, что вставляется идентификатор пользователя, который вебхук и создал только что.
Код вебхука. Строго секретно. Не стоит публиковать его в Facebook.
Метод REST, который вы хотите выполнить, обращаясь к вебхуку. В качестве примера подставляется базовый метод profile, но нам потребуется метод crm.lead.add
То есть, все сводится к тому, что мы должны «дернуть» с параметрами нужный нам URL, который уже сформировали за нас практически целиком (поменять остается только название метода), вот и вся наука.
Что значит «дернуть»? Например, это можно сделать вот так
Поясню важные моменты. Во-первых, не надо делать веб-формы так, как в этом примере – они будут такие же кривые и небезопасные . Во-вторых, вся интеграция с Битрикс24 сводится к простым шагам: сформировали url в переменной $queryUrl, сформировали параметры для создания лида в переменной $queryData (почитайте описание параметров в документации) и после нехитрых подготовительных шагов как раз и «дернули Битрикс24» при помощи функции curl_exec. Полученный в виде JSON результат обработали и вот оно счастье. Ничего больше не нужно. Еще раз про три простых шага:
Получили практически готовый URL из формы добавления вебхука прямо в своем Битрикс24.
Указали в этом URL нужный метод REST API и сформировали параметры с данными.
Запросили Битрикс24 по сформированному URL
Зайдите на форму, заполните все поля и после сохранения вы обнаружите в своем Битрикс24 новый лид (или получите сообщение об ошибке прямо над формой).
Исходящие вебхуки
На этом радость не заканчивается, ведь интеграция – штука двусторонняя и иногда хочется наоборот, что делать в своих или внешних системах, когда происходит некое изменение данных в Битрикс24. Ну, например, менеджер по продажам перевел сделку в Битрикс24 в нужный статус и в нашей внутренней ERP должен сформироваться наряд-заказ на запчасти из сделки.
Снова идем в Приложения – Вебхуки, но теперь добавляем «Исходящий вебхук». Форма будет отличаться, поскольку нам уже не нужно генерировать никакой ключ, зато нам нужно указать, при каком событии в Битрикс24 должен вызываться наш обработчик.
Итак, задаем адрес обработчика, пишем сами для себя внятное название и описание для вебхука, и самое важное – указываем событие ONCRMDEALUPDATE. После сохранения формы нам покажут код авторизации хука, который позволит внутри обработчика проверить, а правда ли наш обработчик вызвал Битрикс24 или кто-то вызов подделывает? Не самая непробиваемая секьюрность, что и говорить, но все равно пригодится.
В обработчике пишем исключительно простой код – тупо логируем все, что к нам приходит.
Фактически, мы без всяких сложностей получили информацию об изменении сделки и, зная ее идентификатор, при помощи входящего вебхука, принцип которого я описал выше, можем запросто запросить нужные нам подробности о сделке, вызывая метод crm.deal.get.
Киборги заполонили!
Вебхуки представляются нам настолько простыми и полезными для решения оперативных вопросов, что мы включили этот функционал еще и в CRM-роботов!
Идем в настройки CRM, выбираем пункт Автоматизация и там нажимаем в кнопку «Сделки».
Чтобы не придумывать ничего сложного, воспользуемся тем же обработчиком исходящего вебхука, который у нас есть, но вызовем его в явном виде.
Нажмем кнопку «Настроить роботов», и у любого статуса сделки добавим робота, выбрав тип робота «Webhook». В открывшейся форме мы можем выбрать условия срабатывания робота, но самое главное, мы можем указать адрес обработчика и параметры, которые мы хотим в обработчик передать.
Для простоты давайте передадим туда в явном виде стадию сделки
Сохраним все это добро, перейдем в любую сделку и изменим ее стадию на ту, для которой только что сформировали робота. Сработает исходящий вебхук и в логах мы получим данные о сделке, полученные в виде параметров:
Если стадия сделки равна значению "Условный отказ", то {{Стадия сделки}} отдает данные в виде [status] => Условный а не [status] => Условный отказ т.к. пробел не кодируется и обрывает url запроса.
Сергей Востриков, подскажите, планируется ли делать события на изменения Событий календаря? Хочется связать календарь в 1С и календарь в портале. В одну сторону все летает без проблем (из 1С в Битрикс24), а вот изменение события в календаре Б24 никак не отловить, судя по документации, чтобы передать обратно в 1С. Или может есть другой путь для облачного Б24?
Та же проблема была - ({"error":"QUERY_LIMIT_EXCEEDED", "error_description":"Too many requests"}) ! Мб кому поможет. Добавил задержку между запросами в 0.15c - usleep(150000), можно и больше. Полёт нормальный!
А почему во входящем вебхуке можно включить доступ сразу к нескольким сущностям, тогда как в исходящем можно только одно событие выбрать? Просто хотелось бы для исходящих вебхуков один код авторизации. А то потребуется 5 событий - придётся вбивать 5 кодов авторизации к себе в обработчик.
И есть ли очередь событий, для случая если обработчик не отвечает? Ну мало ли на сервере технические работы и скажем 30 минут сайт не работал, неужели за эти 30 мин события из Битрикс24 потеряются?
настроили на своем сайте вебхук по вышеприведенной инструкции, при отправке запроса возвращается не json, а html-форма авторизации подскажите, пожалуйста, в чем может быть проблема
конечно статья внесла некоторую ясность,я не програмист,и не знаю, что такое "дернуть" и где писать код, представленный после слов "Например, это можно сделать вот так", также не понятно где Запросить Битрикс24 по сформированному URL, если можно объясните подробней. или без навыков программирования ловить нечего?
При добавлении лида, через crm.lead.add, сообщение ответственному менеджеру не приходит, а через im.notify можно отправить сообщение только самому себе, может я что-то не так делаю? подскажите пожалуйста
Александр, не надо ajax данные на webhook направлять. В этом случае "плохие люди" получат ваш код авторизации. Отправьте данные веб-формы ajax-запросом в обработчик php. А уж он пусть посылает данные на webhook.
ну вот - JS ajax запросом отправляет данные на sendxxx.php. После этого заявка лид не создаётся. А если форма напрямую отправляет данные на php файл - всё уже нормально работает на продакшине у меня.
Попробовал настроить входящий вебхук для MailChimp, не работает, точнее даже не создается
просто выдает ошибку на эатпе создания вебхука в меилчимпе
"We couldn't verify the URL is working. Please double check and try again. HTTP Code: 400"
Там вставляю вот такой урл - https://*****.bitrix24.ru/rest/1/lneowcr2f0nsri0y/crm.lead.add Вебхук по идее должен просто отправлять данные нового подписчика
А почему именно входящий вебхук? У меня входящий вебхук отправляет данные в лиды. Я так понимаю нужно из лид'ов забирать данные, через обработчик отправлять к Mailchimp
Всем здравствуйте. Интересует вопрос по вебхукам. Пытаюсь настроить создание лидов по примеру. Создал вебхук, составил параметры запроса. Однако после запроса выскакивала ошибка "SSL: no alternative certificate subject name matches target host name". На просторах интернета нашел "решение" - CURLOPT_SSL_VERIFYHOST установить false. Однако, как потом выяснилось - это вредит безопасности. И, тем не менее, для проверки установил данный параметр запроса. В результате возвращается ошибка "301 moved permanently". С curl работаю. если не первый, то второй раз, поэтому пока немного торможу по этим вопросам. Битрикс коробочная, к слову. Может кто знает, в чем дело, где копать или как исправить?
Добрый день, на сайте site.ru создал обработчик событий с кодом из примера таким образом, что когда переходишь по урлу site.ru/event-listener.php?name=name, логика скрипта отработает корректно и создаст файл hook.log с необходимой информацией. Создал на этом сайте исходящий вебхук по событию lead add и адрес обработчика указал site.ru/event-listener.php Но при добавлении лида ничего не происходит, аналогично сделал и для обновления лида. Битрикс24 коробка, SSL сертификат есть. Попробовал сделать так же обработчик события на другом сайте, но результата это не дало Подскажите пожалуйста, что я упустил:) Проблема решилась, когда клиент активировал лицензию:)
Что делать если на сервере используется HTTP-аутентификация. и в веб хук нельзя вставить http://username:password@example.com , битрикс вырезает такие вот символы ? а использовать надо
Спасибо. Нужно обратиться к сделке за другими параметрами. Если вписать id вручную - все работает, а вот получить его из параметров исходящего вебхука не получается. Спасибо
Здравствуйте. А может кто-то знает, как получить компании у которых нет сделок или счетов за некий период? То есть компании, которые перестали покупать. Или может такие компании можно без хуков узнать?
Ситуация: Вебхук на изменение данных компании. На стороннем серваке валидация не проходит = телефон компании уже есть у другого клиента. Что отдать в битрикс, чтобы уведомить об ошибке? Как организовать callback для вебхука?
Когда делаю вебхук в бизнес процессах, то ссылка обрезается на символе знак вопроса. В данном случае этот символ разделяет ссылку на метод и указанные параметры. К примеру в ссылке на создние лида с определёнными параметрами, то вебхук выполнит лишь создание лида без каких-либо параметров (без названия, суммы, телефона и прч.). Хотя если ссылку просто ввести в браузерную строку, то сработает нормально. Как быть-то?! КАК БЫТЬ?!
Передача лида через вебхук с сайта, подскажите как добавить пользовательские поля? Например желаемая дата визита, бренд... Нужно в CRM предварительно их создавать?
Здравствуйте, возникла следующая проблема: В последнее время стали падать лиды с откровенным спамом. Понятно, что приходят с формы, но с какой именно найти не можем. Проект огромный, входящих лидов сотни. Как определить через какой входящий вебхук приходит форма, для дальнейшего его удаления(отключения).
Добрый день, Сергей. Зайдите в почтовые шаблоны и поменяйте темы писем, которые отправляются с форм, так вы поймете откуда спам идет. Например, форма с главной страницы.
Может у кого есть SDK по работе с REST API ? Или кто видел на просторах гитхаба?
через вебхуки можно работать с тем же api,
без необходимости реализации авторизации oauth и без левых ООП-оберток.
{{Стадия сделки}}
отдает данные в виде
[status] => Условный
а не
[status] => Условный отказ
т.к. пробел не кодируется и обрывает url запроса.
Как обойти эту проблему?
Получаю ошибку после 255 запроса - QUERY_LIMIT_EXCEEDED
Добавил задержку между запросами в 0.15c - usleep(150000), можно и больше. Полёт нормальный!
Можно ли?
Штатной интеграции, как я понимаю, пока не предусмотрено, там в списке в основном крупные западные CRM-решения
подскажите, пожалуйста, в чем может быть проблема
Когда отправляю методом ajax - лид не создаётся.
Для теста отправляю 1 поле
Подскажите в чём проблема?
Если можно - пример кода - скорее всего какой-то нюанс есть
Спасибо!
Отправьте данные веб-формы ajax-запросом в обработчик php. А уж он пусть посылает данные на webhook.
Попробуйте отправлять ajax-запрос на адрес
просто выдает ошибку на эатпе создания вебхука в меилчимпе
"We couldn't verify the URL is working. Please double check and try again. HTTP Code: 400"
Там вставляю вот такой урл - https://*****.bitrix24.ru/rest/1/lneowcr2f0nsri0y/crm.lead.add
Вебхук по идее должен просто отправлять данные нового подписчика
У меня входящий вебхук отправляет данные в лиды.
Я так понимаю нужно из лид'ов забирать данные, через обработчик отправлять к Mailchimp
Подскажите, пожалуйста, как можно избежать ограничения в 50 строк для метода crm.deal.list?
Создал на этом сайте исходящий вебхук по событию lead add и адрес обработчика указал site.ru/event-listener.php
Но при добавлении лида ничего не происходит, аналогично сделал и для обновления лида.
Битрикс24 коробка, SSL сертификат есть.
Попробовал сделать так же обработчик события на другом сайте, но результата это не дало
Подскажите пожалуйста, что я упустил:)
Проблема решилась, когда клиент активировал лицензию:)
Array ( [status] => Новые [document_id] => Array ( [0] => crm [1] => CCrmDocumentDeal [2] => DEAL_662
Спасибо.
Нужно обратиться к сделке за другими параметрами.
Если вписать id вручную - все работает,
а вот получить его из параметров исходящего вебхука не получается. Спасибо
А может кто-то знает, как получить компании у которых нет сделок или счетов за некий период? То есть компании, которые перестали покупать.
Или может такие компании можно без хуков узнать?
Не смог найти об этом ничего.)
Удалили исходящие вебхуки, а битрикс продолжает их слать. С чем это может быть связано?
Ситуация:
Вебхук на изменение данных компании.
На стороннем серваке валидация не проходит = телефон компании уже есть у другого клиента.
Что отдать в битрикс, чтобы уведомить об ошибке?
Как организовать callback для вебхука?
В данном случае этот символ разделяет ссылку на метод и указанные параметры. К примеру в ссылке на создние лида с определёнными параметрами, то вебхук выполнит лишь создание лида без каких-либо параметров (без названия, суммы, телефона и прч.). Хотя если ссылку просто ввести в браузерную строку, то сработает нормально. Как быть-то?! КАК БЫТЬ?!
Нужно в CRM предварительно их создавать?
Предварительно создаешь в CRM, далее указывать таким образом: