Mục lục:

Thêm điều khiển Alexa tùy chỉnh vào Dự án Raspberry Pi: 5 bước
Thêm điều khiển Alexa tùy chỉnh vào Dự án Raspberry Pi: 5 bước

Video: Thêm điều khiển Alexa tùy chỉnh vào Dự án Raspberry Pi: 5 bước

Video: Thêm điều khiển Alexa tùy chỉnh vào Dự án Raspberry Pi: 5 bước
Video: ✅ Hướng dẫn chi tiết cách biến máy tính Raspberry Pi 3, 4 thành TV BOX đầy đủ chức năng 2024, Tháng bảy
Anonim
Thêm điều khiển Alexa tùy chỉnh vào Dự án Raspberry Pi
Thêm điều khiển Alexa tùy chỉnh vào Dự án Raspberry Pi

Dự án này dành cho bất kỳ ai có dự án Raspberry Pi sử dụng Python, những người muốn thêm điều khiển bằng giọng nói thông qua các thiết bị Amazon Echo hiện có của họ. Bạn không cần phải là một lập trình viên có kinh nghiệm, nhưng bạn nên thoải mái khi sử dụng dòng lệnh và điều chỉnh mã hiện có để phù hợp với nhu cầu của mình.

Ban đầu, tôi bắt đầu một dự án cho phép Raspberry Pi của tôi được điều khiển bằng giọng nói với Alexa để nó có thể làm nóng nước trong ấm đun nước đến một nhiệt độ cụ thể. Mặc dù tương tác tôi muốn khá đơn giản (chuyển một số từ Alexa sang Raspberry Pi), nhưng phải mất rất nhiều công việc để đạt được trạng thái đó từ các hướng dẫn hiện có. Tôi hy vọng hướng dẫn này sẽ làm cho quá trình đó nhanh nhất có thể đối với những người khác.

Trong ví dụ của tôi, tôi bắt đầu với Raspberry Pi Zero W với Raspbian. Tôi có một chương trình Python3 trên Pi của mình có khả năng ghi văn bản lên màn hình SPI và tôi có một đầu dò nhiệt kế mà tôi có thể đọc được. Đối với bạn, chương trình này có thể là hầu hết mọi thứ, nhưng ý tưởng là bạn có thể có một số thiết bị đầu vào mà bạn muốn đọc qua Alexa và / hoặc một số thiết bị đầu ra mà bạn muốn điều khiển bằng Alexa.

Mục tiêu là chuyển từ một chương trình cơ bản như chương trình được mô tả ở trên sang một thiết bị mà bạn có thể dễ dàng điều khiển bằng Echo của tôi. Giả sử bạn đã có phần cứng này, thì dự án này sẽ không khiến bạn mất bất kỳ khoản tiền nào. Cuối cùng, bạn sẽ đạt được điểm mà bạn có thể nói những điều như:

Tôi: "Alexa, yêu cầu thiết bị của tôi kiểm tra nhiệt độ trên cảm biến 1."

Phản hồi của Alexa: "Đầu dò đọc 72,31 độ."

hoặc

Tôi: "Alexa, bảo thiết bị của tôi viết George Washington"

Phản hồi: Màn hình được kết nối với Raspberry Pi của tôi hiện đọc "George Washington"

Trong phần tiếp theo, tôi sẽ mô tả những gì cần xảy ra ở hậu trường để làm cho điều này thành công. Nếu bạn chỉ muốn điều này hoạt động trong dự án của mình và không quan tâm nó hoạt động như thế nào, hãy bỏ qua nó (mặc dù nó có thể khiến nó khó khăn hơn nếu có sự cố).

Bước 1: Bối cảnh

Tiểu sử
Tiểu sử

Trong hình ảnh này (tín dụng: https://developer.amazon.com/en-US/docs/alexa/alex…, chúng ta có thể thấy kiến trúc chung cho Alexa Gadgets.

Khi bạn nói điều gì đó với thiết bị Echo của mình, nó sẽ gửi âm thanh đến Alexa Cloud, nơi nó được xử lý và nơi phản hồi được tạo để trả lời bạn. Khi bạn hỏi thời tiết như thế nào, thì chỉ có hai điều này trong giao tiếp. Bây giờ, giả sử rằng bạn muốn thêm điều khiển bằng giọng nói vào một trong các dự án nhỏ của mình trên Raspberry Pi. Xử lý mọi thứ trên bo mạch sẽ yêu cầu phần cứng đáng kể và cơ sở mã rất phức tạp để mọi thứ diễn ra. Một giải pháp tốt hơn sẽ là tận dụng Đám mây Alexa, rất phức tạp và đã trở nên rất tốt trong việc xử lý các mẫu giọng nói phức tạp. Alexa Gadgets cung cấp một cách tốt để bạn thực hiện việc này.

Tiện ích Alexa giao tiếp với thiết bị Echo bằng bluetooth. Khi kết nối này được thiết lập, cả hai chuyển thông báo cho nhau bằng cách sử dụng mã hóa UTF-8. Khi Echo chuyển một thứ gì đó đến tiện ích, nó được gọi là chỉ thị. Hướng khác được coi là một sự kiện. Trước khi đi vào quy trình chính xác của tất cả những điều này, chúng ta nên giới thiệu một yếu tố quan trọng khác: Kỹ năng Alexa tùy chỉnh.

Alexa cho phép các nhà phát triển tạo các kỹ năng tùy chỉnh của riêng họ, cho phép họ thiết kế các tương tác và hành vi của riêng mình để sử dụng trên tất cả các thiết bị Echo. Ví dụ: một nhà phát triển có thể tạo một kỹ năng tùy chỉnh để cho bạn biết khoảng cách giữa hai sân bay ở Hoa Kỳ. Một người dùng sẽ nói: "Alexa, hãy hỏi máy tính khoảng cách tùy chỉnh của tôi xem khoảng cách giữa LAX và JFK là bao nhiêu" và nó có thể trả lời bằng "2475 dặm". Làm thế nào nó làm điều này? Khi một nhà phát triển thực hiện một kỹ năng tùy chỉnh, họ xác định những gì được gọi là "ý định tùy chỉnh" với "lời nói mẫu" có chứa "vị trí". Ví dụ, trong kỹ năng này, tôi có thể có ý định "calc_dist" để tính toán khoảng cách giữa hai điểm. Câu nói mẫu sẽ là "khoảng cách giữa {slot1} và {slot2}" hoặc "khoảng cách giữa {slot1} và {slot2}". Các khe hiển thị trong ngoặc có các loại cụ thể. Trong trường hợp này, những loại đó sẽ là mã sân bay như LAX, JFK, BOS, ATL. Khi người dùng yêu cầu kỹ năng tùy chỉnh, Alexa Cloud sẽ cố gắng khớp những gì người dùng nói với mục đích tùy chỉnh bằng cách sử dụng các câu nói mẫu được cung cấp và cố gắng tìm các giá trị vị trí hợp lệ cho yêu cầu đó. Trong ví dụ này, nó sẽ thấy rằng người dùng muốn có ý định "calc_dist" và slot1 là LAX và slot2 là JFK. Tại thời điểm này, Đám mây Alexa chuyển công việc sang mã riêng của nhà phát triển. Về cơ bản, nó cho các nhà phát triển biết ý định mà nó nhận được và tất cả các giá trị vị trí là gì, trong số các chi tiết khác.

Nhà phát triển có thể quyết định nơi mã của họ tồn tại, nhưng một tùy chọn rất phổ biến là sử dụng chức năng AWS Lambda. Nếu bạn không biết đó là gì, về cơ bản đây là một dịch vụ cho phép bạn tải lên mã có thể chạy bất kỳ lúc nào và sau đó chỉ tính phí bạn trong khoảng thời gian mã của bạn được chạy. Nếu chúng ta tiếp tục với ví dụ của mình, mã của nhà phát triển có thể là một hàm Python nhận hai mã sân bay, tìm kiếm vị trí của chúng, tính toán khoảng cách và sau đó gửi phản hồi lại cho Đám mây Alexa để nói điều gì đó với người dùng. Sau đó, đám mây Alexa sẽ gửi lại thông tin lời nói đó đến thiết bị của người dùng và họ sẽ nhận được câu trả lời.

Bây giờ chúng ta có thể quay lại tiện ích. Chúng tôi có thể tạo các kỹ năng tùy chỉnh được thiết kế để hoạt động đặc biệt với các tiện ích. Một nhà phát triển có thể viết một kỹ năng gửi chỉ thị đến một tiện ích được kết nối. Chỉ thị đó có một trọng tải có thể được sử dụng tuy nhiên nó cần thiết bởi tiện ích. Kỹ năng đó cũng có thể gửi chỉ thị và sau đó lắng nghe một sự kiện từ tiện ích để mã kỹ năng có thể truy cập vào thông tin được gửi từ tiện ích.

Việc thiết lập quy trình này cho phép tạo ra một công cụ rất mạnh mẽ vì các tiện ích rẻ tiền có thể có khả năng giao tiếp với mã trên đám mây và phản hồi các lệnh thoại bằng cách sử dụng một số nhận dạng giọng nói tốt nhất hiện có.

Cần lưu ý rằng hầu hết các kỹ năng đều cho phép nhiều cách khác nhau để tương tác với chúng. Ví dụ: người dùng có thể nhảy thẳng vào một ý định bằng cách nói "Alexa, hãy hỏi máy tính khoảng cách tùy chỉnh của tôi xem khoảng cách giữa LAX và JFK là bao nhiêu" (được gọi là lời kêu gọi một lần) hoặc họ có thể chỉ cần sử dụng ý định khởi chạy: "Alexa, mở máy tính khoảng cách tùy chỉnh của tôi ". Ví dụ cuối cùng này thường được theo sau bởi Alexa phản hồi với lời nhắc để biết thêm thông tin. Hướng dẫn này cố ý bỏ qua phần hỗ trợ cho phần sau. Cụ thể hơn, nếu không sửa đổi chức năng Lambda, bạn chỉ có thể gọi kỹ năng bằng cách sử dụng một lần gọi. Lựa chọn thiết kế này cho phép mô hình trở nên đơn giản hơn (không phải hỗ trợ ý định khởi chạy hoặc luồng hội thoại) và tôi nhận thấy rằng tôi thường muốn tương tác với các tiện ích của mình bằng cách sử dụng lệnh gọi một lần vì chúng thường nhanh hơn.

Bước 2: Đăng ký Tiện ích trên Bảng điều khiển dành cho nhà phát triển dịch vụ giọng nói của Alexa

Sau đây là mô tả các bước cần thiết. Tôi đã tạo một video tương đương hướng dẫn cách thực hiện tất cả các bước này. Bạn có thể sử dụng một trong hai hoặc cả hai để hoàn thành bước này.

  1. Điều hướng đến
  2. Nếu bạn chưa có tài khoản miễn phí, hãy tạo một tài khoản
  3. Nhấp vào "Sản phẩm"
  4. Điền vào các nhãn và chọn "Tiện ích Alexa"
  5. Điền bất cứ thứ gì bạn muốn cho phần còn lại của các trường
  6. Nhấp vào Kết thúc

Bước 3: Tạo chức năng AWS Lambda và kỹ năng tùy chỉnh

Tạo kỹ năng tùy chỉnh trên Bảng điều khiển dành cho nhà phát triển Bộ kỹ năng Alexa

Mã cho hướng dẫn này có thể được tìm thấy ở đây

Trước khi hoàn thành bước này, bạn sẽ cần tạo tệp.zip chứa gói triển khai cho chức năng AWS Lambda như được hiển thị trong hướng dẫn tại đây.

  1. Tải xuống thư mục "lambda" từ Github của tôi có chứa "lambda_ Chức năng.py" và "Yêu cầu.txt"
  2. Mở thiết bị đầu cuối và thay đổi thư mục hiện tại thành bên trong thư mục này.
  3. Chạy trình tự sau:

pip install -r request.txt -t skill_env

cp lambda_ functions.py skill_env cd skill_env zip -r../../skill-code.zip

Tệp.zip của bạn bây giờ sẽ nằm trong thư mục chứa thư mục lambda và sẽ được gọi là "skill-code.zip".

Lưu ý về chi phí lưu trữ trên AWS: Hướng dẫn này yêu cầu bạn phải có tài khoản AWS (tạo miễn phí). Tuy nhiên, các hàm Lambda có chi phí cao, tuy nhiên, giá hiện tại của chúng ở khu vực N. Virginia là $ 0,000000208 cho mỗi 100ms sử dụng với bộ nhớ 128MB. Để tham khảo, mỗi lần gọi kỹ năng của tôi sẽ báo phí khoảng 800 mili giây sử dụng ở cấp này. Để kiếm được một hóa đơn $ 1,00USD, bạn sẽ phải gọi hàm này khoảng 600.000 lần (nếu bạn mất 5 giây cho mỗi lần gọi) sẽ khiến bạn mất hơn 34 ngày không ngừng gọi hàm của mình. Chi phí không phải là một vấn đề đáng kể trừ khi bạn xuất bản kỹ năng của mình và một số lượng lớn người bắt đầu sử dụng nó. Nếu bạn lo lắng về việc nhận hóa đơn trên AWS, hãy cân nhắc thiết lập cảnh báo sử dụng để thông báo cho bạn nếu việc sử dụng vượt qua ngưỡng xác định.

Sau đây là mô tả các bước cần thiết. Tôi đã tạo một video tương đương hướng dẫn cách thực hiện tất cả các bước này. Bạn có thể sử dụng một trong hai hoặc cả hai để hoàn thành bước này.

  1. Điều hướng đến https://aws.amazon.com/ và đăng nhập vào bảng điều khiển hoặc tạo tài khoản miễn phí nếu bạn chưa có
  2. Tìm kiếm và nhấp vào Lambda trong các dịch vụ
  3. Nhấp vào "Tạo chức năng"
  4. Chọn "Tác giả từ đầu", đặt tên cho nó và chọn phiên bản Python 3 mới nhất cho thời gian chạy
  5. Thay đổi "chỉnh sửa mã nội dòng" thành "tải lên tệp.zip" và chọn tệp.zip đã tạo ở trên
  6. Trong cửa sổ mới, điều hướng đến https://developer.amazon.com/alexa/console/ask và đăng nhập
  7. Nhấp vào "Tạo kỹ năng"
  8. Gắn nhãn nó, chọn mô hình "Tùy chỉnh" và "Cung cấp của riêng bạn" và nhấp vào "Tạo Kỹ năng"
  9. Nhấp vào "Bắt đầu từ Scratch" và nhấp vào "Chọn"
  10. Trong "Ý định", nhấp vào "Thêm"
  11. Tạo một ý định tùy chỉnh được gọi là "alexa_to_pi" và điền vào "write {person}" làm câu nói mẫu
  12. Tạo vùng có ý định gọi là "người" với loại "AMAZON. Person"
  13. Tạo mục đích tùy chỉnh có tên "pi_to_alexa" và điền vào "kiểm tra nhiệt độ từ cảm biến {sensor_num}
  14. Tạo một vùng ý định có tên "sensor_num" với loại "AMAZON. NUMBER"
  15. Trong Giao diện, hãy bật "Bộ điều khiển giao diện tùy chỉnh"
  16. Trong Điểm cuối, chọn "AWS Lambda ARN" và sao chép "ID kỹ năng của bạn"
  17. Điều hướng trở lại Bảng điều khiển AWS
  18. Nhấp vào "Thêm trình kích hoạt"
  19. Chọn "Bộ kỹ năng Alexa", chọn "Bật" trong xác minh ID kỹ năng, dán ID kỹ năng bạn vừa sao chép và nhấp vào thêm
  20. Sao chép Lambda ARN ở góc trên bên phải
  21. Điều hướng Quay lại Bảng điều khiển dành cho nhà phát triển Alexa và dán Lambda ARN vào trường "Khu vực mặc định"
  22. Trong Lời mời, hãy đặt Tên Lời mời Kỹ năng thành "tiện ích của tôi"
  23. Nhấp vào "Lưu mô hình" và sau đó nhấp vào "Xây dựng mô hình"
  24. Nhấp vào "Kiểm tra" ở các tab trên cùng và thay đổi bộ chọn từ "Tắt" thành "Phát triển"
  25. Lưu ý rằng nhật ký cho hàm Lambda được tìm thấy trong dịch vụ "CloudWatch" trên AWS.

Bước 4: Thiết lập mã trên Raspberry Pi của bạn

Để Raspberry Pi của bạn giao tiếp với thiết bị Alexa, nó cần một số mã để tạo điều kiện chuyển thông tin qua bluetooth và duy trì kết nối đó, ngoài một số tệp khác. Cách dễ nhất để bắt đầu với các tệp cập nhật nhất từ Amazon là sao chép kho lưu trữ Raspberry Pi Gadgets của họ. Điều hướng đến thư mục của dự án hiện tại của bạn và chạy

git clone

Điều này sẽ tải toàn bộ kho lưu trữ của họ với tất cả các mã cần thiết vào Pi của bạn. Nó có một số dự án ví dụ thể hiện một số khả năng của Alexa Gadgets. Nếu bạn muốn biết thêm thông tin, hãy xem readme trên trang Github của họ.

Chạy chức năng thiết lập của chúng để cấu hình mọi thứ.

cd / home / pi / Alexa-Gadgets-Raspberry-Pi-Mẫu

sudo python3 launc.py --setup

Làm theo lời nhắc và trả lời "y" khi được hỏi liệu bạn có muốn định cấu hình bằng thông tin đăng nhập Tiện ích của mình hay không. Nhớ lại Amazon ID và Bí mật tiện ích khi thiết lập tiện ích của bạn trên bảng điều khiển dành cho nhà phát triển vì nó sẽ được yêu cầu tại đây. Tôi đã chọn chế độ truyền "bt" cho Raspberry Pi Zero W. BLE không được hỗ trợ bởi tất cả các thiết bị Echo cũ hơn, nhưng bạn có thể tra cứu khả năng phần cứng của mình. Nếu bạn đang sử dụng Pi ở chế độ Máy tính để bàn, Amazon khuyên bạn nên nhấp chuột phải vào biểu tượng bluetooth ở trên cùng bên phải và nhấp vào "Xóa" Bluetooth "khỏi Bảng điều khiển" để tránh các sự cố kết nối.

Lưu ý: bước này có thể mất một lúc tùy thuộc vào lượng cần cài đặt.

Bây giờ bạn sẽ có tất cả các tệp hỗ trợ cần thiết để quay lại dự án của mình và bắt đầu thêm các chức năng để cho phép giao tiếp với Echo của bạn.

Nếu bạn chọn, bạn có thể xóa thư mục "ví dụ" trong "Alexa-Tiện ích-Raspberry-Pi-Mẫu / src"

Bạn có thể có mã dự án của mình ở bất cứ đâu bạn thích, nhưng tôi sẽ tạo một thư mục trong thư mục chính cho nó, hoặc bạn có thể tải xuống thư mục có mã từ Github của tôi, chỉ cần đảm bảo chỉnh sửa các tệp.ini như được mô tả bên dưới.

cd / home / pi

mkdir my_project cd my_project touch my_gadget.py chạm my_gadget.ini

Bây giờ tôi đã tạo hai tệp trong một thư mục có tên "my_project". Tệp.ini rất quan trọng. Đảm bảo rằng nó chứa những thứ sau và thay thế trong Amazon ID và Bí mật tiện ích của bạn:

[GadgetSettings]

amazonId = INSERT_AMAZON_ID_HERE alexaGadgetSecret = INSERT_ALEXA_GADGET_SECRET_HERE [GadgetCapabilities] Custom. MyGadget = 1.0

Bây giờ, chúng ta hãy xem qua tệp python trước khi đi vào chi tiết:

nhập json

from agt import AlexaGadget

lớp MyGadget (AlexaGadget):

def _init _ (bản thân):

super ()._ init _ ()

def on_custom_mygadget_alexatopi (tự, chỉ thị):

payload = json.loads (directive.payload.decode ("utf-8")) print ("Dữ liệu đã nhận:" + str (payload)) write_text (str (payload ['data'] ['person'] ['value ']))

def on_custom_mygadget_pitoalexa (tự, chỉ thị):

payload = json.loads (directive.payload.decode ("utf-8")) print ("Dữ liệu đã nhận:" + str (payload)) payload = {'data': "Đầu dò đọc" + str (get_temp (payload ['data'] ['sensor_num'] ['value'])) + "độ."} self.send_custom_event ('Custom. MyGadget', 'PiToAlexa', payload) MyGadget (). main ()

Đầu tiên, bạn sẽ nhận thấy rằng nó gọi hai hàm: write_text () và get_temp (). Trong mã của tôi, tôi xác định các hàm này trong cùng một tệp, nhưng chúng phụ thuộc vào phần cứng của tôi nên tôi đã chọn bỏ qua chúng. Tôi đã đính kèm tệp này với các hàm được xác định để chỉ in và trả về dữ liệu giả trong trường hợp bạn muốn chạy mã chính xác này. Tôi khuyên bạn nên thử nghiệm với mã chính xác này trước khi bạn sửa đổi nó để hoạt động với dự án của bạn. Tôi cũng đã đính kèm tệp.ini, nhưng hãy đảm bảo rằng bạn truy cập và thay đổi ID và bí mật của tiện ích. Hàm trên cùng nhận dữ liệu được chuyển vào từ Alexa. Hàm dưới cùng nhận dữ liệu ở cùng một định dạng, nhưng thiết bị Alexa sẽ đợi trong năm giây để một sự kiện được chuyển trở lại với trọng tải của chính nó. Trọng tải này đặc biệt ở chỗ thiết bị Alexa sẽ nói nội dung của nó.

Khi bạn có các tệp này, hãy điều hướng đến thư mục "my_project" và chạy tệp python.

khởi động lại sudo

cd / home / pi / my_project sudo python3./my_gadget.py

Nếu đây là lần đầu tiên bạn chạy chương trình, bạn sẽ cần phải ghép nối nó với thiết bị Echo của mình. Đảm bảo thiết bị Echo của bạn ở gần Raspberry Pi, vì chúng tôi cần cho phép kết nối bluetooth.

Trong ứng dụng Alexa trên thiết bị di động của bạn, nhấp vào "thiết bị" ở góc dưới cùng bên phải.

Nhấp vào "Echo & Alexa" ở trên cùng bên trái.

Nhấp vào thiết bị Echo của bạn.

Trong "KHÔNG DÂY", hãy nhấn vào "Thiết bị Bluetooth".

Nhấn vào "CẶP THIẾT BỊ MỚI" và bạn sẽ thấy tiện ích của mình trên danh sách.

Nhấn vào tiện ích của bạn. Bạn sẽ thấy báo cáo Pi rằng nó đã ghép nối thành công.

Trong khi xem đầu ra trên Pi của bạn, hãy thử đưa ra lệnh thoại cho Echo:

Bạn: "Alexa, yêu cầu thiết bị của tôi kiểm tra nhiệt độ từ cảm biến"

Nếu mọi thứ hoạt động bình thường, bạn sẽ nghe thấy:

Echo: "Đầu dò đọc 120,505 độ."

Bạn: "Alexa, bảo thiết bị của tôi viết George Washington."

Số Pi nên in:

Dữ liệu đã nhận: {'data': {'person': {'name': 'person', 'value': 'George Washington', 'ConfirmStatus': 'NONE'}}}

George Washington"

Bước 5: Kết thúc

Video được hiển thị ở đây là một ví dụ về tiện ích hoạt động với việc đọc nhiệt độ (cùng một đầu dò ở F so với C) và viết tên cho một màn hình đơn giản.

Bây giờ bạn hy vọng có một cái gì đó hoạt động, bạn nên cố gắng tiếp tục và tùy chỉnh điều này để làm cho dự án của riêng bạn có khả năng hơn. Hãy nhớ rằng bạn có thể dễ dàng chỉnh sửa ý định trong Bảng điều khiển dành cho nhà phát triển Alexa và tất cả các vị trí bạn sử dụng sẽ được chuyển cho Pi của bạn trong tải trọng. Hơn nữa, bạn có thể yêu cầu Alexa nói bất cứ điều gì bạn muốn bằng cách chỉ cần chỉnh sửa tải trọng mà bạn trả lại trong sự kiện từ mã Raspberry Pi của bạn.

Xin lưu ý rằng hướng dẫn này không nhằm mục đích là giải pháp cuối cùng cho tất cả các khả năng bạn có thể muốn với Tiện ích Alexa. Nó được giới hạn có chủ ý để cung cấp cho bạn hai hàm đơn giản để truyền dữ liệu theo từng hướng giữa Alexa và Tiện ích. Nếu bạn quan tâm đến việc xây dựng các mô hình tương tác phức tạp hơn, tôi khuyên bạn nên đọc tất cả các tệp readme trong https://github.com/alexa/Alexa-Gadgets-Raspberry-P… và thử tất cả các ví dụ mà họ cung cấp. Tôi cũng khuyên bạn nên đọc tài liệu về Bộ công cụ tiện ích Alexa và Bộ kỹ năng của Alexa.

Đề xuất: