Доступ к управлению линиями, сессиями и каналами, а также получение переписки и данных метрик линий
осуществляется с помощью свойств типа LinesCollections.
Отключённые каналы можно переподключить, однако это возможно только для каналов определённых типов:
telegramBot, inbox, viberbot, livechat, instagram (см. LineChannelType).
Клиенты — пользователи каналов (мессенджеров), которые пишут в линию.
Для поиска клиента можно воспользоваться методом LineClients.search.
Например, можно найти пользователя Telegram по его учётной записи:
// Ищем канал типа telegramconst 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 нужно сохранить ссылку на элемент приложения.
Следует обратить внимание, что упомянутое приложение должно быть выбрано для связи с учётной записью в настройках линии,
к которой привязан клиент.
Для создания новой сессии от имени оператора можно использовать метод LineSessions.create.
Метод принимает канал, в рамках которого необходимо создать сессию, и учётную запись (аккаунт) клиента,
с которым необходимо начать переписку.
В зависимости от типа канала это может быть учётная запись (или псевдоним), номер телефона, электронная почта и т. д.
В дальнейшем можно управлять сессией (назначать на оператора, бота или группу операторов, закрывать, получать переписку)
с помощью методов типа LineSessionItemRef.
Например, назначить сессию на конкретного оператора можно так:
Также сессию можно пометить как спам. Использование этого метода аналогично закрытию сессии, однако метрики такой сессии не будут
учитываться в статистике. Пометить сессию как спам невозможно для каналов следующих типов: internal, support
(см. LineChannelType).
Последнюю сессию в цепочке диалогов с клиентом или любую сессию канала типа inbox (см. LineChannelType)
можно вернуть из спама в работу. Метрики такой сессии будут вновь учитываться в статистике.
Линии
Доступ к управлению линиями, сессиями и каналами, а также получение переписки и данных метрик линий осуществляется с помощью свойств типа 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— закрыта.