Soạn thư nháp

Trong Tiện ích bổ sung của Google Workspace, bạn có thể tạo các tiện ích có liên kết hành động. Bạn có thể dùng một thao tác để soạn thư nháp mới, tuỳ ý điền vào những email đó bằng cách sử dụng thông tin đã nhập vào giao diện người dùng của tiện ích bổ sung hoặc thông tin từ một thư đang mở. Ví dụ: bạn có thể dùng một nút trong giao diện người dùng thông báo của tiện ích bổ sung. Nút này sẽ tạo câu trả lời cho thông báo hiện đang mở và được điền sẵn thông tin từ tiện ích bổ sung.

Khi một hành động tạo thông báo được kích hoạt, Gmail sẽ thực thi hàm callback để tạo và trả về bản nháp. Sau đó, Gmail sẽ hiển thị thư nháp đó trên giao diện người dùng trong cửa sổ soạn email tiêu chuẩn mà người dùng có thể chỉnh sửa và gửi khi cần.

Định cấu hình một thao tác để tạo thư nháp

Để định cấu hình một tiện ích nhằm bắt đầu hành động tạo bản nháp khi được chọn, bạn phải làm như sau:

  1. Đảm bảo tệp kê khai của bạn có phạm vi action.compose:

    https://www.googleapis.com/auth/gmail.addons.current.action.compose

    Thay vào đó, bạn có thể sử dụng một phạm vi cho phép hơn, nhưng chỉ nên làm vậy nếu thực sự cần thiết phạm vi đó.

  2. Tạo một đối tượng Action và liên kết đối tượng đó với hàm callback mà bạn xác định.

  3. Gọi hàm trình xử lý tiện ích setComposeAction() của tiện ích, cung cấp đối tượng Action và chỉ định ComposeEmailType.

  4. Triển khai hàm callback thực thi hành động tạo bản nháp. Hàm này được cung cấp một đối tượng sự kiện làm đối số. Hàm callback phải thực hiện những việc sau:

    1. Tạo đối tượng GmailDraft.
    2. Tạo đối tượng ComposeActionResponse bằng cách sử dụng lớp ComposeActionResponseBuilder và đối tượng GmailDraft.
    3. Trả về ComposeActionResponse đã tạo.

Bạn có thể điền sẵn GmailDraft mà bạn tạo trong hàm callback bằng người nhận, tiêu đề, nội dung thư và tệp đính kèm. Để điền vào bản nháp, dữ liệu có thể đến từ bất kỳ nguồn nào, nhưng thông thường, dữ liệu đó bắt nguồn từ thông tin được cung cấp cho chính tiện ích bổ sung, thông tin trong thông báo mở hoặc thông tin thu thập từ dịch vụ của bên thứ ba. Đối tượng sự kiện được truyền đến hàm callback chứa mã thông báo đang mở và các thông tin bổ sung khác mà bạn có thể sử dụng để điền sẵn bản nháp.

Bạn có thể tạo bản nháp dưới dạng một thông báo độc lập mới hoặc thư trả lời cho một thông báo hiện có. Việc này được kiểm soát bằng enum ComposeEmailType được cấp cho setComposeAction(). Bạn có thể tạo thư nháp trả lời dưới dạng thư trả lời duy nhất hoặc thư "trả lời tất cả".

Bản nháp độc lập

Một bản nháp độc lập sẽ bắt đầu một chuỗi mới và không phải là câu trả lời cho bất kỳ tin nhắn hiện có nào. Bạn có thể tạo bản nháp độc lập bằng một trong các chức năng sau đây của dịch vụ Gmail:

Trả lời thư nháp

Thư nháp trả lời nằm trong một chuỗi tin nhắn hiện có. Thư nháp trả lời có thể là thư trả lời một lần chỉ được gửi cho người gửi thư hoặc "trả lời tất cả" thư nháp được gửi cho những người nhận được thư đó. Bạn có thể tạo thư nháp bằng một trong các chức năng sau của dịch vụ Gmail:

Ví dụ:

Đoạn mã sau đây cho biết cách chỉ định một thao tác tạo bản nháp câu trả lời cho một nút.

  var composeAction = CardService.newAction()
      .setFunctionName('createReplyDraft');
  var composeButton = CardService.newTextButton()
      .setText('Compose Reply')
      .setComposeAction(
          composeAction,
          CardService.ComposedEmailType.REPLY_AS_DRAFT);

  // ...

  /**
   *  Creates a draft email (with an attachment and inline image)
   *  as a reply to an existing message.
   *  @param {Object} e An event object passed by the action.
   *  @return {ComposeActionResponse}
   */
  function createReplyDraft(e) {
    // Activate temporary Gmail scopes, in this case to allow
    // a reply to be drafted.
    var accessToken = e.gmail.accessToken;
    GmailApp.setCurrentMessageAccessToken(accessToken);

    // Creates a draft reply.
    var messageId = e.gmail.messageId;
    var message = GmailApp.getMessageById(messageId);
    var draft = message.createDraftReply('',
        {
            htmlBody: "Kitten! <img src='cid:kitten'/>",
            attachments: [
              UrlFetchApp.fetch('https://example.com/images/myDog.jpg')
                  .getBlob()
            ],
            inlineImages: {
              "kitten": UrlFetchApp.fetch('https://example.com/images/myKitten.jpg')
                           .getBlob()
            }
        }
    );

    // Return a built draft response. This causes Gmail to present a
    // compose window to the user, pre-filled with the content specified
    // above.
    return CardService.newComposeActionResponseBuilder()
        .setGmailDraft(draft).build();
  }