[In process] DeskChan HTTP API



  • Всем снова привет, с вами как всегда хреновый явист, который пишет костыльные узкоспециализированные решения под свои нужды.
    И сегодня я хочу предложить очередной такой плагин для DeskChan, а если точнее даже несколько (в качестве демок к основному).
    Как видно из названия, этот плагин поднять HTTP API, которое, в свою очередь, интегрируется с DeskChan.

    Немного о плюшках:

    1. Вы можете создавать псевдо-плагины, которые могут находиться где-либо на другом устройстве (например, на удаленном сервере). При этом вам будут доступны sendMessage и addMessageListener, кстати, "тело" последнего так же находится где-то вне DeskChan.
    2. С этим плагином можно писать вообще на всех ЯП, у которых есть поддержка JSON и HTTP.
    3. Бонусом-демкой идет расширение браузера, которое позволит DeskChan собирать больше информации о том, что ты сейчас делаешь в браузере 😂
    4. ???

    Вместо F.A.Q.

    1. Как выглядит JSON регистрации плагина? (Прошу простить, не нашел способа на этом форуме вставлять код, поэтому обычным текстом)

    {
    "token": "db232f05bd7b3e6615b9bfcd38d99624",
    "sendMessage": [
    {
    "type": "DeskChan:say",
    "values": {
    "text": "Привет!!! Из API"
    }
    },
    {
    "type": "core:set-event-link",
    "values": {
    "eventName": "speech:get",
    "commandName": "ExternalPlugin:command",
    "rule": "протестируй мой новый плагин"
    }
    },
    {
    "type": "core:add-command",
    "values": {
    "tag": "ExternalPlugin:command"
    }
    }
    ],
    "addMessageListener": [
    {
    "type": "ExternalPlugin:command",
    "values": {
    "type": "External",
    "URL": "http://localhost/listener/ExternalPlugin/test.php"
    }
    }
    ]
    }

    Вроде всё достаточно привычно, за исключением того, что это JSON, и того что в addMessageListener встраивается не тело листенера, а указывается тип (type) внешний (External) и ссылка (URL) куда отправить данные (sender, tag, data) в формате JSON.

    1. Как выглядит JSON от DeskChan в ваш Listener?
      Для указанного выше примера, на указанный URL методом POST придет строка следующего вида:
      {
      "data":{
      "msgData":"протестируй мой новый плагин"
      },
      "sender":"speech_command_system",
      "tag":"ExternalPlugin:command"
      }

    2. Как должен выглядить ответ на листенер?
      Структура идентична регистрации.

    3. Как регистрировать плагин?
      Существует два способа:
      Вариант 1. Вы отправляете JSON POST запрос из вашего плагина на открытый порт DeskChan (по умолчанию: 8765)
      Вариант 2. DeskChan сама опросит ваш удаленный сервер, чтобы спросить, хочет ли он что-то ей сказать (зарегистрировать плагин)

    4. Мне не нужна регистрация плагина, или слушатель сообщений, я просто хочу чтобы DeskChan что-то мне сказала. Можно ли просто отправить DeskChan:say ?
      Не вопрос, см.структуру регистрации плагина, выкинь всё лишнее, там в примере есть отправка обычного сообщения от лица DeskChan.

    Это всё конечно интересно, но к сожалению, не без изъян. И их очень много.

    1. Конечно же, не следует выпускать этот плагин наружу, если вы не в состоянии убедиться, что обезопасили его достаточно хорошо.
    2. Отсутствует возможность конфигурации (смена токена, порта, списка опрашиваемых URL и т.д.)
    3. Напроч отсутствует валидация! Я даже не хочу пытаться представить сколько и каких ошибок у вас может возникнуть, при некорректных JSON. (Единственная валидация, которая присутствует - проверка токена)
    4. Грязный код, как я уже сказал в самом начале, я вообще не явист. Поэтому писал как мог.

    Тем не менее, исходники открыты, и поэтому вы можете внести свою посильную помощь с помощью пулреквестов на гитхаб.

    Установка расширения для браузера (совместим с хромо-подобными):
    Открыть браузер.
    Перейти в расширения.
    Активировать режим разработчика.
    "Включить расширение..." или "Загрузить распакованное расширение" (в зависимости от браузера) и указать путь до каталога demo_extension_chrome

    Установка плагина API :
    Скачать jar или скомпилировать из исходников.
    поместить файл .jar в каталог plugins

    Установка плагина stackoverflow_checker
    Скачать (исходники) и поместить каталог stackoverflow_checker в plugins

    Всё установили? Давайте опробуем.
    Запустите DeskChan.
    Откройте контекстное меню, выберите Запустить сервер.
    DeskChan скажет что сервер запущен.

    Откройте браузер
    погуляйте по интернету
    "невзначай" зайдите на стэковерфлоу
    DeskChan скажет соответствующую фразу на этот счёт.

    Послесловие: На самом деле я не очень-то и хотел выкладывать этот модуль сырым, но поговорив с Nikita (@Braklord) всё же решил отписаться о нём.