Этот код обрабатывает установку приложения через 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;
}; |
Важные примечания по использованию:
Установите зависимость: Перед использованием установите библиотеку axios (команда npm install axios).
Заполните константы: Замените your_client_id_from_bitrix24, your_client_secret_from_bitrix24 и your_openline_chat_id на реальные значения из вашего приложения Bitrix24.
Хранение токенов: В реальном приложении нельзя хранить токены в переменных. Этот код использует заглушку storedAccessToken. Вам необходимо реализовать логику сохранения и получения access_token и refresh_token из безопасного хранилища (например, базы данных DynamoDB или AWS Secrets Manager) при помощи portalDomain в качестве ключа.
Настройте права: В настройках приложения в Bitrix24 должны быть выданы права на im (для отправки сообщений) и crm (для получения событий).