Получаем диалоги из ботов через web socket's
Сразу отметим, что получение списка открытых диалогов и сообщений определённого диалога по REST API добавлено в
https://docs.chatforma.com/

Запрос на получение списка пользователей диалогов:

https://api.pro.chatforma.com/public
/v1/bots/[BOT-ID]/dialogs/users?api_key
=[API-КЛЮЧ-ИНТЕГРАЦИЙ]

Для моментального получения сообщений из диалогов пользователей с ботом и отправки сообщений от имени бота пользователям можно использовать web socket's

Для подключения сокета понадобится создать токен для интеграции - [API-КЛЮЧ-ИНТЕГРАЦИЙ] - здесь.

Запросы на подключение сокета, отправку и получение сообщений диалогов можно протестировать через Firecamp.

Запрос для подключения сокета
wss://api.pro.photoever.ru/ws?api_key=[API-КЛЮЧ-ИНТЕГРАЦИЙ]

Если сокет подключен успешно, в ответ должно прийти сообщение вида:


{
  "t": 0,
  "d": {
    "connId": "ck8fre0q900017kw2hy18ajcn",
    "serverInterval": 30000,
    "serverAttempts": 3,
    "clientInterval": 25000,
    "clientAttempts": 3
  }
}
Для того, чтобы подписаться на диалоги определённого бота, нужно отправить сообщение, указав [BOT-ID]:

{
  "t": 1,
  "d": {
    "topic": "api-dialog:[BOT-ID]"
  }
}
Если приходит ответ следующего вида, то подписка на диалоги прошла успешно:

{
  "t": 3,
  "d": {
    "topic": "api-dialog:[BOT-ID]"
  }
}
Отправка сообщения в диалог
Для того, чтобы отправить сообщение в диалог определенного бота:

{
    "t": 7,
    "d": {
        "topic": "api-dialog:[BOT-ID]",
        "event": "message",
        "data": {
            "type": "message",
            "data": {
                "uid": "123", // uid специально для контроля своих сообщений
                "userId": [USER-ID],
                "botId": [BOT-ID],
                "message": "test from api", // текст сообщения
                "date": "2020-03-31 11:56:18",
                "isClientMessage": false
            }
        }
    }
}
Получение сообщений из диалога
Входящие сообщения передаются из диалога в таком виде:

{
  "t": 7,
  "d": {
    "topic": "api-dialog:[BOT-ID]",
    "event": "message",
    "data": {
      "type": "message",
      "data": {
        "chatId": "[CHAT-ID]", // используется chatId, потому что юзер может удаляться и добавляться, а chatId не изменяется
        "botId": [BOT-ID],
        "uid": "123", // uid предназначено для контроля своих сообщений
        "message": "1111", // текст сообщения
        "date": "2020-03-31 12:29:04",
        "isClientMessage": false
      }
    }
  }
}
Входящее сообщение рассылается всем подписавшимся на данный бот. Подписок на сообщения одного и того же бота может быть несколько.

Из-за этого отправленное сообщение может возвращаться обратно тому, кто его отправил.

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