Отправка запросов с помощью скриптов
Для работы со скриптами вам потребуется API-ключ. API-ключ Календарного планирования можно посмотреть в интерфейсе сервиса в разделе Настройки → Компания.
Примечание
API-ключ Планирования и API-ключ Календарного планирования — это разные ключи.
Подставьте значение API-ключа в поле APIKEY.
Запрос на запуск задачи отправляется с помощью библиотеки 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-ключ>' SOLVER_URL = 'https://courier.yandex.ru' USER_AGENT = 'RouteQ Support Agent/1.0' CALENDAR_PLANNING_URI = '/vrs/api/v1/calendar_planning/tasks' def make_request(method, uri, **kwargs): body = json.dumps(kwargs['json']) if kwargs.get('json') else '' url = SOLVER_URL + uri headers = { '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 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 = "" headers = { 'User-Agent': USER_AGENT } print("--- Debug Info ---") print(f"URL для запроса: {BASE_URL}{PATH}") print(f"Параметры: {PARAMS}") print(f"Заголовки: {headers}") 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 раздела Запуск планирования с помощью скрипта.