Работа с Google Ads API открывает широкие возможности для автоматизации управления рекламными кампаниями, получения детализированной статистики и интеграции с другими системами. Однако одним из частых препятствий, с которым сталкиваются разработчики, является ошибка авторизации.
Описание проблемы: ‘У вызывающего пользователя нет разрешения’
Эта ошибка (AuthorizationError.USER_PERMISSION_DENIED или аналогичные варианты) сигнализирует о том, что учетные данные, использованные для аутентификации запроса к API, не обладают достаточными правами для выполнения запрошенной операции в целевом аккаунте Google Ads. Проще говоря, пользователь или сервис, от имени которого выполняется запрос, не имеет разрешения на доступ к запрашиваемому ресурсу или выполнение действия.
Когда и почему возникает эта ошибка
Ошибка может возникнуть при любом вызове API, требующем доступа к данным конкретного аккаунта Google Ads (например, получение списка кампаний, создание групп объявлений, изменение ставок). Основные причины кроются в неверной конфигурации доступов на различных уровнях: от прав пользователя в интерфейсе Google Ads до настроек OAuth 2.0 и статуса аккаунта разработчика.
Важность правильной настройки разрешений для работы с API
Корректная настройка разрешений — это фундамент безопасной и эффективной работы с API. Недостаточные права блокируют выполнение задач, а избыточные создают риски безопасности. Понимание причин и способов устранения ошибки USER_PERMISSION_DENIED необходимо для бесперебойной работы автоматизированных систем и скриптов, взаимодействующих с Google Ads.
Основные причины отсутствия разрешения
Ошибка отсутствия разрешения может быть вызвана несколькими факторами. Рассмотрим наиболее распространенные.
Некорректные учетные данные Google Ads API
К ним относятся Developer Token, Client ID и Client Secret. Ошибка в любом из этих параметров, используемых при инициализации клиента API, приведет к невозможности аутентификации или авторизации. Убедитесь, что вы используете актуальные и корректные данные из вашего Google Cloud Console и API Center в Google Ads.
Недостаточные права доступа у пользователя
Это одна из самых частых причин. Пользователь Google (адрес электронной почты), от имени которого происходит OAuth 2.0 авторизация для получения токенов доступа, должен иметь соответствующий уровень доступа (‘Стандартный’ или ‘Администратор’) в том конкретном аккаунте Google Ads (идентифицируемом по Customer ID), к которому вы пытаетесь обратиться через API. Уровень доступа ‘Только чтение’ не позволит выполнять операции по изменению данных.
Проблемы с OAuth 2.0 авторизацией
Процесс авторизации OAuth 2.0 сам по себе может быть источником проблем:
Невалидный или просроченный Refresh Token: Если Refresh Token отозван или истек, получить новый Access Token не удастся.
Неверные ‘scopes’: При запросе авторизации необходимо указывать правильные области (scopes), обычно это https://www.googleapis.com/auth/adwords.
Несоответствие Redirect URI: URI перенаправления, указанный в запросе авторизации, должен точно совпадать с одним из зарегистрированных URI в учетных данных OAuth 2.0 в Google Cloud Console.
Неправильно настроенный аккаунт разработчика Google Ads API
Проблемы могут возникнуть на уровне вашего аккаунта разработчика:
Неактивный или заблокированный Developer Token: Токен может быть неактивен или заблокирован из-за нарушений правил использования API.
Проблемы с Google Cloud Project: Проект, к которому привязаны учетные данные OAuth 2.0, должен быть активен, и Google Ads API должен быть включен в этом проекте.
Диагностика и выявление проблемы с разрешениями
Для точного определения причины ошибки необходимо провести диагностику.
Проверка учетных данных API в Google Cloud Console
Перейдите в Google Cloud Console (console.cloud.google.com):
Выберите проект, связанный с вашими учетными данными Google Ads API.
Перейдите в раздел ‘APIs & Services’ -> ‘Credentials’.
Проверьте правильность Client ID и Client Secret для вашего OAuth 2.0 Client.
Убедитесь, что Google Ads API включен в разделе ‘Enabled APIs & services’.
В настройках OAuth Consent Screen проверьте конфигурацию и статус.
Анализ журналов ошибок и трассировка запросов
Включите подробное логирование запросов и ответов API в вашем приложении. При возникновении ошибки AuthorizationError изучите возвращаемый объект ошибки. Он содержит поле details, которое может включать google.ads.googleads.errors.GoogleAdsError, где error_code укажет на конкретный тип проблемы (например, authorization_error: USER_PERMISSION_DENIED). Логируйте Customer ID, к которому обращаетесь, и метод API, который вызвал ошибку.
Использование инструментов для тестирования API (например, Postman)
Инструменты вроде Postman позволяют изолировать проблему. Вы можете вручную получить OAuth 2.0 токены (Access Token и Refresh Token) и выполнить простой запрос к API (например, googleads.googleapis.com/vX/customers:listAccessibleCustomers или запрос к конкретному Customer ID) с этими токенами. Это поможет проверить:
Корректность Developer Token и OAuth Client ID/Secret.
Валидность полученных токенов.
Наличие базового доступа к API с данными учетными данными.
Решения для устранения ошибки ‘У вызывающего пользователя нет разрешения’
После диагностики можно приступать к устранению проблемы.
Проверка и обновление учетных данных API
Developer Token: Убедитесь, что используете правильный и активный токен из API Center вашего управляющего аккаунта Google Ads.
OAuth Credentials: Если есть сомнения, пересоздайте Client Secret в Google Cloud Console и обновите его в конфигурации вашего приложения.
Предоставление необходимых разрешений пользователю в Google Ads
Войдите в веб-интерфейс Google Ads, используя ту учетную запись Google, которая применяется для OAuth 2.0 авторизации.
Перейдите в раздел ‘Инструменты и настройки’ -> ‘Доступ и безопасность’.
Убедитесь, что у этого пользователя есть доступ к целевому Customer ID (аккаунту).
Проверьте уровень доступа. Для большинства операций записи требуется уровень ‘Стандартный’ или ‘Администратор’. Если доступ недостаточен или отсутствует, попросите администратора аккаунта предоставить необходимые права.
Повторная настройка OAuth 2.0 и обновление токенов
Обновите Refresh Token: Если есть подозрение, что Refresh Token недействителен, инициируйте процесс авторизации OAuth 2.0 заново, чтобы получить новый Refresh Token. Сохраните его надежно.
Проверьте Scopes и Redirect URI: Убедитесь, что при запросе авторизации используется scope=https://www.googleapis.com/auth/adwords и redirect_uri точно совпадает с зарегистрированным в Cloud Console.
Реализуйте обработку обновления токена: Ваше приложение должно корректно использовать Refresh Token для автоматического получения нового Access Token, когда старый истекает.
Проверка статуса и настроек аккаунта разработчика API
Статус токена: Проверьте статус вашего Developer Token в API Center (Инструменты и настройки -> API Center).
Email уведомления: Проверьте почтовый ящик, связанный с аккаунтом разработчика, на наличие писем от Google Ads API Compliance о возможных проблемах или блокировках.
Google Cloud Project: Убедитесь, что связанный проект Google Cloud активен и биллинг для него настроен (если применимо).
Использование сервисного аккаунта (Service Account) для доступа к API
Для серверных приложений, работающих без прямого участия пользователя, рекомендуется использовать сервисные аккаунты. Это специальный тип аккаунта Google, представляющий ваше приложение.
Создайте сервисный аккаунт в Google Cloud Console.
Сгенерируйте для него JSON-ключ.
Предоставьте доступ этому сервисному аккаунту (по его email адресу) в нужном аккаунте Google Ads с необходимыми разрешениями (например, ‘Стандартный’).
Используйте JSON-ключ для аутентификации в вашем приложении. Это устраняет необходимость в пользовательском OAuth 2.0 потоке.
Концептуальный пример инициализации клиента (Python):
from google.ads.googleads.client import GoogleAdsClient
import google.auth.credentials # Для демонстрации типизации
# Путь к файлу ключа сервисного аккаунта
KEY_FILE_PATH: str = '/path/to/your/keyfile.json'
# Ваш Developer Token
DEVELOPER_TOKEN: str = 'YOUR_DEVELOPER_TOKEN'
def initialize_client_with_service_account(
key_file: str,
dev_token: str
) -> GoogleAdsClient:
"""Инициализирует клиент API с учетными данными сервисного аккаунта."""
# Загрузка учетных данных из файла ключа
credentials = GoogleAdsClient.load_service_account_credentials(key_file)
# Инициализация клиента
googleads_client = GoogleAdsClient(credentials, dev_token)
return googleads_client
# client = initialize_client_with_service_account(KEY_FILE_PATH, DEVELOPER_TOKEN)Лучшие практики для предотвращения проблем с разрешениями
Чтобы минимизировать вероятность возникновения ошибок авторизации, следуйте этим рекомендациям:
Регулярная проверка и обновление разрешений
Периодически проводите аудит пользователей и сервисных аккаунтов, имеющих доступ к вашим аккаунтам Google Ads. Удаляйте неиспользуемые доступы и проверяйте актуальность уровней разрешений.
Использование ролей с минимальными необходимыми правами
Придерживайтесь принципа наименьших привилегий. Если приложению требуется только читать данные, предоставьте ему доступ уровня ‘Только чтение’. Не используйте права ‘Администратор’ без крайней необходимости.
Мониторинг активности API и оповещения об ошибках
Настройте систему мониторинга и логирования для ваших приложений, взаимодействующих с API. Особое внимание уделите отслеживанию ошибок авторизации (AuthorizationError). Настройте оповещения для оперативного реагирования на подобные проблемы, чтобы минимизировать время простоя автоматизированных процессов.