擴充訊息 UI

延伸 Gmail 的 Google Workspace 外掛程式可提供 透過使用者介面存取這樣一來, 運用 Google Workspace 外掛程式自動處理回覆工作 例如顯示、擷取或送出訊息內容 與訊息相關的其他資訊。

存取外掛程式訊息 UI

你可以透過兩種方式查看外掛程式的訊息 UI。第一種是開啟 會在外掛程式開啟時顯示訊息 (例如,在檢視 外掛程式首頁)。第二種方法是 瀏覽訊息時啟動外掛程式。

無論哪一種情況,外掛程式都會執行對應的 情境觸發條件函式,定義位於 外掛程式資訊清單。 如果使用者在 外掛程式仍為開啟狀態情境觸發條件函式會建構訊息 UI 即可在 Gmail 向使用者顯示郵件

建立訊息外掛程式

您可以在外掛程式中新增訊息功能,步驟如下:

  1. 在外掛程式指令碼專案中新增適當欄位 manifest、 包括 需要範圍 訊息功能。請務必新增 條件式觸發條件欄位 資訊清單 unconditional敬上 {} 的值。
  2. 實作情境觸發條件函式,用於建構訊息 UI 使用者在訊息中選取外掛程式時。
  3. 實作回應使用者 UI 所需的關聯函式 互動情形

內容比對觸發條件

如要協助使用者在閱讀郵件時提供協助, Google Workspace 外掛程式可以定義 內容相關觸發條件。當使用者 開啟符合觸發條件的 Gmail 郵件 (已開啟外掛程式) * 條件觸發。觸發的觸發條件會執行 關聯觸發條件,可建構 外掛程式使用者介面,然後將該程式傳回可供 Gmail 顯示。此時 即可開始與容器互動

內容觸發條件是在外掛程式專案中定義 manifest。 觸發條件定義會指示 Gmail 要在哪個情況下觸發 條件。舉例來說,這份資訊清單程式碼片段設定了無條件的觸發條件 以便在開啟訊息時呼叫觸發函式 onGmailMessageOpen()

{
  ...
  "addOns": {

    "common": {
      ...
    },
    "gmail": {
      "contextualTriggers": [
        {
          "unconditional": {},
          "onTriggerFunction": "onGmailMessageOpen"
        }
      ],
      ...
    },
    ...
  }
  ...
}

內容比對觸發條件函式

每個內容相關觸發條件都必須有對應的觸發條件函式 來建構外掛程式的使用者介面這個函式會在 資訊清單的 onTriggerFunction ] 欄位。實作這個函式以接受 動作事件物件 引數,然後傳回 Card 物件或 Card 物件。

當特定 Gmail 郵件觸發情境相關觸發條件時,系統會呼叫此方法 並將函式傳送至 動作事件物件。 觸發函式通常會使用這個事件物件提供的訊息 ID 透過 Apps Script 的 Gmail 服務。舉例來說 函式,可使用以下函式擷取訊息內容:

  // Activate temporary Gmail scopes, in this case to allow
  // the add-on to read message metadata and content.
  var accessToken = e.gmail.accessToken;
  GmailApp.setCurrentMessageAccessToken(accessToken);

  // Read message metadata and content. This requires the Gmail scope
  // https://www.googleapis.com/auth/gmail.addons.current.message.readonly.
  var messageId = e.gmail.messageId;
  var message = GmailApp.getMessageById(messageId);
  var subject = message.getSubject();
  var sender = message.getFrom();
  var body = message.getPlainBody();
  var messageDate = message.getDate();

  // Setting the access token with a gmail.addons.current.message.readonly
  // scope also allows read access to the other messages in the thread.
  var thread = message.getThread();
  var threadMessages = thread.getMessages();

  // Using this link can avoid the need to copy message or thread content
  var threadLink = thread.getPermalink();

接著觸發條件函式就能處理這項資料, 介面需求例如提供銷售摘要的外掛程式 號碼可收集訊息內文中的銷售數字,並加以整理 顯示在資訊卡中。

觸發條件函式必須建構並傳回建構的陣列 Card敬上 如需儲存大量結構化物件 建議使用 Cloud Bigtable舉例來說,下列程式碼會建構一張含有一張卡片的外掛程式 只會列出郵件的主旨和寄件者:

  function onGmailMessageOpen(e) {
    // Activate temporary Gmail scopes, in this case to allow
    // message metadata to be read.
    var accessToken = e.gmail.accessToken;
    GmailApp.setCurrentMessageAccessToken(accessToken);

    var messageId = e.gmail.messageId;
    var message = GmailApp.getMessageById(messageId);
    var subject = message.getSubject();
    var sender = message.getFrom();

    // Create a card with a single card section and two widgets.
    // Be sure to execute build() to finalize the card construction.
    var exampleCard = CardService.newCardBuilder()
        .setHeader(CardService.newCardHeader()
            .setTitle('Example card'))
        .addSection(CardService.newCardSection()
            .addWidget(CardService.newKeyValue()
                .setTopLabel('Subject')
                .setContent(subject))
            .addWidget(CardService.newKeyValue()
                .setTopLabel('From')
                .setContent(sender)))
        .build();   // Don't forget to build the Card!
    return [exampleCard];
  }