Отправка запросов с помощью скриптов
Для отправки запросов к API календарного планирования, требующих подпись, можно использовать подготовленные скрипты на Python.
Для работы со скриптами вам потребуется API-ключ и секрет.
Примечание
API-ключ Планирования и API-ключ Календарного планирования — это разные ключи.
API-ключ Календарного планирования можно посмотреть в интерфейсе сервиса в разделе Настройки → Компания.
Чтобы получить секрет, обратитесь к вашему клиентскому менеджеру или напишите в службу поддержки. Подставьте значение API-ключа в поле APIKEY, а секрет — в поле SECRET.
Подпись вычисляется скриптом автоматически на основе данных запроса.
Запрос на запуск задачи отправляется с помощью библиотеки requests.
Запуск планирования с помощью скрипта
Чтобы запустить задачу календарного планирования через API:
-
Создайте файл
request.jsonи поместите в него тело запроса. Структуру JSON-запроса см. в спецификации.Пример тела запроса на планирование
Скачать пример можно по ссылке.
-
В той же папке создайте файл
script.pyи скопируйте в него следующий скрипт на Python:#!/usr/bin/env python3 import hashlib import hmac import json import requests import sys import time import urllib3 from urllib.parse import urlencode urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) APIKEY = '<ваш API-ключ>' SECRET = '<ваш secret>' SOLVER_URL = 'https://courier.yandex.ru' USER_AGENT = 'RouteQ Support Agent/1.0' CALENDAR_PLANNING_URI = '/vrs/api/v1/calendar_planning/tasks' def gen_signature(key, parts): HMAC = hmac.new(bytes.fromhex(key), None, digestmod=hashlib.sha256) for part in parts: HMAC.update(part.encode('utf-8')) return HMAC.hexdigest() def make_request(method, uri, **kwargs): body = json.dumps(kwargs['json']) if kwargs.get('json') else '' signature = gen_signature(SECRET,[USER_AGENT, method, ' ', uri, body]) url = SOLVER_URL + uri headers = { 'X-YaCourier-Signature': signature, 'User-Agent': USER_AGENT, } print(f"{method} {url}") response = requests.request(method, url, verify=False, headers=headers, **kwargs) return response def add_task(task): params = {'apikey': APIKEY} uri = f"{CALENDAR_PLANNING_URI}?{urlencode(params)}" response = make_request('POST', uri, json=task) response.raise_for_status() j = response.json() return j['id'] def get_status(task_id): params = {'apikey': APIKEY} uri = f"{CALENDAR_PLANNING_URI}/{task_id}/status?{urlencode(params)}" response = make_request('GET', uri) response.raise_for_status() j = response.json() print(j) return j['status'] def get_result(task_id): params = {'apikey': APIKEY} uri = f"{CALENDAR_PLANNING_URI}/{task_id}/result?{urlencode(params)}" response = make_request('GET', uri) response.raise_for_status() j = response.json() return j def main(): with open(sys.argv[1]) as fd: task = json.load(fd) task_id = add_task(task) while get_status(task_id) != 'completed': time.sleep(2) result = get_result(task_id) print(json.dumps(result)[:100]) if __name__ == '__main__': main() -
Запустите скрипт командой
python3 script.py request.json. Запуск должен выполняться через командную строку из папки, в которой расположены файлыrequest.jsonиscript.py.Если на вашем устройстве уже установлен Python с библиотекой
requests, скрипт запустится и создастся задача на планирование.Скриншот

Если Python и библиотека не установлены, перейдите к шагу 4.
-
Установите Python с библиотекой
requestsи запустите скрипт командойpython3 script.py request.json.Для этого:
-
Перейдите на официальный сайт разработчика и скачайте актуальную версию Python, которая подходит для операционной системы вашего устройства.
-
Запустите установку с опциями, которые разрешают:
- установку с правами администратора;
- добавление файла
python.exeв переменную PATH.
-
Разрешите приложению вносить изменения на вашем устройстве.
-
Дождитесь завершения установки и перезагрузите устройство.
-
Откройте папку, в которую установлен Python. Найдите файл python.exe, скопируйте его и назовите копию
python3.exe. -
В командной строке выполните команду
python3 --version. Убедитесь, что выводится номер версии. -
С помощью пакетного менеджера pip, который добавился вместе с Python, установите библиотеку
requests. Для этого выполните командуpip install requestsи дождитесь окончания установки. -
Из папки, в которой расположены файлы
request.jsonиscript.py, запустите скрипт с помощью командыpython3 script.py request.json. Будет создана задача на планирование.
-
Получение результата планирования с помощью скрипта
Чтобы получить результат календарного планирования через API:
-
Создайте файл
script.pyи скопируйте в него следующий скрипт на Python:import requests import hashlib import hmac from urllib.parse import urlencode SECRET = '<ваш secret>' APIKEY = '<ваш API-ключ>' TASK_ID = '<идентификатор задачи>' USER_AGENT = 'RouteQ Support Agent/1.0' METHOD = 'GET' BASE_URL = 'https://courier.yandex.ru' PATH = f'/vrs/api/v1/calendar_planning/tasks/{TASK_ID}/result' PARAMS = {'apikey': APIKEY} BODY = "" def gen_signature(key, parts): signer = hmac.new(bytes.fromhex(key), None, digestmod=hashlib.sha256) for part in parts: signer.update(part.encode('utf-8')) return signer.hexdigest() full_uri_for_signing = f"{PATH}?{urlencode(PARAMS)}" parts_to_sign = [ USER_AGENT, METHOD, " ", full_uri_for_signing, BODY ] signature = gen_signature(SECRET, parts_to_sign) headers = { 'User-Agent': USER_AGENT, 'X-YaCourier-Signature': signature } print("--- Debug Info ---") print(f"URL для запроса: {BASE_URL}{PATH}") print(f"Параметры: {PARAMS}") print(f"Заголовки: {headers}") print(f"Строка URI для подписи: {full_uri_for_signing}") print("------------------\n") try: response = requests.get( url=f"{BASE_URL}{PATH}", headers=headers, params=PARAMS ) print(f"HTTP/1.1 {response.status_code} {response.reason}") for header, value in response.headers.items(): print(f"{header}: {value}") except requests.exceptions.RequestException as e: print(f"Произошла ошибка при выполнении запроса: {e}") -
Подставьте идентификатор задачи в поле
TASK_ID. -
Запустите скрипт командой
python3 script.py.
Запуск должен выполняться через командную строку из папки, в которой расположен файл script.py.
Если скрипт не запускается, убедитесь, что на вашем устройстве установлен Python с библиотекой requests. Подробнее об установке см. шаг 4 раздела Запуск планирования с помощью скрипта.