Вебхуки
Вебхуки (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}".