슬랙과 웹상의 채팅/MS를 연결해 조심스럽게 만든 bot 제작 프레임워크'Bot Builder'를 사용해 봤습니다!

며칠 전에 Bot Builder를 터치해보니 어떤 느낌이었나요?이런 기사를 Qita한테 줬어요.
이 Microsoft Bot Framework는 공식 문서에 이렇게 쓰여 있습니다.

http://docs.botframework.com/
단순하게 봇(SDK)을 만들 수 있다'는 것은 전체 프레임의 극소수 부분에 불과하며, 여러 채널을 빈틈없이 연결할 수 있다는 점도 강점이다.
이게 있으면'프로그래밍bot'에 대한 보답이 유난히 커지겠지!
이번에는 이 "Bot Connector"를 해보고 싶습니다.
애플리케이션 등록
먼저, Botframework에서 응용 프로그램 등록을 해야 합니다(app id, secret 미리 취득).

  • 열기https://dev.botframework.com/#/bots.필요하면 여기서 MS 계정
  • 에 로그인할 수 있습니다.
  • 로그인 후 bot에 로그인할 수 있기 때문에 각종 항목을 채워야 합니다
  • Endpoint, app id, secret을 확인하십시오.
  • Endpoint는 채팅을 받을 때 보내는 내용(hook)을 받기 전에 전역에 접근해야 한다.
  • 문서를 보고 "Azure에서 접근할 수 있다"는 요구 사항을 기재
  • ※ 이미지는 localhost지만, 이것이라면 움직이지 않습니다.

  • Hello World
    바로 bot이라고 써서 연결해 보세요!
    웹 채팅 슬랙에 연결해 보았습니다.
    인터넷 채팅, Bot Connector 측에서 iframe을 준비했기 때문에 인터페이스를 만들 필요가 없습니다!
    채널 연결 및 활성화
    웹 채팅 사용
    bot의 설정 화면에 연결된 채널의 일람을 클릭할 수 있기 때문에 웹을 선택합니다.

    이렇게 웹 채팅을 활용한 준비가 완료되었습니다.
    그런 다음 표시된 "Embed template"를 웹 페이지에 설정합니다.
    ※ iframe의 src 중 YOUR_SECRET_HERE
    Slack 사용
    Slack도 같은 주소 완성 w
    (Slack 측) Token, secret을 가져올 때 "Add To Slack"단추가 표시됩니다. 사용하십시오.
    코드
    http://docs.botframework.com/connector/libraries/node 샘플이 있는데 이를 바탕으로 앵무새 학설형bot을 제작한다.
    var restify = require('restify');
    var msRest = require('ms-rest');
    var connector = require('botconnector');
    
    var server = restify.createServer();
    server.use(restify.authorizationParser());
    server.use(restify.bodyParser());
    
    /*
     * AppSecretには「Primary app secret」の値を入れればOKです!
     */
    var appId = process.env.appId || 'your appId';
    var appSecret = process.env.appSecret || 'your appSecret';
    var credentials = new msRest.BasicAuthenticationCredentials(appId, appSecret);
    
    /*
     * サンプル中とのコードと異なる部分。
     * 第2引数に「リクエストの認証」を入れていますが、EndpointがHTTPの場合は認証が渡ってきません。
     */
    server.post('/v1/messages', function (req, res) {
        var msg = req.body;
        if (/^delay/i.test(msg.text)) {
            setTimeout(function () {
                var reply = { 
                    replyToMessageId: msg.id,
                    to: msg.from,
                    from: msg.to,
                    text: 'I heard "' + msg.text.substring(6) + '"'
                };
                sendMessage(reply);
            }, 5000);
            res.send({ text: 'ok... sending reply in 5 seconds.' })
        } else {
            res.send({ text: 'I heard "' + msg.text + '". Say "delay {msg}" to send with a 5 second delay.' })
        }
    });
    
    server.listen(process.env.PORT || 8080, function () {
        console.log('%s listening to %s', server.name, server.url); 
    });
    
    function sendMessage(msg, cb) {
        var client = new connector(credentials);
        var options = { customHeaders: {'Ocp-Apim-Subscription-Key': credentials.password}};
        client.messages.sendMessage(msg, options, function (err, result, request, response) {
            if (!err && response && response.statusCode >= 400) {
                err = new Error('Message rejected with "' + response.statusMessage + '"');
            }
            if (cb) {
                cb(err);
            }
        });
    }
    
    큰 변경은 없었으나 접수 승인 처리는 생략했다.
    단점을 HTTPS로 설정할 때 App-ID: App Secret을 통해 Basic 인증(※ 검증되지 않음>>)을 받을 수 있으며, 그렇지 않으면 Request를 할 수 없습니다.autorization에는 가격이 없습니다.따라서 모든 인증은 실패할 것이다.
  • 참조1·공식: http://docs.botframework.com/connector/authorization/#navtitle
  • 참조2···[StackOverflow: http://stackoverflow.com/questions/36338995/microsoft-bot-frameworks-verifybotframework-always-returning-forbidden/36339365
  • 실제 동작을 확인하다
    스크립트에서 환경 변수에서 appId/appSecret을 호출하는 중입니다. 이것을 더해서 실행하십시오sh
    appId=hogehoge appSecret=fugafuga node bot.js
    잘 작동하면 아래의 인상에 따라 움직일 수 있다.
    나는 소스 하나로 여러 채널에bot을 간단하게 담을 수 있다고 생각한다
    인터넷 채팅 프레젠테이션

    Slack 채팅 데모

    Bot Builder 활용
    앞에서 언급한 Bot Builder그 1·두 번째
    실제로 이 "Bot Connector"를 기반으로 하는 Client가 있습니다.( 공식: BotConnectorBot )
    따라서 Dialog를 사용하여 이 기능을 실현하고 여러 채널에 간단하게 연결할 수 있다.
    예를 들어 아래 코드에서'인사 후 답장 안녕'bot이 동작한다.
    var restify = require('restify');
    var builder = require('botbuilder');
    
    var bot = new builder.BotConnectorBot({ appId: process.env.appId, appSecret: process.env.appSecret});
    var dialog   = new builder.CommandDialog();
    
    dialog.matches(['Hi', 'Hello', 'こんにちは'], function (session) {
      session.send('こんにちは');
    });
    bot.add('/', dialog);
    
    var server = restify.createServer();
    server.post('/v1/messages', bot.listen());
    server.listen(process.env.port || 8080, function () {
        console.log('%s listening to %s', server.name, server.url);
    });
    
    감상
    그리고 "bot은 굉장히 쉽게 움직일 수 있어요"라는 소감도 있고요.
    다만, 현재라면 문서가 좋지 않은 인상을 주고 고통스럽다.
    아직 만질 수 없는 실감이 나기 때문에 조금만 파고 놀아요~ 이렇게 당분간 계속할 예정입니다!
    봇 신나.

    좋은 웹페이지 즐겨찾기