В вакансии написано "опыт 1-3 года", но можно и не начинающего. Тем не менее, если даже опыта пока немного, а хочется расти и есть порох в пороховницах и ягоды в ягодицах, то будем рады пообщаться. Знаю, что в командах разработчиков появляются люди, которым искренне интересно разобраться "как оно устроено" и объяснить другим.
Эта позиция - возможность нанести пользу огромному кол-ву разработчиков и получить публичный массовый почёт и уважуху. По себе знаю, что большинство разработчиков хотят, чтобы их труд ценили и ценили не анонимно, а адресно. Но если вдруг нет готовности к такой публичной любви, а дело делать хочется - тоже не проблема, я всю уважуху готов взять на свои крепкие плечи и с радостью закрою вас грудью от всемирного восхваления.
Если у кого-то есть подходящий знакомый - не стесняйтесь, перешлите им информацию, пожалуйста.
Добавлю, что речь не про написание доки в смысле "чистого технического писателя", а про разработку кода для доки, систематизации данных о REST, а также разработке REST в продукте.
Я уже рассказывал на партнерской конференции 28 сентября, что мы хотим вовлечь в использование партнерских приложений максимальное количество пользователей Битрикс24. Особенно в контексте установки пользовательских шаблонов Битрикс24.Сайты и т.д. И один из шагов в этом направлении - разрешить пользователям без прав администратора устанавливать приложения. Вот как раз его мы и сделали.
Итак, если вы обратите внимание, то в карточке версии любого приложения для Битрикс24 появилась новая опция "Может устанавливать любой пользователь":
Она по умолчанию выключена, чтобы не сломать логику существующих приложений, которые ждут, что их будет устанавливать только пользователь администратор Битрикс24. Теперь вы можете включить эту опцию и на стороне приложения учитывать, что пользователь может любой.
С одной стороны мы даем возможность, как я уже написал, вовлечь всех пользователей в свое приложение, с другой стороны это означает, что вам надо тщательно продумывать сценарий установки и дальнейшего использования, поскольку REST всегда работает в рамках прав пользователя, чьими токенами пользуется. Если для ваших сценариев нужны токены администратора, то... только админам и надо разрешать ставить решение. Но это означает, что круг пользователей, принимающих решение об установке, у вас не вырастет .
Мы также даем возможность на уровне конкретного Битрикс24 настраивать разрешения на установку приложений. На платных тарифах администратор портала может прямо-таки выбрать группы, подразделения или отдельных пользователей, которым можно будет устанавливать приложения. На бесплатном тарифе все представлено одной галочкой - могут ли обычные пользователи устанавливать приложения или нет. Опция добавлена на странице настроек Битрикс24.
Конструктор лендингов в Битрикс24 еще пока очень молодой, а на практике хочется уже серьезных возможностей по оформлению. И когда их не хватает, на помощь приходит REST API, товарищи!
Первым делом самолеты вебхуки. Если не знаете, что это, то вам прямая дорога на мой вебинар, а для тех, кто следит за темой, просто добавлю, что нам потребуется создать на своем Битрикс24 входящий вебхук с правами на модуль Сайты (landings).
Прежде, чем перейти к танцам, поясню основную идею: я хочу добавить анимирование блоков при просмотре контента лендинга. Для этого есть куча готовых средств, и я воспользуюсь двумя - библиотекой animate.css и js-библиотекой JQuery Viewport Checker, поскольку jquery и так у нас автоматом цепляется. Если в лендинге использовать стандартные блоки из доступных в Битрикс24, то мы запросто можем привязаться к конкретным стандартным классам, чтобы вызывать для них анимацию. Вот и вся сказка.
В связи с тем, что мы научили Битрикс24 отправлять SMS не только из бизнес-процессов и роботов CRM, но заодно из карточки CRM (которая доступна везде, включая бесплатный тариф без бизнес-процессов), мы добавили соответствующий специальный REST для «служб сообщений». В первую очередь это сделано для интеграции с SMS, но вообще это универсальный механизм и в дальнейшем мы видим тут возможность отправки сообщений в произвольные источники.
Мы рекомендуем авторам интеграций с SMS-провайдерами перевести свои приложения на новый REST, чтобы у пользователей не было проблем с установкой на бесплатном тарифе. И вообще, несмотря на то, что мы стараемся прозрачно «пробрасывать» вызовы существующих провайдеров для бизнес-процессов и роботов CRM, лучше избавиться от этой прослойки и работать с нужными методами REST. Тем более, что только эти новые методы позволят вам не только отправлять SMS, но и сообщать Битрикс24 о статусе отправленных сообщений, чтобы этот статус пользователи видели прямо в карточке CRM (а в дальнейшем, и в отчетах инструментов CRM-маркетинга).
В этом материале я хочу рассказать и показать на практическом примере, как можно быстренько сделать интеграцию с SMS-провайдером. Коллеги, которые уже разрабатывали приложения для Битрикс24, могут пропустить вводную часть, а для остальных я начну с того, как вообще попасть в наш каталог Приложения24.
Партнеры, работающие с внедрениями Битрикс24, уже в курсе новой программы по передаче лидов партнерам. Помимо внедрения Битрикс24, мы теперь еще предлагаем клиентам Битрикс24 заказать разработку интеграции или приложения у наших партнеров, а вам, коллеги, соответственно эти заявки передаем.
Чтобы поучаствовать в этой истории нужно соблюдение нескольких условий:
Вы должны быть участником партнерской программы по Битрикс24. Требование понятное, поскольку чтобы делать внятные интеграции или решения, нужно знать и уметь "готовить" Битрикс24.
Нужно использовать Битрикс24 CRM, потому что именно туда мы вам заявки на разработку и будем передавать в автоматическом режиме.
После установки приложения на своем портале вы сможете отслеживать заявки на внедрение Битрикс24, а также заявки на разработку решений:
Вы будете видеть заявки на разработку общим списком. Контактная информация в заявках скрыта. Для того, чтобы увидеть контакты потенциального клиента и связаться с ним, вам нужно откликнуться на заявку (нажатием кнопки "Взять заявку") в приложении. После этого в вашем Битрикс24 будет создана новая сделка (в направлении, которое вы укажите при установке приложения), в которой будут открыты контакты клиента.
Учтите, что вы должны строго соблюдать требования федеральных законов по работе с персональными данными клиентов, полученных от 1С-Битрикс, не передавая их никаким третьим сторонам.
Далее, вы самостоятельно проводите работу с данными клиентами, без участия 1С-Битрикс. Одновременно в работе у партнера может находиться не более 10 заявок, другие заявки в это время будут недоступны (нельзя будет взять 11-ю заявку в работу, пока не закрыл одну из предыдущих). Закрытием заявки считается финальный статус сделки по данной заявке в CRM у партнера (сделка выиграна или проиграна).
Если сделка выиграна (клиент принял решение сотрудничать с партнером по разработке), то партнеру необходимо указать в поле "Адрес портала" адрес портала клиента. При отсутствии такой информации, сделка не будет считаться выигранной.
Прямо сейчас заявки собираются в публичном каталоге Приложения24, а в ближайшее время мы добавим такую возможность во внутренних разделах Приложения в Битрикс24
Радостная новость: можно поставить на страницах ваших решений CRM-виджет Битрикс24 - онлайн-чат, коннекторы к социальным сетям и мессенджерам. Что может быть лучше живого общения с потенциальными покупателями? Ничего, если, конечно, стоит задача повысить продажи . Теперь у вас такая возможность есть. Рекомендую ей воспользоваться!
Есть небольшой ряд нюансов, на которые сразу хочу обратить внимание:
Если вы работаете с коробкой Битрикс24, то, к сожалению, url из виджета нашу валидацию не пройдет. Мы не можем вставлять на свои ресурсы внешние JS, содержимое которых никак не контролируем. Возможно, получится что-то хитрое придумать для коробки, но пока нет, увы.
Мы знаем, что вы знаете, но все же хочется еще раз подчеркнуть - правила Маркетплейс действуют в рамках вашего общения с клиентами. В частности, авторам нельзя предлагать прямые покупки своих решений и продуктов 1С-Битрикс в чатах. Помните про партнерские продажи, пожалуйста. Уводя клиентов, вы создадите стратегические проблемы для самих себя, потому что ваши решения просто перестанут рекомендовать участники партнерской сети. Успешные разработчики очень хорошо знают, насколько важны партнеры. В любом случае это будет плохая идея, потому что, коллеги, будем жестко отключать по результатам анонимных проверок. Сослаться потом на "косяк конкретного сотрудника", нарушившего правила, не получится, к сожалению. Вы отвечаете за всех своих сотрудников.
А в целом, коллеги, мы верим, что быстрая поддержка поможет вам продавать лучше! Включайте виджеты, накапливайте данные в CRM, управляйте своими продажами!
Я рад анонсировать новый партнерский REST. С его помощью авторы решений могут управлять своими клиентами, а партнеры, продающие готовые решения, создавать свои витрины решений на своих корпоративных сайтах.
До текущего момента разработчики могли использовать старый API, базировавшийся на использовании XML, часть функционала которого вообще включалась только по запросу в партнерскую поддержку.
Мы считаем, что сегодня, когда рынок требует массовых продаж готовых решений, а управление продажами требует автоматизации процесса и интеграции с CRM, нужен новый прозрачный механизм, доступный всем разработчикам решений и партнерам 1С-Битрикс.
Чуть не забыл поделиться записью скринкаста про вебхуки во всей их полноте.
Файлы с кодом примеров традиционно доступны в нашем коммьюнити для разработчиков тиражных решений, так что если вы все еще не там, то срочно регистрируйтесь https://dev.bitrix24.ru/?secret=ksoczhx0
Коллеги, рад поделиться с вами записью скринкаста с живым примером разработки приложения для мобильного Битрикс24. Файлы с кодом примера доступны в нашем коммьюнити для разработчиков тиражных решений, так что если вы все еще не там, то срочно регистрируйтесь https://dev.bitrix24.ru/?secret=ksoczhx0
Сегодня небольшая, но важная тема. Есть целый ряд приложений, которые хотят знать об изменениях статусов счетов на стороне Битрикс24, чтобы синхронизировать данные с внешней системой или автоматизировать какие-то специфичные бизнес-сценарии. Обычно для целей такого мониторинга создают обработчик REST-события onCrmInvoiceUpdate. И это, в общем-то, правильное событие, если вы хотите отслеживать любые изменения (включая статус), но, как говорилось в одном известном анекдоте, есть нюанс!
Заключается он в том, что данное событие не срабатывает в случае, если пользователь поменял статус счета не переходя для этого в режим редактирования счета. А это он может легко изобразить, используя известный всем "градусник"
И вот чтобы эту ситуацию тоже обрабатывать корректно, мы вынесли в REST еще одно событие: onCrmInvoiceSetStatus. В обработчик передается идентификатор счета.
Как вы наверняка знаете, в Битрикс24 существует довольно обширный REST API, который позволяет добавлять функционал в облачный Битрикс24, а также создавать всевозможные интеграции с внешними системами. Используя методы REST вы можете создавать и модифицировать объекты CRM, задачи, публиковать сообщения в живую ленту и вообще, делать практически все, что угодно.
Но до недавнего времени существовало в этой идиллии одно небольшое «но», а именно, необходимость в реализации хитрого протокола авторизации OAuth 2.0. Несмотря на то, что этот протокол существует давно и используется многими игроками рынка, он все еще вызывает у разработчиков сложности в реализации «с нуля», а кроме того, имеет неприятное ограничение – если вам необходим постоянный автоматический обмен данными с Битрикс24 без участия пользователя, то из-за требований OAuth вам придется организовывать периодическое обновление авторизационных токенов, чтобы они «не протухли».
А ведь иногда просто надо быстренько связать конкретный Битрикс24 с конкретной внутренней системой, или скажем, отдельно взятой формой обратной связи. Или без лишних заморочек просто запостить в живую ленту портала отчеты из своей складской системы.
Я рад сообщить, что мы внедрили простой механизм интеграций с Битрикс24, который прекрасно подходит для использования in-house. Речь идет о всем известных вебхуках. А даже если и не всем известных, то многим
Это механизм, который позволяет вам использовать практически весь наш богатый REST API, но при этом не заморачиваться с OAuth 2.0.
Коллеги, произошло то, о чем долго говорили большевики запущена поддержка REST API в коробочном Битрикс24.
Теперь решения для Битрикс24, которые опубликованы в каталоге Приложения24, доступны для установки в коробку, а это значит, что разработчикам не нужно создавать и поддерживать две версии своих продуктов.
Коллеги, хочется рассказать вам о возможности нанести еще больше радости пользователям ваших приложений. Теперь, добавляя новую версию, вы можете отмечать опцию ”Совместимо с BitrixMobile”, если хотите, чтобы приложение выводилось в мобильном Битрикс24 для тех порталов, где оно было установлено.
Все, что вам нужно: 1. Выпустить новую версию вашего приложения в адаптивной верстке. 2. В карточке версии включить опцию ”Совместимо с BitrixMobile” (она вам, кстати, пригодиться для самостоятельно тестирования приложения до подачи на модерацию, чтобы вы смогли поставить обновление на свои порталы и убедиться в реальной адаптивности своего интерфейса). 3. Подать новую версию на модерацию
Сегодня на презентации релиза Битрикс24 Сергей Рыжиков рассказал о новой возможности интеграции телефонии с Битрикс24. Мы сильно-сильно постарались с партнерами и подготовили прямо к презентации интеграции с несколькими ключевыми операторами, которые уже доступны для всех желающих в каталоге Приложения24. И мы верим, что новый REST поможет интегрировать Битрик24 с любой другой телефонией – как облачными, так и офисными АТС. Описание методов вы уже можете почитать в документации, REST уже доступен во всех облачных Битрикс24, а я хотел бы дать несколько простых примеров и общих рекомендаций для тех, кто захочет сделать приложения по интеграции.
Чем это отличается от интеграции через SIP-коннектор?
Ключевой момент состоит в том, что тут не будет никаких посредников между Битрикс24 и вашей АТС. Не надо никуда «перенаправлять звонок» и т.п. – есть ваша АТС, которая занимается «разговорами» и «маршрутизацией» по сценариям, которые там и так уже работают. IVR-меню, короткие номера, вот это всё, что есть в вашей АТС – продолжает работать, как и раньше, и не требует изменения. Не придется настраивать виртуальную АТС, встроенную в Битрикс24 – она нужна для работы со встроенной телефонией. Понимаете? Любые самые сложные и нетиповые сценарии, которые вы использовали в своей АТС и которые, возможно, не могли быть реализованы встроенной телефонией Битрикс24, теперь доступны и при этом вы даете своим пользователям дополнительную пользу – прямое взаимодействие с CRM!
Коллеги! Мы готовы показывать ваши приложения в своем мобильном аппе. Для этого надо сделать две вещи:
1. Реализовать адаптивную верстку в интерфейсе приложения с учетом, что пользователи будут пользоваться не только и не столько планшетами, сколько телефонами (при этом помнить, что стандартные диалоги типа вызова пользователей работать пока не будут)
2. Подать новую версию на модерацию, а в описании версии написать, что версия совместима с мобильным приложением.
После прохождения модерации, мы укажем у совместимых приложений соответствующий признак, который будем маркировать в каталоге Приложения24
Урра! Уже сейчас всем разработчикам приложений доступны новые методы в стандартной REST JS-библиотеке для вызова встроенного мессенджера и карточки звонка.
Итак,
BX24.im.callTo(userId[, video=true])
Звонок другу, то бишь, сотруднику в текущем Битрикс24. И да, вам не кажется, можно сразу инициировать видео-звонок.
BX24.im.phoneTo(number)
Еще один звонок, но уже не только другу, но и вообще, кому угодно, через встроенную (или интегрированную внешнюю) телефонию Битрикс24. Указываем номер и звоним прямо из приложения
BX24.im.openMessenger(dialogId)
Пользователь вашего приложения теперь сможет прямо из приложения открыть мессенджер с конкретным пользователем или групповым чатом, ну не сказка ли?
BX24.im.openHistory(dialogId)
Возможность открыть историю переписки для самых маленьких любознательных пользователей ваших приложений
P.S. Чтобы заранее избежать очевидного вопроса, поясню, что в приложениях для Битрикс24, которые не встраиваются в интерфейс (приложения 3-го типа), эти функции не будут работать, поскольку js-библиотека доступна только внутри интерфейса Битрикс24.
Некоторое время назад я уже писал об изменениях в правилах публикации решений в Приложениях24 относительно дополнительных платежей, когда либо само приложение предлагает "внутри" некую расширенную версию за отдельные деньги, либо когда решения использует в своей работе сторонние платные сервисы. С настоящего момента необходимо в карточке решения включать в явном виде соответствующую опцию "Содержит встроенные покупки" (актуальная версия правил). Это также не отменяет необходимость словесного описания этих покупок и цен в поле "Описание решения".
Коллеги, прошло уже довольно много времени, когда новые правила были опубликованы. Не все однако ознакомились с ними и не все привели свои решения в соответствие этим правилам. Я очень рассчитываю, что к 9-му октября 2016 года все-таки разработчики озадачатся этим вопросом, потому что 10-го октября мы будем вынуждены убирать решения, несоответствующие правилам, из каталога.
upd: исправил опечатку в сроках - конечно же речь шла про 9-е октября
Хотите, чтобы вот такие картинки появлялись в оформлении ссылки в социальных сетях, когда вы или ваши пользователи будут ссылаться на ваше приложение?
Тогда надо делать иконку приложения размером не менее 200х200 пикселей - тот же Facebook меньшие изображения в микроразметке игнорирует. А с учетом нового дизайна каталога Приложения24 рекомендуются иконки покрупнее
Сегодня на партнерской конференции в Санкт-Петербурге, Евгений Шеленков анонсировал очень крутую штуку - коннектор Битрикс24.Network для Открытых Линий. В чем крутость для разработчиков решений для Битрикс24?
А крутость в том, что теперь Открытые линии незаметно снимут с вас хороший головняк, который до сих пор многим мешал. Много раз обсуждали с партнерами проблему связи с пользователями приложений. Как пообщаться с теми, кто поставил, а точнее, кто реально работает с приложением, чтобы получить обратную связь, чтобы помочь и т.д.? Спамить по e-mail - не слишком хороший вариант. Во-первых, кто ж их читает, эти e-mail'ы? Во-вторых, действительно часто бывает ситуация, когда приложение ставят не те сотрудники компании, которые им в итоге пользуются. Писать админу компании с вопросами, которые надо бы задавать менеджерам по продажам бессмысленно - письмо просто уйдет в корзину даже если прорвется через спам-фильтры...
А теперь мы даем вам прямую связь с каждым пользователем прямо в момент использования вашего приложения, чтобы в режиме чата вы могли пообщаться со своими клиентами. И не забываем про то, что можно подсадить в Открытую Линию чатбота, который сможет задать базовые вопросы пользователю, а значит, сократит время на изучение ситуации оператором вашей поддержки. Это вам не тикеты
В августе я летал в Питер с докладом на тему, как зарабатывать на тиражных решениях для наших маркетплейсов. Общение получилось очень живое, после доклада мы даже чудесно посидели и пообщались с коллегами, как с теми, кто уже работает с маркетплейс, так и с теми, кто еще только планирует к этому подступиться. С теми, кто не смог присутствовать, я хочу поделиться озвучкой доклада, которую я сделал уже отдельно, слегка изменив презентацию, представленную в Питере. Надеюсь, что информация окажется полезной для вас
Коллеги, хочу порадовать вас - мы прикрутили визуальный редактор к полям описаний у модулей Маркетплейс и решений в Приложениях24! Теперь вы можете вставлять иллюстрации и видео-ролики прямо в текст. Это может показаться мелочью, но на самом деле, это хороший инструмент, чтобы красиво и максимально эффектно подать информацию о ваших продуктах потенциальным клиентам. Одна картинка может оказаться лучше сотни слов - пользуйтесь!
Некоторые внимательные авторы уже этой возможностью успели воспользоваться, рекомендую поспешить и вам
Если кто-то мечтает о том, чтобы зарядить своих ботов или свои приложения ИИ или чем-то вроде , то вам не нужно изобретать всё самим, есть целый ряд готовых API по этому поводу:
В общем, коллеги, смотрите на эти вещи шире - уже сейчас есть готовые нейронные сети и "интеллектуальные" инструменты (Microsoft не единственный вендор таких сервисов), которые вы можете применять на прикладном уровне, не погружаясь в глубокую математику
Постоянно возникает вопрос - какая польза от чатботов может быть для обычных компаний? Кому эти чатботы вообще нужны?
А вот вам примеры:
https://salesforce.getbirdly.com - чатбот для Slack, который интегрирован с SalesForce. А ведь в Битрикс24 уже есть CRM, не так ли? Кстати говоря, CRMBot - самый востребованный бот в Битрикс24 на текущий момент.
https://www.growbot.io/ - чатбот для геймификации работы с коллегами, который следит за поощрениями в групповых и персональных чатах. А ведь в рамках Б24 такого бота можно заточить на автоматический мониторинг реальных показателей по задачам и CRM...
И в том, и в другом примере, чатботы берут на себя некие рутинные, но важные операции. В общем, вы поняли
Коллеги, настало время актуализировать правила Маркетплейс и особенно Приложений24, поскольку обе площадки развиваются и меняются, и существующих регламентов стало явно недостаточно. Да и разбросаны они по разным местам, что тоже не добавляет простоты понимания разработчикам решений.
Мы сделали первый, и я надеюсь, не самый маленький шаг в нужном направлении и сейчас я расскажу вам о тех важных моментах, которые включены в новую редакцию правил Маркетплейс и Приложений24.
Самое главное, были обновлены Общие правила, которые регулируют обе наши площадки. Даже если вы никогда не смотрели эти условия или вам казалось, что это только про Маркетплейс, но ни разу не про приложения для Битрикс24 - на самом деле, это были основные пункты, под которыми мы подписались
Коллеги, недавно мы запустили автоматические триггерные рассылки для клиентов, установивших ваши модули из маркетплейс. Мы напоминаем им, что у них заканчивается демонстрационный период и что заканчивается год получения бесплатных обновлений. В первом случае мы им рекомендуем оплатить модуль, а во-втором - оплатить еще один год получения обновлений.
Но поскольку через маркетплейс мы продаем лицензии - то есть, передаем покупателям права на использование ПО, то для того, чтобы кнопка "купить" появилась в административном разделе сайта у клиента, нужно, чтобы к этому моменту вы выложили в маркетплейс новую версию, потому что мы не можем передать права на то, чего еще нет
Несмотря на то, что триггерные рассылки были запущены совсем недавно, уже были случаи, когда, среагировав на письма, клиенты потом писали нам, мол, а где кнопка купить-то? Жажду продление оплатить, а кнопки нет! Это были чьи-то упущенные деньги .
Коллеги, мы настоятельно рекомендуем вам выпускать обновления как можно чаще - пусть это будут багофиксы, небольшие улучшения функционала, мелкие новые приятные фишки. Совершенно необязательно это должны быть крутые новинки - самое важное, чтобы клиенты видели, что обновления происходят постоянно, что разработчики не забросили свой модуль, тогда оплата очередного периода обновлений с точки зрения клиента будет оправдана. Особенно актуальной продажа обновлений становится в связи с текущим рыночным трендом - динамика появления новых сайтов показывает замедление, а вот расходы на развитие существующих сайтов (особенно интернет-магазинов) растут. И на этом надо зарабатывать.
Напомню про то, как нужно загружать обновления.
Во-первых, это лучше делать в виде явной загрузки новых версий. Откройте карточку модуля и нажмите на панели инструментов кнопку "Версии". На открывшейся странице загружайте архив с новой версией и учтите, что скрипт установщика этой версии должен "понимать", что он будет запускаться "поверх" уже установленной на сайте клиента предыдущей версии. В соответствии с этим надо разрабатывать его логику.
Во-вторых, желательно сделать чистую сборку, основанную на последней актуальной версии, для установки "с нуля". Это нужно для новых клиентов. Если вы будете загружать только обновления в виде версий, то любой новый клиент, который захочет поставить ваш модуль, вынужден будет при помощи SiteUpdate прокачивать все версии модуля и по очереди их "накатывать" на сайт. Это долго, да и трафик лишний возникает. Поэтому обновления обновлениями, а дистрибутив актуальной сборки желательно выкладывать параллельно с добавлением очередной версии. Актуальная сборка выкладывается в карточке модуля в поле "Архив с полной сборкой решения (.last_version.zip или .last_version.tar.gz или .last_version.tgz)".
Еще один важный момент напоследок. Как я говорил в докладе на BitrixDay, по нашей статистике большая часть продаж готовых решений происходит через партнеров, которые покупают эти модули для своих конечных клиентов.
И будучи "ближе" к этим клиентам, чем разработчики конкретного решения, им проще продавать обновления. Пока, к сожалению, обновления мы через партнеров продавать не можем по ряду причин, но это одна из приоритетных задач для маркетплейс. Как только мы добавим такой функционал в наш партнерский документооборот и партнерский кабинет, я его сразу проанонсирую.
Но главная задача лежит на разработчиках модулей - чтобы клиенты могли покупать, а партнеры перепродавать ваши обновления, нужно, чтобы эти обновления появлялись и появлялись часто
Коллеги, рад сообщить о том, что стараниями Евгения Шеленкова мы подготовили для вас полный курс по бот-платформе Битрикс24. Здесь вы найдете все от начала и до конца - и как создать чатбота, и какие возможности есть у платформы для оформления сообщений бота, управления пользовательскими клавиатурами и командами. Можно смело сказать, что наша платформа ничем не уступает аналогам, а возможности некоторых даже сильно превосходит.
Коллеги, в связи с рядом факторов - внутренних и внешних, включая, например, то, что заявки я принимал не до 9-го, как было указано в условиях, а вплоть до 12-го июня , мы сдвигаем сроки. Пожалуйста, не волнуйтесь за свои заявки, я напишу всем по результатам - прошла идея или нет.
Срок, который будет отведен на разработку также будет сдвинут - искусственный цейтнот никому не нужен.
Всем разработчикам! 1С-Битрикс проводит конкурс приложений и чатботов для Битрикс24! В этом году целых две номинации и еще больший бюджет на разработку, чем раньше! Не упустите возможность!
Конкурсные заявки принимаются до 9-го июня 2016 года. Авторы идей, прошедших отбор, смогут заключить с 1С-Битрикс соглашения об оплачиваемой разработке приложений и выложить получившиеся продукты в каталоге Приложения24!
Коллеги, я хочу подчеркнуть, что все права на разработанные приложения останутся у авторов приложений. Мы не накладываем на участников обязанность делать бесплатные приложения - вы сами решите, будете ли эти приложения продавать или раздавать "за так".
Правила конкурса
Конкурс приложений для Битрикс24 проводится компанией 1С-Битрикс (далее, Организатор). Организатор проводит отбор идей Участников. Участники, идеи которых прошли отбор, получат возможность заключения договора на разработку приложений для публикации в Маркетплейс для Битрикс24.
Заявки от Участников принимаются до 9 июня 2016 по e-mail на адрес sv@bitrix.ru.
Заявка считается полученной на рассмотрение по факту ответа о приеме заявки с адреса sv@bitrix.ru.
Каждый Участник может подать неограниченное количество заявок.
Конкурс проводится по двум номинациям: «Приложения для Битрикс24» и «Чат-боты для Битрикс24».
Заявка должна содержать: предполагаемое название приложения, общее описание функционала, и ответы на основные вопросы: какие потребности пользователей Битрикс24 будет удовлетворять приложение, в чем особенность приложения по отношению к аналогам, платным или бесплатным будет приложение, название номинации.
Заявки будут рассматриваться жюри Организатора до 12-го июня 2016 года.
Участники, заявки которых будут выбраны жюри, получат уведомление о возможности заключения договора на разработку приложения по присланной заявке.
Дополнительные условия для конкурсных приложений Битрикс24: предпочтение отдается идеям по интеграции Битрикс24 с внешними системами, автоматизации специфической бизнес-логики при помощи встроенных инструментов Битрикс24, отраслевым решениям на базе Битрикс24.
Дополнительные условия для чат-ботов Битрикс24: предпочтение отдается «бизнесовым»-идеям для чат-ботов: ботам помощникам по управлению Битрик24, автоматизации специфической бизнес-логики при помощи встроенных инструментов Битрикс24, отраслевым решениям на базе Битрикс24, интеграции с внешними сервисами. Приветствуется использование в чат-ботах максимального перечня технических средств Чат-бот платформы: богатые ссылки, пользовательские клавиатуры, списочная навигация без перезагрузки и т.д.
Участник, идея которого пройдет отбор, для заключения договора на разработку приложения должен обладать партнерским статусом 1С-Битрикс (как минимум, статусом «Технологический партнер», заявку на получение которого можно оформить здесь http://marketplace.1c-bitrix.ru/about/for-dev/)
В случае согласия Участника заключить предложенный Организатором договор, он подписывает и высылает подписанный оригинал договора на указанный в договоре почтовый адрес. Условия договора принимаются Участником как есть, Участник не имеет права на внесение изменений.
Участник должен разработать приложение по договору и пройти модерацию не позднее 12-го июля 2016, если иное не будет указано в договоре.
В понедельник, как вы вероятно знаете, был вебинар по разработке чатботов, на который мы приглашали всех партнеров - авторов решений для Маркетплейс и Приложений24. Спасибо всем тем, кто пришел послушать нас в онлайн, и, конечно, особая благодарность Антону Долганину за живую демонстрацию кода. Те, кто не смог посмотреть вебинар в онлайне, могут увидеть его запись:
Кроме записи я также рад поделиться с вами кодом Антона (архив captain.zip) и, как обещал, даю ссылку на рекомендуемый PHP SDK для Битрикс24 от Максима Месилова https://github.com/mesilov/bitrix24-php-sdk
Нет повода откладывать разработку чатботов, коллеги .
Коллеги, 11-го апреля состоится вебинар, на котором Антон Долганин с некоторой моей поддержкой расскажет про разработку чат-ботов для Битрикс24. Регистрироваться можно уже сейчас:
— Что такое боты, зачем они нужны? — Добавление приложения бота на ваш портал. — Базовые события бота. — Регистрация бота, приветствие сотрудников. — Простое и интерактивное общение с ботом (викторина). — Инициация диалога ботом. — Портирование на коробку.
Мы стараемся постоянно доделывать те или иные возможности в Маркетплейс и Приложениях24, но не всегда получается об этом вовремя рассказывать. Буду стараться исправить это положение вещей и начну с анонса двух небольших, но полезных мелочей, которые у нас давно просили партнеры.
Сортировка модулей
Прежде всего, это обещанная возможность управлять порядком вывода собственных модулей на странице автора Маркетплейс и в блоке "Другие решения". Теперь у каждого вашего модуля есть поле "Сортировка". Достаточно просто указать нужные вам значения (по умолчанию, 500), чтобы задать порядок сортировки. Второй критерий сортировки остается без изменений - решения ранжируются по "популярности".
Купоны на две недели и на месяц
Вторая важная доделка касается авторов, разрабатывающих решения для Битрикс24. Как вы знаете, для платного решения можно указать произвольный демо-период, который позволяет потенциальным покупателям ознакомиться с функционалом решения до покупки. И периодически возникает ситуация, когда пользователю не хватает этого периода по ряду причин, или во время тестирования обнаруживается ошибка, которая реально мешает продолжению тестирования. В этом случае партнеры хотели бы продлевать демо-период на некоторый небольшой срок, для чего они могли бы вручную выписать и передать пользователю купон. Однако до текущего момента, авторы могли выписать купон минимум на трехмесячный срок - это тот же период, который доступен покупателям в Приложениях24 для совершения покупки. Теперь же мы добавили возможность выписки купона на две недели и на 1 месяц. Эта возможность есть только в партнерском кабинете, конечные пользователи не смогут самостоятельно приобретать ваши решения на указанные периоды.
Те из вас, кто следят за нашими группами в социальных сетях, а особенно те, кто подписан непосредственно на наших основных ньюс-мейкеров, наверняка заметили, насколько актуальна для нас становится тема чат-ботов в Битрикс24. Некоторые партнеры на своих порталах уже даже пообщались с нашей Мартой – самообучающейся системой, которая переписывается с пользователями в чате на естественном языке. Марта будет помогать пользователям Битрикс24 осваивать продукт, с каждым днем делая это все лучше и лучше.
Однако чат-бот, который умеет общаться на естественном языке - это достаточно специфичная и сложная штука, в то время как сам принцип чат-ботов как приложений позволяет решать массу задач и без всякого искусственного интеллекта в удобной для пользователей форме.
Хочется сделать небольшое отступление для тех, кто еще слабо понимает, что такое чат-боты, зачем они нужны и зачем вообще заниматься их разработкой. В большей степени этот тренд формируется сейчас за рубежом – существует огромное количество ботов для Slack или Telegram, решающих самые разные задачи – от поиска авиабилетов, до управления небольшими командами разработчиков. И чтобы получить все это богатство пользователям даже не нужно выходить из предпочитаемого мессенджера.
В этом весь смысл – можно разработать мобильное приложение для вызова такси, делать его для всех мобильных платформ, затем поддерживать совместимость и т.д. А можно написать чатбота для Telegram, которому пользователь просто напишет в чате “трансфер до Шереметьево”, и бот подберет варианты и покажет их, либо сразу сформирует заказ. Пользователю не надо ставить отдельное приложение, не надо осваивать интерфейс, а разработчикам не надо с этим же интерфейсом париться. Есть огромное количество сценариев, в которых использование чатботов удобнее для пользователей. Не буду переписывать уже известные материалы, полагаю, вы и сами сможете их найти, когда заинтересуетесь темой. Но начать можно, например, со статьи про нашествие ботов
Тем, кто сомневается, что это направление разработки играет какую-то заметную роль на рынке, могу порекомендовать переводной материал про грядущий Messenger Bot Store от Facebook, который, судя по оценкам, полностью перевернет текущее положение вещей
Чатботы в Битрикс24
И здесь мы плавно подходим к тому, какое отношение этот тренд имеет к Битрикс24. Ведь что такое Slack, Telegram, What’sUp, Viber и т.д.? Это мессендеры, которые живут «сами по себе».
А в Битрикс24 чаты (как индивидуальные, так и групповые) – это часть намного более сложной экосистемы, один из основных каналов коммуникации пользователей, полностью интегрированный с другими бизнес-инструментами. И в этом контексте использование чатботов открывает значительно более интересные перспективы для бизнес-пользователей, поскольку Битрикс24 (в браузере, десктоп-приложении и мобильном аппе) уже сейчас – основное рабочее место для большого количества компаний.
Очень просто написать бота, который, например, будет сообщать в чат нужным пользователям срочную информацию о показателях внутренней учетной системы, интегрированной с Битрикс24. Можно написать чатбота, который будет помогать курьерам удобно обрабатывать заказы на основании сделок CRM Битрикс24 на мобильном устройстве прямо в мессенджере – и не придется писать для них отдельное мобильное приложение.
Разработка чатбота в Битрикс24 – это очень перспективный вариант быстрой и удобной автоматизации специфических бизнес-процессов. Удобной, поскольку, как мы уже выяснили, получение информации и управление через мессенджер – это то, что сейчас предпочитает массовый пользователь. А быстрой – потому что разработка чатбота для Битрикс24 это довольно простая штука.
Давайте напишем такого бота прямо сейчас!
Самое главное
Прежде всего, чатбот в терминах Битрикс24 – это не отдельный тип приложений, и принципы разработки, в общем-то, укладываются в общие правила. Будем считать, что вы знакомы с созданием приложений для Битрикс24, чтобы сейчас не останавливаться на базовых вещах. Тем, кто еще такой разработкой не занимался, давно пора посмотреть наш видео-курс.
По отношению к материалам курса было сделано одно небольшое изменение – теперь есть возможность указать отдельный скрипт установки для приложений, которые используют только REST API и не встраиваются в интерфейс Б24. Это сделано для упрощения регистрации ботов в системе, хотя никто не запрещает пользоваться этим механизмом и для установки «обычных внешних приложений».
Вернемся к чатботам. Основное, что нам надо про них понимать – это то, что их логика обычно строится на реагировании на некие действия пользователя и системы. И у нас есть 4-е события, которые полностью покрывают необходимый спектр реакций:
Событие: ONAPPINSTALL Когда происходит: При установке приложения с чатботом Что получает обработчик:
[data] => Array(
[LANGUAGE_ID] - базовый язык портала
[VERSION] = 1 - версия приложения
)
[auth] => Array(
[access_token] => lh8ze36o8ulgrljbyscr36c7ay5sinva // ключ для отправки запросов к REST-сервису
[scope] => imbot // разрешенные уровни доступа
[domain] => b24.hazz // домен портала Битрикс24 на который было установлено приложение
[application_token] => c917d38f6bdb84e9d9e0bfe9d585be73 // токен приложения, поможет вам "отбивать" лишние запросы на обработчик события, это поле есть во всех событиях
[expires_in] => 3600 // время истечения токена, после которого нужно будет запросить новый
[member_id] => d41d8cd98f00b204e9800998ecf8427e // уникальный идентификатор портала, потребуется для продления авторизации
[refresh_token] => 5f1ih5tsnsb11sc5heg3kp4ywqnjhd09 // ключ для продления авторизации
)
Событие: ONIMBOTJOINCHAT Когда происходит: После приглашения бота «к разговору», то есть, либо при вызове бота пользователем в индивидуальном чате, либо при подключении бота к групповому чату Что получает обработчик:
[BOT] => Array // Массив кодов ботов, которым предназначено событие
(
[39] => Array // Параметры для авторизации под ботом, для выполнения действий
(
[domain] => b24.hazz
[member_id] => d41d8cd98f00b204e9800998ecf8427e
[application_token] => a63b44dc03a2158cb140c71d3f632a41
[bot_id] => 39
[bot_code] => newbot
)
)
[PARAMS] => Array
(
[DIALOG_ID] => 1 // идентифкатор диалога
[BOT_ID] => 39 // Идентификатор бота
[CHAT_TYPE] => P // Тип сообщения и чата, может быть P (чат один-на-один), C (с ограниченным кол-во участников), O (публичный чат)
[USER_ID] => 1 // идентификатор пользователя (для чата один-на-один открываший бота, для групповых чатов пригласивший бота)
[LANGUAGE] => RU // идентификатор языка портала по умолчанию
)
[USER] => Array // Массив данных пользователя, может быть пустым если ID = 0
(
[ID] => 1 // идентификатор пользователя
[NAME] => Евгений Шеленков // Имя и фамилия пользователя
[FIRST_NAME] => Евгений // Имя пользователя
[LAST_NAME] => Шеленков // Фамилия пользователя
[WORK_POSITION] => // Занимаемая должность
[GENDER] => M // Пол, может быть либо M (мужской) и F (женский)
)
Событие: ONIMBOTMESSAGEADD Когда происходит: После отправки сообщения от пользователя к боту (в групповом чате, при явном упоминании бота) Что получает обработчик:
[BOT] => Array // Массив кодов ботов, которым предназначено сообщение
(
[39] => Array // Параметры для авторизации под ботом, для выполнения действий
(
[domain] => b24.hazz
[member_id] => d41d8cd98f00b204e9800998ecf8427e
[application_token] => a63b44dc03a2158cb140c71d3f632a41
[bot_id] => 39
[bot_code] => newbot
)
)
[PARAMS] => Array // Массив данных сообщения
(
[DIALOG_ID] => 1 // идентифкатор диалога
[CHAT_TYPE] => P // Тип сообщения и чата, может быть P (чат один-на-один), C (с ограниченным кол-во участников), O (публичный чат)
[MESSAGE_ID] => 392 // Идентификатор сообщения
[MESSAGE] => test3 // Сообщение
[MESSAGE_ORIGINAL] => [USER=39]NewBot[/USER] test3 // оригинальное сообщение с BB-кодом бота (параметр доступен только в групповых чатах)
[FROM_USER_ID] => 1 // идентификатор пользователя отправившего сообщение
[TO_USER_ID] => 1 // идентификатор чат бота (параметр доступн только в чатах один-на-один)
[TO_CHAT_ID] => 6 // идентификатор чата (параметр доступен только в групповых чатах)
[LANGUAGE] => RU // идентификатор языка портала по умолчанию
)
[USER] => Array // Массив данных автора сообщения, может быть пустым если ID = 0
(
[ID] => 1 // идентификатор пользователя
[NAME] => Евгений Шеленков // Имя и фамилия пользователя
[FIRST_NAME] => Евгений // Имя пользователя
[LAST_NAME] => Шеленков // Фамилия пользователя
[WORK_POSITION] => // Занимаемая должность
[GENDER] => M // Пол, может быть либо M (мужской) и F (женский)
)
Событие: ONIMBOTDELETE Когда происходит: После удаления приложения. Событие вызывается параллельно с OnAppUninstall Что получает обработчик:
ONIMBOTDELETE После удаления приложения. Событие вызывается параллельно с OnAppUninstall
Иными словами, мы должны написать обработчики указанных событий, чтобы реализовать простую логику:
Зарегистрировать чатбота на портале пользователя при установке
Вывести приветствие-справку от имени бота в момент приглашения бота в чат
Научиться анализировать текст сообщения от пользователя и что-то отправлять в ответ, причем под анализом мы подразумеваем простой «разбор командной строки», а не лексический разбор естественного языка.
И для этого у нас есть набор простых методов, добавленных в REST API специально для чатботов, нам для старта потребуются только два:
Метод: imbot.register Что делает: Регистрирует бот на портале Какие параметры принимает:
Array(
'CODE' => 'newbot', // строковой идентификатор бота, уникальный в рамках вашего приложения (обяз.)
'TYPE' => 'H', // Тип бота, B - бот, ответы поступают сразу, H - человек, ответы поступаю с задержкой от 2х до 10 секунд
'EVENT_MESSAGE_ADD' => 'http://www.hazz/chatApi/event.php', // Ссылка на обработчик события отправки сообщения боту (обяз.)
'EVENT_WELCOME_MESSAGE' => 'http://www.hazz/chatApi/event.php', // Ссылка на обработчик события открытия диалога с ботом или приглашения его в групповой чат (обяз.)
'EVENT_BOT_DELETE' => 'http://www.hazz/chatApi/event.php', // Ссылка на обработчик события удаление бота со стороны клиента (обяз.)
'PROPERTIES' => Array( // Личные данные чат-бота (обяз.)
'NAME' => 'NewBot', // Имя бота (обязательное одно из полей NAME или LAST_NAME)
'LAST_NAME' => '', // Фамилия бота (обязательное одно из полей NAME или LAST_NAME)
'COLOR' => 'GREEN', // Цвет бота для мобильного приложения RED, GREEN, MINT, LIGHT_BLUE, DARK_BLUE, PURPLE, AQUA, PINK, LIME, BROWN, AZURE, KHAKI, SAND, MARENGO, GRAY, GRAPHITE
'EMAIL' => 'test@test.ru', // Емейл для связи
'PERSONAL_BIRTHDAY' => '2016-03-11', // День рождения в формате YYYY-mm-dd
'WORK_POSITION' => 'Мой первый бот', // Занимаемая должность, используется как описание бота
'PERSONAL_WWW' => 'http://test.ru', // Ссылка на сайт
'PERSONAL_GENDER' => 'F', // Пол бота, допустимые значения M - мужской, F - женский, пусто если не требуется указывать
'PERSONAL_PHOTO' => '/* base64 image */', // Аватар бота - base64
)
)
Метод: imbot.message.add Что делает: Добавляет в чат сообщение от имени чатбота Какие параметры принимает:
Array(
'BOT_ID' => 39, // идентификатор бота от которого идет запрос, можно не указывать если бот всего один
'DIALOG_ID' => 1, // идентификатор диалога, это либо USER_ID пользователя, либо chatXX - где XX идентификатор чата, передается в событии ONIMBOTMESSAGEADD и ONIMJOINCHAT
'MESSAGE' => 'answer text' // тест сообщения
'ATTACH' => '' // Вложение, не обязательное поле
'SYSTEM' => 'N' // отображать сообщения в виде системного сообщения, не обязательное поле, по умолчанию 'N'
'URL_PREVIEW' => 'Y' // преобразовывать ссылки в rich-ссылки, не обязательное поле, по умолчанию 'Y'
)
Очевидно, что в обработчике события ONAPPINSTALL мы вызовем метод imbot.register для того, чтобы добавить чатбота на текущий портал, затем в событии ONIMBOTJOINCHAT воспользуемся методом imbot.message.add для вывода справки о функционале бота, и в обработчике ONIMBOTMESSAGEADD будем отвечать пользователю при помощи того же imbot.message.add. Ничего сложного, согласитесь?
А на самом деле, вы поймете, что все еще проще, когда я добавлю, что вам не придется реализовывать в приложение полноценный OAuth 2.0, поскольку параметры, необходимые для авторизации приходят в обработчики в массиве $_REQUEST.
Готовый пример
В качестве примера я решил написать чатбота, который будет сообщать пользователю о его просроченных задачах. Наш бот будет знать и обрабатывать только одну команду «Что горит». По аналогии всегда можно расширить его функционал, чтобы получать прямо в чат нужные отчеты на основании любых данных в Битрикс24.
Небольшое замечание, коллеги: всем захочется взять готовый пример (я вот так и сделал - взял у Евгения Шеленкова), добавить парочку команд и поделиться этим прекрасным продуктом со всеми, опубликовав решение сразу в Приложениях24. Я вас очень прошу, давайте ответственно подойдем к разработке тиражных ботов и прежде, чем публиковать, научим их чему-то действительно интересному.
<?php
/**
* Полезный чат-бот c отчетами для bitrix24
*/
$appsConfig = array();
$configFileName = '/config_' . trim(str_replace('.', '_', $_REQUEST['auth']['domain'])) . '.php';
if (file_exists(__DIR__ . $configFileName)) {
include_once __DIR__ . $configFileName;
}
// receive event "new message for bot"
if ($_REQUEST['event'] == 'ONIMBOTMESSAGEADD') {
// check the event - register this application or not
if (!isset($appsConfig[$_REQUEST['auth']['application_token']])) {
return false;
}
// response time
$arReport = getAnswer($_REQUEST['data']['PARAMS']['MESSAGE'], $_REQUEST['data']['PARAMS']['FROM_USER_ID']);
$arReport['attach'][] = array("MESSAGE" => 'Как разберетесь с этими задачами, просто спросите еще раз [send=что горит]Что горит?[/send] и я дам новую сводку!');
// send answer message
$result = restCommand('imbot.message.add',
array(
"DIALOG_ID" => $_REQUEST['data']['PARAMS']['DIALOG_ID'],
"MESSAGE" => $arReport['title'] . "\n" . $arReport['report'] . "\n",
"ATTACH" => array_merge(
$arReport['attach']
),
),
$_REQUEST["auth"]);
} // receive event "open private dialog with bot" or "join bot to group chat"
else {
if ($_REQUEST['event'] == 'ONIMBOTJOINCHAT') {
// check the event - register this application or not
if (!isset($appsConfig[$_REQUEST['auth']['application_token']])) {
return false;
}
// send help message how to use chat-bot. For private chat and for group chat need send different instructions.
$result = restCommand('imbot.message.add', array(
'DIALOG_ID' => $_REQUEST['data']['PARAMS']['DIALOG_ID'],
'MESSAGE' => 'Привет! Я Докладун, докладываю все как есть.',
"ATTACH" => array(
array('MESSAGE' => '[send=что горит]Что горит?[/send]'),
),
), $_REQUEST["auth"]);
} // receive event "delete chat-bot"
else {
if ($_REQUEST['event'] == 'ONIMBOTDELETE') {
// check the event - register this application or not
if (!isset($appsConfig[$_REQUEST['auth']['application_token']])) {
return false;
}
// unset application variables
unset($appsConfig[$_REQUEST['auth']['application_token']]);
// save params
saveParams($appsConfig);
} // receive event "Application install"
else {
if ($_REQUEST['event'] == 'ONAPPINSTALL') {
// handler for events
$handlerBackUrl = ($_SERVER['SERVER_PORT'] == 443 ? 'https' : 'http') . '://' . $_SERVER['SERVER_NAME'] . (in_array($_SERVER['SERVER_PORT'],
array(80, 443)) ? '' : ':' . $_SERVER['SERVER_PORT']) . $_SERVER['SCRIPT_NAME'];
// If your application supports different localizations
// use $_REQUEST['data']['LANGUAGE_ID'] to load correct localization
// register new bot
$result = restCommand('imbot.register', array(
'CODE' => 'ReportBot',
// строковой идентификатор бота, уникальный в рамках вашего приложения (обяз.)
'TYPE' => 'B',
// Тип бота, B - бот, ответы поступают сразу, H - человек, ответы поступаю с задержкой от 2х до 10 секунд
'EVENT_MESSAGE_ADD' => $handlerBackUrl,
// Ссылка на обработчик события отправки сообщения боту (обяз.)
'EVENT_WELCOME_MESSAGE' => $handlerBackUrl,
// Ссылка на обработчик события открытия диалога с ботом или приглашения его в групповой чат (обяз.)
'EVENT_BOT_DELETE' => $handlerBackUrl,
// Ссылка на обработчик события удаление бота со стороны клиента (обяз.)
'PROPERTIES' => array( // Личные данные чат-бота (обяз.)
'NAME' => 'Докладун',
// Имя бота (обязательное одно из полей NAME или LAST_NAME)
'LAST_NAME' => '',
// Фамилия бота (обязательное одно из полей NAME или LAST_NAME)
'COLOR' => 'AQUA',
// Цвет бота для мобильного приложения RED, GREEN, MINT, LIGHT_BLUE, DARK_BLUE, PURPLE, AQUA, PINK, LIME, BROWN, AZURE, KHAKI, SAND, MARENGO, GRAY, GRAPHITE
'EMAIL' => 'no@mail.com',
// Емейл для связи
'PERSONAL_BIRTHDAY' => '2016-03-23',
// День рождения в формате YYYY-mm-dd
'WORK_POSITION' => 'Докладываю о делах',
// Занимаемая должность, используется как описание бота
'PERSONAL_WWW' => '',
// Ссылка на сайт
'PERSONAL_GENDER' => 'M',
// Пол бота, допустимые значения M - мужской, F - женский, пусто если не требуется указывать
'PERSONAL_PHOTO' => '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',
// Аватар бота - base64
),
), $_REQUEST["auth"]);
// save params
$appsConfig[$_REQUEST['auth']['application_token']] = array(
'BOT_ID' => $result['result'],
'LANGUAGE_ID' => $_REQUEST['data']['LANGUAGE_ID'],
);
saveParams($appsConfig);
// write debug log
// writeToLog($result, 'ReportBot register');
}
}
}
}
/**
* Save application configuration.
*
* @param $params
*
* @return bool
*/
function saveParams($params) {
$config = "<?php\n";
$config .= "\$appsConfig = " . var_export($params, true) . ";\n";
$config .= "?>";
$configFileName = '/config_' . trim(str_replace('.', '_', $_REQUEST['auth']['domain'])) . '.php';
file_put_contents(__DIR__ . $configFileName, $config);
return true;
}
/**
* Send rest query to Bitrix24.
*
* @param $method - Rest method, ex: methods
* @param array $params - Method params, ex: array()
* @param array $auth - Authorize data, ex: array('domain' => 'https://test.bitrix24.com', 'access_token' => '7inpwszbuu8vnwr5jmabqa467rqur7u6')
*
* @return mixed
*/
function restCommand($method, array $params = array(), array $auth = array()) {
$queryUrl = 'https://' . $auth['domain'] . '/rest/' . $method;
$queryData = http_build_query(array_merge($params, array('auth' => $auth['access_token'])));
// writeToLog(array('URL' => $queryUrl, 'PARAMS' => array_merge($params, array("auth" => $auth["access_token"]))), 'ReportBot send data');
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_POST => 1,
CURLOPT_HEADER => 0,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_URL => $queryUrl,
CURLOPT_POSTFIELDS => $queryData,
));
$result = curl_exec($curl);
curl_close($curl);
$result = json_decode($result, 1);
return $result;
}
/**
* Write data to log file.
*
* @param mixed $data
* @param string $title
*
* @return bool
*/
function writeToLog($data, $title = '') {
$log = "\n------------------------\n";
$log .= date("Y.m.d G:i:s") . "\n";
$log .= (strlen($title) > 0 ? $title : 'DEBUG') . "\n";
$log .= print_r($data, 1);
$log .= "\n------------------------\n";
file_put_contents(__DIR__ . '/imbot.log', $log, FILE_APPEND);
return true;
}
/**
* Формируем отчет по команде
*
* @param string $text строка, которую отправил юзер
* @param int $user идентификатор пользователя, который нам написал
*
* @return array
*/
function getAnswer($command = '', $user) {
switch (strtolower($command)) {
case 'что горит':
$arResult = b24BadTasks($user);
break;
default:
$arResult = array(
'title' => 'Туплю-с',
'report' => 'Не соображу, что вы хотите узнать. А может вообще не умею...',
);
}
return $arResult;
}
function b24BadTasks ($user) {
$tasks = restCommand('task.item.list',
array(
'ORDER' => array('DEADLINE' => 'desc'),
'FILTER' => array('RESPONSIBLE_ID' => $user, '<DEADLINE' => '2016-03-23'),
'PARAMS' => array(),
'SELECT' => array()
),
$_REQUEST["auth"]);
if (count($tasks['result']) > 0) {
$arTasks = array();
foreach ($tasks['result'] as $id => $arTask) {
$arTasks[] = array(
'LINK' => array(
'NAME' => $arTask['TITLE'],
'LINK' => 'https://'.$_REQUEST['auth']['domain'].'/company/personal/user/'.$arTask['RESPONSIBLE_ID'].'/tasks/task/view/'.$arTask['ID'].'/'
)
);
$arTasks[] = array(
'DELIMITER' => array(
'SIZE' => 400,
'COLOR' => '#c6c6c6'
)
);
}
$arReport = array(
'title' => 'Да, кое-какие задачи уже пролетели, например:',
'report' => '',
'attach' => $arTasks
);
}
else {
$arReport = array(
'title' => 'Шикарно работаете!',
'report' => 'Нечем даже огорчить - ни одной просроченной задачи',
);
}
return $arReport;
}
Вы уже сейчас можете взять этот код, выложить на своем сервере и запустить бота на своем портале, не публикуя его через Приложения24. Для этого в Битрикс24 есть возможность устанавливать локальные приложения.
Идем в раздел левого меню «Приложения» – «Добавить приложение» и выбираем вариант «Для личного пользования».
Указываем название бота, а называться он у нас будет «Докладун», включаем опцию «Приложение использует только API», и даем приложению права доступа на «Создание и управление чат-ботами» (без этих прав приложение не сможет зарегистрировать бота), а также на «Задачи» и «Задачи (расширенные права)» (без этих прав приложение не сможет сформировать отчет по задачам, чтобы сообщить о них через бота пользователю).
Поскольку наш скрипт написан таким образом, что является обработчиком всех событий, то в форме приложения мы укажем обе ссылки на один и тот же URL.
Собственно, уже все. Чудо должно произойти практически сразу – в общем чате появится сообщение о том, что к порталу присоединился новый пользователь: чатбот по имени Докладун.
Мы можем открыть с ним чат, нажать на ссылку «Что горит?» и получить свой список просроченных задач.
Теперь о некоторых нюансах в коде.
При регистрации чатбота в обработчике ONAPPINSTALL Битрикс24 передает нам новый параметр авторизации application_token. Все последующие вызовы обработчиков событий также будут содержать этот ключ, позволяя нам таким нехитрым способом проверять, а действительно ли получили получаем дальнейшие вызовы обработчиков событий вроде ONIMBOTMESSAGEADD от Битрикс24?
Мы сохраняем этот ключ, вызывая saveParams в строке 106, а в дальнейшем проверяем, в частности, в строках 14-16 и 36-38.
Еще один нюанс, на который хотелось бы обратить внимание – это возможность при регистрации бота указать разные URL для обработки разных событий. Именно эти URL прописаны в примере в строках 74-78. В нашем случае мы отдельные адреса не используем, но возможность такая есть.
Саму логику ответов чатбота мы вынесли в метод getAnswer, который получает всего два параметра – целиком весь текст, который напечатал в чат пользователь, и идентификатор этого самого пользователя.
Метод исключительно простой, реагирует он на одну единственную команду “что горит”, получает просроченные задачи текущего пользователя вызывая метод REST API task.item.list (поэтому, если захотите этого чатбота на своем портале потестировать - не забудьте дать права приложению на задачи!). Отчет формируется в виде списка ссылок с разделителем. Здесь можно использовать все богатство возможностей CHAT API, подробности которого описаны в статье
Обратите внимание на хитрое форматирование с тэгом [send], при помощи которого мы формируем команду для бота, а пользователю не приходится ничего набирать. Есть два варианта - мы можем сразу отослать команду по клику, и мы можем написать за пользователя команду и предложить ему дописать какие-то параметры.
[send=текст]название кнопки[/send] - мгновенно отправляет «текст» боту [put=подсказка]название кнопки[/put] - вставляет «подсказка» в поле ввода за пользователя, далее, пользователь просто дописывает, что необходимо и может отправлять сообщение боту.
Очень удобная штука, чтобы сделать общение с ботом еще проще. В нашем примере мы как раз и предлагаем пользователю не набирать нашу единственную команду «Что горит», а просто кликнуть по соответствующей ссылке.
Помимо этих тэгов, вы можете использовать для оформления сообщений известные всем BB-коды B, U, I, S и BR.
Пожалуй, для начала более, чем достаточно. Вы можете попробовать написать своих ботов уже сейчас. Подробная документация выйдет в апреле, а описание базовых вещей вы, не откладывая, можете прочитать в соответствующей группе на портале для разработчиков Маркетплейс.
Это открытое коммьюнити, там можно легко зарегистрироваться, перейдя по ссылке. Сама документация, равно как и ее последующие обновления, будет выкладываться в группе
Между прочим, скоро появится поддержка slash-команд, которые позволят вызывать ботов из групповых чатов без явного приглашения в чат и даже позволят обращаться к ботам из комментариев живой ленты! Но об этом – в следующих материалах!