Доступ к внутренним сообщениям (не к сообщениям из события)

Однажды я написал виджет GMail, который мне пришлось преобразовать в надстройку Chrome, когда Google удалил поддержку виджета GMail, и теперь я пытаюсь преобразовать его в надстройку Gmail.

Моя проблема в том, что моя надстройка перебирает серию сообщений под меткой и пытается ответить на них, но я получаю сообщение об ошибке при попытке доступа к ним:

ОШИБКА: Исключение: Отказано в доступе: Отсутствует токен доступа для авторизации области сообщения.

Итак, мой вопрос: как я могу получить доступ к этим сообщениям? Единственный токен доступа, который у меня есть, - это тот, который активировал надстройку, и это не сработает.

Или спросите с другой точки зрения, есть ли другие события, которые могут вызвать надстройку, кроме открытия сообщения?

Заранее спасибо.

Кстати, расширение Chrome, которое я пытаюсь преобразовать в надстройку Gmail, можно увидеть здесь:

https://sites.google.com/site/replytomany/home

https://chrome.google.com/webstore/detail/reply-to-many/gpmpcjkhfjflmjpjjmdegpkgginijbin?hl=en

[EDIT] Вот как выглядит мой appsscript.json:

{
  "timeZone": "Europe/Dublin",
  "dependencies": {
    "enabledAdvancedServices": [{
      "userSymbol": "Gmail",
      "serviceId": "gmail",
      "version": "v1"
    }]
  },
  "oauthScopes": [
            "https://www.googleapis.com/auth/gmail.addons.execute", 
            "https://www.googleapis.com/auth/gmail.readonly",
            "https://www.googleapis.com/auth/gmail.send"
         ],
  "gmail": {
    "name": "Reply To Many",
    "logoUrl": "https://www.gstatic.com/images/icons/material/system/1x/receipt_black_24dp.png",
    "contextualTriggers": [{
      "unconditional": {
      },
      "onTriggerFunction": "getContextualAddOn"
    }],
    "primaryColor": "#41f470",
    "secondaryColor": "#94f441",
    "version": "TRUSTED_TESTER_V2"
  }
}

person amsmota    schedule 11.12.2017    source источник
comment
Могу ли я увидеть код вашего токена доступа и вашего файла appsscript.json?   -  person Ronnie Headen    schedule 12.12.2017
comment
@Ronnie, я совершенно не понимаю, что вы подразумеваете под кодом для вашего токена доступа ... Если вы имеете в виду метаданные события.accessToken, я вообще его не использую, потому что моему скрипту не нужно взаимодействовать с открытое сообщение. Я что-то упускаю?   -  person amsmota    schedule 12.12.2017
comment
Вы пытаетесь ответить на электронные письма, которые вы просматриваете, поэтому, похоже, вам нужен токен доступа. Я бы попробовал реализовать один, чтобы увидеть, так ли это. Или это может быть в вашей области. Я вижу, у вас есть область отправки, но вам также может понадобиться область для управления метками или областью составления. В связи с этим я бы просто попробовал mail.google.com, что дает вам полный доступ, чтобы увидеть, соответствует ли ваша область это проблема. Если это работает, то вы можете просто выбрать правильный объем, которого вам не хватает.   -  person Ronnie Headen    schedule 12.12.2017
comment
Я пробовал несколько комбинаций областей, в том числе mail.google.com, но теперь я застрял с У вас нет разрешения на вызов getActiveUser - то, что у меня когда-либо было, у меня нет, если я слишком много возился с областями. , Любая идея по этому поводу?   -  person amsmota    schedule 12.12.2017
comment
Просто чтобы уточнить немного больше, исходная ошибка, которую я имею в своем посте, была при доступе к свойствам сообщения с использованием API GmailApp. Теперь я использую и это, и Gmail API, теперь я могу читать свойства сообщения с этим последним, но я застрял в отправке ответного электронного письма, что с GmailApp было довольно просто. Так что я застрял так или иначе ....   -  person amsmota    schedule 12.12.2017
comment
Вы пытались реализовать токен доступа? Я хотел, чтобы вы сначала попробовали это, так как я считаю, что это ваша проблема, если у вас ее нет. // Активировать временный токен доступа к Gmail. var accessToken = e.messageMetadata.accessToken; GmailApp.setCurrentMessageAccessToken(accessToken);   -  person Ronnie Headen    schedule 12.12.2017
comment
если у вас есть mail.google.com/, то у вас нет проблем с областью действия, так как это дает вам полный доступ. Единственная другая проблема безопасности — это токен доступа.   -  person Ronnie Headen    schedule 12.12.2017


Ответы (2)


Вы пытались реализовать токен доступа? Я хотел, чтобы вы сначала попробовали это, так как я считаю, что это ваша проблема, если у вас ее нет.

// Activate temporary Gmail access token. Where 'e' is the function argument
var accessToken = e.messageMetadata.accessToken; 
GmailApp.setCurrentMessageAccessToken(accessToken); 

если у вас есть «mail.google.com/», то у вас нет проблемы с областью действия, так как это дает вам полный доступ. Единственная другая проблема безопасности — это токен доступа.

person Ronnie Headen    schedule 12.12.2017
comment
Я так и сделал, но это сработает только для текущего сообщения — тот, который открыт, — это пользовательский интерфейс, а не для тех, которые я прокручиваю. Согласно документам, устанавливает токен доступа к текущему сообщению, который позволяет сценарию получать доступ к текущим свойствам GmailMessage. - person amsmota; 12.12.2017
comment
Я думаю, что это работает сейчас!!! Похоже, токен вообще не нужен, и бардак, который у меня был с областями AFAICS, произошел потому, что недостаточно изменить oauthScopes и перезагрузить Gmail, но, по крайней мере, иногда необходимо полностью удалить доступ к приложению и авторизовать все заново!! ! Хорошо то, что он работает только с API GmailApp, поэтому мне не нужно возиться с другим API Gmail - это означает, что он работает практически с тем же кодом, что и для расширения Chrome... Если бы я знал все что касается областей, которые я мог бы сделать портирование менее чем за 1 день !!! - person amsmota; 13.12.2017
comment
Да, каждый раз, когда вы добавляете новую область, вам нужно снова авторизовать приложение. Какой прицел сработал? - person Ronnie Headen; 13.12.2017
comment
Вопрос не в повторной авторизации, пришлось удалить все предыдущие авторизации и начать заново с нуля. Я остановился на этой области (возможно, я попытаюсь сузить ее): www.googleapis.com/auth/gmail.addons.execute www.googleapis.com/auth/userinfo.email mail.google.com/ - person amsmota; 13.12.2017
comment
да, это была нужная вам область www.googleapis.com/auth/userinfo.email. Поздравляю! - person Ronnie Headen; 13.12.2017
comment
@amsmota, как вы удалили все предыдущие авторизации для своего аддона? - person ack_inc; 01.03.2019
comment
@ack_inc, у вас должна быть авторизация надстроек где-то в настройках вашей учетной записи Google, я не знаю точно, где именно, потому что я перешел по ссылке, которую они прислали мне по электронной почте, когда я впервые авторизовал надстройку. Ваше здоровье. - person amsmota; 14.03.2019