Tạo Skype Bot - Microsoft Bot Framework với Nodejs

Trong 1 dự án gần đây thì khách hàng có nhu cầu tạo 1 con skype bot để forward các tin nhắn giữa các user trong hệ thống. Vào tìm hiểu thì mới thấy có vẻ gần đây Microsoft khá đầu tư để phát triển cho con bot của mình để bằng bạn bằng bè (Facebook chẳng hạn). Sau đây mình sẽ hướng dẫn 1 số bước cở bản để tạo 1 con Skype Bot.

Bước 1: Cài đặt môi trường

Microsoft Bot Framework hỗ trợ 2 SDK mặc định là .NET và Node.js, ngoài ra thì Microsoft còn cung cấp các REST APIs. Trong bài viết này thì mình sử dụng Node.js nên việc đầu tiên cần làm là setup Node.js. Nếu trên máy chưa có, truy cập vào https://nodejs.org làm theo hướng dẫn để cài đặt. Sau khi cài đặt xong, kiểm tra xem thành công chưa và check version Node.js

Trong quá trình để dev cũng như test ở local, ta cần public 1 đường link ra bên ngoài để Skype có thể gửi message, action ... đến local (khi deploy trên server thì ko cần), ở đây chúng ta sẽ sử dụng Ngrok.
Để setup Ngrok, chúng ta truy cập vào https://ngrok.com, chọn phiên bản phù hợp với máy của mình. Sau khi cài đặt thành công, chúng ta sẽ check thử với lệnh ngrok http 8080. Kết quả nhận được :

Ở đây chúng ta có 2 đường link ở dạng http và https https://80a5cc84.ngrok.io là đường link có thể truy cập từ bên ngoài đến đia chỉ localhost:8080 trên pc của chúng ta. Các bước chuẩn bị đến đây là hoàn tất. Chúng ta sẽ sang bước tiếp theo

Bước 2: Register 1 con bot với Microsoft

Để register 1 con bot, chúng ta sẽ truy cập vào https://dev.botframework.com, login bằng tài khoản skype. Sau đó chọn My bots và Create a bot.

Ở đây, tài khoản đang sử dụng đã có 1 con bot Haposoft được tạo từ trước, chúng ta sẽ cùng tạo thêm 1 con bot và cung cấp các thông tin bắt buộc mà Microsoft yêu cầu

Các thôn tin cơ bản như icon, name, ... thì có 2 input chúng ta cần chú ý đó là Messaging endpointapp ID

Messaging endpoint là nơi lưu đường dẫn public ra bên ngoài của con Bot để Microsoft có thể push các message cũng như các action liên quan cho Bot. Ở bước 1 chúng ta đã setup xong Ngrok, đây chính là lúc chúng ta cần dùng đến nó. Chúng ta đã public thành công 2 đường dẫn ra bên ngoài, chúng ta sẽ sử dụng đường dẫn https (bắt buộc), sau này khi deploy chúng ta cũng cần chú ý phải setup cả https nữa nhé.
Đối với App ID chúng ta sẽ tạo 1 Microsoft App ID sau đó lấy ID để nhập cung cấp cho Microsoft

Sau khi register thành công BotBot, chúng ta sẽ thấy ở đây Microsoft cung cấp rất thêm nhiều chanel như Facebook Messenger, Bing, Cortana, Slack ...

Bước 3: Setup Bot

Chúng ta sẽ tạo 1 thư mục mới, dùng lệnh npm init để gen ra file package.json cho Project skype bot.

Tạo file index.js để chứa code chính của project. Chúng ta sẽ lần lượt add 2 package:
-restify bằng lệnh npm install --save restify
-botbuilder bằng lệnh npm install --save botbuilder

Bước 4: Xử lý code

Viết code xử lý cho con bot trong file index.js

var restify = require('restify');
var builder = require('botbuilder');

var server = restify.createServer();
server.listen(process.env.port || process.env.PORT || 8080, function () {
  console.log('%s listening to %s', server.name, server.url);
});


var connector = new builder.ChatConnector({
  appId: '7176066f-21d8-4945-b110-b6e3dab0a36f',
  appPassword: 'osxxp44zKu77uWSu32nv5bb'
});

var bot = new builder.UniversalBot(connector);

// Listen for messages from users
server.post('/api/messages', connector.listen());

bot.on('contactRelationUpdate', function (message) {
  if (message.action === 'add') {
    var name = message.user ? message.user.name : null;
    var reply = new builder.Message()
      .address(message.address)
      .text("Xin chào %s... Cảm ơn vì đã kết bạn với với tôi. Moa moa ...", name || 'there');
    bot.send(reply);
  }
});

String.prototype.contains = function (content) {
  return this.indexOf(content) !== -1;
}

bot.dialog('/', function (session) {
  if (session.message.text.indexOf('Haposoft') !== -1) {
    bot.send(new builder.Message()
      .text('Đừng rời xa tôi, vì tôi lỡ yêu người mất rồi !')
      .address(session.message.address));
  } else {
    bot.send(new builder.Message()
      .text('Chúng ta không thuộc về nhau !!!')
      .address(session.message.address));
  }
});

Chạy file index.js bằng node :

Add con bot chúng ta vừa tạo và test thử thôi:

Đến đây chúng ta đã tạo xong 1 con bot và đã tương tác với message cơ bản với nó. Khá đơn giản phải không !
Ngoài việc tương tác bằng các message, còn rất nhiều các options khác nữa, các bạn có thể tự tìm hiểu nhé.