2017-04-16 7 views
1

Google Cloud Pub/Sub에 가입하고 주제를 만들고 내 서버의 URL을 가리키는 webhook이 포함 된 구독을 만들었습니다. 그런 다음 Gmail API를 사용하여 Gmail 계정에서 만든 특정 라벨을보고 내가 작성한 주제와 연결했습니다.서버에 Google Pub/Sub webhook 호출 후 메시지 콘텐츠를 가져올 수 없습니다.

메시지가 내 Gmail 계정의 레이블에 도착하면 webhook에서 내 서버의 URL에 POST 요청을 실행합니다. data 필드가 Base64로 인코딩

{ 
    "message": { 
     "attributes": {}, 
     "data": "eyJlbWFpbEFkZHJlc3MiOiJteWVtYWlsQG15ZG9tYWluLmNvbSIsImhpc3RvcnlJZCI6MTIzNDU2N30K", 
     "messageId": "12345678900000", # only relevant to Pub/Sub 
     "message_id": "12345678900000", 
     "publishTime": "2017-04-16T15:42:08.968Z", 
     "publish_time": "2017-04-16T15:42:08.968Z" 
    }, 
    "subscription": "projects/proj-name/subscriptions/sub-name" 
} 

,이 경우에 : : 그러나 상관없이 이메일의 내용이 무엇인지는 POST의 몸은 항상이 같은입니다

{"emailAddress":"[email protected]","historyId":1234567} 

무엇을의 I 매번 전자 메일 내용이 무엇이든 상관 없습니다. 그러나 Google 개발자 콘솔에서 게시 테스트를 실행하면 data 필드의 base64 인코딩 값이 지정한 실제 메시지 문자열이됩니다.

나는 data 값을 디코딩 base64로에서 historyId를 사용하여 Gmail이 API와 history.list하는 후속 통화를 시도했지만, 내가 돌아올 모든이 같은 반응이다

:

{"historyId": "1234567"} 

방법입니다 나는 전자 메일 내용을 얻는다고 생각하니?

+0

전송 된 요청이'metadata' /'minimal' ['format'] (https://developers.google.com/gmail/api/v1/reference/users/messages/get)를 사용하고있는 것처럼 보입니다. # 매개 변수)를 기본값으로 사용합니다. 나는 Google Pub/Sub에 많은 것을 파고 들지 않았지만 매개 변수가 누락 된 것일 수 있습니다. –

+0

사실이라면 푸시 요청의 형식을 어떻게 지정해야하는지 궁금합니다. 'watch' 요청 자체는 그것에 대한 매개 변수를 제공하지 않으며, 콘솔로부터의 푸시 요청에 대한 설정을 보지 못합니다. – RTF

답변

3

조금 늦었지만 다른 사람들이 관심을 가질 수 있습니다. 대답은 here입니다. 기본적으로 시계 호출에서 historyId를 가져옵니다. 그것을 보관하십시오. 그럼 당신은 Gmail의 알림받을 때 : historyId

    • 킵 트랙 기록 목록 (gmail.users.history.list를) 가져 오기 (시계 호출에서) 저장된 historyId를 사용
    • 을 완료되면 내역에서 원하는 메시지를 모두 가져옵니다.
    • 알림의 현재 기록 ID로 현재 기록 ID를 바꿉니다.

    희망이 있습니다.

  • +0

    처음 메시지를받는 방법은 무엇입니까? – squixy

    +0

    @squixy 첫 번째 메시지로는 첫 번째 기록을 가져 오는 방법을 의미합니까? 그렇다면 [시계] (https://developers.google.com/gmail/api/v1/reference/users/watch) 엔드 포인트로 전화하여 가져올 수 있습니다. – jboga

    +0

    첫 번째'historyId'는 장래에 그 지점으로부터 메시지를 가져 와서 첫 번째 메시지 (webhook을 유발 한 메시지)를 가져올 수 없도록합니다. – squixy