Поиск по истории уведомлений im.notify.history.search

Выберите инструмент для разработки с AI-агентом:

  • используйте Битрикс24 Вайбкод, чтобы создать приложение для Битрикс24 по описанию задачи без знания языков программирования. Агент напишет код и разместит приложение на сервере без ручной настройки хостинга
  • используйте MCP-сервер, чтобы разрабатывать интеграцию через REST API в своем проекте. Агент будет обращаться к официальной REST-документации

Scope: im

Кто может выполнять метод: любой пользователь

Метод im.notify.history.search ищет уведомления текущего пользователя по тексту, типу, дате и автору.

Параметры метода

Обязательные параметры отмечены *

Название
тип

Описание

SEARCH_TEXT
string

Текст для поиска в тексте уведомления. Регистр не учитывается.

Если других фильтров нет, длина без учета пробелов по краям — от 3 символов

SEARCH_TYPE
string

Тип уведомления в формате MODULE или MODULE|EVENT, например calendar или calendar|change. Коды типов возвращает метод im.notify.schema.get.

Не учитывается, если передан SEARCH_TYPES

SEARCH_TYPES
array

Массив типов уведомлений, например ["calendar", "tasks"].

Если в массиве один элемент, допустим формат MODULE|EVENT. Если элементов несколько, передавайте только коды модулей MODULE: значения MODULE|EVENT в этом случае ничего не находят

SEARCH_DATE
datetime

Дата и время в формате RFC 3339, например 2026-11-10T00:00:00+03:00. Метод найдет уведомления, созданные в течение 24 часов от этого момента.

Не учитывается, если переданы SEARCH_DATE_FROM и SEARCH_DATE_TO

SEARCH_DATE_FROM
datetime

Начало периода в формате RFC 3339. Передавайте вместе с SEARCH_DATE_TO.

Если передать только SEARCH_DATE_FROM без других фильтров, метод вернет пустой массив result

SEARCH_DATE_TO
datetime

Конец периода в формате RFC 3339. Передавайте вместе с SEARCH_DATE_FROM. Метод добавляет к значению 24 часа: при 2026-11-10T00:00:00+03:00 в выборку попадут уведомления за 10 ноября

SEARCH_AUTHORS
array

Массив идентификаторов авторов уведомлений, например [1, 15]. Значение 0 выбирает системные уведомления.

Получить идентификаторы пользователей можно методом user.get

GROUP_TAG
string

Группа уведомлений для дополнительной фильтрации. Допустимые значения:

  • confirm — уведомления, которые требуют подтверждения
  • mention — упоминания
  • admin — уведомления для администратора
  • числовой идентификатор пользовательской группы уведомлений

Работает только вместе с другими фильтрами

LAST_ID
integer

Идентификатор последнего уведомления на предыдущей странице — поле id последнего элемента массива notifications. Метод вернет уведомления с идентификатором меньше LAST_ID.

Для первой страницы не передавайте. Значение должно состоять только из цифр, иначе метод вернет ошибку LAST_ID_STRING

LIMIT
integer

Количество уведомлений на странице. По умолчанию — 50, максимум — 50. Большее значение метод уменьшает до 50.

Не передавайте 0 и отрицательные значения: метод вернет все найденные уведомления без ограничения

CONVERT_TEXT
string

Метод принимает параметр, но не учитывает его

Передайте хотя бы один фильтр: SEARCH_TEXT длиной от 3 символов, SEARCH_TYPE, SEARCH_TYPES, SEARCH_DATE, SEARCH_AUTHORS или пару SEARCH_DATE_FROM и SEARCH_DATE_TO. Иначе метод вернет ошибку SEARCH_TEXT_ERROR. Несколько фильтров объединяются условием И.

Как получить все результаты поиска

Метод сортирует уведомления по убыванию даты создания, затем по убыванию id.

  1. Запросите первую страницу без LAST_ID. В ответе будет поле total_results — общее количество найденных уведомлений
  2. Для следующей страницы передайте те же фильтры и LAST_ID = id последнего элемента массива notifications. На этих страницах поля total_results нет
  3. Повторяйте шаг 2, пока метод не вернет меньше уведомлений, чем LIMIT

Примеры кода

Как использовать примеры в документации

curl -X POST \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{"SEARCH_TEXT":"счет","SEARCH_TYPE":"rest|rest_notify","SEARCH_DATE_FROM":"2026-11-01T00:00:00+03:00","SEARCH_DATE_TO":"2026-11-10T00:00:00+03:00","LIMIT":20}' \
  https://**put_your_bitrix24_address**/rest/**put_your_user_id_here**/**put_your_webhook_here**/im.notify.history.search
curl -X POST \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{"SEARCH_TEXT":"счет","SEARCH_TYPE":"rest|rest_notify","SEARCH_DATE_FROM":"2026-11-01T00:00:00+03:00","SEARCH_DATE_TO":"2026-11-10T00:00:00+03:00","LIMIT":20,"auth":"**put_access_token_here**"}' \
  https://**put_your_bitrix24_address**/rest/im.notify.history.search
// This snippet is an ES module: top-level await requires type="module" or a bundler.
// $b24 is an already-initialized SDK instance (see the SDK "Get started" guide).
import { Text } from '@bitrix24/b24jssdk'
import type { B24Frame, ISODate } from '@bitrix24/b24jssdk'

declare const $b24: B24Frame

// Shape of the payload returned in result (match the "response handling" section of the page)
// total_results is returned only on the first page (without LAST_ID)
type NotifyHistorySearchResult = {
  chat_id: number
  notifications: Array<{
    id: number
    chat_id: number
    author_id: number
    date: ISODate
    notify_type: number
    notify_module: string
    notify_event: string
    notify_tag: string
    notify_sub_tag: string
    notify_title: string
    setting_name: string
    text: string
    params: object | null
    notify_read: 'Y' | 'N'
    notify_buttons?: string
  }>
  users: Array<{
    id: number
    active: boolean
    name: string
    first_name: string
    last_name: string
    work_position: string | null
    color: string
    avatar: string
    avatar_hr: string
    gender: 'M' | 'F'
    birthday: string
    extranet: boolean
    network: boolean
    bot: boolean
    connector: boolean
    external_auth_id: string
    internal_account: boolean
    intranet_user: boolean
    status: string
    idle: false
    last_activity_date: ISODate | false
    mobile_last_date: false
    desktop_last_date: false
    absent: ISODate | false
    departments: number[]
    phones: Record<string, string> | false
    bot_data: object | null
    type: string
    website: string
    email: string
  }>
  total_results?: number
}

try {
  const response = await $b24.actions.v2.call.make<NotifyHistorySearchResult>({
    method: 'im.notify.history.search',
    params: {
      SEARCH_TEXT: 'счет',
      SEARCH_TYPE: 'rest|rest_notify',
      SEARCH_DATE_FROM: '2026-11-01T00:00:00+03:00',
      SEARCH_DATE_TO: '2026-11-10T00:00:00+03:00',
      LIMIT: 20,
    },
    requestId: Text.getUuidRfc4122()
  })

  // The payload is available only on a successful response
  if (!response.isSuccess) {
    console.error(response.getErrorMessages().join('; '))
  } else {
    const result = response.getData()!.result
    console.info('Found:', result.total_results, 'On page:', result.notifications.length)

    // Pass the id of the last notification as LAST_ID to get the next page
    const last = result.notifications.at(-1)
    if (last && result.notifications.length === 20) {
      console.info('Next page LAST_ID:', last.id)
    }
  }
} catch (error) {
  // Thrown on transport or SDK failures (AjaxError, SdkError, etc.)
  console.error(error)
}
<!-- Load the SDK (UMD build); it is exposed as the global B24Js -->
<script src="https://unpkg.com/@bitrix24/b24jssdk@1/dist/umd/index.min.js"></script>
<script>
  async function searchNotifyHistory() {
    try {
      // Initialize the SDK inside a Bitrix24 frame
      const $b24 = await B24Js.initializeB24Frame()

      const response = await $b24.actions.v2.call.make({
        method: 'im.notify.history.search',
        params: {
          SEARCH_TEXT: 'счет',
          SEARCH_TYPE: 'rest|rest_notify',
          SEARCH_DATE_FROM: '2026-11-01T00:00:00+03:00',
          SEARCH_DATE_TO: '2026-11-10T00:00:00+03:00',
          LIMIT: 20,
        },
        requestId: B24Js.Text.getUuidRfc4122()
      })

      // The payload is available only on a successful response
      if (!response.isSuccess) {
        console.error(response.getErrorMessages().join('; '))
        return
      }

      const result = response.getData().result
      console.info('Found:', result.total_results, 'On page:', result.notifications.length)

      // Pass the id of the last notification as LAST_ID to get the next page
      const last = result.notifications.at(-1)
      if (last && result.notifications.length === 20) {
        console.info('Next page LAST_ID:', last.id)
      }
    } catch (error) {
      // Thrown on transport or SDK failures (AjaxError, SdkError, etc.)
      console.error(error)
    }
  }

  document.addEventListener('DOMContentLoaded', searchNotifyHistory)
</script>
from b24pysdk.errors import BitrixAPIError, BitrixSDKException

try:
    bitrix_response = client.im.notify.history.search(
        search_text="счет",
        search_type="rest|rest_notify",
        search_date_from="2026-11-01T00:00:00+03:00",
        search_date_to="2026-11-10T00:00:00+03:00",
        limit=20,
    ).response
    result = bitrix_response.result
    print(result)
except BitrixAPIError as error:
    print(
        "Ошибка Bitrix API",
        f"error: {error.error}",
        f"error_description: {error.error_description}",
        sep="\n",
    )
except BitrixSDKException as error:
    print(f"Ошибка Bitrix SDK: {error.message}")
except Exception as error:
    print(f"Непредвиденная ошибка: {error}")
try {
    $response = $b24Service->core->call(
        'im.notify.history.search',
        [
            'SEARCH_TEXT' => 'счет',
            'SEARCH_TYPE' => 'rest|rest_notify',
            'SEARCH_DATE_FROM' => '2026-11-01T00:00:00+03:00',
            'SEARCH_DATE_TO' => '2026-11-10T00:00:00+03:00',
            'LIMIT' => 20,
        ]
    );

    $result = $response->getResponseData()->getResult();

    print_r($result);
} catch (Throwable $exception) {
    echo $exception->getMessage();
}
BX24.callMethod(
    'im.notify.history.search',
    {
        SEARCH_TEXT: 'счет',
        SEARCH_TYPE: 'rest|rest_notify',
        SEARCH_DATE_FROM: '2026-11-01T00:00:00+03:00',
        SEARCH_DATE_TO: '2026-11-10T00:00:00+03:00',
        LIMIT: 20,
    },
    function(result) {
        if (result.error()) {
            console.error(result.error().ex);
        } else {
            console.log(result.data());
        }
    }
);
require_once('crest.php');

$result = CRest::call(
    'im.notify.history.search',
    [
        'SEARCH_TEXT' => 'счет',
        'SEARCH_TYPE' => 'rest|rest_notify',
        'SEARCH_DATE_FROM' => '2026-11-01T00:00:00+03:00',
        'SEARCH_DATE_TO' => '2026-11-10T00:00:00+03:00',
        'LIMIT' => 20,
    ]
);

if (!empty($result['error'])) {
    echo 'Error: ' . $result['error_description'];
} else {
    var_dump($result['result']);
}
// client и ctx уже созданы — см. раздел «SDK для Go»
res, err := client.Core().Call(ctx, "im.notify.history.search", b24.Params{
	"SEARCH_TEXT":      "счет",
	"SEARCH_TYPE":      "rest|rest_notify",
	"SEARCH_DATE_FROM": "2026-11-01T00:00:00+03:00",
	"SEARCH_DATE_TO":   "2026-11-10T00:00:00+03:00",
	"LIMIT":            20,
}, b24.WithIdempotent())
if err != nil {
	return fmt.Errorf("im.notify.history.search: %w", err)
}

var item struct {
	ChatID        int `json:"chat_id"`
	TotalResults  int `json:"total_results"`
	Notifications []struct {
		ID   int    `json:"id"`
		Text string `json:"text"`
	} `json:"notifications"`
}
if err := json.Unmarshal(res.Result, &item); err != nil {
	return fmt.Errorf("разбор ответа: %w", err)
}
fmt.Println(item.TotalResults, len(item.Notifications))

// id последнего уведомления передайте в LAST_ID для следующей страницы
if n := len(item.Notifications); n == 20 {
	fmt.Println("LAST_ID:", item.Notifications[n-1].ID)
}

Обработка ответа

HTTP-статус: 200

{
    "result": {
        "chat_id": 2535,
        "notifications": [
            {
                "id": 44021,
                "chat_id": 2535,
                "author_id": 15,
                "date": "2026-11-10T16:37:49+03:00",
                "notify_type": 2,
                "notify_module": "rest",
                "notify_event": "rest_notify",
                "notify_tag": "",
                "notify_sub_tag": "",
                "notify_title": "",
                "setting_name": "rest|rest_notify",
                "text": "Проверьте счет [B]№ 42[/B]",
                "params": null,
                "notify_read": "N"
            }
        ],
        "users": [
            {
                "id": 15,
                "active": true,
                "name": "Иван Петров",
                "first_name": "Иван",
                "last_name": "Петров",
                "work_position": null,
                "color": "#58cc47",
                "avatar": "https://cdn-ru.bitrix24.ru/b1234567/main/avatar.png",
                "avatar_hr": "https://cdn-ru.bitrix24.ru/b1234567/main/avatar.png",
                "gender": "M",
                "birthday": "",
                "extranet": false,
                "network": false,
                "bot": false,
                "connector": false,
                "external_auth_id": "socservices",
                "internal_account": true,
                "intranet_user": false,
                "status": "online",
                "idle": false,
                "last_activity_date": "2026-11-10T16:36:42+03:00",
                "mobile_last_date": false,
                "desktop_last_date": false,
                "absent": false,
                "departments": [],
                "phones": {
                    "personal_mobile": "79001234567"
                },
                "bot_data": null,
                "type": "user",
                "website": "",
                "email": ""
            }
        ],
        "total_results": 1
    },
    "time": {
        "start": 1794317871,
        "finish": 1794317871.341717,
        "duration": 0.341717004776001,
        "processing": 0,
        "date_start": "2026-11-10T16:37:51+03:00",
        "date_finish": "2026-11-10T16:37:51+03:00",
        "operating_reset_at": 1794318420,
        "operating": 0
    }
}

Возвращаемые данные

Название
тип

Описание

result
object

Объект с результатами поиска (подробное описание).

Если у пользователя еще нет системного чата уведомлений или передан только SEARCH_DATE_FROM либо только SEARCH_DATE_TO, метод вернет пустой массив []

time
time

Информация о времени выполнения запроса

Объект result

Название
тип

Описание

chat_id
integer

Идентификатор системного чата уведомлений пользователя

notifications
array

Массив найденных уведомлений на странице (подробное описание). Если ничего не найдено — пустой массив

users
array

Массив авторов найденных уведомлений (подробное описание). В массив не попадают системные уведомления с author_id = 0

total_results
integer

Общее количество найденных уведомлений. Есть только в ответе на запрос без LAST_ID

Объект notification

Название
тип

Описание

id
integer

Идентификатор уведомления. Используйте id последнего элемента как LAST_ID для следующей страницы

chat_id
integer

Идентификатор системного чата уведомлений пользователя

author_id
integer

Идентификатор автора уведомления. Для системных уведомлений — 0

date
datetime

Дата и время создания уведомления

notify_type
integer

Тип уведомления. Возможные значения:

  • 1 — уведомление с кнопками, требует подтверждения
  • 2 — персональное уведомление от пользователя
  • 4 — системное уведомление

notify_module
string

Идентификатор модуля, который отправил уведомление

notify_event
string

Код события уведомления

notify_tag
string

Тег уведомления или пустая строка

notify_sub_tag
string

Дополнительный тег уведомления или пустая строка

notify_title
string

Заголовок уведомления или пустая строка

setting_name
string

Код типа уведомления в формате MODULE|EVENT. Список кодов возвращает метод im.notify.schema.get

text
string

Текст уведомления. Форматирование передается BB-кодами, например [B]...[/B]

params
object

Дополнительные параметры уведомления, например вложение ATTACH, или null

notify_read
string

Статус прочтения уведомления. Возможные значения: Y — прочитано, N — не прочитано

notify_buttons
string

JSON-строка с кнопками уведомления. Поле есть только у уведомлений с notify_type = 1

Объект user

Название
тип

Описание

id
integer

Идентификатор пользователя

active
boolean

Признак активности пользователя

name
string

Имя и фамилия пользователя

first_name
string

Имя пользователя

last_name
string

Фамилия пользователя

work_position
string

Должность пользователя или null

color
string

Цвет пользователя в формате hex

avatar
string

Ссылка на аватар или пустая строка

avatar_hr
string

Ссылка на аватар высокого разрешения или пустая строка

gender
string

Пол пользователя. Возможные значения: M — мужской, F — женский

birthday
string

День рождения в формате DD-MM или пустая строка

extranet
boolean

Признак внешнего пользователя

network
boolean

Признак пользователя Битрикс24 Network

bot
boolean

Признак бота

connector
boolean

Признак пользователя открытых линий

external_auth_id
string

Код внешней авторизации

internal_account
boolean

Признак внутренней учетной записи: external_auth_id не относится к внешним типам авторизации

intranet_user
boolean

Признак сотрудника: у пользователя есть подразделение и внутренняя учетная запись

status
string

Статус пользователя

idle
boolean

В этом методе всегда false

last_activity_date
datetime

Дата последней активности пользователя или false

mobile_last_date
boolean

В этом методе всегда false

desktop_last_date
boolean

В этом методе всегда false

absent
datetime

Дата окончания отсутствия пользователя или false

departments
array

Массив идентификаторов подразделений

phones
object

Телефоны пользователя (подробное описание) или false, если телефонов нет

bot_data
object

Данные бота или null

type
string

Тип пользователя. Возможные значения: user, bot, extranet, collaber, guest

website
string

Сайт пользователя

email
string

Email пользователя

Объект phones

В объекте есть только заполненные телефоны.

Название
тип

Описание

work_phone
string

Рабочий телефон

personal_mobile
string

Мобильный телефон

inner_phone
string

Внутренний телефон

Обработка ошибок

HTTP-статус: 400

{
    "error": "SEARCH_TEXT_ERROR",
    "error_description": "SEARCH_TEXT can't be less then 3 symbols"
}

Название
тип

Описание

error
string

Строковый код ошибки. Состоит из цифр, латинских букв и знака подчеркивания. Может прийти пустым — тогда причину показывает только error_description

error_description
string

Текст ошибки для разработчика. Не показывайте его конечному пользователю без обработки

Возможные коды ошибок

Статус

Код

Описание

Значение

400

SEARCH_TEXT_ERROR

SEARCH_TEXT can't be less then 3 symbols

Не передан ни один фильтр, а SEARCH_TEXT не передан или короче 3 символов. Ошибка возникает и в том случае, если передан только GROUP_TAG

400

LAST_ID_STRING

Last notification ID can't be string

Значение LAST_ID содержит не только цифры, например abc или -5

400

500

Incorrect date/time: abc

Значение SEARCH_DATE, SEARCH_DATE_FROM или SEARCH_DATE_TO нельзя распознать как дату

Статусы и коды системных ошибок

HTTP-статус: 4xx, 5xx

Описанные ниже ошибки возвращает сам REST API, а не логика конкретного метода. Они могут прийти в ответ на любой метод.

Статус

Код
Текст ошибки

Описание

500

INTERNAL_SERVER_ERROR
Internal server error

Возникла внутренняя ошибка сервера. Повторите вызов, а если ошибка сохраняется, обратитесь к администратору сервера или в техническую поддержку Битрикс24

500

ERROR_UNEXPECTED_ANSWER
Server returned an unexpected response

Сервер вернул неожиданный ответ. Повторите вызов, а если ошибка сохраняется, обратитесь к администратору сервера или в техническую поддержку Битрикс24

503

QUERY_LIMIT_EXCEEDED
Too many requests

Превышен лимит на интенсивность запросов

429

OPERATION_TIME_LIMIT
Method is blocked due to operation time limit

Метод заблокирован из-за превышения лимита на ресурсоемкость запросов. Блокировка снимается автоматически, когда накопленное время выполнения метода перестает превышать лимит

401

NO_AUTH_FOUND
Wrong authorization data

В запросе нет авторизационных данных: не передан ни access-токен, ни код вебхука

401

INVALID_REQUEST
Https required

Методы вызываются только по протоколу HTTPS

401

OVERLOAD_LIMIT
REST API is blocked due to overload

REST API заблокирован из-за перегрузки. Это ручная индивидуальная блокировка. Чтобы ее снять, обратитесь в техническую поддержку Битрикс24

401

ACCESS_DENIED
REST is available only on commercial plans

REST API доступен только на коммерческих тарифах. У вебхука текст ошибки другой — REST is available only by subscription

401

INVALID_CREDENTIALS
Invalid request credentials

Не найден активный вебхук с указанным идентификатором пользователя и секретным кодом

404

ERROR_METHOD_NOT_FOUND
Method not found!

Метод с таким именем не найден. Имя написано с ошибкой, метода нет в REST API или он недоступен без нужного скоупа

401

insufficient_scope
The request requires higher privileges than provided by the webhook token

Запрос требует более широких прав, чем есть у токена: у вебхука это выданные ему права, у приложения — скоуп. У приложения текст ошибки заканчивается на provided by the access token

401

expired_token
The access token provided has expired

Срок действия access-токена истек

401

user_access_error
The user does not have access to the application

Приложение установлено, но администратор Битрикс24 открыл доступ к нему только конкретным пользователям

403

PORTAL_DELETED
Portal was deleted

Публичная часть сайта закрыта. Чтобы открыть ее на коробочной установке, отключите опцию «Временное закрытие публичной части сайта». Путь к настройке: Рабочий стол > Настройки > Настройки продукта > Настройки модулей > Главный модуль > Временное закрытие публичной части сайта

Продолжите изучение