Разработка serverless-приложений для Bitrix24 в локальной среде

Внимание! Работает режим премодерации. Все сообщения публикуются после проверки!
Страницы: 1
Ответить
RSS
Разработка serverless-приложений для Bitrix24 в локальной среде
Создание локального (serverless) приложения для Bitrix24 с нуля

Ниже представлена подробная статья о том, как создать «локальное»  (serverless) приложение для Bitrix24 практически с нуля. Мы разберёмся,  что подразумевается под «локальным» приложением в контексте Bitrix24,  как настроить окружение, как протестировать взаимодействие с Bitrix24 и,  наконец, как развёртывать и поддерживать такое приложение.
Изменено: Валерий Макеев - 29.09.2025 13:57:11
Этот код обрабатывает установку приложения через OAuth и при  создании нового лида автоматически отправляет уведомление в заданный чат  Bitrix24.
Код
// dependencies
const axios = require('axios');

// Глобальные переменные (замените на свои значения)
const CLIENT_ID = 'your_client_id_from_bitrix24';
const CLIENT_SECRET = 'your_client_secret_from_bitrix24';
const OPENLINE_CHAT_ID = 'your_openline_chat_id'; // ID чата для уведомлений

exports.handler = async (event, context) => {
  const { httpMethod, body, queryStringParameters } = event;
  let response;

  try {
    // Обработка GET запроса (OAuth редирект от Bitrix24)
    if (httpMethod === 'GET' && queryStringParameters.code) {
      const authCode = queryStringParameters.code;
      const portalDomain = queryStringParameters.domain;

      // Обмен кода авторизации на access token
      const tokenResponse = await axios.post(
        `https://${portalDomain}/oauth/token/?` +
        `grant_type=authorization_code` +
        `&client_id=${CLIENT_ID}` +
        `&client_secret=${CLIENT_SECRET}` +
        `&code=${authCode}`
      );

      const { access_token, refresh_token } = tokenResponse.data;
      // Здесь токены должны СОХРАНЯТЬСЯ в безопасное хранилище (например, DynamoDB)
      // Для примера просто логируем
      console.log('Tokens received. Access token:', access_token);

      response = {
        statusCode: 200,
        body: JSON.stringify({ message: 'Приложение успешно установлено. Токены получены.' }),
      };
    }
    // Обработка POST запроса (события от Bitrix24)
    else if (httpMethod === 'POST') {
      const requestData = JSON.parse(body || '{}');
      console.log('Incoming event:', JSON.stringify(requestData));

      // Обработка события "добавлен лид"
      if (requestData.event === 'ONCRMTASKADD') {
        const taskId = requestData.data.FIELDS_AFTER.ID;
        const taskTitle = requestData.data.FIELDS_AFTER.TITLE;

        // Получаем access_token из хранилища (здесь - заглушка)
        // В реальности он должен быть получен из БД по domain
        const storedAccessToken = 'stored_access_token_here';

        // Отправляем сообщение в чат
        const postData = {
          message: `✅ Создана новая задача: [${taskId}] ${taskTitle}`,
          // Другие параметры сообщения...
        };

        await axios.post(
          `https://${requestData.auth.domain}/rest/im.message.add.json`,
          {
            ...postData,
            auth: storedAccessToken // Передача токена как параметра
          }
        );

        response = {
          statusCode: 200,
          body: JSON.stringify({ message: 'Уведомление отправлено в чат.' }),
        };
      } else {
        // Ответ для других событий
        response = {
          statusCode: 200,
          body: JSON.stringify({ message: 'Событие получено, но не обработано.' }),
        };
      }
    } else {
      response = {
        statusCode: 400,
        body: JSON.stringify({ error: 'Неверный запрос' }),
      };
    }
  } catch (error) {
    console.error('Error:', error.response?.data || error.message);
    response = {
      statusCode: 500,
      body: JSON.stringify({ 
        error: 'Internal server error',
        details: error.message 
      }),
    };
  }

  return response;
};

Важные примечания по использованию:

  1. Установите зависимость: Перед использованием установите библиотеку axios (команда npm install axios).

  2. Заполните константы: Замените your_client_id_from_bitrix24, your_client_secret_from_bitrix24 и your_openline_chat_id на реальные значения из вашего приложения Bitrix24.

  3. Хранение токенов: В реальном приложении нельзя хранить токены в переменных. Этот код использует заглушку storedAccessToken. Вам необходимо реализовать логику сохранения и получения access_token и refresh_token из безопасного хранилища (например, базы данных DynamoDB или AWS Secrets Manager) при помощи portalDomain в качестве ключа.

  4. Настройте права: В настройках приложения в Bitrix24 должны быть выданы права на im (для отправки сообщений) и crm (для получения событий).

Страницы: 1
Ответить
Форма ответов
Текст сообщения*
Перетащите файлы
Ничего не найдено
Файл
 

Стоимость услуг по разработке и сопровождению сайтов на 1C-Битрикс

Лечение сайтов от вирусов

восстановление сайта и подъем версии PHP

от 25 000 рублей
Лечение сайтов на решениях АСПРО и прочих.

* полный комплекс лечения проекта и закрытия дыр

Разработка интернет-магазина с готовой версткой

от 4 недель

от 90 000 рублей

* указана минимальная стоимость. Стоимость выбранной лицензии «1С-Битрикс» оплачивается отдельно.

Перенос сайтов на «1С-Битрикс»

сайты на платформе «1С-Битрикс» — это удобство, надежность и высокая посещаемость

от 12 000 рублей
Перенос сайтов с любых CMS и статичных страниц на платформу «1С-Битрикс», с учетом дизайна, верстки и урл-адресов. С сохранением всей информации и структуры сайта.

* зависит от объема выполняемых работ.