Chúng tôi sẽ ngừng cung cấp API Tại chỗ. Hãy tham khảo tài liệu về việc Ngừng cung cấp API Tại chỗ để biết chi tiết, đồng thời tìm hiểu cách chuyển sang API Đám mây thế hệ tiếp theo của chúng tôi.

Gửi tin nhắn tương tác

Hướng dẫn này sẽ chỉ cho bạn cách gửi từng tùy chọn tin nhắn tương tác. Tin nhắn tương tác cung cấp cho người dùng một cách đơn giản hơn để tìm và chọn những gì họ mong muốn từ doanh nghiệp của bạn trên WhatsApp. Trong quá trình thử nghiệm, những chatbot sử dụng các tính năng nhắn tin tương tác đã đạt được tỷ lệ phản hồi và chuyển đổi cao hơn đáng kể so với chatbot chỉ sử dụng tin nhắn văn bản.

Các loại tin nhắn tương tác:

  • Tin nhắn có chứa danh sách: Tin nhắn chứa menu có tối đa 10 tùy chọn. Loại tin nhắn này cung cấp cho người dùng một cách đơn giản và nhất quán hơn để lựa chọn khi tương tác với doanh nghiệp.
  • Tin nhắn có chứa nút trả lời: Tin nhắn có chứa tối đa 3 tùy chọn - mỗi tùy chọn là một nút. Loại tin nhắn này cung cấp cho người dùng một cách nhanh hơn để lựa chọn từ menu khi tương tác với doanh nghiệp. Nút trả lời có trải nghiệm người dùng giống với các mẫu tương tác có chứa nút.
  • Tin nhắn về một sản phẩm: Tin nhắn có chứa một món sản phẩm trong danh sách cung ứng của doanh nghiệp. Hãy xem phần Chia sẻ sản phẩm với khách hàng để biết thêm thông tin.
  • Tin nhắn về nhiều sản phẩm: Tin nhắn có chứa lựa chọn lên đến 30 mặt hàng trong danh sách cung ứng của doanh nghiệp. Hãy xem phần Chia sẻ sản phẩm với khách hàng để biết thêm thông tin.
  • Tin nhắn yêu cầu vị trí: Tin nhắn yêu cầu vị trí của người dùng.
  • Tin nhắn về quy trình: Tin nhắn dành cho các tương tác có cấu trúc. Hãy xem phần Tin nhắn về quy trình để biết thêm thông tin.

Quy cách của tin nhắn tương tác

  • Bạn có thể kết hợp các tin nhắn tương tác trong cùng một quy trình.
  • Người dùng không thể chọn nhiều tùy chọn cùng lúc từ tin nhắn có chứa danh sách hoặc nút, nhưng họ có thể quay lại và mở lại tin nhắn trước đó.
  • Bạn không thể dùng tin nhắn có chứa danh sách hoặc nút trả lời làm thông báo. Hiện tại, bạn chỉ có thể gửi các loại tin nhắn này trong vòng 24 giờ kể từ tin nhắn gần đây nhất do người dùng gửi. Nếu cố gửi tin nhắn ngoài khoảng thời gian 24 giờ, bạn sẽ nhận được thông báo lỗi.
  • Nền tảng được hỗ trợ: iOS, Android và web (Tin nhắn về quy trình không được hỗ trợ trên web).

Xem thông tin so sánh giữa tin nhắn văn bản và tin nhắn tương tác:


Xem ví dụ về cách có thể kết hợp tin nhắn có chứa Danh sách và nút Trả lời trong cùng một quy trình:

Đã xảy ra lỗi
Chúng tôi đã gặp sự cố khi phát video này.

Tổng quan

Lý do bạn nên sử dụng

Khả năng lĩnh hội của người dùng

So với danh sách dạng văn bản, tin nhắn tương tác cung cấp cho mọi người một dạng thức đơn giản và nhất quán hơn để tìm và lựa chọn những gì họ mong muốn từ doanh nghiệp. Trong quá trình thử nghiệm, mọi người có mức độ lĩnh hội cao hơn khi tương tác với các tính năng này.

Kết quả kinh doanh

Trong quá trình thử nghiệm, những chatbot sử dụng các tính năng nhắn tin tương tác đã đạt được tỷ lệ phản hồi và chuyển đổi cao hơn đáng kể so với chatbot chỉ sử dụng tin nhắn văn bản.

Được cá nhân hóa

Được điền tự động theo thời gian thực và có thể cá nhân hóa cho phù hợp với khách hàng hoặc tình huống. Ví dụ: bạn có thể hiển thị tin nhắn có chứa Danh sách gồm các khung giờ trống để đặt lịch hẹn hoặc sử dụng nút Trả lời để hiển thị những địa chỉ giao hàng trước đây.

Không có mẫu

Tin nhắn tương tác không cần có mẫu hoặc phê duyệt trước.

Thời điểm bạn nên sử dụng

Tin nhắn có chứa danh sách phù hợp nhất để hiển thị nhiều tùy chọn, chẳng hạn như:

  • Menu dịch vụ chăm sóc khách hàng hoặc câu hỏi thường gặp
  • Menu hàng mang đi
  • Lựa chọn về cửa hàng hoặc vị trí quanh đây
  • Khung giờ trống để đặt trước
  • Chọn một đơn đặt hàng gần đây để đặt lại

Nút Trả lời phù hợp nhất để cung cấp phản hồi nhanh từ một nhóm tùy chọn giới hạn, chẳng hạn như:

  • Nạp tiền cho tài khoản trả trước
  • Thay đổi thông tin cá nhân
  • Đặt lại đơn đặt hàng trước đó
  • Yêu cầu trả hàng
  • Thêm trường bổ sung không bắt buộc vào đơn đặt món
  • Chọn phương thức thanh toán

Nút trả lời đặc biệt có giá trị trong các trường hợp sử dụng "được cá nhân hóa" mà không thích hợp dùng phản hồi chung chung.

Tin nhắn về quy trình phù hợp nhất cho hoạt động giao tiếp có cấu trúc trên một hoặc nhiều màn hình, chẳng hạn như:

  • Đặt lịch hẹn
  • Lướt xem sản phẩm
  • Thu thập ý kiến đóng góp của khách hàng
  • Thu hút khách hàng tiềm năng mới đem lại doanh số

Với Tin nhắn về quy trình, doanh nghiệp có thể cung cấp trải nghiệm người dùng phong phú và hấp dẫn hơn, giúp khách hàng hoàn thành công việc nhanh hơn trên WhatsApp mà không cần phải chuyển sang ứng dụng khác hoặc truy cập vào một trang web.

Cách sử dụng

Ở cấp độ API, tin nhắn tương tác được đặt bằng cách chỉ định type tin nhắn là interactive và thêm đối tượng interactive. Nhìn chung, những tin nhắn này có 4 phần chính: header, body, footeraction:

{
  "recipient_type": "individual",
  "to" : "whatsapp-id",
  "type": "interactive" 
  "interactive":{
    "type": "list" | "button" | ...,
    "header": {},
    "body": {},
    "footer": {},
    "action": {}
  }
}
Đối với Tin nhắn có chứa danh sách, các phần này được kết hợp như sau:

Đối với Tin nhắn có chứa nút trả lời, các phần này được kết hợp như sau:

Hãy xem thêm thông tin bên dưới về cách gửi các loại tin nhắn này.

Bắt đầu

Trước khi gửi mỗi tin nhắn, bạn cần lấy ID WhatsApp của người nhận bằng lệnh gọi đến nút /contacts.

Bạn nên thiết lập webhooks để nhận trạng thái tin nhắn và thông báo tin nhắn đến. Bằng cách này, bạn có thể theo dõi liệu tin nhắn đã được gửi đi hay chưa, cũng như xem câu trả lời nhận được từ người dùng. Hãy xem phần Webhooks để biết thêm thông tin.

Bước 1: Tạo đối tượng interactive

Tin nhắn có chứa danh sách

Để gửi tin nhắn có chứa danh sách, bạn phải tạo một đối tượng interactive thuộc loại list có các thành phần sau đây:

Đối tượngMô tả

header

Không bắt buộc.

Nếu quyết định thêm đối tượng này, bạn phải đặt loại tiêu đề thành văn bản và thêm trường văn bản kèm theo nội dung mong muốn. Tối đa 60 ký tự.


Xem tất cả những trường header có sẵn.

body

Bắt buộc.

Phần nội dung tin nhắn. Tối đa 1024 ký tự.


Xem tất cả những trường body có sẵn.

footer

Không bắt buộc.

Chân trang của tin nhắn.


Xem tất cả những trường footer có sẵn.

action

Bắt buộc.

Bên trong hành động, bạn phải lồng:

  • trường button kèm theo nội dung nút, chứa tối đa 20 ký tự
  • ít nhất một đối tượng section (tối đa 10) chứa tối đa 24 ký tự cho title của section

Bên trong section, bạn phải thêm ít nhất một đối tượng rows. Tối đa 24 ký tự cho title của hàng và tối đa 72 ký tự cho description của hàng.


Xem tất cả những trường action có sẵn.

Xem tất cả trường section có sẵn.

Cuối cùng, đối tượng interactive sẽ có dạng như sau:

"interactive":{
  "type": "list",
  "header": {
    "type": "text",
    "text": "your-header-content"
  },
  "body": {
    "text": "your-text-message-content"
  },
  "footer": {
    "text": "your-footer-content"
  },
  "action": {
    "button": "cta-button-content",
    "sections":[
      {
        "title":"your-section-title-content",
        "rows": [
          {
            "id":"unique-row-identifier",
            "title": "row-title-content",
            "description": "row-description-content",           
          }
        ]
      },
      {
        "title":"your-section-title-content",
        "rows": [
          {
            "id":"unique-row-identifier",
            "title": "row-title-content",
            "description": "row-description-content",           
          }
        ]
      },
      ...
    ]
  }
}

Nút trả lời

Để gửi tin nhắn có chứa nút trả lời, bạn phải tạo một đối tượng interactive thuộc loại button có các thành phần sau đây:

Đối tượngMô tả

header

Không bắt buộc.

Đối với tin nhắn tương tác button, bạn có thể sử dụng các loại tiêu đề sau: text, video, image hoặc document.


Sau khi chọn type, hãy thêm đối tượng/trường tương ứng kèm theo thông tin bổ sung:

  • Đối với các loại video, imagedocument: Thêm đối tượng media.
  • Đối với loại text: Thêm trường text kèm theo nội dung mong muốn.

Ví dụ:

"header": {
      "type": "text" | "image" | "video" | "document",
      "text": "your text"
      # OR
      "document": {
        "id": "your-media-id",
        "filename": "some-file-name"
      }
      # OR
      "document": {
        "link": "the-provider-name/protocol://the-url",
        "provider": {
          "name": "provider-name",
        },
        "filename": "some-file-name"
      },
      # OR
      "video": {
        "id": "your-media-id"
      }
      # OR
      "video": {
        "link": "the-provider-name/protocol://the-url",
        "provider": {
          "name": "provider-name"
        }
      }
      # OR
      "image": {
        "id": "your-media-id"
      }
      # OR
      "image": {
        "link": "http(s)://the-url",
        "provider": {
          "name": "provider-name"
        }
      }
    }

Xem tất cả những trường header có sẵn.

body

Bắt buộc.

Xem tất cả những trường body có sẵn.

footer

Không bắt buộc.

Xem tất cả những trường footer có sẵn.

action

Bắt buộc.

Bạn phải thêm ít nhất một button, cũng như thêm type, titleid cho các nút. Bạn không thể thêm nhiều hơn 3 nút. Tối đa 20 ký tự cho title.

Bạn không được có khoảng trắng ở đầu hoặc cuối khi đặt ID.


Ví dụ:

"action": {
      "buttons": [
        {
          "type": "reply",
          "reply": {
            "id": "unique-postback-id",
            "title": "First Button’s Title" 
          }
        },
        {
          "type": "reply",
          "reply": {
            "id": "unique-postback-id",
            "title": "Second Button’s Title" 
          }
        }
      ] 
    }

Xem tất cả những trường action có sẵn.

Cuối cùng, đối tượng interactive sẽ có dạng như sau:

"interactive": {
    "type": "button",
    "header": { # optional
      "type": "text" | "image" | "video" | "document",
      "text": "your text"
      # OR
      "document": {
        "id": "your-media-id",
        "filename": "some-file-name"
      }
      # OR
      "document": {
        "link": "the-provider-name/protocol://the-url",
        "provider": {
          "name": "provider-name",
        },
        "filename": "some-file-name"
      },
      # OR
      "video": {
        "id": "your-media-id"
      }
      # OR
      "video": {
        "link": "the-provider-name/protocol://the-url",
        "provider": {
          "name": "provider-name"
        }
      }
      # OR
      "image": {
        "id": "your-media-id"
      }
      # OR
      "image": {
        "link": "http(s)://the-url",
        "provider": {
          "name": "provider-name"
        }
      }
    }, # end header
    "body": {
      "text": "your-text-body-content"
    },
    "footer": { # optional
      "text": "your-text-footer-content"
    },
    "action": {
      "buttons": [
        {
          "type": "reply",
          "reply": {
            "id": "unique-postback-id",
            "title": "First Button’s Title" 
          }
        },
        {
          "type": "reply",
          "reply": {
            "id": "unique-postback-id",
            "title": "Second Button’s Title" 
          }
        }
      ] 
    } # end action   
  } # end interactive

Tin nhắn yêu cầu vị trí

Tin nhắn yêu cầu vị trí có chứa văn bản phần nội dung và nút Gửi vị trí để người dùng có thể nhấn vào. Khi nhấn vào nút này, một màn hình chia sẻ vị trí sẽ hiển thị. Người dùng có thể sử dụng màn hình này để chia sẻ vị trí của họ.

Để gửi tin nhắn yêu cầu vị trí, đầu tiên, hãy tạo đối tượng interactive kèm theo văn bản bạn muốn hiển thị trong tin nhắn:

{
  "type": "location_request_message",
  "body": {
    "type": "text",
    "text": "<TEXT>"
  },
  "action": {
    "name": "send_location" 
  }
}
Thuộc tínhMô tả

type

Đặt thành location_request_message.

body.type

Đặt thành text.

body.text

Đặt thành văn bản bạn muốn hiển thị phía trên nút Gửi vị trí.

action.name

Đặt thành send_location.

Tin nhắn về quy trình

Tin nhắn về quy trình chứa nút kêu gọi hành động mà người dùng có thể nhấn vào. Quy trình tùy chỉnh của bạn sẽ hiển thị khi người dùng nhấn vào nút này.

Để gửi Tin nhắn về quy trình, bạn phải tạo một đối tượng interactive thuộc loại flow. Hãy xem tại đây để biết đầy đủ chi tiết.

Bước 2: Thêm thông số tin nhắn chung

Bây giờ, bạn đã có đối tượng tương tác, hãy thêm các thông số khác của tin nhắn: recipient_type, totype. Hãy nhớ đặt type thành interactive.

{
  "recipient_type": "individual",
  "to" : "whatsapp-id", // WhatsApp ID of your recipient
  "type": "interactive",
  "interactive":{
    // Your interactive object  
   }
  }

Xem các thông số chung cho mọi loại tin nhắn tại đây.

Bước 3: Thực hiện lệnh gọi POST đến /messages

Thực hiện lệnh gọi POST đến điểm cuối /messages kèm theo đối tượng JSON bạn đã tạo ở bước 1 và 2. Nếu tin nhắn được gửi thành công, bạn sẽ nhận được phản hồi sau đây:

{
  "messages": [{
    "id": "{message-id}"
  }]
}

Bước 4: Kiểm tra Webhooks

Nếu bạn thiết lập webhooks, hãy kiểm tra xem có thay đổi về trạng thái tin nhắn cũng như có phản hồi từ người dùng không.

Webhooks của người dùng phản hồi tin nhắn tương tác có một thành phần mới là interactive. Thành phần này chứa thông tin về lựa chọn của người dùng. Hãy xem phần Webhooks, Thành phần để biết thêm thông tin.

Ví dụ: sau đây là yêu cầu webhook mô tả một người dùng đã chia sẻ vị trí.

{
  "object": "whatsapp_business_account",
  "entry": [
    {
      "id": "12345",
      "changes": [
        {
          "value": {
            "messaging_product": "whatsapp",
            "metadata": {
              "display_phone_number": "12345",
              "phone_number_id": "12345"
            },
            "contacts": [
              {
                "profile": {
                  "name": "John Doe"
                },
                "wa_id": "12345"
              }
            ],
            "messages": [
              {
                "context": {
                  "from": "12345",
                  "id": "test-id"
                },
                "from": "123450",
                "id": "test-id",
                "timestamp": "16632",
                "location": {
                  "address": "1071 5th Ave, New York, NY 10128", #Optional
                  "latitude": 37.421996751527,
                  "longitude": -122.08407156636,
                  "name": "Solomon R. Guggenheim Museum" #Optional
                },
                "type": "location"
              }
            ]
          },
          "field": "messages"
        }
      ]
    }
  ]
}

Thành phần location trong phần tải dữ liệu có chứa kinh độ và vĩ độ của người dùng. Lưu ý rằng các thành phần addressname không bắt buộc đối với người dùng và có thể không được đưa vào.

"location": {
  "address": "1071 5th Ave, New York, NY 10128", #Optional
  "latitude": 40.782910059774,
  "longitude": -73.959075808525,
  "name": "Solomon R. Guggenheim Museum" #Optional
}