Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Building Bots in Js

Building Bots in Js

A lighting talk to help solve the national epidemic of Atrocious Tie Length using the technology of a bot.

Summarizes how to get started building bots with Botkit.

Jamie Wright
PRO

May 08, 2017
Tweet

More Decks by Jamie Wright

Other Decks in Programming

Transcript

  1. JavaScript
    with
    BuIlDiNg

    View Slide

  2. JavaScript
    with
    BuIlDiNg

    View Slide

  3. CoMmEnCe Eye RoLlInG
    JavaScript
    with
    BuIlDiNg

    View Slide

  4. CoMmEnCe Eye RoLlInG
    JavaScript
    with
    BuIlDiNg

    View Slide

  5. CoMmEnCe Eye RoLlInG

    View Slide

  6. CoMmEnCe Eye RoLlInG

    View Slide

  7. ThE InTeRnEt Is
    ReAdY AgAiN

    View Slide

  8. ThE InTeRnEt Is
    ReAdY AgAiN

    View Slide

  9. ThE InTeRnEt Is
    ReAdY AgAiN
    2 eVeNtS

    View Slide

  10. ThE InTeRnEt Is
    ReAdY AgAiN
    2 eVeNtS

    View Slide

  11. ReAdY AgAiN
    2 eVeNtS

    View Slide

  12. ReAdY AgAiN
    2 eVeNtS

    View Slide

  13. View Slide

  14. View Slide

  15. View Slide

  16. AtRoCiOuS TiE LeNgTh

    View Slide

  17. AtRoCiOuS TiE LeNgTh

    View Slide

  18. AtRoCiOuS TiE LeNgTh

    View Slide

  19. AtRoCiOuS TiE LeNgTh

    View Slide

  20. View Slide

  21. View Slide

  22. View Slide

  23. View Slide

  24. View Slide

  25. View Slide

  26. StAnDaRd TiE LeNgTh

    View Slide

  27. StAnDaRd TiE LeNgTh

    View Slide

  28. StAnDaRd TiE LeNgTh
    58" Un-TiEd

    View Slide

  29. StAnDaRd TiE LeNgTh
    58" Un-TiEd

    View Slide

  30. StAnDaRd TiE LeNgTh
    58" Un-TiEd
    6'2"

    View Slide

  31. StAnDaRd TiE LeNgTh
    58" Un-TiEd
    6'2"

    View Slide

  32. StAnDaRd TiE LeNgTh
    58" Un-TiEd
    6'2" 18"

    View Slide

  33. StAnDaRd TiE LeNgTh
    58" Un-TiEd
    6'2" 18"

    View Slide

  34. StAnDaRd TiE LeNgTh
    58" Un-TiEd
    6'2" 18" 22"

    View Slide

  35. StAnDaRd TiE LeNgTh
    58" Un-TiEd
    6'2" 18" 22"

    View Slide

  36. StAnDaRd TiE LeNgTh
    58" Un-TiEd
    6'2" 18" 22"

    View Slide

  37. StAnDaRd TiE LeNgTh
    58" Un-TiEd
    6'2" 18" 22"

    View Slide

  38. StAnDaRd TiE LeNgTh
    58" Un-TiEd
    6'2" 18" 22"

    View Slide

  39. 58" Un-TiEd
    6'2" 18" 22"
    68"

    View Slide

  40. StAnDaRd LeNgTh TiE
    DeLiVeRy As A SeRvIcE

    View Slide

  41. AmAzInG tIeS, VeRy, vErY
    sTaNdArD, eVeRyOnE iS
    sAyInG tHeSe tIeS aRe
    tReMeNdOuS, lLc

    View Slide

  42. AmAzInG tIeS, VeRy, vErY
    sTaNdArD, eVeRyOnE iS
    sAyInG tHeSe tIeS aRe
    tReMeNdOuS, lLc™

    View Slide

  43. AtVvSeIsTtAt, LlC.

    View Slide

  44. AtVvSeIsTtAt-bOt

    View Slide

  45. BoTkIt
    gItHuB.cOm/hOwDyAi/bOtKiT

    View Slide

  46. > npm install --save botkit

    View Slide

  47. // package.json
    {
    // ...
    "main": "bot.js",
    "dependencies": {
    "botkit": "^0.5"
    }
    }

    View Slide

  48. // bot.js
    var Botkit = require('botkit');
    var controller = Botkit.slackbot({
    clientId: process.env.clientId,
    clientSecret: process.env.cSecret,
    scopes: ['bot']
    });

    View Slide

  49. // bot.js
    var Botkit = require('botkit');
    var controller = Botkit.slackbot({
    clientId: process.env.clientId,
    clientSecret: process.env.cSecret,
    scopes: ['bot']
    });

    View Slide

  50. // bot.js
    var Botkit = require('botkit');
    var controller = Botkit.slackbot({
    clientId: process.env.clientId,
    clientSecret: process.env.cSecret,
    scopes: ['bot']
    });

    View Slide

  51. // bot.js
    var Botkit = require('botkit');
    var controller = Botkit.slackbot({
    clientId: process.env.clientId,
    clientSecret: process.env.cSecret,
    scopes: ['bot']
    });

    View Slide

  52. // bot.js
    var Botkit = require('botkit');
    var controller = Botkit.slackbot({
    clientId: process.env.clientId,
    clientSecret: process.env.cSecret,
    scopes: ['bot']
    });

    View Slide

  53. // bot.js
    controller.spawn().startRTM(function
    (error) {
    if (error) {
    // Handle web socket issues
    // Restart when possible
    }
    });

    View Slide

  54. // bot.js
    controller.spawn().startRTM(function
    (error) {
    if (error) {
    // Handle web socket issues
    // Restart when possible
    }
    });

    View Slide

  55. // bot.js
    controller.hears(['I want a tie'],
    ['direct_message'],
    function(bot, message) {
    bot.say('I hope you want it in standard length!');
    });

    View Slide

  56. // bot.js
    controller.hears(['I want a tie'],
    ['direct_message'],
    function(bot, message) {
    bot.say('I hope you want it in standard length!');
    });

    View Slide

  57. // bot.js
    // ..
    controller.hears(['I want a tie'], ['direct_message'], function(bot, message) {
    bot.startConversation(message, askColor);
    });
    askColor = function(response, convo) {
    convo.ask('What color do you want?', function(response, convo) {
    storeColor(response.text);
    convo.say('Got it. Tremendous color.');
    askDelivery(response, convo);
    convo.next();
    });
    }
    askDelivery = function(response, convo) {
    convo.ask('Where do you want this shipped?', function(response, convo) {
    ensureNotMexico(response.text, function() {
    convo.say('Consider it done');
    convo.next();
    });
    });
    }

    View Slide

  58. StAnDaRd LeNgTh TiE
    DeLiVeRy As A SeRvIcE

    View Slide

  59. StAnDaRd LeNgTh TiE
    DeLiVeRy As A SeRvIcE
    A.I. PoWeReD

    View Slide

  60. StAnDaRd LeNgTh TiE
    DeLiVeRy As A SeRvIcE
    A.I. PoWeReD™

    View Slide

  61. NaTuRaL LaNgUaGe
    PrOcEsSiNg

    View Slide

  62. NaTuRaL LaNgUaGe
    PrOcEsSiNg

    View Slide

  63. NaTuRaL LaNgUaGe
    PrOcEsSiNg
    I want a tie

    View Slide

  64. NaTuRaL LaNgUaGe
    PrOcEsSiNg
    I want a tie

    View Slide

  65. NaTuRaL LaNgUaGe
    PrOcEsSiNg
    I want a tie
    I need a neck tie

    View Slide

  66. I need a neck tie

    View Slide

  67. I need a neck tie
    NlP

    View Slide

  68. I need a neck tie
    NlP
    [{
    "intent": "buy",
    }]

    View Slide

  69. I need a neck tie
    NlP
    [{
    "intent": "buy",
    }]
    "entities": [
    "action": "need",
    "item": "tie"
    ],

    View Slide

  70. I need a neck tie
    NlP
    [{
    "intent": "buy",
    }]
    "entities": [
    "action": "need",
    "item": "tie"
    ],
    "confidence": "0.82"

    View Slide

  71. > npm install --save api-ai-botkit
    ApI.Ai

    View Slide

  72. // bot.js
    const apiaibotkit = require('api-ai-botkit');
    const apiai =
    apiaibotkit(process.env.apiAiToken);
    ApI.Ai

    View Slide

  73. // bot.js
    controller.hears('.*',
    ['direct_message'], function(bot,
    message) {
    apiai.process(message, bot);
    });
    ApI.Ai

    View Slide

  74. // bot.js
    controller.hears('.*',
    ['direct_message'], function(bot,
    message) {
    apiai.process(message, bot);
    });
    ApI.Ai

    View Slide

  75. // bot.js
    apiai.action('buy', function(message, response,
    bot) {
    var responseText =
    response.result.fulfillment.speech;
    bot.reply(message, responseText);
    bot.startConversation(message, askColor);
    });
    ApI.Ai

    View Slide

  76. // bot.js
    apiai.action('buy', function(message, response,
    bot) {
    var responseText =
    response.result.fulfillment.speech;
    bot.reply(message, responseText);
    bot.startConversation(message, askColor);
    });
    ApI.Ai

    View Slide

  77. StAnDaRd LeNgTh TiE
    DeLiVeRy As A SeRvIcE
    A.I. PoWeReD™

    View Slide

  78. View Slide

  79. View Slide

  80. View Slide

  81. View Slide

  82. @jWrIgHt

    View Slide