Chủ Nhật, 22 tháng 7, 2018

Xây dựng hotline để ghi âm cuộc gọi của người dùng và chuyển đổi nội dung ghi âm thành văn bản lưu trữ

Tác giả: Nguyễn Thế Phương

Mục đích: Trong bài viết này, chúng tôi sẽ hướng dẫn chi tiết cách xây dựng hotline để ghi âm cuộc hội thoại của người gọithực hiện chuyển đổi lời nội dung ghi âm (voice)  mà người dùng nói trong cuộc gọi trở thành văn bản để lưu trữ. Chúng tôi giới thiệu nội dung này như là tiền đề của ý tưởng xây dựng call center cho các phòng khám bệnh tư nhân tại nhà (clinic) cho phép bệnh nhân đặt khám bệnh qua điện thoại một cách trực tiếp qua điện thoại và hệ thống sẽ ghi nhận nội dung đặt thông qua nội dung đọc hướng dẫn khi cuộc gọi được kết nối tương tự như call center của tổng đài và ghi nhận nội dung người gọi nói để từ đó chuyển đổi thành danh sách bệnh nhân khám bệnh kèm theo số thứ tự và thời gian khám kết hợp với hồ sơ bệnh án của bệnh nhân khám hỗ trợ cho bác sỹ tại phòng khám (Hệ thống này chúng tôi sẽ cung bố trong thời gian tới khi xây dựng hoàn tất).

Các yêu cầu
·         Đã tìm hiểu và xây dựng ứng dụng với third-party Twilio (tham khảo bài viết tại địa chỉ http://www.kieutrongkhanh.net/2016/09/gui-va-nhan-tin-nhan-sms-voi-twilio.html )
·         Đã tìm hiểu và vận dụng việc chuyển đổi giọng nói thành văn bản với Google Speech To Text (tham khảo tại địa chỉ https://cloud.google.com/speech-to-text/docs/ )
·         Có kiến thức về JavaScript và sử dụng JavaScript trong lập trình ứng dụng (tham khảo tại địa chỉ https://www.w3schools.com/jS/default.asp )
·         Có kiến thức về NodeJs và đã xây dựng ứng dụng với NodeJs (tham khảo tại địa chỉ https://nodejs.org/en/ )
·         Có kiến thức về các sử dụng services api được cung cấp bởi các third party như Google, Microsoft
·         Có kiến thức về sử dụng các cloud serices như Google, Amazon, ….
Các tools và công nghệ được sử dụng trong bài viết
·         Visual Studio Code (địa chỉ tham khảo https://code.visualstudio.com/ )
·         Node 8.11
·         Npm 6.1 (địa chỉ tham khảo https://www.npmjs.com/package/npm )
Các bước thực hiện

Chúng ta sẽ sử dụng Twilio để làm hotline trong việc hỗ trợ gọi điện thoại kết hợp với Google Speech To Text để chuyển đổi từ giọng nói thành văn bản với mô hình như sau

·         Bước 1: Đăng ký tài khoản Twilio
Chúng ta truy cập Twilio tại địa chỉ https://www.twilio.com/
Sau khi truy cập được Twilio, chúng ta thực hiện tạo Project với tên bất kỳ. Trong bài này,chúng ta sẽ tạo project với tên Demo Twilio
Tiếp theo, chúng ta chọn vào mục PhoneNumber để mua số cho hệ thống
Sau khi đăng ký tài khoản Twilio thành công, chúng ta được cấp 15$ để sử dụng. Với mục đích tìm hiểu và ứng dụng việc xây dựng hotline để tiếp nhận cuộc gọi, chúng ta sẽ không phải mất tiền để mua các số điện thoại tại Việt Nam để làm hotline. Do vậy, trong bài viết này, chúng ta sẽ dùng số tiền được cấp để mua số điện thoại ở nước Mỹ. Chúng ta tiếp tục chọn mục Buy a Number và mua số
Click nút Search
Chúng ta chọn số bất kì và ấn Buy để mua. Click nút “Buy This Number” để hoàn tất công việc mua số.
Sau khi đã mua số thành công, chúng ta chọn mục Manage numbers. Đây là nơi để ta cấu hình việc nhận cuộc gọi và nhận tin nhắn để khi có cuộc gọi hoặc tin nhắn tới Twilio thì Twilio sẽ gửi request về url trong phần cấu hình.
Để có thể xử lý cuộc gọi và tin nhắn, chúng ta phải tạo server api và deploy lên server thật để Twilio có thể gửi request tới server cấu hình đó trong khi ứng dụng chạy.
Việc cấu hình và deploy server được hướng dẫn trong nội dung của bước tiếp theo của bài viết này
·         Bước 2: Cấu hình server để đón nhận và xử lý dữ liệu với NodeJS
Chúng ta thực hiện download tại địa chỉ https://nodejs.org/en/download/  và cài đặt NodeJS theo nội dung tham khảo tại địa chỉ https://nodejs.org/en/download/package-manager/ , https://securitytraning.com/setup-node-js-server-local-windows-linux-machine/ .
Việc thực hiện tạo project cơ bản với node js, tham khảo tại địa chỉ http://www.altifysoftware.com/developing-node-js-in-windows/
Chúng ta tạo project nodejs với câu lệnh terminal (cmd): $ npm init (chúng tôi đang thực hiện demo chụp hình trên máy có hệ điều hành MacOS, quí vị sẽ làm tương tự theo các nội dung hướng dẫn tham khảo trong phần link nêu trên đối với hệ điều hành Windows)
Sau đó chỉ cần ấn enter 9 lần, chúng ta sẽ có được project nodejs (việc làm này là để tạo file package.json, file chứa cấu hình của project và các dependencies. Khi chúng ta nhấn enter là chúng ta đang nhập giá trị mặc định trong quá trình tạo project)
Tiếp theo, chúng ta bắt đầu xây dựng api để đón nhận cuộc gọi và xử lý sau khi cuộc gọi kết thúc
Cụ thể, chúng ta sẽ tạo 2 api:
-          host/Voice:
o   Api này dùng để đón nhận khi có cuộc gọi tới, và trả dữ liệu về cho Twilio để Twilo biết sẽ xử lý cuộc gọi đó như thế nào.
o   twiml.play là phương thức dùng để phát file mp3 (chúng ta sẽ tận dụng phương thức này để xây dựng việc gửi lời chao và các hướng dẫn đến người gọi khi người dùng gọi đến số của số hotline)
o   twiml.record là phương thức để thực hiện ghi âm cuộc gọi khi người dùng kết nối được với số hot line và nói những yêu cầu theo hướng dẫn.
o   RecordURL là đường dẫn api mà Twilio sẽ gửi thông tin khi file ghi âm cuộc gọi đã ghi âm nội dung sau cuộc hội thoại để gửi sang nơi xử lý (ở đây chính là api host/Recorded)
-          host/Recorded:
o    Api dùng để đón nhận thông tin file ghi âm của cuộc gọi và phân tích từ giọng nói sang văn bản.
o   Đầu tiên, chúng ta cần tiếp cận cách thức Twilio xử lý, chúng ta tạm ghi console để xem thử Twilio sẽ trả những thông tin gì về cho chúng ta.
-          Lưu ý
o   Để tìm hiểu chi tiết hơn về cách giao tiếp với Twilio, quí vị có thể tham khảo tại địa chỉ: https://www.twilio.com/docs/voice
-          02 Api nêu trên được implement với tên url truy cập mapping tuần tự là “/Voice” và “/Recorded” như hình bên dưới

Nội dung tiếp theo là thông tin file package.json chứa cấu hình của Project và các dependencies
Sau những nội dung thực hiện ở trên, chúng ta đã hoàn thành server api để đón nhận cuộc gọi, nhưng để có thể giao tiếp được với twilio chúng ta cần phải có hosting server.
·         Bước 3: Tạo hosting server

Bài viết sẽ sử dụng Heroku liên kết với tài khoản github để chúng ta thực hiện cấu hình với mục đích mỗi khi chúng ta push source code lên github thì Heroku sẽ tự build và deploy.
Đầu tiên, chúng ta đăng ký tài khoản và tạo app tại đại chỉ https://www.heroku.com/ . Trong bài viết này, chúng ta tạo app có tên là twiliofpt.
Tiếp theo, chúng ta liên kết tài khoản github và chọn repository mà chúng ta muốn deploy
Cuối cùng, chúng ta bật chế độ auto deploy với branch xác định. Trong bài viết này, chúng ta sử dụng branch master
Chúng ta thực hiện deploy.
Sau khi deploy thành công, chúng ta gọi thử host bằng cách chọn Open app
Màn hình browser sẽ trình bày như bên dưới
Chúng ta tiếp tục sử dụng Postman (download tại địa chỉ https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop?hl=en và tham khảo chi tiết  cách sử dụng ứng dụng này tại https://www.getpostman.com/ ) để gọi thử api Voice thông qua việc gọi địa chỉ server kết hợp với gọi API voice với địa chỉ truy cập http://twiliofpt.herokuapp.com/Voice . Kết quả testing trên Postman sau khi gọi API sẽ được kết quả như sau:
Các nội dung api đã sẵn sàng cùng với địa chỉ server của chúng ta hiện nay là http://twiliofpt.herokuapp.com
·         Bước 4: Xử lý
Tiếp theo, chúng ta sẽ cấu hình Twilio để khi có cuộc gọi tới Twilio sẽ gửi request về api /Voice. Chúng ta quay lại trang Twilio và điền địa chỉ gọi API Voice (http://twiliofpt.herokuapp.com/Voice) mà chúng ta đã test ở bước trước đó vào phần “A Call Comes in” của mục “Voice & Fax”
Sau khi thực hiện xong việc cấu hình, chúng ta thực hiện test thử bằng cách dùng điện thoại gọi vào số mà chúng ta đã đăng ký từ bước 01  thực hiện kiểm tra console để xem dữ liệu mà Twilio trả về cho chúng ta.
Lưu ý
·         Chúng ta đang sử dụng trial account nên khi thực hiện cuộc gọi, chúng ta phải đợi Twilio đọc hết lời chào, sau đó ấn 1 phím bất kì thì cuộc gọi mới được chuyển tiếp tới số của chúng ta.
·         Chúng ta đang gọi đến số điện thoại của quốc gia Mỹ (mà chúng ta đã đăng ký ở bước 1) nên chi phí cuộc gọi mà chúng ta sẽ mất từ 1.500 VNĐ đến 3.000 VNĐ cho mỗi lần gọi.
·         Để xem dữ liệu đã được in ra console, chúng ta chọn More > View logs và chúng ta sẽ thấy kết quả như hình dưới:
Với dữ liệu mà Twilio trả về cho chúng ta, chúng ta nhận thấy dữ liệu đó có chứa trường RecordingUrl. Đây chính là url file record cuộc gọi. Đây là file để giúp chúng ta thực hiện chuyển đổi giọng nói được ghi âm trong file này thành văn bản.
Để thực hiện công việc chuyển đổi giọng nói (voice) trở thành văn bản (text), chúng ta tiến hành tạo app Google Speech To Text tại địa chỉ : https://cloud.google.com/speech-to-text/
Sau đó, chúng ta tạo Credentials bằng cách chọn create credentials > service account key như hình dưới:

Sau đó, chúng ta tải credential về project của chúng ta và lưu với tên “certificate.json”

Sau khi chúng ta đã đăng kí Google Speech to text service, chúng ta tiến hành implement việc chuyển đổi từ giọng nói thành văn bản.
-          Chúng ta thực tạo file SpeechToText.js với method getTextFromVoice
o   Parameter url là đường dẫn file record
-          Từ url truyền vào, chúng ta tải file xuống dưới dạng buffer
-          Sau khi tải xong, chúng ta gửi dữ liệu lên Speech To Text service để service này hỗ trợ trả về text đã được translate.
Hình phía dưới là đoạn code implememnt việc tải file record
Hình tiếp theo là đoạn code implement việc gửi file audio lên google speech to text service. Sau đó, chúng ta thực hiện đón nhận về đoạn text đã được translate (transcription).
Để rõ hơn việc cấu hình ghi khi gửi file, quí vị có thể tham khảo tại địa chỉ https://cloud.google.com/speech-to-text/docs/quickstart-client-libraries ­­
Cuối cùng, chúng ta sẽ chỉnh sửa api /Recorded cho hoàn chỉnh với nội dung
·         Lấy recordingUrl từ body request sau đó truyền vào method getTextFromVoice rồi ghi text ra console
Chúng ta bổ sung các dependencies vào tập tin package.json như sau:

Chúng ta đã hoàn thành xong việc xử lý và cung cấp các api hoàn chỉnh. Chúng ta tiến hành deploy và test thử bằng cách gọi điện thoại. Chúng ta được kết quả như sau:
Chúng ta đã hoàn tất được việc xử lý đón nhận cuộc gọi chuyển thành văn bản để ứng dụng vào việc xây dựng các dịch vụ hỗ trợ cần gọi điện thoại trực tiếp sử dụng các số hotline
Hy vọng chủ đề này sẽ giúp quý vị trong việc xây dựng ứng dụng với tiền đề tương tự mà chúng tôi đã đề cập ở mục đích của bài viết này.
Rất mong sự đóng góp của quí vị trong chủ đề này. Hẹn gặp quí vị ở chủ đề khác

1 nhận xét: