Tự động hoàn thành (Mới)

Chọn nền tảng: Android iOS JavaScript Dịch vụ web

Dịch vụ Tự động hoàn thành (Mới) là một dịch vụ web trả về các thông tin gợi ý địa điểm và dự đoán truy vấn để phản hồi một yêu cầu HTTP. Trong yêu cầu, hãy chỉ định một chuỗi tìm kiếm văn bản và các giới hạn địa lý kiểm soát khu vực tìm kiếm.

Dịch vụ Tự động hoàn thành (Mới) có thể so khớp toàn bộ từ và chuỗi con của thông tin đầu vào, phân giải tên địa điểm, địa chỉ và mã cộng. Do đó, các ứng dụng có thể gửi truy vấn dưới dạng kiểu người dùng để cung cấp truy vấn và dự đoán truy vấn một cách nhanh chóng.

Phản hồi từ API Tự động hoàn thành (Mới) có thể chứa 2 loại cụm từ gợi ý:

  • Cụm từ gợi ý về địa điểm: Những địa điểm (chẳng hạn như doanh nghiệp, địa chỉ và địa điểm yêu thích) dựa trên chuỗi văn bản đã nhập và khu vực tìm kiếm được chỉ định. Theo mặc định, các thông tin gợi ý về địa điểm được trả về.
  • Cụm từ tìm kiếm dự đoán: Những chuỗi cụm từ tìm kiếm khớp với chuỗi văn bản đã nhập và vùng tìm kiếm. Các dự đoán truy vấn không được trả về theo mặc định. Sử dụng tham số yêu cầu includeQueryPredictions để thêm thông tin dự đoán truy vấn vào phản hồi.

Ví dụ: bạn gọi API bằng cách sử dụng làm đầu vào một chuỗi chứa một phần thông tin người dùng nhập là "Sicilian piz", với khu vực tìm kiếm được giới hạn ở San Francisco, CA. Sau đó, câu trả lời sẽ chứa danh sách thông tin dự đoán về địa điểm khớp với chuỗi tìm kiếm và khu vực tìm kiếm, chẳng hạn như nhà hàng có tên là "Sicilian Pizza Kitchen", cùng với thông tin chi tiết về địa điểm.

Thông tin dự đoán về địa điểm được trả về được thiết kế để hiển thị với người dùng nhằm hỗ trợ họ chọn địa điểm mong muốn. Bạn có thể thực hiện yêu cầu Chi tiết địa điểm (Mới) để nhận thêm thông tin về mọi dự đoán về địa điểm được trả về.

Phản hồi cũng có thể chứa danh sách cụm từ gợi ý cụm từ tìm kiếm khớp với chuỗi tìm kiếm và cụm từ tìm kiếm, chẳng hạn như "Sicilian Pizza & Podcasta". Mỗi cụm từ gợi ý truy vấn trong phản hồi bao gồm trường text chứa chuỗi tìm kiếm dạng văn bản được đề xuất. Hãy sử dụng chuỗi đó làm dữ liệu đầu vào cho Tìm kiếm văn bản (Mới) để thực hiện tìm kiếm chi tiết hơn.

API Explorer cho phép bạn đưa ra các yêu cầu trực tiếp để bạn có thể làm quen với API và các tuỳ chọn API:

Hãy làm thử!

Yêu cầu tự động hoàn thành (Mới)

Yêu cầu Tự động hoàn thành (Mới) là một yêu cầu POST qua HTTP tới một URL có dạng:

https://places.googleapis.com/v1/places:autocomplete

Truyền tất cả các tham số trong nội dung của yêu cầu JSON hoặc trong tiêu đề dưới dạng một phần của yêu cầu POST. Ví dụ:

curl -X POST -d '{
  "input": "pizza",
  "locationBias": {
    "circle": {
      "center": {
        "latitude": 37.7937,
        "longitude": -122.3965
      },
      "radius": 500.0
    }
  }
}' \
-H 'Content-Type: application/json' -H "X-Goog-Api-Key: API_KEY" \
https://places.googleapis.com/v1/places:autocomplete

Giới thiệu về câu trả lời

Tính năng Tự động hoàn thành (Mới) trả về một đối tượng JSON dưới dạng phản hồi. Trong câu trả lời:

  • Mảng suggestions chứa tất cả các địa điểm và cụm từ tìm kiếm được dự đoán theo thứ tự dựa trên mức độ liên quan mà chúng tôi nhận thấy được. Mỗi vị trí được biểu thị bằng một trường placePrediction và mỗi truy vấn được biểu thị bằng một trường queryPrediction.
  • Trường placePrediction chứa thông tin chi tiết về thông tin dự đoán cho một địa điểm, bao gồm cả mã địa điểm và nội dung mô tả bằng văn bản.
  • Trường queryPrediction chứa thông tin chi tiết về một dự đoán truy vấn.

Đối tượng JSON hoàn chỉnh có dạng:

{
  "suggestions": [
    {
      "placePrediction": {
        "place": "places/ChIJ5YQQf1GHhYARPKG7WLIaOko",
        "placeId": "ChIJ5YQQf1GHhYARPKG7WLIaOko",
        "text": {
          "text": "Amoeba Music, Haight Street, San Francisco, CA, USA",
          "matches": [
            {
              "endOffset": 6
            }]
        },
      ...
    },
    {
      "queryPrediction": {
        "text": {
          "text": "Amoeba Music",
          "matches": [
            {
              "endOffset": 6
            }]
        },
        ...
    }
  ...]
}

Thông số bắt buộc

  • input

    Chuỗi văn bản mà bạn muốn tìm kiếm. Chỉ định từ đầy đủ và chuỗi con, tên địa điểm, địa chỉ và mã cộng. Dịch vụ Tự động hoàn thành (Mới) trả về kết quả khớp đề xuất dựa trên chuỗi này và kết quả của các đơn đặt hàng dựa trên mức độ liên quan mà người dùng nhận thấy.

Thông số tùy chọn

  • includedPrimaryTypes

    Một địa điểm chỉ có thể có một loại chính trong số các loại được liệt kê trong Bảng A hoặc Bảng B. Ví dụ: loại chính có thể là "mexican_restaurant" hoặc "steak_house".

    Theo mặc định, API trả về tất cả các địa điểm dựa trên tham số input, bất kể giá trị loại chính liên kết với địa điểm là gì. Hạn chế kết quả thuộc một loại chính hoặc loại chính nhất định bằng cách truyền tham số includedPrimaryTypes.

    Sử dụng tham số này để chỉ định tối đa 5 giá trị loại trong Bảng A hoặc Bảng B. Địa điểm phải khớp với một trong các giá trị loại chính được chỉ định để được đưa vào câu trả lời.

    Tham số này cũng có thể bao gồm (regions) hoặc (cities). Bộ lọc tập hợp loại (regions) cho các khu vực hoặc đơn vị phân chia, chẳng hạn như vùng lân cận và mã bưu chính. Bộ lọc bộ sưu tập loại (cities) cho các địa điểm mà Google xác định là thành phố.

    Yêu cầu sẽ bị từ chối kèm theo lỗi INVALID_REQUEST nếu:

    • Có hơn 5 loại được chỉ định.
    • Ngoài (cities) hoặc (regions), mọi kiểu được chỉ định.
    • Mọi loại không nhận dạng được đều được chỉ định.
  • includeQueryPredictions

    Nếu là true, phản hồi sẽ bao gồm cả thông tin dự đoán về địa điểm và truy vấn. Giá trị mặc định là false, nghĩa là phản hồi chỉ bao gồm thông tin dự đoán về địa điểm.

  • includedRegionCodes

    Chỉ cung cấp kết quả từ danh sách các khu vực đã chỉ định, được chỉ định dưới dạng một mảng gồm tối đa 15 ccTLD ("miền cấp cao nhất") với giá trị 2 ký tự. Nếu bỏ qua, không có hạn chế nào được áp dụng cho câu trả lời. Ví dụ: để giới hạn các khu vực ở Đức và Pháp:

        "includedRegionCodes": ["de", "fr"]

    Nếu bạn chỉ định cả locationRestrictionincludedRegionCodes, thì kết quả sẽ nằm trong khu vực giao nhau của hai chế độ cài đặt này.

  • inputOffset

    Độ lệch ký tự Unicode dựa trên 0 cho biết vị trí con trỏ trong input. Vị trí con trỏ có thể ảnh hưởng đến cụm từ gợi ý mà hệ thống trả về. Nếu trống, độ dài mặc định là input.

  • languageCode

    Ngôn ngữ ưu tiên dùng để trả về kết quả. Kết quả có thể ở nhiều ngôn ngữ kết hợp nếu ngôn ngữ dùng trong input khác với giá trị do languageCode chỉ định, hoặc nếu địa điểm được trả về không có bản dịch từ ngôn ngữ địa phương sang languageCode.

    • Bạn phải sử dụng mã ngôn ngữ BCP-47 theo IETF để chỉ định ngôn ngữ ưu tiên.
    • Nếu bạn không cung cấp languageCode, API sẽ sử dụng giá trị được chỉ định trong tiêu đề Accept-Language. Nếu bạn không chỉ định đối tượng nào, giá trị mặc định sẽ là en. Nếu bạn chỉ định mã ngôn ngữ không hợp lệ, API sẽ trả về lỗi INVALID_ARGUMENT.
    • Ngôn ngữ ưu tiên có ảnh hưởng nhỏ đến tập hợp kết quả mà API chọn trả về và thứ tự trả về các kết quả đó. Điều này cũng ảnh hưởng đến khả năng sửa lỗi chính tả của API.
    • API này cố gắng cung cấp một địa chỉ đường phố mà cả người dùng và người dùng tại địa phương đều có thể đọc được, đồng thời phản ánh hoạt động đầu vào của người dùng. Các thông tin dự đoán về địa điểm được định dạng khác nhau, tuỳ thuộc vào hoạt động đầu vào của người dùng trong mỗi yêu cầu.
      • Hệ thống sẽ chọn các cụm từ khớp trong thông số input trước, sử dụng tên phù hợp với lựa chọn ưu tiên về ngôn ngữ mà thông số languageCode biểu thị (nếu có), còn nếu không, hãy sử dụng tên phù hợp nhất với hoạt động đầu vào của người dùng.
      • Địa chỉ đường phố được định dạng bằng ngôn ngữ địa phương, bằng tập lệnh mà người dùng có thể đọc khi có thể, chỉ sau khi các cụm từ trùng khớp đã được chọn để khớp với các cụm từ trong tham số input.
      • Tất cả các địa chỉ khác sẽ được trả về bằng ngôn ngữ ưu tiên, sau khi các cụm từ khớp đã được chọn để khớp với các cụm từ trong tham số input. Nếu một tên không có sẵn bằng ngôn ngữ ưu tiên, API sẽ sử dụng kết quả phù hợp nhất.
  • Vị tríBias hoặc locationRestriction (Hạn chế vị trí)

    Bạn có thể chỉ định locationBias hoặc locationRestriction, nhưng không được chỉ định cả hai để xác định khu vực tìm kiếm. Bạn có thể coi locationRestriction là khu vực chỉ định kết quả, và locationBias dùng để chỉ định khu vực mà kết quả phải ở gần nhưng có thể ở bên ngoài khu vực đó.

    • locationBias

      Chỉ định một vùng để tìm kiếm. Vị trí này đóng vai trò là một độ lệch, tức là có thể trả về kết quả liên quan đến vị trí đã chỉ định, bao gồm cả kết quả nằm ngoài khu vực đã chỉ định.

    • locationRestriction

      Chỉ định một vùng để tìm kiếm. Kết quả nằm ngoài khu vực đã chỉ định sẽ không được trả về.

    Hãy chỉ định vùng locationBias hoặc locationRestriction dưới dạng Khung nhìn hình chữ nhật hoặc dưới dạng hình tròn.

    • Một đường tròn được xác định bởi tâm điểm và bán kính tính bằng mét. Bán kính phải nằm trong khoảng từ 0,0 đến 50000,0. Giá trị mặc định là 0,0. Đối với locationRestriction, bạn phải đặt bán kính thành một giá trị lớn hơn 0. Nếu không, yêu cầu này sẽ không trả về kết quả nào.

      Ví dụ:

      "locationBias": {
        "circle": {
          "center": {
            "latitude": 37.7937,
            "longitude": -122.3965
          },
          "radius": 500.0
        }
      }
    • Hình chữ nhật là một khung nhìn vĩ độ – kinh độ, được biểu thị dưới dạng hai đường chéo đối diện low và điểm cao. Một khung nhìn được coi là một khu vực đóng, có nghĩa là khu vực đó bao gồm cả ranh giới của khung nhìn đó. Giới hạn vĩ độ phải nằm trong khoảng từ -90 đến 90 độ, còn giới hạn kinh độ phải nằm trong khoảng từ -180 đến 180 độ:

      • Nếu low = high, khung nhìn chỉ bao gồm một điểm duy nhất đó.
      • Nếu low.longitude > high.longitude, thì phạm vi kinh độ sẽ bị đảo ngược (khung nhìn vượt qua đường kinh độ 180 độ).
      • Nếu low.longitude = -180 độ và high.longitude = 180 độ, khung nhìn sẽ bao gồm tất cả các kinh độ.
      • Nếu low.longitude = 180 độ và high.longitude = -180 độ, thì phạm vi kinh độ sẽ trống.

      Cả lowhigh đều phải được điền và không được để trống hộp được đại diện. Khung nhìn trống dẫn đến lỗi.

      Ví dụ: khung nhìn này bao quanh hoàn toàn Thành phố New York:

      "locationBias": {
        "rectangle": {
          "low": {
            "latitude": 40.477398,
            "longitude": -74.259087
          },
          "high": {
            "latitude": 40.91618,
            "longitude": -73.70018
          }
        }
      }
  • nguồn gốc

    Điểm gốc để tính khoảng cách theo đường thẳng đến đích đến (được trả về dưới dạng distanceMeters). Nếu bạn bỏ qua giá trị này, thì Google sẽ không trả về khoảng cách theo đường thẳng. Phải được chỉ định là toạ độ theo vĩ độ và kinh độ:

    "origin": {
        "latitude": 40.477398,
        "longitude": -74.259087
    }
  • regionCode

    Mã khu vực dùng để định dạng phản hồi (được chỉ định dưới dạng giá trị 2 ký tự là ccTLD ("miền cấp cao nhất"). Hầu hết mã ccTLD (miền cấp cao nhất theo mã quốc gia) đều giống với mã ISO 3166-1, trừ một số ngoại lệ đáng chú ý. Ví dụ: ccTLD (miền cấp cao nhất theo mã quốc gia) của Vương quốc Anh là "uk" (.co.uk) trong khi mã ISO 3166-1 của mã này là "gb" (về mặt kỹ thuật là "Vương quốc Anh" và Bắc Ireland).

    Nếu bạn chỉ định mã vùng không hợp lệ, API sẽ trả về lỗi INVALID_ARGUMENT. Tuỳ theo luật hiện hành, thông số này có thể ảnh hưởng đến kết quả.

  • sessionToken

    Mã thông báo phiên là các chuỗi do người dùng tạo để theo dõi lệnh gọi Tự động hoàn thành (Mới) dưới dạng "phiên". Tính năng Tự động hoàn thành (Mới) sử dụng mã thông báo phiên để nhóm các giai đoạn truy vấn và lựa chọn trong lượt tìm kiếm tự động hoàn thành của người dùng thành một phiên riêng biệt cho mục đích thanh toán. Để biết thêm thông tin, hãy xem phần Mã thông báo phiên.

Ví dụ về tính năng Tự động hoàn thành (Mới)

Sử dụng vị trí Hạn chế và vị tríBias

Theo mặc định, API sử dụng xu hướng IP để kiểm soát khu vực tìm kiếm. Với xu hướng IP, API sử dụng địa chỉ IP của thiết bị để xu hướng kết quả. Bạn có thể tuỳ ý sử dụng locationRestriction hoặc locationBias, nhưng không được dùng cả hai để chỉ định một khu vực cần tìm kiếm.

locationRestriction chỉ định khu vực cần tìm kiếm. Kết quả nằm ngoài khu vực đã chỉ định sẽ không được trả về. Trong ví dụ sau, bạn sử dụng locationRestriction để giới hạn yêu cầu ở một vòng tròn có bán kính 5000 mét ở tâm điểm San Francisco:

curl -X POST -d '{
  "input": "Amoeba",
  "locationRestriction": {
    "circle": {
      "center": {
        "latitude": 37.7749,
        "longitude": -122.4194
      },
      "radius": 5000.0
    }
  }
}' \
-H 'Content-Type: application/json' -H "X-Goog-Api-Key: API_KEY" \
https://places.googleapis.com/v1/places:autocomplete

Tất cả kết quả trong các vùng được chỉ định đều nằm trong mảng suggestions:

{
  "suggestions": [
    {
      "placePrediction": {
        "place": "places/ChIJ5YQQf1GHhYARPKG7WLIaOko",
        "placeId": "ChIJ5YQQf1GHhYARPKG7WLIaOko",
        "text": {
          "text": "Amoeba Music, Haight Street, San Francisco, CA, USA",
          "matches": [
            {
              "endOffset": 6
            }
          ]
        },
        "structuredFormat": {
          "mainText": {
            "text": "Amoeba Music",
            "matches": [
              {
                "endOffset": 6
              }
            ]
          },
          "secondaryText": {
            "text": "Haight Street, San Francisco, CA, USA"
          }
        },
        "types": [
          "home_goods_store",
          "establishment",
          "store",
          "point_of_interest",
          "electronics_store"
        ]
      }
    }
  ]
}

Với locationBias, vị trí đóng vai trò là độ lệch, tức là có thể trả về kết quả xung quanh vị trí đã chỉ định, bao gồm cả kết quả bên ngoài khu vực đã chỉ định. Trong ví dụ tiếp theo, bạn sẽ thay đổi yêu cầu sử dụng locationBias:

curl -X POST -d '{
  "input": "Amoeba",
  "locationBias": {
    "circle": {
      "center": {
        "latitude": 37.7749,
        "longitude": -122.4194
      },
      "radius": 5000.0
    }
  }
}' \
-H 'Content-Type: application/json' -H "X-Goog-Api-Key: API_KEY" \
https://places.googleapis.com/v1/places:autocomplete

Kết quả hiện chứa nhiều mục khác, bao gồm cả các kết quả nằm ngoài bán kính 5000 mét:

{
  "suggestions": [
    {
      "placePrediction": {
        "place": "places/ChIJ5YQQf1GHhYARPKG7WLIaOko",
        "placeId": "ChIJ5YQQf1GHhYARPKG7WLIaOko",
        "text": {
          "text": "Amoeba Music, Haight Street, San Francisco, CA, USA",
          "matches": [
            {
              "endOffset": 6
            }
          ]
        },
        "structuredFormat": {
          "mainText": {
            "text": "Amoeba Music",
            "matches": [
              {
                "endOffset": 6
              }
            ]
          },
          "secondaryText": {
            "text": "Haight Street, San Francisco, CA, USA"
          }
        },
        "types": [
          "electronics_store",
          "point_of_interest",
          "store",
          "establishment",
          "home_goods_store"
        ]
      }
    },
    {
      "placePrediction": {
        "place": "places/ChIJr7uwwy58hYARBY-e7-QVwqw",
        "placeId": "ChIJr7uwwy58hYARBY-e7-QVwqw",
        "text": {
          "text": "Amoeba Music, Telegraph Avenue, Berkeley, CA, USA",
          "matches": [
            {
              "endOffset": 6
            }
          ]
        },
        "structuredFormat": {
          "mainText": {
            "text": "Amoeba Music",
            "matches": [
              {
                "endOffset": 6
              }
            ]
          },
          "secondaryText": {
            "text": "Telegraph Avenue, Berkeley, CA, USA"
          }
        },
        "types": [
          "electronics_store",
          "point_of_interest",
          "establishment",
          "home_goods_store",
          "store"
        ]
      }
    },
    ...
  ]
}

Sử dụng includePrimaryTypes

Sử dụng tham số includedPrimaryTypes để chỉ định tối đa 5 giá trị loại từ Bảng A, Bảng B, hoặc chỉ (regions) hoặc chỉ (cities). Địa điểm phải khớp với một trong các giá trị loại chính được chỉ định để được đưa vào câu trả lời.

Trong ví dụ sau, bạn chỉ định chuỗi input là "Bóng đá" và sử dụng tham số includedPrimaryTypes để giới hạn kết quả ở các thiết lập thuộc loại "sporting_goods_store":

curl -X POST -d '{
  "input": "Soccer",
  "includedPrimaryTypes": ["sporting_goods_store"],
  "locationBias": {
    "circle": {
      "center": {
        "latitude": 37.7749,
        "longitude": -122.4194
      },
      "radius": 500.0
    }
  }
}' \
-H 'Content-Type: application/json' -H "X-Goog-Api-Key: API_KEY" \
https://places.googleapis.com/v1/places:autocomplete

Nếu bạn bỏ qua tham số includedPrimaryTypes, thì kết quả có thể bao gồm các cơ sở dữ liệu thuộc loại bạn không muốn, chẳng hạn như "athletic_field".

Yêu cầu dự đoán truy vấn

Các dự đoán truy vấn không được trả về theo mặc định. Sử dụng tham số yêu cầu includeQueryPredictions để thêm thông tin dự đoán truy vấn vào phản hồi. Ví dụ:

curl -X POST -d '{
  "input": "Amoeba",
  "includeQueryPredictions": true,
  "locationBias": {
    "circle": {
      "center": {
        "latitude": 37.7749,
        "longitude": -122.4194
      },
      "radius": 5000.0
    }
  }
}' \
-H 'Content-Type: application/json' -H "X-Goog-Api-Key: API_KEY" \
https://places.googleapis.com/v1/places:autocomplete

Mảng suggestions hiện chứa cả thông tin dự đoán địa điểm và thông tin dự đoán truy vấn như hiển thị ở trên trong phần Giới thiệu về phản hồi. Mỗi thông tin dự đoán truy vấn bao gồm trường text chứa chuỗi tìm kiếm văn bản được đề xuất. Bạn có thể đưa ra yêu cầu Tìm kiếm văn bản (Mới) để biết thêm thông tin về mọi cụm từ gợi ý truy vấn được trả về.

Sử dụng nguồn gốc

Trong ví dụ này, hãy thêm origin vào yêu cầu dưới dạng toạ độ theo vĩ độ và kinh độ. Khi bạn đưa origin vào, API sẽ đưa trường distanceMeters vào phản hồi chứa khoảng cách theo đường thẳng từ origin đến đích. Ví dụ sau đặt điểm khởi hành là trung tâm của San Francisco:

curl -X POST -d '{
  "input": "Amoeba",
  "origin": {
    "latitude": 37.7749,
    "longitude": -122.4194
  },
  "locationRestriction": {
    "circle": {
      "center": {
        "latitude": 37.7749,
        "longitude": -122.4194
      },
      "radius": 5000.0
    }
  }
}' \
-H 'Content-Type: application/json' -H "X-Goog-Api-Key: API_KEY" \
https://places.googleapis.com/v1/places:autocomplete

Phản hồi hiện bao gồm distanceMeters:

{
  "suggestions": [
    {
      "placePrediction": {
        "place": "places/ChIJ5YQQf1GHhYARPKG7WLIaOko",
        "placeId": "ChIJ5YQQf1GHhYARPKG7WLIaOko",
        "text": {
          "text": "Amoeba Music, Haight Street, San Francisco, CA, USA",
          "matches": [
            {
              "endOffset": 6
            }
          ]
        },
        "structuredFormat": {
          "mainText": {
            "text": "Amoeba Music",
            "matches": [
              {
                "endOffset": 6
              }
            ]
          },
          "secondaryText": {
            "text": "Haight Street, San Francisco, CA, USA"
          }
        },
        "types": [
          "home_goods_store",
          "establishment",
          "point_of_interest",
          "store",
          "electronics_store"
        ],
        "distanceMeters": 3012
      }
    }
  ]
}

Hãy dùng thử!

API Explorer cho phép bạn đưa ra các yêu cầu mẫu để có thể làm quen với API và các tuỳ chọn API.

  1. Chọn biểu tượng API Mở rộng API Explorer. ở bên phải của trang.
  2. (Không bắt buộc) Mở rộng tuỳ chọn Show standard parameters (Hiện các tham số chuẩn) và đặt tham số fields thành fieldMask (mặt nạ trường).
  3. Chỉnh sửa Nội dung yêu cầu (không bắt buộc).
  4. Chọn nút Thực thi. Trong cửa sổ bật lên, hãy chọn tài khoản mà bạn muốn dùng để gửi yêu cầu.
  5. Trong bảng điều khiển API Explorer, hãy chọn biểu tượng mở rộng Mở rộng API Explorer. để mở rộng cửa sổ API Explorer.