Tạo chatbot đơn giản trong Laravel với BotMan

995

Người viết: Thành Nguyễn

Chatbot là một chương trình máy tính tương tác với người dùng bằng ngôn ngữ tự nhiên dưới một giao diện đơn giản, âm thanh hoặc dưới dạng tin nhắn. Chatbot giúp người dùng có thể tương tác với website cuả bạn một cách thân thiện hơn.

BotMan là gì?

BotMan là 1 framework agnostic của PHP Chatbot và được thiết kế để đơn giản hóa việt phát triển các botchat trên nhiều nền tảng messaging khác nhau như Slack, Telegram, Microsoft Bot Framework, Nexmo, HipChat, Facebook Messenger, WeChat…

Trong IT, agnostic là 1 thuật ngữ dùng để đề cập đến 1 cái gì đó có thể tương tác giữa nhiều hệ thống khác nhau.

BotMan Studio là gì?

BotMan Studio là 1 package của BotMan và Laravel cung cấp các công cụ để kiểm tra, triển khai các trình điều khiển web và các công cụ hổ trợ cài đặt và cấu hình dễ dàng hơn. BotMan Studio cung cấp một danh sách drivers giúp bạn có thể tương tác với chatbot thông qua Facebook Messenger, slack …

Cài đặt BotMan

Yêu cầu

Đang sử dụng phiên bản PHP >= 7.1.3

Đã cài đặt Laravel global thông qua composer.

Cài đặt trình cài đặt BotMan thông qua composer.

Tạo BotMan project

Tạo project Botman và laravel sử dụng composer

Sau khi chạy xong thì 1 thư mục mới tên là TestBotMan bao gồm các thành phần cần thiết để làm việc với BotMan Studio và Laravel.

Chạy thử Chatbot

Sau khi cài đặt thành công, bạn có thể dùng thử ngay ứng dụng chatbot bằng cách vào thư mục mà bạn đã tạo project. Mở terminal lên và chạy lệnh sau để start server php.

Sau đó bạn vào trình duyệt và gõ địa chỉ local http://127.0.0.1:8000 và sẽ thấy màn hình sau xuất hiện. 

BotMan Studio cung cấp BotMan web driver cho phép bạn phát triển và kiểm tra chatbot cục bộ đó là tinker. Bạn có thể sử dụng tinker bằng cách truy cập vào địa chỉ http://127.0.0.1:8000/botman/tinker, và sẽ thấy một khung chat đơn giản viết bằng Vuejs giúp bạn có thể giao tiếp ngay với bot của minh. Thử gõ hi hoặc start conversation vào ô input bạn sẽ thấy kết quả sau. 

Hearing Messages

Mở file routes/botman.php ra bạn sẽ thấy đoạn code sau.

Basic Commands

Chatbot sử dụng cú pháp

để lắng nghe đoạn message mà bạn gửi đến và thực hiện 1 hành động nào đó. Bạn có thể chỉ định các lệnh này bằng cách cung cấp một chuỗi mà chatbot của bạn sẽ lắng nghe, theo sau là một chuỗi các hoạt động được thực thi khi message gửi đến khớp với chuỗi mà bạn cung cấp. Ở đoạn code trên, khi message nhập vào là Hi thì sẽ được chatbot lắng nghe và trả lời Hello.

Ngoài ra, bạn cũng có thể tạo các controller và gọi các phương thức trong đó tương tự như route/web của Laravel

Command parameters

Đôi khi bạn sẽ cần phải nắm bắt các phần thông tin mà người dùng bot của bạn cung cấp. Ví dụ như tên người dùng…

Khi người dùng nhập vào call me Thành thì chatbot sẽ trả lời là Your name is: Thành.

Dĩ nhiên là bạn có thể định nghĩa nhiều tham số.

Các tham số luôn luôn nằm trong {} và chỉ bao gồm các kí tự chữ cái.

Matching Regular Expressions

Nếu các command parameters không đủ linh hoạt thì có thể sử dụng biểu thức chính quy.

Ví dụ, bạn chỉ muốn bot của mình lắng nghe các chữ số.

Cũng giống như command parameters, mỗi nhóm Regular Expressions sẽ được xử lý riêng. Vì vậy, bạn phải chia Regular Expressions thành các nhóm riêng biệt với nhau bằng cặp dấu ().

Tạo một conversation đơn giản.

Khi sử dụng chatbot không ai lại muốn sử dụng với các đoạn chat đơn lẻ như trên mà thay vào đó bạn sẽ sử dụng những đoạn hội thoại giúp người dùng có thể giao tiếp với chatbot thân thiện hơn. BotMan Studio cung cấp conversations giúp làm được điều đó một cách dễ dàng.

Bắt đầu Conversation

Bạn có thể bắt đầu conversation của mình bằng cách gọi phương thức startConversation trong hàm callback.

Sau đó vào thư mục app\Conversations và tạo file DemoConversation.php và dán đoạn code sau vào.

Tất cả các bot conversations muốn sử dụng được thì cần phải extent từ abstract Conversation và implements phương thức run. Doạn code trên tạo 1 conversation đơn giản để thu thập tên và email người dùng

Khi bạn xây dựng nhiều cuộc hội thoại hơn, có lẽ bạn cũng muốn kết nối chúng với nhau, bạn có thể bắt đầu một conversation khác bằng cách sử dụng hàm startConversation.

Asking Questions

BotMan cung cấp cho bạn hai cách để đặt câu hỏi cho người dùng. Sử dụng chuỗi

Sử dụng Question object

Có thể sử dụng các Question object để tạo các tin nhắn có chứa các button để tương tác với người dùng. Khi truyền Question object vào trong phương thức ask() thì đối tượng Answer được trả về sẽ có 1 phương thức tên là isInteractiveMessageReply() để phát hiện khi người dùng nhập tin nhắn hoặc tương tác với các button tạo bởi Question.

Asking For Images, Videos, Audio or Location

Với botman thì bạn củng có thể dễ dàng để bot của minh nhận Images, Videos, Audio hoặc Location.

Có thể sử dụng phương thức askForImages để hỏi người dùng bot của bạn một câu hỏi và chỉ chấp nhận một hoặc nhiều hình ảnh làm câu trả lời.

Hàm callback lại sẽ nhận được một mảng chứa tất cả hình ảnh mà người dùng đã gửi cho bot. Theo mặc định, nếu người dùng không gửi lên hình ảnh hợp lệ, câu hỏi sẽ được lặp lại.

Nhưng bạn cũng có thể cấu hình cho bot nhận thêm message string bằng cách thêm một hàm callback làm tham số thứ 3.

Các phương thức askForVideosaskForAudioaskForLocation củng tương tự như phương thức askForImages.

Bài này mình chỉ giới thiệu cách sử dụng BotMan trong laravel và 1 vài cú pháp đơn giản. Bài sau mình sẽ hướng dẩn cách sử dụng Facebook Message để kết nối chatbot của bạn với Facebook Message.

Tài liệu tham khảo: https://botman.io/2.0/welcome

Techtalk via Viblo

CHIA SẺ