2015-06-02 22 views
8

Tôi đang sử dụng Thông báo đẩy của Gmail với Google PubSub và có nhãn tùy chỉnh mà tôi muốn theo dõi mọi thay đổi. Tôi sử dụng đoạn mã sau để đăng ký một chiếc đồng hồ cho các nhãn (Id của nhãn là Label_1)Xem API Gmail không lọc theo Nhãn

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(); 

}

Chiếc đồng hồ đăng ký OK. Vấn đề là tôi nhận được thông báo đẩy cho bất kỳ thay đổi Gmail nào không chỉ là những thay đổi trong nhãn.

Nhãn tùy chỉnh có được hỗ trợ không?

+0

Nhãn người dùng cũng sẽ hoạt động tốt. Bạn có chắc chắn rằng đó không phải là một thay đổi nhãn khác được đưa ra cho một thông báo rằng _also_ có Label_1? (ví dụ: thông báo Label_1 đã được đánh dấu là chưa đọc, nhưng Label_1 không được thay đổi trên thư.) –

+0

Không xảy ra ví dụ khi gửi email - điều này không liên quan đến nhãn. Ban đầu đã có đồng hồ cho người dùng không có nhãn được chỉ định. Lệnh đồng hồ mới (có bộ lọc nhãn) có ghi đè đồng hồ trước đó không? Tôi cũng đã thử gọi Stop() trước lệnh mới? – PNC

+0

Một đồng hồ() sẽ ghi đè lên lần xem trước đó. Bạn có thể gọi stop() và để nó theo cách đó trong một thời gian để đảm bảo cái cũ đã biến mất mặc dù (trong trường hợp đó nó sẽ là một lỗi mà đồng hồ mới() không ghi đè lên cái cũ). –

Trả lời

0

Tôi nhận thấy cùng một vấn đề nhưng sau đó phát hiện ra rằng nó là do cách API hoạt động. Bạn có thể lọc email qua LabelIds nhưng bạn sẽ chỉ nhận được thông báo nếu email được lọc trực tiếp đến nhãn tùy chỉnh đã chọn. Tôi đoán thiết kế của nó hơn là một lỗ hổng trong API.

Để kiểm tra điều này, hãy tạo bộ lọc tùy chỉnh trong Gmail sẽ áp dụng trực tiếp nhãn tùy chỉnh của bạn cho một bộ email và bạn sẽ nhận được thông báo cho những email đó.

Đã chỉnh sửa (ngày 11 tháng 6 năm 2015): Thông báo đẩy gửi cho bạn HistoryID và tên hộp thư của người dùng. Để trả lời điểm cuối của bạn, hãy gọi userhistory.list() với HistoryID và LabelId bạn muốn theo dõi các thay đổi.

$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); 

Đây là đoạn mã PHP để lọc danh sách lịch sử có historyID và labelID.

+1

Tôi không chắc mình hiểu - vấn đề của tôi là tôi nhận được thông báo cho bất kỳ điều gì xảy ra trong Gmail. Điều này là mặc dù chỉ đăng ký thông báo cho chỉ một nhãn? Âm thanh như thế này không phải là những gì đang xảy ra cho bạn? – PNC

+2

@PNC Vấn đề là watch() hook chỉ đưa bạn HistoryID và mailbox cho mọi sự kiện, bất kể LabelId bạn đã chỉ định trong việc tạo yêu cầu xem. Và historyID là ID toàn bộ hộp thư chứ không phải là toàn bộ LabelID. Vì vậy, không có vấn đề nếu bất kỳ thay đổi nội dung của nhãn, HistoryID sẽ được tăng lên. Để trả lời thông báo đẩy, điểm cuối của bạn sẽ gọi là historyList.list(). Đây là nơi bạn có thể lọc các thư có labelID mà bạn muốn theo dõi. –

+1

Tôi đã có bản cập nhật sau từ một trong nhóm Google cho khu vực này "Bạn có thể hạn chế xem() theo id nhãn như bạn chỉ định nhưng tôi có thể xác nhận nó không hoạt động ngay bây giờ cho nhãn * người dùng * Các logic và lỗi khá phức tạp, chúng tôi đang làm việc trên nó nhưng không có ETA " – PNC

Các vấn đề liên quan