- API
 - Линии
 
- Введение [object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
 - Работа с типами
 - Глобальный контекст и изоляция
 - Работа с приложениями
 - Массовые действия с элементами приложения
 - Работа с внешними сервисами
 - Скрипты в виджетах
 - Веб компоненты
 - Права доступа
 - Начало работы с процессами
 - Начало работы с подписями
 - Начало работы с предпросмотром файлов
 - Начало работы с организационной структурой
 - Начало работы с пользователями и группами
 - Начало работы с типом данных Таблица
 - Решение типовых задач
 - 
							API
							
- Типы объектов
 - Типы данных
 - Глобальные константы
 - Работа с приложениями
 - Веб-запросы
 - Права доступа
 - Документооборот
 - 
									
										Линии
									
									
- LineChannelState
 - LineChannelType
 - LineClientBlockedStatus
 - LineMessageType
 - LineMetricType
 - LineSessionPriority
 - LineSessionState
 - OperatorStatusType
 - LineApplicationRef
 - LineBindingApplication
 - LineChannelData
 - LineChannelItem
 - LineChannelItemRef
 - LineChannelSearch
 - LineChannels
 - LineClientData
 - LineClientExtraData
 - LineClientItem
 - LineClientItemRef
 - LineClientSearch
 - LineClients
 - LineData
 - LineItem
 - LineItemRef
 - LineMessageData
 - LineMessageItem
 - LineMetricData
 - LineMetricItem
 - LineMetrics
 - LineSearch
 - LineSessionData
 - LineSessionItem
 - LineSessionItemRef
 - LineSessionSearch
 - LineSessions
 - Lines
 - LinesCollections
 - SessionChangedPayload
 - SessionFieldChange
 - SessionReassignedPayload
 - LineSessionPriorityEnumBase
 - LineSessionStateEnumBase
 
 - Виджет «Код»
 - Подписи
 - Рабочие календари
 - Интеграция с IP-телефонией
 - Интеграция с сервисами рассылок
 
 
Сообщите об опечатке
				Текст, в котором допущена ошибка:
				
				
				
				Ваш отзыв успешно отправлен!
Спасибо за обратную связь.
Линии
Доступ к управлению линиями, сессиями и каналами, а также получение переписки и данных метрик линий осуществляется с помощью свойств типа LinesCollections.
Работа с линиями
Получить линии и их параметры можно с помощью метода Lines.search.
Получить линию с названием some line можно следующим образом:
const line = await System.lines.lines.search() .where((f, g) => g.and( f.__deletedAt.eq(null), f.__name.eq("some line"), )) .first();Работа с каналами (мессенджерами)
Получить конкретные каналы можно с помощью метода LineChannels.search.
Канал может находиться в одном из трёх статусов: Активен, Разорван, Ошибка (см. LineChannelState).
Пример получения всех неактивных каналов:
const inactiveChannels = await System.lines.channels.search() .where((f, g) => g.and( f.__deletedAt.eq(null), f._state.neq(LineChannelState.active), )) .all();В дальнейшем можно изменять статус активности канала с помощью методов типа LineChannelItemRef.
Отключить канал можно следующим образом:
const channel = await System.lines.channels.search() .where((f, g) => g.and( f.__deletedAt.eq(null), f._state.eq(LineChannelState.active), )) .first(); await channel.disconnect();Отключённые каналы можно переподключить, однако это возможно только для каналов определённых типов:
telegramBot,inbox,viberbot,livechat,instagram(см. LineChannelType).Пример переподключения каналов:
// Ищем неактивные каналы разрешённых типов const channels = await System.lines.channels.search() .where((f, g) => g.and( f.__deletedAt.eq(null), f._state.neq(LineChannelState.active), f._type.in([ LineChannelType.inbox, LineChannelType.telegramBot, LineChannelType.viberbot, LineChannelType.livechat, LineChannelType.instagram, ]), )) .size(100) .all(); for (const channel of channels) { await channel.reconnect(); }Работа с клиентами
Клиенты — пользователи каналов (мессенджеров), которые пишут в линию. Для поиска клиента можно воспользоваться методом LineClients.search.
Например, можно найти пользователя Telegram по его учётной записи:
// Ищем канал типа telegram const channel = await System.lines.channels.search() .where((f, g) => g.and( f.__deletedAt.eq(null), f._type.eq(LineChannelType.telegram), )) .first(); // Ищем привязанного к найденному каналу клиента const client = await System.lines.clients.search() .where((f, g) => g.and( f.__deletedAt.eq(null), f._channel.eq(channel), f._username.eq("telegram_username"), )) .first();Для привязки элемента приложения к клиенту можно использовать метод LineClientItem.save. Для этого в поле клиента LineClientData._applicationItem нужно сохранить ссылку на элемент приложения. Следует обратить внимание, что упомянутое приложение должно быть выбрано для связи с учётной записью в настройках линии, к которой привязан клиент.
Пример такой привязки:
const contact = Context.data.contact!; const client = await System.lines.clients.search() .where((f, g) => g.and( f.__deletedAt.eq(null), f._username.eq("telegram_username"), )) .first(); client.data._applicationItem = contact; await client.save();Работа с сессиями
Сессия — это основной объект, содержащий переписку клиентов и операторов линий.
Сессия может находиться в одном из четырёх статусов (см. LineSessionState):
В очереди — сессия ожидает назначения оператора, никто не может ответить на сообщения клиента;
Назначена на бота — клиент ведёт переписку с ELMA Bot;
Назначена на оператора — клиент ведёт переписку с конкретным оператором;
Закрыта — переписка в рамках этой сессии завершена. Если клиент напишет снова, будет создана новая сессия.
Поиск и создание сессий осуществляется с помощью методов типа LineSessions.
Пример поиска открытой сессии с конкретным клиентом:
const client = await System.lines.clients.search() .where((f, g) => g.and( f.__deletedAt.eq(null), f._username.eq("telegram_username"), )) .first(); const session = await System.lines.sessions.search() .where((f,c) => c.and( f.__deletedAt.eq(null), f._clients.all([client]), f._state.neq(LineSessionState.Closed), )) .first();Для создания новой сессии от имени оператора можно использовать метод LineSessions.create. Метод принимает канал, в рамках которого необходимо создать сессию, и учётную запись (аккаунт) клиента, с которым необходимо начать переписку. В зависимости от типа канала это может быть учётная запись (или псевдоним), номер телефона, электронная почта и т. д.
const contact = await Context.data.contact.fetch(); const account = contact.data._account[0].login; const newSession = await System.lines.sessions.create(Context.data.channel, account);В дальнейшем можно управлять сессией (назначать на оператора, бота или группу операторов, закрывать, получать переписку) с помощью методов типа LineSessionItemRef.
Например, назначить сессию на конкретного оператора можно так:
const session = await System.lines.sessions.search() .where((f,c) => c.and( f.__deletedAt.eq(null), f.__id.eq(Context.data.sessionId!), )) .first(); await session.assignToOperator(Context.data.user);Пример получения последнего сообщения в сессии:
const session = await System.lines.sessions.search() .where((f,c) => c.and( f.__deletedAt.eq(null), f.__id.eq(Context.data.sessionId!), )) .first(); const lastMessage = await session.getLastMessage();Пример отправки системного сообщения в сессию:
const session = await System.lines.sessions.search() .where((f,c) => c.and( f.__deletedAt.eq(null), f.__id.eq(Context.data.sessionId!), )) .first(); const message = session.sendSystemMessage('Приоритет изменён на "Высокий"');Также сессию можно пометить как спам. Использование этого метода аналогично закрытию сессии, однако метрики такой сессии не будут учитываться в статистике. Пометить сессию как спам невозможно для каналов следующих типов:
internal,support(см. LineChannelType).const session = await System.lines.sessions.search() .where((f,c) => c.and( f.__deletedAt.eq(null), f.__id.eq(Context.data.sessionId!), )) .first(); await session.markAsSpam();Последнюю сессию в цепочке диалогов с клиентом или любую сессию канала типа
inbox(см. LineChannelType) можно вернуть из спама в работу. Метрики такой сессии будут вновь учитываться в статистике.const session = await System.lines.sessions.search() .where((f,c) => c.and( f.__deletedAt.eq(null), f.__id.eq(Context.data.sessionId!), )) .first(); await session.unmarkAsSpam();Type aliases
LineSessionPriorityEnumBase
								    
Приоритеты сессии Линий
Low— низкий;Medium— средний;High— высокий;LineSessionStateEnumBase
								    
Статусы (состояния) сессии Линий
Waiting— находится в очереди;AssignedToBot— назначена на бота;AssignedToOperator— назначена на оператора;MarkedAsSpam— помечена как спам;Closed— закрыта.Enumerations
Interfaces
Type aliases