Вебхуки

Облачный Pyrus
Безоблачный Pyrus

Вебхуки (Webhooks) — это механизм обратных вызовов, позволяющий мгновенно реагировать на появление задачи на определенном этапе.

Если вы хотите использовать вебхук, вам необходимо:

  • Написать веб-сервис, который будет обрабатывать запросы Pyrus, и разместить его на своем сервере или в облаке.
  • Создать учетную запись бота и указать в профиле бота URL обработчика.
  • Добавить бота в маршрутизацию формы на соответствующем этапе.

При попадании задачи во входящие боту Pyrus отправит обработчику HTTPS запрос методом POST. На запрос ваш бот должен ответить статусом 2xx в течение 60 секунд после вызова. Если вам необходимо добавить комментарий в задачу, вы можете указать его в теле ответа. Формат комментария описан в запросе POST /tasks/{task-id}/comments.

Пример запроса:

{
  event: "comment",
  access_token: "Dfpb1we4...",
  task_id: 1532,
  user_id: 1725,
  "task": {
    "text": "Budget approval",
    "id": 11611,
    "create_date": "2017-08-17T15:32:11Z",
    "last_modified_date": "2017-08-17T15:32:11Z",
    "author": {
      "id": 1731,
      "first_name": "Bob",
      "last_name": "Smith",
      "email": "Bob.Smith@gmail.com"
    },
    "responsible": {
      "id": 1245,
      "first_name": "my bot",
      "last_name": "",
      "email": "bot@4e83a7da-3ba1-4a16-a1d8-21bbd1ad9592"
    },
    "participants": [
      {
        "id": 1245,
        "first_name": "my bot",
        "last_name": "",
        "email": "bot@4e83a7da-3ba1-4a16-a1d8-21bbd1ad9592"
      },
      {
        "id": 1731,
        "first_name": "Bob",
        "last_name": "Smith",
        "email": "Bob.Smith@gmail.com"
      }
    ],
    "comments": [
      {
        "id": 13767,
        "create_date": "2017-08-17T15:32:11Z",
        "text": "Budget approval",
        "author": {
          "id": 1731,
          "first_name": "Bob",
          "last_name": "Smith",
          "email": "Bob.Smith@gmail.com"
        },
        "reassigned_to": {
          "id": 1245,
          "first_name": "my bot",
          "last_name": "",
          "email": "bot@4e83a7da-3ba1-4a16-a1d8-21bbd1ad9592"
        },
        "participants_added": [
          {
            "id": 1245,
            "first_name": "my bot",
            "last_name": "",
            "email": "bot@4e83a7da-3ba1-4a16-a1d8-21bbd1ad9592"
          },
          {
            "id": 1731,
            "first_name": "Bob",
            "last_name": "Smith",
            "email": "Bob.Smith@gmail.com"
          }
        ]
      }
    ]
  }
}

Если сервер бота недоступен или отвечает статусом отличным от 2хх, Pyrus отправит второй запрос через 61 секунду, а затем третий — через 122 секунды. Номер попытки виден в дополнительном заголовке X-Pyrus-Retry запроса. Если за три попытки связаться не удалось, Pyrus отправит новый запрос в следующий раз, когда кто-то прокомментирует задачу.

Заголовки запроса:

  • User-Agent. Значение — Pyrus-Bot-4. Здесь цифра 4 – версия протокола (совпадает с версией Pyrus API).
  • X-Pyrus-Sig. Значение — строка, содержащая подпись сообщения для проверки того, что вызов бота выполнил Pyrus, а не кто-то другой. Для проверки подписи необходимо к телу запроса добавить секретный ключ и вычислить для получившейся строки HMAC-дайджест с использованием алгоритма SHA1. Смотрите реализацию проверки подписи на Python.
  • X-Pyrus-Retry. Значение — одно из трех: "1/3", "2/3" или "3/3". В числителе номер попытки, начиная с единицы, а в знаменателе — количество попыток (три попытки). Для первого вызова, который не является повтором, значение ставится "1/3".

Пример разворачивания бота на Heroku (для python)

  • Создать Pyrus-бота на странице ботов (если у вас уже есть бот для доступа к методам Pyrus API, вы можете использовать его).
  • Склонировать стартовое бот-приложение и перейти в его папку:
git clone https://github.com/simplygoodsoftware/heroku-python-bot.git
cd heroku-python-bot
  • Прописать Секретный ключ Pyrus-бота в файле конфигурации config.json
{
  "SECRET_KEY": "Bot-Secret-Key"
}
  • Создать и запустить Heroku-приложение:
heroku create
git add .
git commit -m "replaced SECRET_KEY in config.json"
git push heroku master
heroku ps:scale web=1
  • В настройках Pyrus-бота в поле URL указать полученный в предыдущем шаге URL.
  • Назначить задачу в Pyrus на бота. В ней автоматически появится комментарий с ответом бота:
Hello, {user_name}! You said "{comment_text}".

Была ли эта статья полезной?