Thông báo đẩy

Hành động của bạn có thể đẩy thông báo cho người dùng bất cứ khi nào thích hợp, chẳng hạn như gửi lời nhắc khi gần đến ngày đến hạn của một công việc.

Hướng dẫn này mô tả cách thiết lập thông báo đẩy cho Hành động của bạn.

Nền tảng được hỗ trợ

Thông báo đẩy có trên thiết bị Android và iOS (thiết bị iOS phải cài đặt ứng dụng Trợ lý để nhận thông báo đẩy). Các tính năng này hiện không được hỗ trợ trên loa kích hoạt bằng giọng nói, màn hình thông minh hoặc các nền tảng khác.

Điều kiện tiên quyết

Dự án của bạn phải chứa ít nhất một ý định chung và ý định này sẽ được gọi khi người dùng nhấn vào một thông báo đẩy nhận được từ Trợ lý.

Bắt đầu

Các phần sau đây mô tả cách thiết lập thông báo đẩy trong Hành động của bạn.

Tạo một ý định để kích hoạt

Ý định bạn tạo trong phần này sẽ kích hoạt quy trình thông báo. Để tạo ý định này, hãy làm theo các bước sau:

  1. Chuyển đến Bảng điều khiển Actions rồi nhấp vào Phát triển trong trình đơn trên cùng.
  2. Nhấp vào Ý định trong trình đơn bên trái để mở rộng mục này.
  3. Nhấp vào ở cuối danh sách và nhập tên cho ý định mới.
  4. Nhấn Enter/Return để tạo ý định mới.
  5. Thêm các cụm từ huấn luyện để kích hoạt quy trình thông báo. Dưới đây là một số ví dụ:

    • Notify me
    • Send notifications
    • Subscribe to notifications
  6. Nhấp vào Lưu.

Chuyển đổi sang ý định hệ thống

Để thiết lập hiệu ứng chuyển đổi sang cảnh hệ thống Notifications, hãy làm theo các bước sau:

  1. Trong mục Cảnh trên trình đơn bên trái, hãy nhấp vào cảnh mà bạn muốn thêm quy trình đăng ký nhận thông báo.
  2. Trong phần Xử lý ý định của người dùng trong cảnh, hãy nhấp vào dấu + để thêm một trình xử lý ý định mới.
  3. Trong phần Ý định, hãy chọn ý định mà bạn đã tạo ở phần trước.
  4. Trong phần Transition (Chuyển đổi), hãy chọn cảnh hệ thống Notifications (Thông báo).

  5. Nhấp vào Lưu.

Định cấu hình cảnh hệ thống

Để định cấu hình cảnh hệ thống Notifications, hãy làm theo các bước sau:

  1. Trong phần Cảnh trên trình đơn bên trái, hãy chọn cảnh mới trong hệ thống Thông báo.
  2. Trong phần Định cấu hình ý định, hãy nhấp vào Chọn ý định.
  3. Trong phần Chọn ý định, hãy chọn ý định mà bạn muốn được so khớp khi người dùng nhấn vào một thông báo đẩy.

  4. Đối với nội dung Tuỳ chỉnh lời nhắc chọn tham gia, hãy nhập lời nhắc mà người dùng nhìn thấy khi họ được yêu cầu đăng ký nhận thông báo đẩy. Lời nhắc có dạng "Tôi có thể gửi thông báo đẩy cho $prompt".

  5. Nhấp vào Lưu.

Thiết lập lựa chọn sử dụng

Để định cấu hình việc chọn nhận thông báo đẩy, hãy làm theo các bước sau:

  1. Trong phần Scenes (Cảnh), hãy chọn cảnh hệ thống Notifications (Thông báo).
  2. Trong mục Điều kiện, hãy chọn Nếu người dùng trả lời "có".
  3. Bật tuỳ chọn Gọi webhook của bạn và cung cấp tên trình xử lý sự kiện, chẳng hạn như subscribe_to_notifications.
  4. Bật tính năng Gửi lời nhắc và đưa ra một lời nhắc đơn giản để người dùng biết họ sẽ nhận được thông báo:

    candidates:
    - first simple:
      variants:
      - speech: 'Great, I'll send you notifications.'
    
  5. Trong mục Chuyển đổi, hãy chọn Kết thúc cuộc trò chuyện để kết thúc cuộc trò chuyện sau khi người dùng đăng ký nhận thông báo.

Thiết lập chế độ chọn không sử dụng

Để định cấu hình chọn không nhận thông báo đẩy, hãy làm theo các bước sau:

  1. Trong mục Điều kiện, hãy chọn Nếu người dùng trả lời "không".
  2. Bật tính năng Gửi lời nhắc và đưa ra một lời nhắc đơn giản để người dùng biết rằng họ sẽ không nhận được thông báo:

    candidates:
    - first simple:
      variants:
      - speech: Okay, I won't send you notifications.
    
  3. Trong mục Chuyển đổi, hãy chọn Kết thúc cuộc trò chuyện để kết thúc cuộc trò chuyện sau khi người dùng chọn không nhận thông báo.

Định cấu hình webhook

Để định cấu hình webhook, hãy làm theo các bước sau:

  1. Trong webhook, hãy thêm một trình xử lý ý định để lưu trữ updatesUserId:

    app.handle('subscribe_to_notifications', conv => {
      const intentName = '<name_of_intent_to_trigger>';
      const notificationsSlot = conv.session.params['NotificationSlot_${intentName}'];
      if(notificationsSlot.permissionStatus == 'PERMISSION_GRANTED') {
        const updateUserId = notificationsSlot.additionalUserData.updateUserId;
        // Store the user ID and the notification's target intent for later use.
        // (Use a database, like Firestore, for best practice.)
      }
    });
    

Gửi thông báo

Thông báo đẩy được gửi cho người dùng qua API Hành động. Để sử dụng API này, bạn cần kích hoạt API trong dự án trên Google Cloud, đồng thời thiết lập và tải khoá tài khoản dịch vụ JSON xuống.

Sau đó, bạn có thể dùng thư viện ứng dụng Google OAuth2 để trao đổi khoá tài khoản dịch vụ lấy mã truy cập và dùng mã thông báo này để xác thực yêu cầu của bạn với Actions API.

Lấy khoá tài khoản dịch vụ

  1. Chuyển đến Bảng điều khiển API của Google rồi chọn dự án của bạn trong trình đơn thả xuống Chọn dự án.
  2. Nhấp vào Bật để bật Actions API cho dự án của bạn.
  3. Chuyển đến trang thông tin đăng nhập bảng điều khiển Google Cloud rồi chọn dự án của bạn trong trình đơn thả xuống Chọn một dự án.
  4. Nhấp vào Tạo thông tin xác thực > Tài khoản dịch vụ.
  5. Nhập tên tài khoản dịch vụ rồi nhấp vào Tạo.
  6. Trong trình đơn thả xuống Select a role (Chọn vai trò), hãy chọn Project (Dự án) > Chủ sở hữu.
  7. Nhấp vào Tiếp tục.
  8. Nhấp vào Tạo khoá để tải tệp JSON của tài khoản dịch vụ xuống.

Đổi khoá lấy mã truy cập rồi gửi thông báo

Để gửi thông báo đẩy thông qua API Hành động, bạn cần đổi khoá tài khoản dịch vụ lấy mã truy cập. Bạn nên sử dụng thư viện ứng dụng API của Google để thực hiện việc này. Trong loạt đoạn mã tiếp theo, chúng tôi sử dụng thư viện ứng dụng Node.js của Google API.

  1. Cài đặt thư viện ứng dụng API của Google và yêu cầu:

    npm install googleapis request --save

  2. Hãy dùng mã sau để lấy mã truy cập từ khoá tài khoản dịch vụ rồi gửi thông báo đẩy:

    // Use the Actions API to send a Google Assistant push notification.
    let client = auth.fromJSON(require('./service-account.json'));
    client.scopes = ['https://www.googleapis.com/auth/actions.fulfillment.conversation'];
    let notification = {
      userNotification: {
        title: 'Example notification title',
      },
      target: {
        userId: '<UPDATES_USER_ID>',
        intent: 'Notifications Intent',
      },
    };
    client.authorize((err, tokens) => {
      if (err) {
        throw new Error('Auth error: ${err}');
      }
      request.post('https://actions.googleapis.com/v2/conversations:send', {
        'auth': {
          'bearer': tokens.access_token,
        },
        'json': true,
        'body': {'customPushMessage': notification, 'isInSandbox': true},
      }, (err, httpResponse, body) => {
        if (err) {
          throw new Error('API request error: ${err}');
        }
        console.log('${httpResponse.statusCode}: ' + '${httpResponse.statusMessage}');
        console.log(JSON.stringify(body));
      });
    });