Перейти к основному содержимому

Настройка LINE

Запустите VibeOS как бота LINE через официальный LINE Messaging API. Адаптер находится как встроенный плагин платформы в plugins/platforms/line/ — никаких правок ядра, просто включите его как любую другую платформу.

LINE — доминирующее приложение для обмена сообщениями в Японии, Тайване и Таиланде. Если ваши пользователи живут там, это то, как они до вас доберутся.

Выполните vibeos gateway setup и выберите LINE для пошаговой настройки.

Как бот отвечает​

КонтекстПоведение
Чат 1:1 (ID с U)Отвечает на каждое сообщение
Групповой чат (ID с C)Отвечает, если группа есть в белом списке
Многопользовательская комната (ID с R)Отвечает, если комната есть в белом списке

Обрабатываются входящие текст, изображения, аудио, видео, файлы, стикеры и местоположения. Исходящий текст сначала использует бесплатный токен ответа (одноразовый, окно ~60 секунд) и переключается на тарифицируемый Push API, когда токен истёк.


Шаг 1: Создайте канал LINE Messaging API​

  1. Перейдите в LINE Developers Console.
  2. Создайте провайдера, затем под ним канал Messaging API.
  3. На вкладке Basic settings канала скопируйте Channel secret.
  4. На вкладке Messaging API прокрутите до Channel access token (long-lived) и нажмите Issue. Скопируйте токен.
  5. На вкладке Messaging API также отключите Auto-reply messages и Greeting messages, чтобы они не мешали ответам вашего бота.

Шаг 2: Откройте порт вебхука​

LINE доставляет вебхуки через публичный HTTPS. Порт по умолчанию — 8646; переопределите с помощью LINE_PORT, если необходимо.

# Cloudflare Tunnel (рекомендуется для продакшена — фиксированное имя хоста)
cloudflared tunnel --url http://localhost:8646

# ngrok (хорошо для разработки)
ngrok http 8646

# devtunnel
devtunnel create vibeos-line --allow-anonymous
devtunnel port create vibeos-line -p 8646 --protocol https
devtunnel host vibeos-line

Скопируйте URL https://... — вы установите его как URL вебхука ниже. Оставьте туннель запущенным во время тестирования. Для продакшена настройте фиксированный именованный туннель Cloudflare, чтобы URL вебхука не менялся при перезапуске.


Шаг 3: Настройте VibeOS​

Добавьте в ~/.vibeos/.env:

LINE_CHANNEL_ACCESS_TOKEN=YOUR_LONG_LIVED_TOKEN
LINE_CHANNEL_SECRET=YOUR_CHANNEL_SECRET

# Белый список — хотя бы один из этих (или LINE_ALLOW_ALL_USERS=true для разработки)
LINE_ALLOWED_USERS=U1234567890abcdef... # ID с префиксом U, разделённые запятыми
LINE_ALLOWED_GROUPS=C1234567890abcdef... # ID групп (опционально)
LINE_ALLOWED_ROOMS=R1234567890abcdef... # ID комнат (опционально)

# Требуется для отправки изображений / аудио / видео — публичный базовый URL HTTPS,
# на который указывает туннель. Без него send_image/voice/video откажутся работать.
LINE_PUBLIC_URL=https://my-tunnel.example.com

Затем в ~/.vibeos/config.yaml:

gateway:
platforms:
line:
enabled: true

Этого достаточно — сканирование встроенных плагинов в gateway/config.py автоматически подхватывает plugins/platforms/line/. Никаких правок перечисления Platform.LINE, никакой регистрации _create_adapter.


Шаг 4: Установите URL вебхука​

Вернитесь в консоль LINE:

  1. Откройте ваш канал → вкладка Messaging API.
  2. В разделе Webhook settings → Webhook URL вставьте https://<ваш-туннель>/line/webhook (обратите внимание на путь /line/webhook — адаптер слушает там).
  3. Нажмите Verify. LINE пингует URL; вы должны увидеть 200.
  4. Переключите Use webhook в положение On.

Шаг 5: Запустите шлюз​

vibeos gateway

В логе агента появится:

LINE: webhook listening on 0.0.0.0:8646/line/webhook (public: https://my-tunnel.example.com)

Добавьте бота в друзья из приложения LINE (отсканируйте QR-код на вкладке Messaging API канала) и отправьте ему сообщение.


Медленные ответы LLM​

Токен ответа LINE одноразовый и истекает примерно через 60 секунд после входящего события. Медленные LLM не успевают ответить вовремя, что обычно приводит к платному вызову Push API.

Когда LLM всё ещё работает дольше LINE_SLOW_RESPONSE_THRESHOLD секунд (по умолчанию 45), адаптер потребляет исходный токен ответа, чтобы отправить пузырь с Template Buttons:

🤔 Всё ещё думаю. Нажмите ниже, чтобы получить ответ, когда он будет готов.

[ Получить ответ ]

Пользователь нажимает Получить ответ, когда удобно — этот постбэк доставляет свежий токен ответа, который адаптер использует для отправки кешированного ответа (всё ещё бесплатно).

Машина состояний: PENDING → READY → DELIVERED, плюс ERROR для отменённых запусков (осиротевший PENDING разрешается в «Запуск был прерван до завершения.» после /stop, чтобы постоянная кнопка не зацикливалась).

Чтобы отключить кнопку постбэка и всегда использовать Push-запасной вариант:

LINE_SLOW_RESPONSE_THRESHOLD=0

Чтобы поток постбэка срабатывал надёжно, подавите болтовню, которая израсходует токен ответа до порога:

# ~/.vibeos/config.yaml
display:
interim_assistant_messages: false
platforms:
line:
tool_progress: off

Доставка уведомлений / Cron​

LINE_HOME_CHANNEL=Uxxxxxxxxxxxxxxxxxxxx     # цель доставки по умолчанию

Задания Cron с deliver: line направляются в LINE_HOME_CHANNEL. Адаптер поставляет отдельный Push-отправитель, чтобы задания cron работали, даже если cron выполняется в отдельном процессе от шлюза.


Справочник переменных окружения​

ПеременнаяОбязательнаяПо умолчаниюОписание
LINE_CHANNEL_ACCESS_TOKENда—Долгоживущий токен доступа канала
LINE_CHANNEL_SECRETда—Секрет канала (HMAC-SHA256 проверка вебхука)
LINE_HOSTнет0.0.0.0Хост привязки вебхука
LINE_PORTнет8646Порт привязки вебхука
LINE_PUBLIC_URLдля медиа—Публичный базовый URL HTTPS; требуется для отправки изображений/голоса/видео
LINE_ALLOWED_USERSодин из—ID пользователей, разделённые запятыми (с префиксом U)
LINE_ALLOWED_GROUPSодин из—ID групп, разделённые запятыми (с префиксом C)
LINE_ALLOWED_ROOMSодин из—ID комнат, разделённые запятыми (с префиксом R)
LINE_ALLOW_ALL_USERSтолько для разработкиfalseПолностью пропустить белый список
LINE_HOME_CHANNELнет—Цель доставки уведомлений / cron по умолчанию
LINE_SLOW_RESPONSE_THRESHOLDнет45Секунд до срабатывания кнопки постбэка (0 = отключено)
LINE_PENDING_TEXTнет«🤔 Всё ещё думаю…»Текст пузыря, показываемый рядом с кнопкой постбэка
LINE_BUTTON_LABELнет«Получить ответ»Текст кнопки
LINE_DELIVERED_TEXTнет«Уже ответил ✅»Ответ при повторном нажатии уже доставленной кнопки
LINE_INTERRUPTED_TEXTнет«Запуск был прерван до завершения.»Ответ при нажатии осиротевшей кнопки после /stop

Устранение неполадок​

«invalid signature» при проверке вебхука. Channel secret скопирован неправильно, или ваш туннель перезаписал тело запроса. Сначала проверьте с помощью curl -i https://<туннель>/line/webhook/health — должно вернуть {"status":"ok","platform":"line"}.

Бот ничего не получает в группах. Проверьте, что LINE_ALLOWED_GROUPS включает ID группы C.... Чтобы найти ID группы, отправьте тестовое сообщение и выполните grep ~/.vibeos/logs/gateway.log по LINE: rejecting unauthorized source — словарь отклонённого источника содержит ID.

send_image завершается ошибкой «LINE_PUBLIC_URL must be set». LINE Messaging API не принимает бинарные загрузки — изображения, аудио и видео должны быть доступны по URL HTTPS. Установите LINE_PUBLIC_URL на публичное имя хоста туннеля, и адаптер будет автоматически обслуживать файлы из /line/media/<token>/<filename>.

Кнопка постбэка никогда не появляется. Либо LLM ответила быстрее LINE_SLOW_RESPONSE_THRESHOLD, либо другой пузырь (прогресс инструмента, стриминг) израсходовал токен ответа первым. См. блок подавления в разделе «Медленные ответы LLM».

«already in use by another profile». Тот же токен доступа канала привязан к другому запущенному профилю VibeOS. Остановите другой шлюз или используйте отдельный канал.


Ограничения​

  • Ограничения пузырей и длины. Каждый текстовый пузырь LINE ограничен 5000 символов. Более длинные ответы разбиваются на части примерно по 4500 символов, до 5 пузырей на вызов Reply/Push, с разделением по естественным границам, где это возможно.
  • Нет нативного редактирования сообщений. У LINE нет API для редактирования сообщений — стриминговые ответы всегда отправляют новые пузыри, никогда не редактируют предыдущие.
  • Нет рендеринга Markdown. Жирный (**), курсив (*), блоки кода и заголовки отображаются как буквальные символы. Адаптер удаляет их перед отправкой; URL сохраняются ([label](url) становится label (url)).
  • Индикатор загрузки только в личных сообщениях. LINE отклоняет API chat/loading для групп и комнат, поэтому индикатор набора текста показывается только в чатах 1:1.