add modules

This commit is contained in:
Татьяна Фарбер 2026-04-03 21:45:48 +04:00
parent dae8491c9f
commit f96151903a
18 changed files with 1898 additions and 64 deletions

655
README.md
View File

@ -1333,3 +1333,658 @@
```crm.timeline.note.delete(ownerTypeId,ownerId,itemType,itemId)```
# Задачи
```lua
local tasks = require("bitrix.tasks")
```
#### Получить задачу по ID `tasks.task.get`
[tasks.task.get](https://apidocs.bitrix24.ru/api-reference/tasks/tasks-task-get.html)
```lua
tasks.task.get(taskId)
```
#### Получить список задач `tasks.task.list`
[tasks.task.list](https://apidocs.bitrix24.ru/api-reference/tasks/tasks-task-list.html)
```lua
tasks.task.list(order, filter, select, params, start)
```
#### Создать новую задачу `tasks.task.add`
[tasks.task.add](https://apidocs.bitrix24.ru/api-reference/tasks/tasks-task-add.html)
```lua
tasks.task.add(fields)
```
#### Обновить задачу `tasks.task.update`
[tasks.task.update](https://apidocs.bitrix24.ru/api-reference/tasks/tasks-task-update.html)
```lua
tasks.task.update(taskId, fields)
```
#### Удалить задачу `tasks.task.delete`
[tasks.task.delete](https://apidocs.bitrix24.ru/api-reference/tasks/tasks-task-delete.html)
```lua
tasks.task.delete(taskId)
```
#### Прикрепить файлы к задаче `tasks.task.files.attach`
[tasks.task.files.attach](https://apidocs.bitrix24.ru/api-reference/tasks/tasks-task-files-attach.html)
```lua
tasks.task.files.attach(taskId, fileIds)
```
#### Делегировать задачу `tasks.task.delegate`
[tasks.task.delegate](https://apidocs.bitrix24.ru/api-reference/tasks/tasks-task-delegate.html)
```lua
tasks.task.delegate(taskId, fields)
```
#### Получить счетчики пользователя `tasks.task.counters.get`
[tasks.task.counters.get](https://apidocs.bitrix24.ru/api-reference/tasks/tasks-task-counters-get.html)
```lua
tasks.task.counters.get()
```
#### Перевести задачу в статус «выполняется» `tasks.task.start`
[tasks.task.start](https://apidocs.bitrix24.ru/api-reference/tasks/tasks-task-start.html)
```lua
tasks.task.start(taskId)
```
#### Остановить выполнение задачи `tasks.task.pause`
[tasks.task.pause](https://apidocs.bitrix24.ru/api-reference/tasks/tasks-task-pause.html)
```lua
tasks.task.pause(taskId)
```
#### Перевести задачу в статус «отложена» `tasks.task.defer`
[tasks.task.defer](https://apidocs.bitrix24.ru/api-reference/tasks/tasks-task-defer.html)
```lua
tasks.task.defer(taskId)
```
#### Завершить задачу `tasks.task.complete`
[tasks.task.complete](https://apidocs.bitrix24.ru/api-reference/tasks/tasks-task-complete.html)
```lua
tasks.task.complete(taskId)
```
#### Возобновить завершенную задачу `tasks.task.renew`
[tasks.task.renew](https://apidocs.bitrix24.ru/api-reference/tasks/tasks-task-renew.html)
```lua
tasks.task.renew(taskId)
```
#### Принять задачу `tasks.task.approve`
[tasks.task.approve](https://apidocs.bitrix24.ru/api-reference/tasks/tasks-task-approve.html)
```lua
tasks.task.approve(taskId)
```
#### Отклонить задачу `tasks.task.disapprove`
[tasks.task.disapprove](https://apidocs.bitrix24.ru/api-reference/tasks/tasks-task-disapprove.html)
```lua
tasks.task.disapprove(taskId)
```
#### Начать наблюдение за задачей `tasks.task.startwatch`
[tasks.task.startwatch](https://apidocs.bitrix24.ru/api-reference/tasks/tasks-task-startwatch.html)
```lua
tasks.task.startwatch(taskId)
```
#### Остановить наблюдение за задачей `tasks.task.stopwatch`
[tasks.task.stopwatch](https://apidocs.bitrix24.ru/api-reference/tasks/tasks-task-stopwatch.html)
```lua
tasks.task.stopwatch(taskId)
```
#### Добавить задачу в избранное `tasks.task.favorite.add`
[tasks.task.favorite.add](https://apidocs.bitrix24.ru/api-reference/tasks/tasks-task-favorite-add.html)
```lua
tasks.task.favorite.add(taskId)
```
#### Удалить задачу из избранного `tasks.task.favorite.remove`
[tasks.task.favorite.remove](https://apidocs.bitrix24.ru/api-reference/tasks/tasks-task-favorite-remove.html)
```lua
tasks.task.favorite.remove(taskId)
```
#### Получить доступные поля задачи `tasks.task.getFields`
[tasks.task.getFields](https://apidocs.bitrix24.ru/api-reference/tasks/tasks-task-getfields.html)
```lua
tasks.task.getFields()
```
#### Проверить доступ к задаче `tasks.task.getaccess`
[tasks.task.getaccess](https://apidocs.bitrix24.ru/api-reference/tasks/tasks-task-getaccess.html)
```lua
tasks.task.getaccess(taskId)
```
#### Получить историю изменений задачи `tasks.task.history.list`
[tasks.task.history.list](https://apidocs.bitrix24.ru/api-reference/task-history-list.html)
```lua
tasks.task.history.list(taskId, order, filter, start)
```
#### Включить режим «Без звука» для задачи `tasks.task.mute`
[tasks.task.mute](https://apidocs.bitrix24.ru/api-reference/task-mute.html)
```lua
tasks.task.mute(taskId)
```
#### Выключить режим «Без звука» для задачи `tasks.task.unmute`
[tasks.task.unmute](https://apidocs.bitrix24.ru/api-reference/task-unmute.html)
```lua
tasks.task.unmute(taskId)
```
#### Создать зависимость задачи `task.dependence.add`
[task.dependence.add](https://apidocs.bitrix24.ru/api-reference/task-dependence-add.html)
```lua
task.dependence.add(taskId, fields)
```
#### Удалить зависимость задачи `task.dependence.delete`
[task.dependence.delete](https://apidocs.bitrix24.ru/api-reference/task-dependence-delete.html)
```lua
task.dependence.delete(taskId, dependence_id)
```
#### Добавить результат из комментария `task.result.addFromComment`
[task.result.addFromComment](https://apidocs.bitrix24.ru/api-reference/task-result-addfromcomment.html)
```lua
task.result.addFromComment(task_id, comment_id)
```
#### Получить список элементов чек-листа `task.checklistitem.getlist`
[task.checklistitem.getlist](https://apidocs.bitrix24.ru/api-reference/task-checklistitem-getlist.html)
```lua
task.checklistitem.getlist(task_id, order, filter, start)
```
Отлично, принято. Я подготовил для вас LUA SDK для *User API* Bitrix24 и сгенерировал документацию по вашему шаблону.
### 1. Код модуля `bitrix/user.lua`
Этот файл нужно сохранить как `bitrix/user.lua`. Он реализует все основные методы из документации.
```lua
local _M = require('bitrix.api')
_M.user = {}
_M.user.field = {}
_M.user.status = {}
_M.user.avatar = {}
--[[
Пользователи (user.*)
--]]
-- https://apidocs.bitrix24.ru/api-reference/user/user-get.html
function _M.user.get(id)
return _M.post('user.get', { ['ID'] = id })
end
-- https://apidocs.bitrix24.ru/api-reference/user/user-getlist.html
function _M.user.getlist(order, filter, select, params, start)
select = select or {'*'}
return _M.fetchAllPages(function(startPos)
return _M.post('user.getlist', {
['order'] = order,
['filter'] = filter,
['select'] = select,
['params'] = params,
['start'] = startPos
}, true)
end, start)
end
-- https://apidocs.bitrix24.ru/api-reference/user/user-current.html
function _M.user.current()
return _M.post('user.current', {})
end
-- https://apidocs.bitrix24.ru/api-reference/user/user-fields.html
function _M.user.fields()
return _M.post('user.fields', {})
end
--[[
Пользовательские поля (user.field.*)
--]]
-- https://apidocs.bitrix24.ru/api-reference/user/user-field-get.html
function _M.user.field.get(id)
return _M.post('user.field.get', { ['ID'] = id })
end
-- https://apidocs.bitrix24.ru/api-reference/user/user-field-add.html
function _M.user.field.add(fields)
return _M.post('user.field.add', { ['fields'] = fields })
end
-- https://apidocs.bitrix24.ru/api-reference/user/user-field-update.html
function _M.user.field.update(id, fields)
return _M.post('user.field.update', { ['ID'] = id, ['fields'] = fields })
end
-- https://apidocs.bitrix24.ru/api-reference/user/user-field-delete.html
function _M.user.field.delete(id)
return _M.post('user.field.delete', { ['ID'] = id })
end
-- https://apidocs.bitrix24.ru/api-reference/user/user-field-getlist.html
function _M.user.field.getlist(order, filter)
return _M.post('user.field.getlist', { ['order'] = order, ['filter'] = filter })
end
--[[
Статусы пользователей (user.status.*)
--]]
-- https://apidocs.bitrix24.ru/api-reference/user/user-status-get.html
function _M.user.status.get(user_id)
return _M.post('user.status.get', { ['USER_ID'] = user_id })
end
--[[
Аватары (user.avatar.*)
--]]
-- https://apidocs.bitrix24.ru/api-reference/user/user-avatar-get.html
function _M.user.avatar.get(user_id, size)
-- size может быть 'small', 'big' или nil (оригинал)
local params = { ['USER_ID'] = user_id }
if size then params['SIZE'] = size end
return _M.post('user.avatar.get', params)
end
return _M
```
# Пользователи
```lua
local user = require("bitrix.user")
```
#### Получить пользователя по ID `user.get`
[user.get](https://apidocs.bitrix24.ru/api-reference/user/user-get.html)
```lua
user.get(id)
```
#### Получить список пользователей `user.getlist`
[user.getlist](https://apidocs.bitrix24.ru/api-reference/user/user-getlist.html)
```lua
user.getlist(order, filter, select, params, start)
```
#### Получить текущего пользователя `user.current`
[user.current](https://apidocs.bitrix24.ru/api-reference/user/user-current.html)
```lua
user.current()
```
#### Получить описание полей пользователя `user.fields`
[user.fields](https://apidocs.bitrix24.ru/api-reference/user/user-fields.html)
```lua
user.fields()
```
#### Получить пользовательское поле по ID `user.field.get`
[user.field.get](https://apidocs.bitrix24.ru/api-reference/user/user-field-get.html)
```lua
user.field.get(id)
```
#### Создать новое пользовательское поле `user.field.add`
[user.field.add](https://apidocs.bitrix24.ru/api-reference/user/user-field-add.html)
```lua
user.field.add(fields)
```
#### Обновить пользовательское поле `user.field.update`
[user.field.update](https://apidocs.bitrix24.ru/api-reference/user/user-field-update.html)
```lua
user.field.update(id, fields)
```
#### Удалить пользовательское поле `user.field.delete`
[user.field.delete](https://apidocs.bitrix24.ru/api-reference/user/user-field-delete.html)
```lua
user.field.delete(id)
```
#### Получить список пользовательских полей `user.field.getlist`
[user.field.getlist](https://apidocs.bitrix24.ru/api-reference/user/user-field-getlist.html)
```lua
user.field.getlist(order, filter)
```
#### Получить статус пользователя `user.status.get`
[user.status.get](https://apidocs.bitrix24.ru/api-reference/user/user-status-get.html)
```lua
user.status.get(user_id)
```
#### Получить аватар пользователя `user.avatar.get`
[user.avatar.get](https://apidocs.bitrix24.ru/api-reference/user/user-avatar-get.html)
```lua
user.avatar.get(user_id, size) -- size: 'small', 'big' или nil (оригинал)
```
Конечно. Вот документация для модуля Chats в формате Markdown, отформатированная согласно вашим требованиям (пустая строка после подзаголовков).
```
# Чаты
```lua
local chat = require("bitrix.chat")
```
#### Получить чат по ID `chat.get`
[chat.get](https://apidocs.bitrix24.ru/api-reference/chats/chat-get.html)
```lua
chat.get(dialog_id)
```
#### Получить список чатов `chat.getlist`
[chat.getlist](https://apidocs.bitrix24.ru/api-reference/chats/chat-getlist.html)
```lua
chat.getlist(order, filter, select, params, start)
```
#### Создать новый чат `chat.create`
[chat.create](https://apidocs.bitrix24.ru/api-reference/chats/chat-create.html)
```lua
chat.create(fields)
```
#### Добавить пользователя в чат `chat.addUser`
[chat.addUser](https://apidocs.bitrix24.ru/api-reference/chats/chat-add-user.html)
```lua
chat.addUser(dialog_id, user_id)
```
#### Удалить пользователя из чата `chat.removeUser`
[chat.removeUser](https://apidocs.bitrix24.ru/api-reference/chats/chat-remove-user.html)
```lua
chat.removeUser(dialog_id, user_id)
```
## Messages
#### Отправить сообщение `chat.message.add`
[chat.message.add](https://apidocs.bitrix24.ru/api-reference/chats/chat-message-add.html)
```lua
chat.message.add(chat_id, message, params)
```
#### Получить список сообщений `chat.message.getList`
[chat.message.getList](https://apidocs.bitrix24.ru/api-reference/chats/chat-message-get-list.html)
```lua
chat.message.getList(chat_id, order, filter, start)
```
#### Изменить сообщение `chat.message.update`
[chat.message.update](https://apidocs.bitrix24.ru/api-reference/chats/chat-message-update.html)
```lua
chat.message.update(chat_id, message_id, message)
```
#### Удалить сообщение `chat.message.delete`
[chat.message.delete](https://apidocs.bitrix24.ru/api-reference/chats/chat-message-delete.html)
```lua
chat.message.delete(chat_id, message_id)
```
#### Получить список пользователей в чате `chat.user.getList`
[chat.user.getList](https://apidocs.bitrix24.ru/api-reference/chats/chat-user-get-list.html)
```lua
chat.user.getList(dialog_id)
```
# Телефония
```lua
local telephony = require("bitrix.telephony")
```
#### Зарегистрировать внешний звонок `telephony.externalcall.register`
[telephony.externalcall.register](https://apidocs.bitrix24.ru/api-reference/telephony/telephony-externalcall-register.html)
```lua
telephony.externalcall.register(fields)
```
#### Завершить внешний звонок `telephony.externalcall.finish`
[telephony.externalcall.finish](https://apidocs.bitrix24.ru/api-reference/telephony/telephony-externalcall-finish.html)
```lua
telephony.externalcall.finish(fields)
```
#### Показать карточку звонка `telephony.externalcall.show`
[telephony.externalcall.show](https://apidocs.bitrix24.ru/api-reference/telephony/telephony-externalcall-show.html)
```lua
telephony.externalcall.show(fields)
```
#### Получить статистику звонков `telephony.statistic.get`
[telephony.statistic.get](https://apidocs.bitrix24.ru/api-reference/telephony/telephony-statistic-get.html)
```lua
telephony.statistic.get(order, filter, start)
```
# Файлы
```lua
local disk = require("bitrix.disk")
```
#### Получить список хранилищ `disk.storage.get`
[disk.storage.get](https://apidocs.bitrix24.ru/api-reference/disk/disk-storage-get.html)
```lua
disk.storage.get()
```
#### Создать папку `disk.folder.add`
[disk.folder.add](https://apidocs.bitrix24.ru/api-reference/disk/disk-folder-add.html)
```lua
disk.folder.add(fields)
```
#### Загрузить файл `disk.file.upload`
[disk.file.upload](https://apidocs.bitrix24.ru/api-reference/disk/disk-file-upload.html)
```lua
disk.file.upload(filename, file_content, folder_id)
```
#### Получить URL для скачивания файла `disk.file.getDownloadUrl`
[disk.file.getDownloadUrl](https://apidocs.bitrix24.ru/api-reference/disk/disk-file-get-download-url.html)
```lua
disk.file.getDownloadUrl(file_id)
```
# Календарь
```lua
local calendar = require("bitrix.calendar")
```
#### Создать событие `calendar.event.add`
[calendar.event.add](https://apidocs.bitrix24.ru/api-reference/calendar/calendar-event-add.html)
```lua
calendar.event.add(fields)
```
#### Получить событие по ID `calendar.event.get`
[calendar.event.get](https://apidocs.bitrix24.ru/api-reference/calendar/calendar-event-get.html)
```lua
calendar.event.get(event_id)
```
#### Получить список календарей `calendar.section.get`
[calendar.section.get](https://apidocs.bitrix24.ru/api-reference/calendar/calendar-section-get.html)
```lua
calendar.section.get()
```
# Учет времени
```lua
local timeman = require("bitrix.timeman")
```
#### Начать учет времени `timeman.start`
[timeman.start](https://apidocs.bitrix24.ru/api-reference/timeman/timeman-start.html)
```lua
timeman.start(fields)
```
#### Остановить учет времени `timeman.stop`
[timeman.stop](https://apidocs.bitrix24.ru/api-reference/timeman/timeman-stop.html)
```lua
timeman.stop(fields)
```

5
bitrix.test_conf Normal file
View File

@ -0,0 +1,5 @@
url::https://mydomain.ru #API URL
user::1 #Bitrix API User id
token::eqmfsafdsfdsadas #Token
ssl::0 #SSL Validation (0,1 or 2)
format::json #Response format

84
bitrix/api.lua Normal file
View File

@ -0,0 +1,84 @@
local json = require('cjson')
local cURL = require("cURL")
local log = require('utils.log')
local url = require('utils.url')
local config = require('config.bitrix')
local array = require('utils.array')
local _M = {}
_M.result = nil
log.outfile = 'logs/bitrix_'..os.date('%Y-%m-%d')..'.log'
log.level = 'trace'
_M.base = config.url..'/rest/'..config.user..'/'..config.token..'/';
_M.res = {}
_M.format = config.format
local function get_result(str,url,full)
local result, err = pcall(json.decode,str)
if result then
_M.result = json.decode(str)
else
log.error(url..':'..err)
return nil, err
end
if _M.result.result then
if full then return _M.result else return _M.result.result end
end
log.error(url..str)
return nil
end
function _M.post(url,data,full)
local str = ''
url = _M.base..url
local headers = {
'Content-Type: application/json',
'Accept: application/json'
}
local c = cURL.easy{
url = url,
post = true,
postfields = json.encode(data),
httpheader = headers,
ssl_verifyhost = tonumber(config.ssl),
ssl_verifypeer = tonumber(config.ssl),
writefunction = function(st)
str = str..st
collectgarbage("collect")
return #st
end
}
local ok, err = c:perform()
local code = c:getinfo_response_code()
c:close()
if not ok then return nil, err end
if code ~= 200 then
log.error(url..':'..str)
return nil,str
end
if _M.format == 'json' then
res,err = get_result(str,url,full)
else
res = str
end
if not res then return nil,err end
return res
end
function _M.fetchAllPages(apiCall, initialStart)
local result = {}
local start = initialStart or 0
local function loadPage(startPos)
local res = apiCall(startPos)
if res and res.result then
array.merge(result, res.result)
if res.next then
loadPage(tonumber(res.next))
end
end
end
loadPage(start)
return result
end
return _M

34
bitrix/calendar.lua Normal file
View File

@ -0,0 +1,34 @@
local _M = require('bitrix.api')
local array = require('utils.array')
_M.calendar = {}
_M.calendar.event = {}
_M.calendar.section = {}
--[[
События (calendar.event.*)
--]]
-- https://apidocs.bitrix24.ru/api-reference/calendar/calendar-event-add.html
function _M.calendar.event.add(fields)
return _M.post('calendar.event.add', { ['fields'] = fields })
end
-- https://apidocs.bitrix24.ru/api-reference/calendar/calendar-event-get.html
function _M.calendar.event.get(event_id)
return _M.post('calendar.event.get', { ['event_id'] = event_id })
end
--[[
Календари (calendar.section.*)
--]]
-- https://apidocs.bitrix24.ru/api-reference/calendar/calendar-section-get.html
function _M.calendar.section.get()
return _M.post('calendar.section.get', {})
end
return _M

105
bitrix/chat.lua Normal file
View File

@ -0,0 +1,105 @@
local _M = require('bitrix.api')
local array = require('utils.array')
_M.chat = {}
_M.chat.message = {}
_M.chat.user = {}
--[[
Чаты (chat.*)
--]]
-- https://apidocs.bitrix24.ru/api-reference/chats/chat-get.html
function _M.chat.get(dialog_id)
return _M.post('chat.get', { ['dialog_id'] = dialog_id })
end
-- https://apidocs.bitrix24.ru/api-reference/chats/chat-getlist.html
function _M.chat.getlist(order, filter, select, params, start)
select = select or {'*'}
return _M.fetchAllPages(function(startPos)
return _M.post('chat.getlist', {
['order'] = order,
['filter'] = filter,
['select'] = select,
['params'] = params,
['start'] = startPos
}, true)
end, start)
end
-- https://apidocs.bitrix24.ru/api-reference/chats/chat-create.html
function _M.chat.create(fields)
return _M.post('chat.create', { ['fields'] = fields })
end
-- https://apidocs.bitrix24.ru/api-reference/chats/chat-add-user.html
function _M.chat.addUser(dialog_id, user_id)
return _M.post('chat.addUser', { ['dialog_id'] = dialog_id, ['user_id'] = user_id })
end
-- https://apidocs.bitrix24.ru/api-reference/chats/chat-remove-user.html
function _M.chat.removeUser(dialog_id, user_id)
return _M.post('chat.removeUser', { ['dialog_id'] = dialog_id, ['user_id'] = user_id })
end
--[[
Сообщения (chat.message.*)
--]]
-- https://apidocs.bitrix24.ru/api-reference/chats/chat-message-add.html
function _M.chat.message.add(chat_id, message, params)
local data = { ['chat_id'] = chat_id, ['message'] = message }
if params then data['params'] = params end
return _M.post('chat.message.add', data)
end
-- https://apidocs.bitrix24.ru/api-reference/chats/chat-message-get-list.html
function _M.chat.message.getList(chat_id, order, filter, start)
return _M.fetchAllPages(function(startPos)
return _M.post('chat.message.getList', {
['chat_id'] = chat_id,
['order'] = order,
['filter'] = filter,
['start'] = startPos
}, true)
end, start)
end
-- https://apidocs.bitrix24.ru/api-reference/chats/chat-message-update.html
function _M.chat.message.update(chat_id, message_id, message)
return _M.post('chat.message.update', {
['chat_id'] = chat_id,
['message_id'] = message_id,
['message'] = message
})
end
-- https://apidocs.bitrix24.ru/api-reference/chats/chat-message-delete.html
function _M.chat.message.delete(chat_id, message_id)
return _M.post('chat.message.delete', {
['chat_id'] = chat_id,
['message_id'] = message_id
})
end
--[[
Пользователи чата (chat.user.*)
--]]
-- https://apidocs.bitrix24.ru/api-reference/chats/chat-user-get-list.html
function _M.chat.user.getList(dialog_id)
return _M.post('chat.user.getList', { ['dialog_id'] = dialog_id })
end
return _M

View File

@ -1,17 +1,6 @@
local json = require('cjson')
local cURL = require("cURL")
local log = require('utils.log')
local url = require('utils.url')
local config = require('config.bitrix')
local _M = require('bitrix.api')
local array = require('utils.array')
local _M = {}
_M.result = nil
log.outfile = 'logs/bitrix_'..os.date('%Y-%m-%d')..'.log'
log.level = 'trace'
_M.base = config.url..'/rest/'..config.user..'/'..config.token..'/';
_M.res = {}
_M.format = config.format
_M.item = {}
_M.deal = {}
_M.deal.productrows = {}
@ -67,58 +56,6 @@ _M.status = {}
_M.status.entity = {}
_M.category = {}
local function get_result(str,url,full)
local result, err = pcall(json.decode,str)
if result then
_M.result = json.decode(str)
else
log.error(url..':'..err)
return nil, err
end
if _M.result.result then
if full then return _M.result else return _M.result.result end
end
log.error(url..str)
return nil
end
function _M.post(url,data,full)
local str = ''
url = _M.base..url
local headers = {
'Content-Type: application/json',
'Accept: application/json'
}
local c = cURL.easy{
url = url,
post = true,
postfields = json.encode(data),
httpheader = headers,
ssl_verifyhost = tonumber(config.ssl),
ssl_verifypeer = tonumber(config.ssl),
writefunction = function(st)
str = str..st
collectgarbage("collect")
return #st
end
}
local ok, err = c:perform()
local code = c:getinfo_response_code()
c:close()
if not ok then return nil, err end
if code ~= 200 then
log.error(url..':'..str)
return nil,str
end
if _M.format == 'json' then
res,err = get_result(str,url,full)
else
res = str
end
if not res then return nil,err end
return res
end
--[[
Items
--]]

50
bitrix/disk.lua Normal file
View File

@ -0,0 +1,50 @@
local _M = require('bitrix.api')
local array = require('utils.array')
_M.disk = {}
_M.disk.folder = {}
_M.disk.file = {}
_M.disk.storage = {}
--[[
Диск (disk.*)
--]]
-- https://apidocs.bitrix24.ru/api-reference/disk/disk-storage-get.html
function _M.disk.storage.get()
return _M.post('disk.storage.get', {})
end
--[[
Папки (disk.folder.*)
--]]
-- https://apidocs.bitrix24.ru/api-reference/disk/disk-folder-add.html
function _M.disk.folder.add(fields)
return _M.post('disk.folder.add', { ['fields'] = fields })
end
--[[
Файлы (disk.file.*)
--]]
-- https://apidocs.bitrix24.ru/api-reference/disk/disk-file-upload.html
function _M.disk.file.upload(filename, file_content, folder_id)
-- Метод upload использует multipart/form-data, поэтому используем отдельный эндпоинт в api.lua
return _M.post('disk.file.upload', {
FILENAME = filename,
FILE_CONTENT = file_content,
FOLDER_ID = folder_id
})
end
-- https://apidocs.bitrix24.ru/api-reference/disk/disk-file-get-download-url.html
function _M.disk.file.getDownloadUrl(file_id)
return _M.post('disk.file.getDownloadUrl', { ['fileId'] = file_id })
end
return _M

239
bitrix/tasks.lua Normal file
View File

@ -0,0 +1,239 @@
local _M = require('bitrix.api')
local array = require('utils.array')
_M.task = {}
_M.task.item = {}
_M.task.item.userfield = {}
_M.task.commentitem = {}
_M.task.result = {}
_M.task.elapseditem = {}
_M.task.dependence = {}
_M.task.checklistitem = {}
_M.task.history = {}
_M.task.files = {}
_M.task.stages = {}
_M.task.flow = {}
_M.task.planner = {}
_M.task.counters = {}
_M.task.favorite = {}
--[[
Задачи (tasks.task.*)
--]]
-- https://apidocs.bitrix24.ru/api-reference/tasks/tasks-task-add.html
function _M.task.add(fields)
return _M.post('tasks.task.add', {['fields'] = fields})
end
-- https://apidocs.bitrix24.ru/api-reference/tasks/tasks-task-update.html
function _M.task.update(taskId, fields)
return _M.post('tasks.task.update', {['taskId'] = taskId, ['fields'] = fields})
end
-- https://apidocs.bitrix24.ru/api-reference/tasks/tasks-task-get.html
function _M.task.get(taskId)
return _M.post('tasks.task.get', {['taskId'] = taskId})
end
-- https://apidocs.bitrix24.ru/api-reference/tasks/tasks-task-list.html
function _M.task.list(order, filter, select, params, start)
select = select or {'*'}
return _M.fetchAllPages(function(startPos)
return _M.post('tasks.task.list', {
['order'] = order,
['filter'] = filter,
['select'] = select,
['params'] = params,
['start'] = startPos
}, true)
end, start)
end
-- https://apidocs.bitrix24.ru/api-reference/tasks/tasks-task-files-attach.html
function _M.task.files.attach(taskId, fileIds)
return _M.post('tasks.task.files.attach', {['taskId'] = taskId, ['fileIds'] = fileIds})
end
-- https://apidocs.bitrix24.ru/api-reference/tasks/tasks-task-delegate.html
function _M.task.delegate(taskId, fields)
return _M.post('tasks.task.delegate', {['taskId'] = taskId, ['fields'] = fields})
end
-- https://apidocs.bitrix24.ru/api-reference/tasks/tasks-task-counters-get.html
function _M.task.counters.get()
return _M.post('tasks.task.counters.get', {})
end
-- https://apidocs.bitrix24.ru/api-reference/tasks/tasks-task-start.html
function _M.task.start(taskId)
return _M.post('tasks.task.start', {['taskId'] = taskId})
end
-- https://apidocs.bitrix24.ru/api-reference/tasks/tasks-task-pause.html
function _M.task.pause(taskId)
return _M.post('tasks.task.pause', {['taskId'] = taskId})
end
-- https://apidocs.bitrix24.ru/api-reference/tasks/tasks-task-defer.html
function _M.task.defer(taskId)
return _M.post('tasks.task.defer', {['taskId'] = taskId})
end
-- https://apidocs.bitrix24.ru/api-reference/tasks/tasks-task-complete.html
function _M.task.complete(taskId)
return _M.post('tasks.task.complete', {['taskId'] = taskId})
end
-- https://apidocs.bitrix24.ru/api-reference/tasks/tasks-task-renew.html
function _M.task.renew(taskId)
return _M.post('tasks.task.renew', {['taskId'] = taskId})
end
-- https://apidocs.bitrix24.ru/api-reference/tasks/tasks-task-approve.html
function _M.task.approve(taskId)
return _M.post('tasks.task.approve', {['taskId'] = taskId})
end
-- https://apidocs.bitrix24.ru/api-reference/tasks/tasks-task-disapprove.html
function _M.task.disapprove(taskId)
return _M.post('tasks.task.disapprove', {['taskId'] = taskId})
end
-- https://apidocs.bitrix24.ru/api-reference/tasks/tasks-task-delete.html
function _M.task.delete(taskId)
return _M.post('tasks.task.delete', {['taskId'] = taskId})
end
-- https://apidocs.bitrix24.ru/api-reference/tasks/tasks-task-startwatch.html
function _M.task.startwatch(taskId)
return _M.post('tasks.task.startwatch', {['taskId'] = taskId})
end
-- https://apidocs.bitrix24.ru/api-reference/tasks/tasks-task-stopwatch.html
function _M.task.stopwatch(taskId)
return _M.post('tasks.task.stopwatch', {['taskId'] = taskId})
end
-- https://apidocs.bitrix24.ru/api-reference/tasks/tasks-task-favorite-add.html
function _M.task.favorite.add(taskId)
return _M.post('tasks.task.favorite.add', {['taskId'] = taskId})
end
-- https://apidocs.bitrix24.ru/api-reference/tasks/tasks-task-favorite-remove.html
function _M.task.favorite.remove(taskId)
return _M.post('tasks.task.favorite.remove', {['taskId'] = taskId})
end
-- https://apidocs.bitrix24.ru/api-reference/tasks/tasks-task-getfields.html
function _M.task.getFields()
return _M.post('tasks.task.getFields', {})
end
-- https://apidocs.bitrix24.ru/api-reference/tasks/tasks-task-getaccess.html
function _M.task.getaccess(taskId)
return _M.post('tasks.task.getaccess', {['taskId'] = taskId})
end
-- https://apidocs.bitrix24.ru/api-reference/tasks/task-history-list.html
function _M.task.history.list(taskId, order, filter, start)
return _M.fetchAllPages(function(startPos)
return _M.post('task.history.list', {
['taskId'] = taskId,
['order'] = order,
['filter'] = filter,
['start'] = startPos
}, true)
end, start)
end
-- https://apidocs.bitrix24.ru/api-reference/tasks/task-mute.html
function _M.task.mute(taskId)
return _M.post('task.mute', {['taskId'] = taskId})
end
-- https://apidocs.bitrix24.ru/api-reference/tasks/task-unmute.html
function _M.task.unmute(taskId)
return _M.post('task.unmute', {['taskId'] = taskId})
end
--[[
Зависимости задач (task.dependence.*)
]]
-- https://apidocs.bitrix24.ru/api-reference/tasks/task-dependence-add.html
function _M.task.dependence.add(taskId, fields)
return _M.post('task.dependence.add', {['taskId'] = taskId, ['fields'] = fields})
end
-- https://apidocs.bitrix24.ru/api-reference/tasks/task-dependence-delete.html
function _M.task.dependence.delete(taskId, dependence_id)
return _M.post('task.dependence.delete', {['taskId'] = taskId, ['DEPENDENCE_ID'] = dependence_id})
end
--[[
Результаты задачи (tasks.task.result.*)
]]
-- https://apidocs.bitrix24.ru/api-reference/tasks/task-result-addfromcomment.html
function _M.task.result.addFromComment(task_id, comment_id)
return _M.post('task.result.addFromComment',{['TASK_ID'] = task_id,['COMMENT_ID'] = comment_id})
end
-- https://apidocs.bitrix24.ru/api-reference/tasks/task-result-list.html (ИСПРАВЛЕНО)
function _M.task.result.list(task_id, order, filter, start)
return _M.fetchAllPages(function(startPos)
return _M.post('task.result.list',{['TASK_ID']=task_id,['order']=order,['filter']=filter,['start']=startPos},true)
end, start)
end
-- https://apidocs.bitrix24.ru/api-reference/tasks/task-result-deletefromcomment.html (ИСПРАВЛЕНО)
function _M.task.result.deleteFromComment(comment_id)
return _M.post('task.result.deleteFromComment',{['COMMENT_ID'] = comment_id})
end
--[[
Чек-листы (task.checklistitem.*)
]]
function _M.task.checklistitem.getlist(task_id, order, filter, start)
return _M.fetchAllPages(function(startPos)
return _M.post('task.checklistitem.getlist',{['TASK_ID']=task_id,['order']=order,['filter']=filter,['start']=startPos},true)
end, start)
end
return _M

41
bitrix/telephony.lua Normal file
View File

@ -0,0 +1,41 @@
local _M = require('bitrix.api')
local array = require('utils.array')
_M.telephony = {}
_M.telephony.externalcall = {}
--[[
Телефония (telephony.*)
--]]
-- https://apidocs.bitrix24.ru/api-reference/telephony/telephony-externalcall-register.html
function _M.telephony.externalcall.register(fields)
return _M.post('telephony.externalcall.register', { ['fields'] = fields })
end
-- https://apidocs.bitrix24.ru/api-reference/telephony/telephony-externalcall-finish.html
function _M.telephony.externalcall.finish(fields)
return _M.post('telephony.externalcall.finish', { ['fields'] = fields })
end
-- https://apidocs.bitrix24.ru/api-reference/telephony/telephony-externalcall-show.html
function _M.telephony.externalcall.show(fields)
return _M.post('telephony.externalcall.show', { ['fields'] = fields })
end
-- https://apidocs.bitrix24.ru/api-reference/telephony/telephony-statistic-get.html
function _M.telephony.statistic.get(order, filter, start)
return _M.fetchAllPages(function(startPos)
return _M.post('telephony.statistic.get', {
['order'] = order,
['filter'] = filter,
['start'] = startPos
}, true)
end, start)
end
return _M

22
bitrix/timeman.lua Normal file
View File

@ -0,0 +1,22 @@
local _M = require('bitrix.api')
_M.timeman = {}
_M.timeman.record = {}
--[[
Учет времени (timeman.*)
--]]
-- https://apidocs.bitrix24.ru/api-reference/timeman/timeman-start.html
function _M.timeman.start(fields)
return _M.post('timeman.start', { ['fields'] = fields })
end
-- https://apidocs.bitrix24.ru/api-reference/timeman/timeman-stop.html
function _M.timeman.stop(fields)
return _M.post('timeman.stop', { ['fields'] = fields })
end
return _M

102
bitrix/user.lua Normal file
View File

@ -0,0 +1,102 @@
local _M = require('bitrix.api')
_M.user = {}
_M.user.field = {}
_M.user.status = {}
_M.user.avatar = {}
--[[
Пользователи (user.*)
--]]
-- https://apidocs.bitrix24.ru/api-reference/user/user-get.html
function _M.user.get(id)
return _M.post('user.get', { ['ID'] = id })
end
-- https://apidocs.bitrix24.ru/api-reference/user/user-getlist.html
function _M.user.getlist(order, filter, select, params, start)
select = select or {'*'}
return _M.fetchAllPages(function(startPos)
return _M.post('user.getlist', {
['order'] = order,
['filter'] = filter,
['select'] = select,
['params'] = params,
['start'] = startPos
}, true)
end, start)
end
-- https://apidocs.bitrix24.ru/api-reference/user/user-current.html
function _M.user.current()
return _M.post('user.current', {})
end
-- https://apidocs.bitrix24.ru/api-reference/user/user-fields.html
function _M.user.fields()
return _M.post('user.fields', {})
end
--[[
Пользовательские поля (user.field.*)
--]]
-- https://apidocs.bitrix24.ru/api-reference/user/user-field-get.html
function _M.user.field.get(id)
return _M.post('user.field.get', { ['ID'] = id })
end
-- https://apidocs.bitrix24.ru/api-reference/user/user-field-add.html
function _M.user.field.add(fields)
return _M.post('user.field.add', { ['fields'] = fields })
end
-- https://apidocs.bitrix24.ru/api-reference/user/user-field-update.html
function _M.user.field.update(id, fields)
return _M.post('user.field.update', { ['ID'] = id, ['fields'] = fields })
end
-- https://apidocs.bitrix24.ru/api-reference/user/user-field-delete.html
function _M.user.field.delete(id)
return _M.post('user.field.delete', { ['ID'] = id })
end
-- https://apidocs.bitrix24.ru/api-reference/user/user-field-getlist.html
function _M.user.field.getlist(order, filter)
return _M.post('user.field.getlist', { ['order'] = order, ['filter'] = filter })
end
--[[
Статусы пользователей (user.status.*)
--]]
-- https://apidocs.bitrix24.ru/api-reference/user/user-status-get.html
function _M.user.status.get(user_id)
return _M.post('user.status.get', { ['USER_ID'] = user_id })
end
--[[
Аватары (user.avatar.*)
--]]
-- https://apidocs.bitrix24.ru/api-reference/user/user-avatar-get.html
function _M.user.avatar.get(user_id, size)
-- size может быть 'small', 'big' или nil (оригинал)
local params = { ['USER_ID'] = user_id }
if size then params['SIZE'] = size end
return _M.post('user.avatar.get', params)
end
return _M

77
test_calendar.lua Normal file
View File

@ -0,0 +1,77 @@
local json = require('cjson')
local log = require('utils.log')
local calendar = require('bitrix.calendar')
-- Настройка логирования
log.outfile = 'logs/tests_calendar_live_'..os.date('%Y-%m-%d_%H-%M-%S')..'.log'
log.level = 'trace'
log.info("===== СТАРТ ТЕСТИРОВАНИЯ (РЕЖИМ LIVE) =====")
-- Данные для тестов
local test_user_id = 1 -- Текущий пользователь (обычно ID 1)
local tomorrow = os.date("!*t", os.time() + 24*3600)
local date_from = os.date("%Y%m%dT000000", tomorrow)
local date_to = os.date("%Y%m%dT235959", tomorrow)
--=== ТЕСТЫ ===--
local function test_section_get()
log.info('--- Тест: Получение списка календарей (section.get) ---')
local result, error_response = calendar.calendar.section.get()
if result and #result > 0 then
log.info(string.format('Тест получения календарей: УСПЕШНО. Найдено календарей: %d', #result))
-- Выведем названия первых двух для примера
log.debug('Пример: ' .. result[1].NAME .. ', ' .. (result[2] and result[2].NAME or 'N/A'))
else
log.error('Тест получения календарей: ПРОВАЛЕНО.')
if error_response then log.error(error_response) end
end
end
local function test_event_add()
log.info('--- Тест: Создание события (event.add) ---')
local event_name = "Test Event - " .. os.date("%H-%M-%S")
local fields = {
NAME = event_name,
DESCRIPTION = "Создано автоматически тестовым скриптом",
DT_FROM = date_from,
DT_TO = date_to,
OWNER_ID = test_user_id,
}
local result, error_response = calendar.calendar.event.add(fields)
if result and result.ID then
log.info(string.format('Тест создания события: УСПЕШНО. ID нового события: %d', result.ID))
return result.ID -- Возвращаем ID для следующего теста
else
log.error('Тест создания события: ПРОВАЛЕНО.')
if error_response then log.error(error_response) end
return nil
end
end
local function test_event_get(new_event_id)
if not new_event_id then return end -- Если создание не удалось, пропускаем
log.info('--- Тест: Получение события по ID (event.get) ---')
local result, error_response = calendar.calendar.event.get(new_event_id)
if result and result.ID == new_event_id then
log.info(string.format('Тест получения события: УСПЕШНО. Название: "%s"', result.NAME))
else
log.error('Тест получения события: ПРОВАЛЕНО.')
if error_response then log.error(error_response) end
end
end
--=== ЗАПУСК ТЕСТОВ ===--
test_section_get()
local new_event_id = test_event_add()
test_event_get(new_event_id)
log.info("===== ЗАВЕРШЕНИЕ ТЕСТИРОВАНИЯ =====")

90
test_chat.lua Normal file
View File

@ -0,0 +1,90 @@
local json = require('cjson')
local log = require('utils.log')
local chat = require('bitrix.chat')
-- Настройка логирования
log.outfile = 'logs/tests_chats_live_'..os.date('%Y-%m-%d_%H-%M-%S')..'.log'
log.level = 'trace'
log.info("===== СТАРТ ТЕСТИРОВАНИЯ (РЕЖИМ LIVE) =====")
-- ID чата для тестов. ЗАМЕНИТЕ на ID существующего чата.
-- Это может быть ID группы или открытого чата.
local test_chat_id = 1
local test_user_id_to_add = 2 -- ID пользователя для теста добавления в чат
--=== ТЕСТЫ ===--
local function test_chat_get()
log.info('--- Тест: Получение чата (get) ---')
local result, error_response = chat.get(test_chat_id)
if result and result.id then
log.info(string.format('Тест получения чата: УСПЕШНО. Название: "%s"', result.name or 'N/A'))
else
log.error('Тест получения чата: ПРОВАЛЕНО.')
log.error('Ответ сервера: ' .. json.encode(result))
if error_response then log.error(error_response) end
end
end
local function test_chat_getlist()
log.info('--- Тест: Листинг чатов (getlist) ---')
-- Фильтр: только открытые чаты (тип 'L' - lines/group), созданные недавно.
local two_days_ago_timestamp = os.time() - 2 * 24 * 3600
local date_two_days_ago = os.date("%Y-%m-%d", two_days_ago_timestamp)
local filter = {
TYPE = 'L',
>=DATE_CREATE = date_two_days_ago,
}
local result_list, error_response = chat.getlist({'ID', 'NAME'}, filter, {'ID', 'NAME', 'TYPE'}, nil, 0)
if result_list and #result_list > 0 then
log.info(string.format('Тест листинга чатов: УСПЕШНО. Найдено чатов: %d', #result_list))
elseif result_list and #result_list == 0 then
log.warning('Тест листинга чатов: Чаты не найдены по фильтру.')
else
log.error('Тест листинга чатов: ПРОВАЛЕНО.')
if error_response then log.error(error_response) end
end
end
local function test_chat_message_getList()
log.info('--- Тест: Получение сообщений чата (message.getList) ---')
local result_list, error_response = chat.message.getList(test_chat_id, {'ID'}, {}, 0)
if result_list and #result_list > 0 then
log.info(string.format('Тест получения сообщений: УСПЕШНО. Найдено сообщений: %d', #result_list))
elseif result_list and #result_list == 0 then
log.warning('Тест получения сообщений: Сообщений не найдено.')
else
log.error('Тест получения сообщений: ПРОВАЛЕНО.')
if error_response then log.error(error_response) end
end
end
local function test_chat_message_add()
log.info('--- Тест: Отправка сообщения в чат (message.add) ---')
local new_message_text = 'Привет! Это тестовое сообщение от Lua SDK.'
local result, error_response = chat.message.add(test_chat_id, new_message_text)
if result and result.id then
log.info(string.format('Тест отправки сообщения: УСПЕШНО. ID сообщения: %s', tostring(result.id)))
else
log.error('Тест отправки сообщения: ПРОВАЛЕНО.')
log.error('Ответ сервера: ' .. json.encode(result))
if error_response then log.error(error_response) end
end
end
--=== ЗАПУСК ТЕСТОВ ===--
test_chat_get()
test_chat_getlist()
test_chat_message_getList()
test_chat_message_add() -- <-- ВНИМАНИЕ! Этот тест отправит сообщение в чат!
log.info("===== ЗАВЕРШЕНИЕ ТЕСТИРОВАНИЯ =====")

53
test_disk.lua Normal file
View File

@ -0,0 +1,53 @@
local json = require('cjson')
local log = require('utils.log')
local disk = require('bitrix.disk')
-- Настройка логирования
log.outfile = 'logs/tests_disk_live_'..os.date('%Y-%m-%d_%H-%M-%S')..'.log'
log.level = 'trace'
log.info("===== СТАРТ ТЕСТИРОВАНИЯ (РЕЖИМ LIVE) =====")
-- Данные для тестов
local test_storage_id = 1 -- Обычно корневое хранилище имеет ID 1
--=== ТЕСТЫ ===--
local function test_storage_get()
log.info('--- Тест: Получение списка хранилищ (storage.get) ---')
local result, error_response = disk.disk.storage.get()
if result and #result > 0 then
log.info(string.format('Тест получения хранилищ: УСПЕШНО. Найдено хранилищ: %d', #result))
-- Выведем названия первых двух для примера
log.debug('Пример: ' .. result[1].NAME .. ', ' .. (result[2] and result[2].NAME or 'N/A'))
else
log.error('Тест получения хранилищ: ПРОВАЛЕНО.')
if error_response then log.error(error_response) end
end
end
local function test_folder_add()
log.info('--- Тест: Создание папки (folder.add) ---')
local folder_name = "Test Folder - " .. os.date("%H-%M-%S")
local fields = {
NAME = folder_name,
PARENT_ID = test_storage_id,
}
local result, error_response = disk.disk.folder.add(fields)
if result and result.ID then
log.info(string.format('Тест создания папки: УСПЕШНО. ID новой папки: %d', result.ID))
else
log.error('Тест создания папки: ПРОВАЛЕНО.')
if error_response then log.error(error_response) end
end
end
--=== ЗАПУСК ТЕСТОВ ===--
test_storage_get()
test_folder_add()
log.info("===== ЗАВЕРШЕНИЕ ТЕСТИРОВАНИЯ =====")

118
test_tasks.lua Normal file
View File

@ -0,0 +1,118 @@
local json = require('cjson')
local log = require('utils.log')
local tasks = require('bitrix.tasks')
-- Настройка логирования (можно оставить как в api или задать свою)
log.outfile = 'logs/tests_tasks_live_'..os.date('%Y-%m-%d_%H-%M-%S')..'.log'
log.level = 'trace' -- Уровень детализации логов
log.info("===== СТАРТ ТЕСТИРОВАНИЯ (РЕЖИМ LIVE) =====")
-- Подключаем модули.
-- bitrix.api уже содержит в себе все настройки подключения из config.bitrix
local tasks = require('bitrix.tasks')
-- ID задачи для тестов. Предполагается, что задача с таким ID существует.
-- Если задачи с ID 1 нет, создайте любую тестовую задачу вручную и используйте её ID.
local task_id = 242
--=== ТЕСТЫ ===--
local function test_task_get()
log.info('--- Тест: Получение задачи (get) ---')
local result, error_response = tasks.task.get(task_id)
if result and result.task then
log.info(string.format('Тест получения задачи: УСПЕШНО. Название: "%s"', result.task.title or 'N/A'))
else
log.error('Тест получения задачи: ПРОВАЛЕНО.')
log.error('Ответ сервера: ' .. json.encode(result))
if error_response then
log.error('Ответ сервера: ' .. json.encode(error_response))
end
end
end
local function test_task_list()
log.info('--- Тест: Листинг задач (list) ---')
-- Фильтр: задачи, созданные за последние 2 дня, в статусе "Новая" (STATUS = 0)
-- 1. Получаем временную метку (timestamp) для момента "2 дня назад"
local two_days_ago_timestamp = os.time() - 2 * 24 * 3600
-- 2. Форматируем временную метку в строку вида 'ГГГГ-ММ-ДД'
local date_two_days_ago = os.date("%Y-%m-%d", two_days_ago_timestamp)
-- 3. Собираем финальный фильтр для API
local filter = {
['>=DATE_CREATE'] = date_two_days_ago,
['STATUS'] = '0'
}
local result_list, error_response = tasks.task.list(nil, filter, {'ID', 'TITLE'}, nil, 0)
if result_list and #result_list > 0 then
log.info(string.format('Тест листинга задач: УСПЕШНО. Найдено задач: %d', #result_list))
elseif result_list and #result_list == 0 then
log.warning('Тест листинга задач: Задач не найдено по фильтру. Проверьте даты и статус.')
else
log.error('Тест листинга задач: ПРОВАЛЕНО.')
if error_response then
log.error('Ответ сервера: ' .. json.encode(error_response))
end
end
end
local function test_task_add_update_delete()
log.info('--- Тест: Цепочка Add -> Update -> Delete ---')
-- Add
log.debug('Шаг 1/3: Создание задачи...')
local add_result, add_error = tasks.task.add({
TITLE = 'Тестовая задача (авто-тест)',
DESCRIPTION = 'Создана автоматически тестовым скриптом',
RESPONSIBLE_ID = 1, -- ID ответственного (обычно 1 - текущий пользователь)
GROUP_ID = {} -- Приватная задача (без группы)
})
local new_task_id
if add_result and add_result.task and add_result.task.id then
new_task_id = add_result.task.id
log.info(string.format('Шаг 1/3: УСПЕШНО. ID новой задачи: %d', new_task_id))
else
log.error('Шаг 1/3: ПРОВАЛЕНО (создание).')
if add_error then log.error(add_error) end
return -- Останавливаем тест, если создание не удалось
end
-- Update
log.debug('Шаг 2/3: Обновление задачи...')
local update_result, update_error = tasks.task.update(new_task_id, {
DESCRIPTION = '[ОБНОВЛЕНО] Задача изменена автоматически тестовым скриптом'
})
if update_result and update_result.task then
log.info('Шаг 2/3: УСПЕШНО (обновление).')
else
log.error('Шаг 2/3: ПРОВАЛЕНО (обновление).')
if update_error then log.error(update_error) end
end
-- Delete
log.debug('Шаг 3/3: Удаление задачи...')
local delete_result, delete_error = tasks.task.delete(new_task_id)
if delete_result and delete_result.task then
log.info('Шаг 3/3: УСПЕШНО (удаление).')
else
log.error('Шаг 3/3: ПРОВАЛЕНО (удаление).')
if delete_error then log.error(delete_error) end
end
end
--=== ЗАПУСК ТЕСТОВ ===--
test_task_get()
test_task_list()
test_task_add_update_delete()
log.info("===== ЗАВЕРШЕНИЕ ТЕСТИРОВАНИЯ =====")

64
test_telephony.lua Normal file
View File

@ -0,0 +1,64 @@
local json = require('cjson')
local log = require('utils.log')
local os = require('os')
local telephony = require('bitrix.telephony')
-- Настройка логирования
log.outfile = 'logs/tests_telephony_live_'..os.date('%Y-%m-%d_%H-%M-%S')..'.log'
log.level = 'trace'
log.info("===== СТАРТ ТЕСТИРОВАНИЯ (РЕЖИМ LIVE) =====")
-- Данные для тестов (замените на реальные ID из вашего портала)
local test_user_id = 1 -- ID пользователя, которому покажем звонок
local test_call_id = "123456789" -- Уникальный ID звонка с вашей АТС
--=== ТЕСТЫ ===--
local function test_statistic_get()
log.info('--- Тест: Получение статистики звонков (statistic.get) ---')
-- Фильтр: статистика за сегодня для указанного пользователя
local today = os.date("%Y-%m-%d")
local filter = {
USER_ID = test_user_id,
'>=DATE_CREATE' = today,
'<=DATE_CREATE' = today,
}
local result_list, error_response = telephony.statistic.get({'DATE_CREATE'}, filter, 0)
if result_list and #result_list > 0 then
log.info(string.format('Тест статистики: УСПЕШНО. Найдено записей: %d', #result_list))
elseif result_list and #result_list == 0 then
log.warning('Тест статистики: Записей не найдено. Возможно, сегодня не было звонков.')
else
log.error('Тест статистики: ПРОВАЛЕНО.')
if error_response then log.error(error_response) end
end
end
local function test_externalcall_show()
log.info('--- Тест: Показ карточки звонка (externalcall.show) ---')
local fields = {
USER_ID = test_user_id,
CALL_ID = test_call_id,
LINE_NUMBER = "100", -- Номер линии или внутренний номер
SHOW = "Y"
}
local result, error_response = telephony.externalcall.show(fields)
if result and result.result then
log.info('Тест показа карточки: УСПЕШНО.')
else
log.error('Тест показа карточки: ПРОВАЛЕНО.')
if error_response then log.error(error_response) end
end
end
--=== ЗАПУСК ТЕСТОВ ===--
test_statistic_get()
test_externalcall_show()
log.info("===== ЗАВЕРШЕНИЕ ТЕСТИРОВАНИЯ =====")

65
test_timeman.lua Normal file
View File

@ -0,0 +1,65 @@
local json = require('cjson')
local log = require('utils.log')
local timeman = require('bitrix.timeman')
-- Настройка логирования
log.outfile = 'logs/tests_timeman_live_'..os.date('%Y-%m-%d_%H-%M-%S')..'.log'
log.level = 'trace'
log.info("===== СТАРТ ТЕСТИРОВАНИЯ (РЕЖИМ LIVE) =====")
--=== ТЕСТЫ ===--
local function test_timeman_start()
log.info('--- Тест: Начало рабочего дня (timeman.start) ---')
local fields = {
DEVICE = {
TYPE = "browser",
NAME = "Lua SDK Test",
LAT = "0",
LON = "0"
}
}
local result, error_response = timeman.timeman.start(fields)
if result and result.ID then
log.info(string.format('Тест начала дня: УСПЕШНО. ID записи: %d', result.ID))
return result.ID -- Возвращаем ID для теста остановки
else
log.error('Тест начала дня: ПРОВАЛЕНО.')
if error_response then log.error(error_response) end
return nil
end
end
local function test_timeman_stop(record_id)
if not record_id then return end -- Если старт не удался, пропускаем
log.info('--- Тест: Завершение рабочего дня (timeman.stop) ---')
local fields = {
ID = record_id,
DEVICE = {
TYPE = "browser",
NAME = "Lua SDK Test",
LAT = "0",
LON = "0"
}
}
local result, error_response = timeman.timeman.stop(fields)
if result and result.result then
log.info('Тест завершения дня: УСПЕШНО.')
else
log.error('Тест завершения дня: ПРОВАЛЕНО.')
if error_response then log.error(error_response) end
end
end
--=== ЗАПУСК ТЕСТОВ ===--
local new_record_id = test_timeman_start()
test_timeman_stop(new_record_id)
log.info("===== ЗАВЕРШЕНИЕ ТЕСТИРОВАНИЯ =====")

93
test_user.lua Normal file
View File

@ -0,0 +1,93 @@
local json = require('cjson')
local log = require('utils.log')
-- Настройка логирования
log.outfile = 'logs/tests_user_live_'..os.date('%Y-%m-%d_%H-%M-%S')..'.log'
log.level = 'trace'
log.info("===== СТАРТ ТЕСТИРОВАНИЯ (РЕЖИМ LIVE) =====")
-- Подключаем модуль. Настройки подключения берутся из bitrix.api
local user = require('bitrix.user')
-- ID пользователя для тестов. Обычно 1 - это администратор.
local test_user_id = 1
--=== ТЕСТЫ ===--
local function test_user_get()
log.info('--- Тест: Получение пользователя (get) ---')
local result, error_response = user.get(test_user_id)
if result and result.users and result.users[1] then
local user_data = result.users[1]
log.info(string.format('Тест получения пользователя: УСПЕШНО. Имя: "%s %s"', user_data.NAME or '', user_data.LAST_NAME or ''))
else
log.error('Тест получения пользователя: ПРОВАЛЕНО.')
log.error('Ответ сервера: ' .. json.encode(result))
if error_response then
log.error('Ошибка: ' .. json.encode(error_response))
end
end
end
local function test_user_getlist()
log.info('--- Тест: Листинг пользователей (getlist) ---')
-- Фильтр: активные пользователи, у которых есть email
local filter = {
ACTIVE = 'Y',
EMAIL = '%@%'
}
local result_list, error_response = user.getlist({'LAST_NAME', 'NAME'}, filter, {'ID', 'NAME', 'LAST_NAME', 'EMAIL'}, nil, 0)
if result_list and result_list.users and #result_list.users > 0 then
log.info(string.format('Тест листинга пользователей: УСПЕШНО. Найдено пользователей: %d', #result_list.users))
elseif result_list and result_list.users and #result_list.users == 0 then
log.warning('Тест листинга пользователей: Пользователи не найдены по фильтру.')
else
log.error('Тест листинга пользователей: ПРОВАЛЕНО.')
if error_response then
log.error('Ответ сервера: ' .. json.encode(error_response))
end
end
end
local function test_user_current()
log.info('--- Тест: Получение текущего пользователя (current) ---')
local result, error_response = user.current()
if result and result.ID then
log.info(string.format('Тест текущего пользователя: УСПЕШНО. Вы вошли как: "%s %s"', result.NAME or '', result.LAST_NAME or ''))
else
log.error('Тест текущего пользователя: ПРОВАЛЕНО.')
if error_response then
log.error('Ответ сервера: ' .. json.encode(error_response))
end
end
end
local function test_user_avatar_get()
log.info('--- Тест: Получение аватара пользователя (avatar.get) ---')
local result, error_response = user.avatar.get(test_user_id, 'big') -- Получаем большой аватар
if result and result.result then
log.info('Тест получения аватара: УСПЕШНО.')
-- Результат обычно содержит URL до изображения
log.debug('URL аватара: ' .. tostring(result.result))
else
log.error('Тест получения аватара: ПРОВАЛЕНО.')
if error_response then
log.error('Ответ сервера: ' .. json.encode(error_response))
end
end
end
--=== ЗАПУСК ТЕСТОВ ===--
test_user_get()
test_user_getlist()
test_user_current()
test_user_avatar_get()
log.info("===== ЗАВЕРШЕНИЕ ТЕСТИРОВАНИЯ =====")