Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Dr. Strangelove or: How I Learned to Stop Worrying and Love the Serverless Chatbots - HolyJS 2016
Search
Slobodan Stojanović
December 11, 2016
Technology
1
240
Dr. Strangelove or: How I Learned to Stop Worrying and Love the Serverless Chatbots - HolyJS 2016
Presentation from HolyJS 2016 conference in Moscow
Slobodan Stojanović
December 11, 2016
Tweet
Share
More Decks by Slobodan Stojanović
See All by Slobodan Stojanović
Advanced GraphQL Architectures: Serverless Event Sourcing and CQRS @ ReactSummit
slobodan
0
140
CofounderGPT - Can an AI be a better co-founder than a human?
slobodan
0
110
From 1 to 201 Lambda functions in production: Evolving a serverless startup architecture
slobodan
0
250
Evolving a serverless startup architecture - ArmadaJS 2022
slobodan
2
440
Serverless Office Hours | Serverless for Startups
slobodan
0
190
From 1 to 101 Lambda Functions in Production: Evolving a Serverless Architecture - Node Congress 2021
slobodan
1
300
Writing Testable Serverless Apps Using Hexagonal Architecture @ TestJS Summit 2021
slobodan
0
58
The Power of Serverless GraphQL with AppSync
slobodan
0
290
Writing testable serverless apps using hexagonal architecture with Hexagonal Architecture
slobodan
1
250
Other Decks in Technology
See All in Technology
大規模なアジャイル開発の現場と技術負債 / Technical Debt
yoshiitaka
20
4k
エバンジェリスト活動を7年やってきて見えてきた、コミュニティとエバンジェリストの関係
soracom
PRO
1
200
大規模データとの戦い方
knih
1
150
8週連続ウェビナー_イチから学ぶFivetran
cmsuzu
0
160
沒想過的前端錯誤處理可能比你有做的還多
line_developers_tw
PRO
0
1.9k
オーティファイ会社紹介資料 / Autify Company Deck
autifyhq
7
100k
KubeCon EU: Unlocking new Platform Experiences with Open Interfaces
salaboy
1
370
オブジェクト指向宗教史
tanakahisateru
13
11k
GraphQLに入門してみた
chiroruxx
2
110
長文から長文を生成するLLMツールをオープンソースで作ってみた。
tomohisa
2
140
OCI Data Integration技術情報 / ocidi_technical_jp
oracle4engineer
PRO
1
1.5k
初心者が行く!サーバレスWebアプリ開発の道
nagaharutogawa
0
440
Featured
See All Featured
Build your cross-platform service in a week with App Engine
jlugia
223
17k
Writing Fast Ruby
sferik
619
59k
Embracing the Ebb and Flow
colly
78
4.1k
Web development in the modern age
philhawksworth
201
10k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
153
14k
How STYLIGHT went responsive
nonsquared
92
4.7k
KATA
mclloyd
14
11k
Designing the Hi-DPI Web
ddemaree
275
33k
WebSockets: Embracing the real-time Web
robhawkes
59
6.9k
The Invisible Customer
myddelton
114
12k
GraphQLの誤解/rethinking-graphql
sonatard
48
9.1k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
28
5.9k
Transcript
DR.STRANGELOVE OR: HOW I LEARNED TO STOP WORRYING AND LOVE
THE SERVERLESS CHATBOTS
#holyjs @slobodan_ I am Slobodan Stojanović CTO of Cloud Horizon
and JS Belgrade Meetup organizer github.com/stojanovic twitter.com/slobodan_
#holyjs @slobodan_ Walt Disney American entrepreneur, cartoonist, animator…
#holyjs @slobodan_ CHATBOTS
#holyjs @slobodan_ IDEA IS NOT NEW
#holyjs @slobodan_ • Turing Test (1950) • Eliza (1966) •
Parry (1972) • A.L.I.C.E. (1995) • Jabberwacky (2005) • Slack Bot (2014) • Telegram and FB Bots (2015) • Many others (2016)
#holyjs @slobodan_ SERVERLESS
#holyjs @slobodan_ FUNCTION AS A SERVICE
#holyjs @slobodan_ • AWS Lambda (2014) • Google Cloud Functions
(2016) • IBM OpenWhisk (2016) • Microsoft Azure Functions (2016)
#holyjs @slobodan_ SERVERLESS + CHATBOTS
#holyjs @slobodan_ Whitney Houston American singer
#holyjs @slobodan_
#holyjs @slobodan_
#holyjs @slobodan_
#holyjs @slobodan_
#holyjs @slobodan_
#holyjs @slobodan_ MEET CLAUDIA BOT BUILDER
#holyjs @slobodan_ var botBuilder = require('claudia-bot-builder') module.exports = botBuilder(function (message)
{ return 'Thanks for sending ' + message.text })
#holyjs @slobodan_ OR WITH ES6
#holyjs @slobodan_ const botBuilder = require('claudia-bot-builder') module.exports = botBuilder(message =>
`Thanks for sending: ${message.text}` )
#holyjs @slobodan_
#holyjs @slobodan_
#holyjs @slobodan_ LET’S BUILD A TELEGRAM BOT FOR #HOLYJS
#holyjs @slobodan_ Edgar Allan Poe American writer
#holyjs @slobodan_ WITH $0.00 BUDGET
#holyjs @slobodan_ Albert Einstein German-born theoretical physicist
#holyjs @slobodan_ PART 1. SETUP AWS
#holyjs @slobodan_ Nikola Tesla Serbian American inventor
#holyjs @slobodan_ THE ONLY PREREQUISITES FOR CLAUDIA BOT BUILDER ARE
AN AWS ACCOUNT AND NODE.JS
#holyjs @slobodan_ WHAT DO WE NEED?
#holyjs @slobodan_ (NEW) AWS USER WITH FOLLOWING PERMISSIONS: • AWS
Lambda full access • IAM full access (optional) • API Gateway Administrator • API Gateway push to CloudWatch • Cloud Watch full access (optional)
#holyjs @slobodan_ LET’S SEE
#holyjs @slobodan_
#holyjs @slobodan_ PART 2. BOTFATHER
#holyjs @slobodan_ Sigmund Freud Austrian neurologist
#holyjs @slobodan_ THERE’S A TELEGRAM BOT THAT HELPS YOU TO
CREATE TELEGRAM BOTS!
#holyjs @slobodan_
#holyjs @slobodan_
#holyjs @slobodan_ PART 3. SIMPLE BOT
#holyjs @slobodan_ Isaac Newton English physicist and mathematician
#holyjs @slobodan_ BEFORE WE BEGIN WE NEED TO INSTALL CLAUDIA
https://claudiajs.com
#holyjs @slobodan_ $ npm install claudia -g
#holyjs @slobodan_ const botBuilder = require('claudia-bot-builder') module.exports = botBuilder(message =>
{ return 'Hello from HolyJS bot! You sent: ' + message.text }, { platforms: ['telegram'] }) bot.js file:
#holyjs @slobodan_ $ npm init; $ npm i claudia-bot-builder -S
#holyjs @slobodan_ $ claudia create\ --region eu-central-1\ --api-module bot\ --configure-telegram-bot
#holyjs @slobodan_
#holyjs @slobodan_ PART 4. DEBUGGING
#holyjs @slobodan_ George Orwell English novelist
#holyjs @slobodan_ const botBuilder = require('claudia-bot-builder') module.exports = botBuilder(message =>
{ console.log(message) return 'Hello from HolyJS bot! You sent: ' + message.text }, { platforms: ['telegram'] }) bot.js file:
#holyjs @slobodan_ $ claudia update
#holyjs @slobodan_
#holyjs @slobodan_ MESSAGE OBJECT
#holyjs @slobodan_ • text • sender • type • originalRequest
• postback
#holyjs @slobodan_ PART 5. SEND MESSAGE / REPLY
#holyjs @slobodan_ William Shakespeare English poet
#holyjs @slobodan_ const botBuilder = require('claudia-bot-builder') module.exports = botBuilder(message =>
{ console.log(message) return 'Hello from HolyJS bot! You sent: ' + message.text }, { platforms: ['telegram'] }) bot.js file:
#holyjs @slobodan_ SIMPLY RETURN TO REPLY
#holyjs @slobodan_ BUT WHAT ABOUT ASYNC REPLIES?
#holyjs @slobodan_ const botBuilder = require('claudia-bot-builder') module.exports = botBuilder(message =>
{ return new Promise(resolve => { setTimeout(() => { resolve('Delayed reply ;)') }, 2000) }) }, { platforms: ['telegram'] }) bot.js file:
#holyjs @slobodan_ IS IT POSSIBLE TO REPLY WITH MULTIPLE MESSAGES?
#holyjs @slobodan_ NO!
#holyjs @slobodan_ JUST KIDDING OF COURSE IT IS!
#holyjs @slobodan_ const botBuilder = require('claudia-bot-builder') module.exports = botBuilder(message =>
{ console.log(message) return [ 'Hello from HolyJS bot!', `You sent: ${message.text}` ] }, { platforms: ['telegram'] }) bot.js file:
#holyjs @slobodan_ PART 6. CUSTOM KEYBOARDS AND ATTACHMENTS
#holyjs @slobodan_ Coco Chanel French fashion designer
#holyjs @slobodan_ require('claudia-bot-builder').telegramTemplate
#holyjs @slobodan_ bot.js file: const botBuilder = require('claudia-bot-builder') const telegramTemplate
= botBuilder. telegramTemplate module.exports = botBuilder(message => { console.log(message) return new telegramTemplate.Text('Hello') .addReplyKeyboard([['Schedule'], ['Info']]) .get() }, { platforms: ['telegram'] })
#holyjs @slobodan_
#holyjs @slobodan_ • Text messages • Custom Keyboard • Photo
messages • Audio messages • Location messages • Venue messages • Stickers • Change chat action • Pause between messages
#holyjs @slobodan_ FORMATTED MESSAGES DOCS: http://bit.ly/claudia-telegram
#holyjs @slobodan_ PART 7. BOT FLOW
#holyjs @slobodan_ J. R. R. Tolkien English writer
#holyjs @slobodan_ YOUR BOT NEEDS A STORYLINE
#holyjs @slobodan_ const botBuilder = require('claudia-bot-builder') module.exports = botBuilder(message =>
{ console.log(message) if (message.text === ‘/start' || message.text === ‘/start start') return 'Hello, I am Igor, HolyJS bot’ return `You sent: ${message.text}` }, { platforms: ['telegram'] }) bot.js file:
#holyjs @slobodan_ • Schedule info • Current and next talk
info • Conference info • Tweet with #holyjs • Help
#holyjs @slobodan_ #holyjs @slobodan_
#holyjs @slobodan_ IS THERE A BETTER WAY?
#holyjs @slobodan_ PART 8. SAVE THE STATE
#holyjs @slobodan_ Joan de Arc Heroine of France
#holyjs @slobodan_ DYNAMO DB
#holyjs @slobodan_ $ aws dynamodb create-table --table-name holyjs-state \ --attribute-definitions
\ AttributeName=userId,AttributeType=S \ --key-schema AttributeName=userId,KeyType=HASH \ --provisioned-throughput \ ReadCapacityUnits=1,WriteCapacityUnits=1 \ --query TableDescription.TableArn --output text
#holyjs @slobodan_ DynamoDB Policy { "Version": "2012-10-17", "Statement": [ {
"Action": [ "dynamodb:GetItem", "dynamodb:UpdateItem", "dynamodb:PutItem", "dynamodb:Scan" ], "Effect": "Allow", "Resource": "*" } ] }
#holyjs @slobodan_ const botBuilder = require('claudia-bot-builder') const api = botBuilder((message,
originalApiRequest) => { return 'Hello from HolyJS bot! You sent: ' + message.text }, { platforms: ['telegram'] }) api.addPostDeployConfig('dynamoDbTable', 'DynamoDB:', 'configure-bot') module.exports = api bot.js file:
#holyjs @slobodan_ const AWS = require('aws-sdk') const docClient = new
AWS.DynamoDB.DocumentClient()
#holyjs @slobodan_ const params = { TableName: originalApiRequest.env.dynamoDbTable, Key: {
userId: id } } return docClient.get(params).promise() .then(result => console.log('OK', result.Item))
#holyjs @slobodan_ return docClient.get(params).promise() .then(result => console.log('OK', result.Item)) .catch(err =>
{ params = { TableName: originalApiRequest.env.dynamoDbTable, Item: { userId: message.sender } } return docClient.put(params).promise() .then(res => console.log('Create', res)) })
#holyjs @slobodan_ PART 9. MULTILANGUAGE
#holyjs @slobodan_ Mark Twain American author and humorist
#holyjs @slobodan_ EASIEST SOLUTION: SAVE LANGUAGE SETTINGS IN THE STATE
(DYNAMO DB)
#holyjs @slobodan_ #holyjs @slobodan_
#holyjs @slobodan_ PART 10. SCHEDULED NOTIFICATIONS
#holyjs @slobodan_ John Lennon English singer and songwriter
#holyjs @slobodan_ FOR NOTIFICATIONS: CLOUD WATCH SCHEDULED EVENTS
#holyjs @slobodan_
#holyjs @slobodan_ WE WILL USE A NEW LAMBDA FUNCTION
#holyjs @slobodan_ BUT OUR TELEGRAM TOKEN IS IN THE API
GATEWAY STAGE VARIABLES!
#holyjs @slobodan_ A FEW SOLUTIONS: • AWS Lambda environment variables
• Save the token in DynamoDB / State • Pass the token in the event
#holyjs @slobodan_ #holyjs @slobodan_
#holyjs @slobodan_ PART 11. NLP AND AI
#holyjs @slobodan_ H. P. Lovecraft American writer of horror fiction
#holyjs @slobodan_ BUTTONS ARE COOL, BUT…
#holyjs @slobodan_ API.AI WIT.AI LUIS.AI IBM WATSON
#holyjs @slobodan_ LET’S MAKE OUR BOT SMARTER WITH API.AI
#holyjs @slobodan_
#holyjs @slobodan_
#holyjs @slobodan_
#holyjs @slobodan_
#holyjs @slobodan_
#holyjs @slobodan_
#holyjs @slobodan_ #holyjs @slobodan_
#holyjs @slobodan_ SHOW TIME!
#holyjs @slobodan_ Salvador Dali Spanish surrealist painter
#holyjs @slobodan_
#holyjs @slobodan_ LIVE BOT: telegram.me/holyjs_bot
#holyjs @slobodan_ OR Julius Caesar Roman statesman and general
#holyjs @slobodan_ SOURCE CODE: STOJANOVIC/HOLYJS-BOT
#holyjs @slobodan_ SEND PR TO ADD NEW SKILLS: https://github.com/stojanovic/holyjs-bot
#holyjs @slobodan_ CLAUDIA BOT BUILDER CLAUDIAJS/CLAUDIA-BOT-BUILDER
#holyjs @slobodan_ THE END Marilyn Monroe American actress
#holyjs @slobodan_ QUESTIONS TIME @SLOBODAN_ #HOLYJS Erwin Schrödinger Nobel Prize-winning
Austrian physicist