Gmail API Watch не фильтрует по ярлыку

Я использую push-уведомления Gmail с Google PubSub и имею собственный ярлык, который я хочу отслеживать на предмет любых изменений. Я использую следующий код для регистрации часов для метки (идентификатор метки — Label_1)

WatchRequest wr = new WatchRequest();
wr.TopicName = "projects/" + primaryLink.ggProjectId + "/topics/iLink" + segmentId;
if (labels != null && labels.Count > 0)
{
    wr.LabelIds = new List<string>();
    wr.LabelIds.Add("Label_1");
    wr.LabelFilterAction = "include";
}

WatchResponse wrr = gs.Users.Watch(wr, emailAccount).Execute();
return "HistoryId " + wrr.HistoryId.ToString();

}

Часы регистрируют нормально. Проблема в том, что я получаю push-уведомления о любых изменениях в Gmail, а не только о тех, которые находятся под ярлыком.

Поддерживаются ли настраиваемые метки?


person PNC    schedule 02.06.2015    source источник
comment
Пользовательские метки также должны работать нормально. Вы уверены, что это не другая метка была изменена для сообщения, которое также имело Label_1? (например, сообщение Label_1 было помечено как непрочитанное, но Label_1 не было изменено в сообщении.)   -  person Eric D    schedule 02.06.2015
comment
Нет, например, при отправке электронного письма - это не связано с меткой. Изначально были часы для пользователя без указания меток. Отменяет ли новая команда просмотра (с фильтром меток) предыдущую команду наблюдения? Я также пробовал вызывать Stop() перед новой командой?   -  person PNC    schedule 03.06.2015
comment
Одна функция watch() должна перезаписывать предыдущую. Вы можете вызвать stop() и оставить его таким на некоторое время, чтобы гарантировать, что старый ушел (в этом случае это будет ошибка, что новый watch() не переопределяет старый).   -  person Eric D    schedule 03.06.2015
comment
Я могу подтвердить, что это все еще происходит в v1.   -  person Spencer Easton    schedule 09.09.2015
comment
Мне просто интересно, было ли какое-либо обновление по этому поводу, или список истории вызовов с идентификатором истории и фильтром для метки все еще является ответом?   -  person guival    schedule 13.09.2017
comment
@guival Я не прикасался к нему пару лет. К сожалению, мы используем опрос по ярлыкам на основе времени, так как накладные расходы намного меньше, чем обработка push-уведомлений для каждого события в Gmail...   -  person PNC    schedule 13.09.2017
comment
@PNC Для этой ошибки есть запись в системе отслеживания проблем Google. Не могли бы вы обновить свое сообщение со ссылкой на issuetracker.google.com/issues/36759803 с примечание, чтобы отметить проблему? Чем больше людей отметит это, тем быстрее оно будет исправлено.   -  person TheAddonDepot    schedule 30.07.2018
comment
Только что нашел этот пост SO. Также не работает, когда вы пытаетесь исключить метки.   -  person Swordfish    schedule 17.01.2019
comment
Это все еще не работает.   -  person Nathan Boaldin    schedule 13.03.2020


Ответы (1)


Я заметил ту же проблему, но позже узнал, что это из-за того, как работает API. Вы можете фильтровать электронные письма с помощью LabelIds, но вы будете получать уведомления только в том случае, если электронные письма напрямую фильтруются для выбранной пользовательской метки. Я предполагаю, что это скорее дизайн, чем недостаток API.

Чтобы проверить это, создайте собственный фильтр в Gmail, который будет напрямую применять ваш собственный ярлык к набору электронных писем, и вы должны получать уведомления об этих электронных письмах.

Отредактировано (11 июня 2015 г.): Push-уведомление отправляет вам HistoryID и имя почтового ящика пользователя. В ответ ваша конечная точка должна вызвать userhistory.list() с HistoryID и LabelId, которые вы хотите отслеживать на наличие изменений.

$opt_param = array();
$opt_param['startHistoryId'] = $historyID;
$opt_param['labelId'] = $labelID;
$opt_param['fields'] = 'nextPageToken,historyId,history/messagesAdded';

$service->users_history->listUsersHistory($userID, $opt_param);

Выше приведен фрагмент кода PHP для фильтрации списка истории с помощью historyID и labelID.

person Furhan S.    schedule 09.06.2015
comment
Я не уверен, что понимаю. Моя проблема в том, что я получаю уведомления обо всем, что происходит в Gmail. И это несмотря на то, что вы регистрируетесь только для уведомлений только для одного ярлыка? Похоже, это не то, что происходит для вас? - person PNC; 10.06.2015
comment
@PNC Проблема в том, что хук watch() получает только HistoryID и почтовый ящик для каждого события, независимо от того, какой LabelId вы указали при создании запроса на просмотр. И historyID — это идентификатор для всего почтового ящика, а не для всего LabelID. Таким образом, независимо от того, изменится ли какое-либо содержимое метки, HistoryID будет увеличиваться. В ответ на push-уведомление ваша конечная точка должна вызвать historyList.list(). Здесь вы можете фильтровать сообщения с labelID, которые вы хотите отслеживать. - person Furhan S.; 11.06.2015
comment
У меня есть следующее обновление от одного из сотрудников Google для этой области. Вы должны иметь возможность ограничивать watch() с помощью идентификаторов меток, как вы указываете, но я могу подтвердить, что сейчас это не работает для user ярлыки. Логика и ошибка довольно сложны, мы работаем над этим, но нет ETA. - person PNC; 12.06.2015
comment
Эхх.. Я не уверен, что это только пользовательские метки. После того, как я не смог заставить работать пользовательские метки, я попробовал метки по умолчанию. Watch, кажется, игнорирует их все и отправляет все события. - person Spencer Easton; 09.09.2015
comment
Хук watch() также игнорирует системные метки, например. STARRED есть ли у кого-нибудь новости по этому поводу? - person Jason; 17.01.2017
comment
Насколько я понимаю, эта функция уже много лет не работает, и никому в Google нет дела? К вашему сведению, я также пытаюсь /watch для метки SENT, и я получаю уведомления обо всех событиях. - person Benoit Patra; 10.05.2017
comment
Я также пытаюсь отфильтровать электронные письма с ярлыком labelD Label_1. Но watch() возвращает все электронные письма. Итак, как мне это сделать? Создать собственный фильтр в GMail? Что должен содержать фильтр? Я хочу, чтобы Pub/Sub отправлял мне только изменения, внесенные в этот ярлык, «Ярлык_1». Извините, но я бы хотел, чтобы документы были намного лучше в этом отношении. - person Juggernaut; 26.06.2018
comment
было ли это исправлено Google? у меня такая же проблема, фильтры не работают. - person jkamdjou; 19.11.2018
comment
По состоянию на 5 сентября 2019 года он все еще не работает. - person Faiz; 05.09.2019
comment
все еще проблема по состоянию на 20 января 2020 года. Полный рабочий день потрачен впустую. да - person Edd; 20.01.2020
comment
Все еще проблема по состоянию на 10 марта 2020 г. - person Anthony Liriano; 11.03.2020
comment
Все еще проблема. - person Nathan Boaldin; 13.03.2020
comment
Все еще проблема по состоянию на 6 апреля 2020 г. - person Erim Franci; 06.04.2020
comment
Все еще проблема по состоянию на 18 апреля 2020 г. - person Paritosh Piplewar; 18.04.2020
comment
все еще проблема по состоянию на 08 октября 2020 г. - person Nitin Manocha; 08.10.2020
comment
все еще проблема по состоянию на 05 марта 2021 г. - person Mian.Ammar; 05.03.2021