56  /  166

Работа с событиями

Просмотров: 33499
Дата последнего изменения: 11.04.2022
Александр Суворов
Сложность урока:
4 уровень - сложно, требуется сосредоточиться, внимание деталям и точному следованию инструкции.
1
2
3
4
5

При генерации события (добавление нового сообщения, открытие диалога с чат-ботом, приглашение чат-бота в чат, удаление чат-бота со стороны клиента) формируется запрос на обработчик события, указанный вами при регистрации бота, подробнее об механизме событий можно почитать тут.

Событие на установку приложения ONAPPINSTALL

[data] => Array(
  [LANGUAGE_ID] = ru // Базовый язык портала
  [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 // Ключ для продления авторизации
)

Обратите внимание! В базовом варианте работы с чат-ботом, поля expires_in, member_id, refresh_token - не требуются. Но, если для вашего приложения это необходимо, то прочитать, как с ними работать можно тут. Пример бота содержит возможность продления.



Событие на обновление приложения ONAPPUPDATE

[data] => Array(
  [LANGUAGE_ID] = ru // Базовый язык портала
  [VERSION] = 2 // Новая версия приложения
  [PREVIOUS_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 // Ключ для продления авторизации
)


Внимание! Все, что описывается ниже, - это содержимое поля [data] в событии. Данные авторизации в ключе [auth] содержат данные пользователя инициатора события, для получения данных авторизации бота, необходимо использовать [data][BOT][__BOT_CODE__].



Cобытие, возникающее при отправке сообщения
ONIMBOTMESSAGEADD

[BOT] => Array // Массив кодов чат-ботов, которым предназначено сообщение
(
    [39] => Array
    (
   [AUTH] => Array // Параметры для авторизации под ботом, для выполнения действий
         (
            [domain] => b24.hazz
            [member_id] => d41d8cd98f00b204e9800998ecf8427e
            [application_token] => 8006ddd764e69deb28af0c768b10ed65
         )
        [BOT_ID] => 39    
        [BOT_CODE] => newbot
    )
)
[PARAMS] => Array // Массив данных сообщения
(
    [DIALOG_ID] => 1    // Идентификатор диалога
    [CHAT_TYPE] => P    // Тип сообщения и чата, может быть P (чат один-на-один), C (с ограниченным количеством участников), O (публичный чат), S (чат-бот с повышенными привилегиями - supervisor)
    [CHAT_ENTITY_TYPE] => 'LINES'    // для идентификации чата (данные поле вы можете задать в момент создания), для чатов открытых линий в данном поле будет указано LINES
    [CHAT_ENTITY_ID] => 13    // для идентификации чата (данные поле вы можете задать в момент создания)
    [MESSAGE_ID] => 392 // Идентификатор сообщения
    [MESSAGE] => test3 // Сообщение
    [MESSAGE_ORIGINAL] => [USER=39]NewBot[/USER] test3 // Оригинальное сообщение с BB-кодом чат-бота (параметр доступен только в групповых чатах)
    [FROM_USER_ID] => 1 // Идентификатор пользователя отправившего сообщение
    [TO_USER_ID] => 1 // Идентификатор бота или пользователя: в диалоге "один-на-один" это будет идентификатор бота, а в групповом чате - идентификатор пользователя, кому направлено обращение. Если указано 0 - значит всем участникам чата
    [TO_CHAT_ID] => 6   // Идентификатор чата (параметр доступен только в групповых чатах)
    [LANGUAGE] => ru    // Идентификатор языка портала по умолчанию
)
[USER] => Array // Массив данных автора сообщения, может быть пустым, если ID = 0
(
    [ID] => 1 // Идентификатор пользователя
    [NAME] => Евгений Шеленков // Имя и фамилия пользователя
    [FIRST_NAME] => Евгений // Имя пользователя
    [LAST_NAME] => Шеленков // Фамилия пользователя
    [WORK_POSITION] => // Занимаемая должность
    [GENDER] => M // Пол, может быть либо M (мужской), либо F (женский)
    [IS_BOT] => 'Y' // Это пользователь - бот (Y), иначе - N.
    [IS_CONNECTOR] => 'Y' // Это пользователь - коннектор (участник ОЛ-чата, клиент), иначе - N.
    [IS_NETWORK] => 'Y' // Это пользователь нетворка (может быть участником ОЛ-чата, клиент или просто внешний пользователь), иначе - N.
    [IS_EXTRANET] => 'Y' // Это пользователь экстранет (все пользователи, которые не-интранет), иначе - N.
)


Cобытие, возникающее при редактировании сообщения
ONIMBOTMESSAGEUPDATE

[BOT] => Array // Массив кодов чат-ботов, которым предназначено сообщение
(
    [39] => Array
    (
   [AUTH] => Array // Параметры для авторизации под ботом, для выполнения действий
         (
            [domain] => b24.hazz
            [member_id] => d41d8cd98f00b204e9800998ecf8427e
            [application_token] => 8006ddd764e69deb28af0c768b10ed65
         )
        [BOT_ID] => 39    
        [BOT_CODE] => newbot
    )
)
[PARAMS] => Array // Массив данных сообщения
(
    [DIALOG_ID] => 1    // Идентификатор диалога
    [CHAT_TYPE] => P    // Тип сообщения и чата, может быть P (чат один-на-один), C (с ограниченным количеством участников), O (публичный чат), S (чат-бот с повышенными привилегиями - supervisor)
    [CHAT_ENTITY_TYPE] => 'LINES'    // для идентификации чата (данные поле вы можете задать в момент создания), для чатов открытых линий в данном поле будет указано LINES
    [CHAT_ENTITY_ID] => 13    // для идентификации чата (данные поле вы можете задать в момент создания)
    [MESSAGE_ID] => 392 // Идентификатор сообщения
    [MESSAGE] => test3 // Сообщение
    [MESSAGE_ORIGINAL] => [USER=39]NewBot[/USER] test3 // Оригинальное сообщение с BB-кодом чат-бота (параметр доступен только в групповых чатах)
    [FROM_USER_ID] => 1 // Идентификатор пользователя отправившего сообщение
    [TO_USER_ID] => 1 // Идентификатор бота или пользователя: в диалоге "один-на-один" это будет идентификатор бота, а в групповом чате - идентификатор пользователя, кому направлено обращение. Если указано 0 - значит всем участникам чата
    [TO_CHAT_ID] => 6   // Идентификатор чата (параметр доступен только в групповых чатах)
    [LANGUAGE] => ru    // Идентификатор языка портала по умолчанию
)
[USER] => Array // Массив данных автора сообщения, может быть пустым, если ID = 0
(
    [ID] => 1 // Идентификатор пользователя
    [NAME] => Евгений Шеленков // Имя и фамилия пользователя
    [FIRST_NAME] => Евгений // Имя пользователя
    [LAST_NAME] => Шеленков // Фамилия пользователя
    [WORK_POSITION] => // Занимаемая должность
    [GENDER] => M // Пол, может быть либо M (мужской), либо F (женский)
    [IS_BOT] => 'Y' // Это пользователь - бот (Y), иначе - N.
    [IS_CONNECTOR] => 'Y' // Это пользователь - коннектор (участник ОЛ-чата, клиент), иначе - N.
    [IS_NETWORK] => 'Y' // Это пользователь нетворка (может быть участником ОЛ-чата, клиент или просто внешний пользователь), иначе - N.
    [IS_EXTRANET] => 'Y' // Это пользователь экстранет (все пользователи, которые не-интранет), иначе - N.
)


Cобытие, возникающее при удалении сообщения
ONIMBOTMESSAGEDELETE

[BOT] => Array // Массив кодов чат-ботов, которым предназначено сообщение
(
    [39] => Array
    (
   [AUTH] => Array // Параметры для авторизации под ботом, для выполнения действий
         (
            [domain] => b24.hazz
            [member_id] => d41d8cd98f00b204e9800998ecf8427e
            [application_token] => 8006ddd764e69deb28af0c768b10ed65
         )
        [BOT_ID] => 39    
        [BOT_CODE] => newbot
    )
)
[PARAMS] => Array // Массив данных сообщения
(
    [DIALOG_ID] => 1    // Идентификатор диалога
    [CHAT_TYPE] => P    // Тип сообщения и чата, может быть P (чат один-на-один), C (с ограниченным количеством участников), O (публичный чат), S (чат-бот с повышенными привилегиями - supervisor)
    [CHAT_ENTITY_TYPE] => 'LINES'    // для идентификации чата (данные поле вы можете задать в момент создания), для чатов открытых линий в данном поле будет указано LINES
    [CHAT_ENTITY_ID] => 13    // для идентификации чата (данные поле вы можете задать в момент создания)
    [MESSAGE_ID] => 392 // Идентификатор сообщения
    [MESSAGE] => test3 // Сообщение
    [FROM_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 (женский)
    [IS_BOT] => 'Y' // Это пользователь - бот (Y), иначе - N.
    [IS_CONNECTOR] => 'Y' // Это пользователь - коннектор (участник ОЛ-чата, клиент), иначе - N.
    [IS_NETWORK] => 'Y' // Это пользователь нетворка (может быть участником ОЛ-чата, клиент или просто внешний пользователь), иначе - N.
    [IS_EXTRANET] => 'Y' // Это пользователь экстранет (все пользователи, которые не-интранет), иначе - N.
)


Событие на получение чат-ботом команды
ONIMCOMMANDADD

[COMMAND] => Array // Массив команд, которые были вызваны пользователем
(
    [14] => Array 
    (
      [AUTH] => Array // Параметры для авторизации под чат-ботом для выполнения действий
      (
         [domain] => b24.hazz
         [member_id] => d41d8cd98f00b204e9800998ecf8427e
         [application_token] => 8006ddd764e69deb28af0c768b10ed65
      )
      [BOT_ID] => 62 // Идентификатор чат-бота
      [BOT_CODE] => echobot // Код чат-бота
      [COMMAND] => echo // Вызванная команда
      [COMMAND_ID] => 14 // Идентификатор команды
      [COMMAND_PARAMS] => test // Параметры, с которыми была вызвана команда
      [COMMAND_CONTEXT] => TEXTAREA // Контекст выполнения команды. TEXTAREA, если команда введена руками, или KEYBOARD, если нажал на кнопку в клавиатуре
      [MESSAGE_ID] => 1221 // Идентификатор сообщения, на которое необходимо ответить
    )
)
[PARAMS] => Array // Массив данных сообщения
(
    [DIALOG_ID] => 1    // Идентифкатор диалога
    [CHAT_TYPE] => P    // Тип сообщения и чата, может быть P (чат один-на-один), C (с ограниченным количеством участников), O (публичный чат)
    [MESSAGE_ID] => 1221 // Идентификатор сообщения
    [MESSAGE] => /echo test // Сообщение
    [MESSAGE_ORIGINAL] => /echo test // Оригинальное сообщение с BB-кодом бота (параметр доступен только в групповых чатах)
    [FROM_USER_ID] => 1 // Идентификатор пользователя отправившего сообщение
    [TO_USER_ID] => 2 // Идентификатор другого пользователя (параметр доступен только в чатах один-на-один)
    [TO_CHAT_ID] => 6   // Идентификатор чата (параметр доступен только в групповых чатах)
    [LANGUAGE] => ru    // Идентификатор языка портала по умолчанию
)
[USER] => Array // Массив данных автора сообщения, может быть пустым, если ID = 0
(
    [ID] => 1 // Идентификатор пользователя
    [NAME] => Евгений Шеленков // Имя и фамилия пользователя
    [FIRST_NAME] => Евгений // Имя пользователя
    [LAST_NAME] => Шеленков // Фамилия пользователя
    [WORK_POSITION] => // Занимаемая должность
    [GENDER] => M // Пол, может быть либо M (мужской), либо F (женский)
)


Событие на получение информации чат-ботом о включении его
в чат (или личную переписку)
ONIMBOTJOINCHAT

[BOT] => Array // Массив кодов чат-ботов, которым предназначено событие
(
    [39] => Array // Параметры для авторизации под чат-ботом для выполнения действий
    (
   [AUTH] => Array // Параметры для авторизации под чат-ботом для выполнения действий
        (
            [domain] => b24.hazz 
            [member_id] => d41d8cd98f00b204e9800998ecf8427e
            [application_token] => 8006ddd764e69deb28af0c768b10ed65
        )
        [BOT_ID] => 39    
        [BOT_CODE] => newbot
    )
)
[PARAMS] => Array
(
    [DIALOG_ID] => 1 // Идентифкатор диалога
    [BOT_ID] => 39    // Идентификатор бота
    [CHAT_TYPE] => P // Тип сообщения и чата, может быть P (чат один-на-один), C (с ограниченным количеством участников), O (публичный чат), S (чат-бот с повышенными привилегиями - supervisor)
    [CHAT_ENTITY_TYPE] => 'LINES'    // Подтип чата, может принимать значение LINES (Открытые линии) или пусто 
    [USER_ID] => 1   // Идентификатор пользователя (для чата один-на-один - открывавший чат-бота, для групповых чатов - пригласивший чат-бота)
    [LANGUAGE] => ru // Идентификатор языка портала по умолчанию
)
[USER] => Array // Массив данных пользователя, может быть пустым, если ID = 0
(
    [ID] => 1 // Идентификатор пользователя
    [NAME] => Евгений Шеленков // Имя и фамилия пользователя
    [FIRST_NAME] => Евгений // Имя пользователя
    [LAST_NAME] => Шеленков // Фамилия пользователя
    [WORK_POSITION] => // Занимаемая должность
    [GENDER] => M // Пол, может быть либо M (мужской), либо F (женский)
)


Событие на удаление чат-бота ONIMBOTDELETE

[BOT_ID] => 39 // Идентификатор чат-бота
[BOT_CODE] => giphy // Код чат-бота


Пример кода обработчика для работы с событиями

Пример полностью рабочий, сохраняет конфигурацию в файл, он поможет вам понять, как в целом функционируют чат-боты.

Файл с комментариями и аватаркой доступны в репозитории GitHub

5
Курсы разработаны в компании «1С-Битрикс»
Доступна новая документация по REST: понятнее описания, больше примеров, удобнее поиск
Перейти