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ọi
và thự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 và
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ó đượ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
Cám ơn anh ! Bài viết hay và rất bổ ích !
Trả lờiXóa