В этом разделе мы приводим пример разработки бота с автоответом и согласованием. Также Вы можете скачать готового бота и развернуть его на heroku. Информация будет полезна разработчикам приложений.
Создайте страницу с HTTPS-адресом на своем сайте, например, https://example.com/autoresponse. Эта страница-обработчик будет получать запросы от Pyrus-бота. В обработчик добавьте код по следующей схеме.
1. Проверяем подпись. Подпись гарантирует, что вызов пришел действительно от Pyrus.
python:
def _is_signature_correct(message, secret, signature): secret = str.encode(secret) digest = hmac.new(secret, msg=message, digestmod=hashlib.sha1).hexdigest() return hmac.compare_digest(digest, signature.lower())php:
strtoupper(hash_hmac(«sha1», $response_body_as_string, $security_key))ruby:
OpenSSL::HMAC.hexdigest('sha1', security_key, response_body_as_string).upcase
Эти функции производят конвертацию запроса в виде строк в byte array с использованием UTF и вычисляют HMAC-дайджест с использованием алгоритма SHA1 для хеширования.
2. Выбираем значение author.id из полученного объекта task ( см. полное описание):
{ "id": 5600, "text": "New task", "create_date": "2016-12-02T11:20:22Z", "last_modified_date": "2016-12-02T11:20:22Z", "parent_task_id": 0, "author": { "id": 1731, "first_name": "tester", "last_name": "papirus", "email": "test@pyrus.com" }, "approvals": [[{ "person": { "id": 21913, "first_name": "bot", "last_name": "papirus", "email": "bot@pyrus.com" }, "approval_choice": "waiting" }], [{ "person": { "id": 1731, "first_name": "tester", "last_name": "papirus", "email": "test@pyrus.com" }, "approval_choice": "waiting" }]], "comments": [{ "create_date": "2016-12-02T11:20:22Z", "author": { "id": 1731, "first_name": "tester", "last_name": "papirus", "email": "test@pyrus.com" }, "approvals_added": [[ "person": { "id": 21913, "first_name": "bot", "last_name": "papirus", "email": "bot@pyrus.com" }, "step": 1 ], [ "person": { "id": 1731, "first_name": "tester", "last_name": "papirus", "email": "test@pyrus.com" }, "step": 2 ]], "id": 12208 }] }
В примере выше author.email = test@pyrus.com.
3. Формируем тело ответа:
{ "text": "Hello, test@pyrus.com. This task approved by bot.", "approval_choice": "approved" }В этом примере:
4. Возвращаем ответ HTTP 200 ОК и тело, как указано выше.
Приведем полный пример с кодом бота на Python. Предыдущий пример кода бота с проверкой подписи доступен здесь.
import hmac import hashlib import json from flask import Flask from flask import request app = Flask(__name__) @app.route("/", methods=['GET', 'POST']) def index(): body = request.data signature = request.headers['x-pyrus-sig'] secret = 'This-is-bot-secret-key-VtBOEesdOnIcqGaWQeFkWFqyzgdt2PGsZVWBc8h8H0-xU9ux-dN37IjcAqf2pzeqoo5FqdtoH' return _prepare_response(body.decode('utf-8')) def _prepare_response(body): task = json.loads(body)["task"] task_author = task["author"]["email"] return "{{\"text\": \"Hello, {}. This task approved by bot.\", \"approval_choice\": \"approved\"}}".format(task_author) if __name__ == "__main__": app.run("127.0.0.1", 5001) # !!!Не забудьте заменить адрес!!!
Теперь добавьте нового бота и в поле URL впишите адрес обработчика (в нашем примере это https://example.com/autoresponse).
Для проверки поставьте в Pyrus задачу на бота с запросом его согласования. Убедитесь, что в задаче получен ответ с текстом Approved by bot и стоит согласование бота.