2015-08-17 8 views
3

Я пытаюсь настроить Push PubSub Google на свой сервер, чтобы получать уведомления Gmail push.Продолжайте получать сообщение об ошибке «Ошибка отправки тестового сообщения в Cloud PubSub ...» с помощью Google Cloud PubSub

Я получаю следующие области применения:

Это приста ks, чтобы создать тему, подписаться на эту тему, предоставить доступ к API Gmail на эту тему, но это не удается, когда я пытаюсь посмотреть мой почтовый ящик. Я после этого руководства: https://developers.google.com/gmail/api/guides/push и это код, я использую, чтобы сделать шаги, описанные выше:

var rp = require('request-promise'); 

// Step 1. Create a topic 
rp({ 
    url: 'https://pubsub.googleapis.com/v1/projects/projectId/topics/mailSync', 
    method: 'PUT', 
    headers: { 
    Authorization: 'Bearer accessToken' 
    } 
}).then(function(response) { 
    console.log(response); 
    res.send(response); 
}) 
.catch(function(error) { 
    console.log(error.message); 
    res.send(error.message); 
}); 

// Step 2. Create a subscription: 
rp({ 
    url: 'https://pubsub.googleapis.com/v1/projects/projectId/subscriptions/mailSync', 
    method: 'PUT', 
    headers: { 
    Authorization: 'Bearer accessToken' 
    }, 
    json: { 
    topic: 'projects/projectId/topics/mailSync', 
    pushConfig: { 
     pushEndpoint: 'https://developers.example.com/mailSyncHandler' 
    } 
    } 
}).then(function(response) { 
    console.log(response); 
    res.send(response); 
}) 
.catch(function(err) { 
    console.error(err); 
    res.status(err.statusCode).send(err.error.error.message); 
}); 

// Step 3. Grant the Gmail API publish rights on our topic 
rp({ 
    url: "https://pubsub.googleapis.com/v1beta2/projects/projectId/topics/mailSync:setIamPolicy", 
    method: 'POST', 
    headers: { 
    Authorization: 'Bearer accessToken' 
    }, 
    data: { 
    policy: { 
     bindings: [{ 
     role: "roles/pubsub.publisher", 
     members: ["serviceAccount:[email protected]"] 
     }] 
    } 
    }, 
    json: true 
}).then(function(response) { 
    console.log(response); 
    res.send(response); 
}) 
.catch(function(error) { 
    console.log(error.message); 
    res.send(error.message); 
}); 

// Step 4. Watch my Inbox 
rp({ 
    url: "https://www.googleapis.com/gmail/v1/users/me/watch", 
    method: "POST", 
    headers: { 
    Authorization: 'Bearer accessToken' 
    }, 
    json: { 
    topicName: "projects/projectId/topics/mailSync", 
    labelIds: ["INBOX"] 
    } 
}).then(function(response) { 
    console.log(response); 
    res.send(response); 
}) 
.catch(function(error) { 
    console.error(error); 
    res.send(error.message); 
}); 
+0

«, но он терпит неудачу, когда я пытаясь посмотреть мой почтовый ящик », пожалуйста, уточните , Вы получаете какое-то сообщение об ошибке/исключение при вызове watch() или это что-то еще. Пожалуйста, поделитесь исключением/ошибкой, если таковые имеются. –

+0

Вы предоставили права публикации на свою тему? –

+0

@TakashiMatsuo Я понятия не имею, как проверить, предоставил ли я право на публикацию? – jwanglof

ответ

1

Разобрался почему я получил ошибку, и это было, потому что я не отправлял данные в формате JSON в шаг 4.

правильный код на шаге 4, (обратите внимание, что я использую JSON: вместо тела: по строке 8):

// Step 4. Watch my Inbox 
rp({ 
    url: "https://www.googleapis.com/gmail/v1/users/me/watch", 
    method: "POST", 
    headers: { 
    Authorization: 'Bearer accessToken' 
    }, 
    json: {  <----- 
    topicName: "projects/projectId/topics/mailSync", 
    labelIds: ["INBOX"] 
    } 
}).then(function(response) { 
    console.log(response); 
    res.send(response); 
}) 
.catch(function(error) { 
    console.error(error); 
    res.send(error.message); 
}); 
+0

области, которые вы упомянули в начале https://mail.google.com/ https: //www.googleapis .com/auth/cloud-platform https://www.googleapis.com/auth/pubsub https://www.googleapis.com/auth/gmail.modify https://www.googleapis.com/auth /gmail.readonly находятся ли они на уровне приложений, что означает, что они включены на консоли Google для этого приложения или его код для токена доступа пользователя? – Rahul