Перейти к содержанию

Интеграция GREEN-API для Rocket.Chat#

Эта интеграция обеспечивает взаимодействие с WhatsApp в Rocket.Chat через платформу GREEN-API. Разработана на базе Universal Integration Platform от GREEN-API и состоит из двух частей:

  1. Адаптер - приложение NestJS, обеспечивающее взаимодействие между Rocket.Chat и GREEN-API
  2. Приложение Rocket.Chat - сопутствующее приложение, предоставляющее слэш-команды для управления интеграцией

Содержание#

Архитектура#

Адаптер#

Приложение NestJS, которое:

  • Обрабатывает преобразование сообщений между Rocket.Chat и WhatsApp
  • Управляет инстансами GREEN-API
  • Обрабатывает аутентификацию пользователей и выполнение команд
  • Предоставляет конечные точки для вебхуков обеих платформ

Приложение Rocket.Chat#

Приложение Rocket.Chat, предоставляющее слэш-команды:

Для администраторов:

  • /greenapi.register-workspace - Регистрация рабочего пространства Rocket.Chat
  • /greenapi.list-instances - Просмотр всех инстансов в рабочем пространстве
  • /greenapi.list-users - Просмотр всех зарегистрированных пользователей
  • /greenapi.sync-app-url - Синхронизация URL-адресов вебхуков всех инстансов

Для агентов:

  • /greenapi.register-agent - Регистрация себя как агента
  • /greenapi.create-instance - Создание нового инстанса GREEN-API
  • /greenapi.update-token - Обновление токена аутентификации Rocket.Chat

Для обеих ролей:

  • /greenapi.remove-instance - Администраторы могут удалять любые инстансы, агенты только свои

Установка#

Минимальные требования#

  • База данных MySQL (5.7 или выше)
  • Node.js 20 или выше
  • Аккаунт и инстанс GREEN-API
  • Сервер Rocket.Chat (коробочная или облачная версия)

Настройка адаптера#

  1. Склонируйте репозиторий:

    git clone https://github.com/green-api/greenapi-integration-rocketchat.git
    cd greenapi-integration-rocketchat
    
  2. Установите зависимости:

    npm install
    
  3. Настройте переменные окружения в файле .env:

    DATABASE_URL=mysql://user:password@localhost:3306/rocket_adapter
    APP_URL=https://your-domain.com
    
  4. Примените миграции:

    npx prisma migrate deploy
    
  5. Соберите и запустите адаптер:

    # Сборка приложения
    npm run build
    
    # Запуск в production режиме
    npm run start:prod
    

Установка приложения Rocket.Chat#

  1. Перейдите в панель администрирования Rocket.Chat
  2. Перейдите в раздел Apps -> Private Apps -> Upload Private App
  3. Выберите файл greenapi_X.X.X.zip из папки проекта greenapi-integration-rocketchat-app/app и загрузите его
  4. Настройте URL-адрес в настройках загруженного приложения, указав адрес вашего адаптера
  5. Теперь вы можете использовать все вышеуказанные команды

Развертывание в Docker#

Адаптер может быть развернут с использованием Docker Compose. Конфигурационные файлы:

Настройка Docker Compose#

version: '3.8'

services:
  adapter:
    build: .
    ports:
      - "3000:3000"
    environment:
      - DATABASE_URL=${DATABASE_URL}
      - APP_URL=${APP_URL}
    depends_on:
      - db

  db:
    image: mysql:8
    environment:
      - MYSQL_ROOT_PASSWORD=root_password
      - MYSQL_USER=user
      - MYSQL_PASSWORD=password
      - MYSQL_DATABASE=rocket_adapter
    volumes:
      - mysql_data:/var/lib/mysql

volumes:
  mysql_data:

Dockerfile#

FROM node:20-alpine
WORKDIR /app
RUN apk add --no-cache openssl
COPY package*.json ./
RUN npm ci
COPY . .
RUN npx prisma generate
RUN npm run build
EXPOSE 3000
CMD npx prisma migrate deploy && npm run start:prod

Для развертывания с помощью Docker Compose:

# Запуск всех сервисов
docker-compose up -d

# Просмотр логов
docker-compose logs -f

# Остановка всех сервисов
docker-compose down

Примечание: Данные файлы предоставлены в качестве примера и могут требовать корректировок в зависимости от ваших конкретных условий и требований развертывания.

Важные примечания#

Роли пользователей и разрешения#

Интеграция использует систему ролей Rocket.Chat:

  1. Роль администратора

    • Может регистрировать рабочие пространства
    • Может просматривать все инстансы и пользователей
    • Может удалять любой инстанс
    • Может синхронизировать URL приложения
    • Не требуется регистрация в качестве агента для использования админ-команд
  2. Роль агента лайвчата

    • Должен сначала зарегистрироваться используя /greenapi.register-agent
    • Может создавать собственные инстансы
    • Может обновлять свой токен аутентификации
    • Может удалять только свои инстансы

Как получить учетные данные Rocket.Chat (токен и ID)#

Чтобы получить ваши rocket-chat-id и rocket-chat-token:

  1. Нажмите на ваш аватар в Rocket.Chat
  2. Перейдите в раздел "Personal Access Tokens" в настройках аккаунта
  3. Введите имя для токена или оставьте поле пустым и нажмите "Add"
  4. После подтверждения вам будут показаны User ID и Access Token
    • Сохраните оба значения, так как токен будет показан только один раз
    • User ID - это ваш rocket-chat-id
    • Access Token - это ваш rocket-chat-token

Примечание: Для регистрации рабочего пространства (/greenapi.register-workspace) пользователь должен иметь роль администратора (admin). Для регистрации агента (/greenapi.register-agent) требуется роль агента (livechat-agent).

Самостоятельное развертывание#

Если вы разворачиваете адаптер на собственном сервере, для работы адаптера требуется публичный URL-адрес (APP_URL), доступный из интернета. Это необходимо для:

  • Получения вебхуков от GREEN-API
  • Обеспечения связи между Rocket.Chat и адаптером

При самостоятельном развертывании убедитесь, что вы:

  1. Настроили сеть/файрвол для разрешения входящих соединений
  2. Настроили доменное имя или статический IP-адрес
  3. Настроили SSL/TLS для безопасного соединения
  4. Установили переменную окружения APP_URL, указав ваш публичный URL-адрес

Настройка общего доступа к файлам#

Чтобы агенты могли отправлять файлы в WhatsApp, необходимо включить публичный доступ к файлам в вашем рабочем пространстве Rocket.Chat. Для настройки:

  1. Нажмите ⋮ (три вертикальные точки) в левом верхнем углу домашней страницы Rocket.Chat
  2. Нажмите "Рабочее пространство"
  3. Нажмите "Настройки" внизу боковой панели
  4. Найдите "Загрузка файлов"
  5. Отключите настройку "Защитить загруженные файлы"

Если эта настройка останется включенной, агенты не смогут отправлять файлы контактам WhatsApp.

Настройка агентов в Rocket.Chat#

Перед регистрацией в качестве агента в данной интеграции, пользователи должны быть настроены как агенты в Rocket.Chat:

  1. Нажмите ⋮ (три вертикальные точки) в левом верхнем углу домашней страницы Rocket.Chat
  2. Перейдите в раздел Omnichannel
  3. Перейдите в раздел Agents
  4. Найдите пользователя, которого хотите сделать агентом, по его юзернейму
  5. Выберите пользователя и нажмите "Add agent"

Только после того, как пользователь настроен как агент в Rocket.Chat, он может зарегистрироваться как агент в данной интеграции с помощью команды /greenapi.register-agent. Агент будет получать входящие чаты только если он доступен. Если агент недоступен, чат будет направлен следующему доступному агенту. Если нет доступных агентов, чат будет иметь статус "Queued" и его нужно будет принять вручную.

Поведение при цитировании сообщений#

При использовании цитирования сообщений в Rocket.Chat:

  • Агенты могут цитировать сообщения клиентов из WhatsApp
  • Если агенты цитируют свои собственные сообщения, такие цитаты не будут видны в WhatsApp, только само сообщение.

Использование приложения#

1. Зарегистрируйте ваше рабочее пространство в адаптере (требуется роль администратора):#

/greenapi.register-workspace [rocket-chat-id] [rocket-chat-token] 
  • rocket-chat-id: Ваш ID в Rocket.Chat
  • rocket-chat-token: Ваш персональный API токен Rocket.Chat

2. Зарегистрируйте пользователей в вашем рабочем пространстве:#

/greenapi.register-agent [rocket-chat-id] [rocket-chat-token]
  • rocket-chat-id: ID пользователя в Rocket.Chat
  • rocket-chat-token: Персональный API токен пользователя Rocket.Chat

Для выполнения этой команды требуется:

  • Предварительная регистрация рабочего пространства
  • Наличие роли агента лайвчата у пользователя

Для того, чтобы агент мог отвечать в WhatsApp чате, он должен быть предварительно зарегистрирован с помощью этой команды.

3. Создайте инстанс GREEN-API:#

/greenapi.create-instance [instance-id] [instance-token]
  • instance-id: ID вашего инстанса GREEN-API
  • instance-token: API токен вашего инстанса GREEN-API

4. Ожидание настроек:#

Подождите примерно 2 минуты, пока применятся настройки инстанса.

5. Проверка соединения:#

Для проверки соединения напишите сообщение на номер WhatsApp, подключенный к вашему инстансу GREEN-API - в Rocket.Chat появится новый чат с этим сообщением.

6. Начало работы:#

Теперь вы можете использовать WhatsApp в Rocket.Chat!

7. Другие доступные команды:#

Для агентов:

# Создание нового инстанса
/greenapi.create-instance [instance-id] [instance-token]

# Удаление своего инстанса
/greenapi.remove-instance [instance-id]

# Обновление токена аутентификации
/greenapi.update-token [rocket-chat-id] [new-rocket-chat-token]

Для администраторов:

# Просмотр всех инстансов в рабочем пространстве
/greenapi.list-instances

# Просмотр всех зарегистрированных агентов
/greenapi.list-users

# Удаление любого инстанса
/greenapi.remove-instance [instance-id]

# Синхронизация URL для всех инстансов
/greenapi.sync-app-url [new-app-url]

Команда sync-app-url особенно полезна, когда вы изменили URL-адрес вашего адаптера или перенесли его на другой домен. Она автоматически обновляет настройки URL-адресов вебхуков для всех ваших зарегистрированных инстансов GREEN-API. Примечание: Новый URL приложения должен заканчиваться на "api/webhook/rocket" для корректного маппинга вебхуков.

Лицензия#

Лицензировано в соответствии с Creative Commons Attribution-NoDerivatives 4.0 International (CC BY-ND 4.0).

LICENSE.