Coder Social home page Coder Social logo

bottr's Introduction

Bottr

Travis Coverage Status

A framework for creating Bots.

Head to our Documentation to read more about how to install and start using Bottr.

Bottr
🚀 Prebuilt integrations with Facebook Messenger, SMS and more.
💥 Focus on building the business logic for your bot, not infrastructure.
💡 Build your bot in minutes not hours.

Creating A New Project

Follow the instructions here

Need Help?

Get in contact with the developer on Twitter: @jcampbell_05

License

This project is licensed under the terms of the MIT license. See the LICENSE file.

bottr's People

Contributors

adamjuhasz avatar alexsup avatar jcampbell05 avatar kamalawasthi avatar marcbachmann avatar owenvoke avatar radarhere avatar sbose78 avatar tanhauhau avatar tjwudi avatar ummahusla avatar vutran avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

bottr's Issues

Unable to Install

I get this error, any idea what's wrong?

 sudo npm install -g bottr-cli
npm ERR! Darwin 15.6.0
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "install" "-g" "bottr-cli"
npm ERR! node v4.2.6
npm ERR! npm  v3.10.8

npm ERR! uid must be an unsigned int
npm ERR!
npm ERR! If you need help, you may report this error at:
npm ERR!     <https://github.com/npm/npm/issues>
npm ERR! Darwin 15.6.0
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "install" "-g" "bottr-cli"
npm ERR! node v4.2.6
npm ERR! npm  v3.10.8

npm ERR! uid must be an unsigned int
npm ERR!
npm ERR! If you need help, you may report this error at:
npm ERR!     <https://github.com/npm/npm/issues>
npm ERR! Darwin 15.6.0
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "install" "-g" "bottr-cli"
npm ERR! node v4.2.6
npm ERR! npm  v3.10.8

npm ERR! uid must be an unsigned int
npm ERR!
npm ERR! If you need help, you may report this error at:
npm ERR!     <https://github.com/npm/npm/issues>

npm ERR! Please include the following file with any support request:
npm ERR!     /Users/name/npm-debug.log

My node and npm versions.

 node -v
v4.2.6
npm -v
3.10.8

Why callbacks?

and not Promises?

Would love to hear your reasoning. Thank you!

Handle errors gracefully

When the Bot has a crash or error, we should send feedback to the user so that they aren't left staring at a typing indicator.

Tag Releases

I should start tagging new releases and look into if it's possible to retroactively tag older versions.

Update help text

Hello,

When you type bottr-cli -h you get this:

  Usage: index [options] [command]


  Commands:

    init
    start
    build

  Options:

    -h, --help     output usage information
    -V, --version  output the version number

Usage section is not representing the actual usage.

I know, it's not a big deal, but it'd be nice to have the correct info.

Thanks in advance.

bottr: command not found

I tried creating a new project. Following are steps:

  1. brew install node
  2. sudo npm install -g bottr-cli
  3. mkdir ecobot && cd ecobot && bottr init

It creates and redirect to directory "ecobot" but unable to find bottr.
says: bottr: command not found

[Question] Roadmap

  1. Is there a roadmap of Bottr?
  2. What are the next coming features?
  3. Is the a plan to support non plain text reply of different platform? i.e. Buttons, Carousel... etc.

Move clients into new folder

We should begin moving the different clients to a new folder lib/clients and also provide an interface to allow building clients easily which should also contribute towards the effort in #12

No webhook handlers configured

Hi;

I tried the example app, but have some problems making it work. From the deploying page:

In the Webhooks section click “Setup Webhooks”, for the callback URL you need to enter “/webhook” and for the verify token enter in your validation secret you added to your bot.

I guess it should be absolutely url ( otherwise facebook will throw an error );

However when I try this I get this response from my url:

{
"error": "No webhook handlers configured"
}

The interesting thing is the bot is working when receiving first message from the first user, then it stop working.

Handle multiple standard users

For users using standard web hooks, web socket or Bottr App we should generate a unique user identifier for them so a user profile isn't shared across clients.

We should also introduce some kind of authentication to prevent anyone from connecting and pretending to be a user.

Improve examples design

Right now we are using a raw table, we could style this to better match the rest of the site.

Bot stops responding to FB messenger after first conversation

Hi,
I tried out the tutorial which echoes messages and returns /stats on demand.

  1. I configured webhooks, page access token,etc
  2. sent a message from the page admin user to the page.
  3. received the echoed message ( I've quoted the logs below )
  4. all subsequent messages stop triggering the echoed response.
  5. I generate new page access token and configure it ( this triggers a hot reboot I'm guessing ).
  6. again the echo works just once.
2016-10-19T05:26:10.317081+00:00 app[web.1]: webhook event triggered
2016-10-19T05:26:10.317946+00:00 app[web.1]: message_received event triggered
2016-10-19T05:26:10.334459+00:00 heroku[router]: at=info method=POST path="/webhook" host=dry-badlands-98286.herokuapp.com request_id=dba605a0-a213-4eec-bfcb-ed487faf5d6c fwd="66.220.158.104" dyno=web.1 connect=0ms service=37ms status=200 bytes=228
2016-10-19T05:26:10.628800+00:00 app[web.1]: Sending "Does this work?"
2016-10-19T05:26:10.807635+00:00 app[web.1]: Successfully started typing indicator.
2016-10-19T05:26:10.830356+00:00 app[web.1]: Successfully started typing indicator.
2016-10-19T05:26:11.107588+00:00 app[web.1]: Successfully sent message.
2016-10-19T05:26:13.404081+00:00 app[web.1]: webhook event triggered
2016-10-19T05:26:13.430081+00:00 app[web.1]: Webhook received unknown messagingEvent:  { sender: { id: '1025933884186196' },
2016-10-19T05:26:13.430083+00:00 app[web.1]:   recipient: { id: '292396247443853' },
2016-10-19T05:26:13.430084+00:00 app[web.1]:   timestamp: 0,
2016-10-19T05:26:13.430085+00:00 app[web.1]:   delivery: 
2016-10-19T05:26:13.430085+00:00 app[web.1]:    { mids: [ 'mid.1476854771032:fe4c1f6064' ],
2016-10-19T05:26:13.430086+00:00 app[web.1]:      watermark: 1476854771032,
2016-10-19T05:26:13.430087+00:00 app[web.1]:      seq: 190 } }
2016-10-19T05:26:13.423084+00:00 heroku[router]: at=info method=POST path="/webhook" host=dry-badlands-98286.herokuapp.com request_id=509e1065-ea5d-4c19-9349-7adcab6619a9 fwd="66.220.158.96" dyno=web.1 connect=0ms service=31ms status=400 bytes=247
2016-10-19T05:26:14.003210+00:00 app[web.1]: webhook event triggered
2016-10-19T05:26:14.003723+00:00 app[web.1]: Webhook received unknown messagingEvent:  { sender: { id: '1025933884186196' },
2016-10-19T05:26:14.003725+00:00 app[web.1]:   recipient: { id: '292396247443853' },
2016-10-19T05:26:14.003726+00:00 app[web.1]:   timestamp: 0,
2016-10-19T05:26:14.003727+00:00 app[web.1]:   delivery: 
2016-10-19T05:26:14.003727+00:00 app[web.1]:    { mids: [ 'mid.1476854771032:fe4c1f6064' ],
2016-10-19T05:26:14.003728+00:00 app[web.1]:      watermark: 1476854771032,
2016-10-19T05:26:14.003728+00:00 app[web.1]:      seq: 190 } }
2016-10-19T05:26:14.007697+00:00 heroku[router]: at=info method=POST path="/webhook" host=dry-badlands-98286.herokuapp.com request_id=79648972-d217-4aeb-a682-1d2075eafb34 fwd="173.252.124.70" dyno=web.1 connect=1ms service=3ms status=400 bytes=247
2016-10-19T05:26:14.555618+00:00 app[web.1]: webhook event triggered
2016-10-19T05:26:14.556168+00:00 app[web.1]: Webhook received unknown messagingEvent:  { sender: { id: '1025933884186196' },
2016-10-19T05:26:14.556169+00:00 app[web.1]:   recipient: { id: '292396247443853' },
2016-10-19T05:26:14.556170+00:00 app[web.1]:   timestamp: 0,
2016-10-19T05:26:14.556170+00:00 app[web.1]:   delivery: 
2016-10-19T05:26:14.556171+00:00 app[web.1]:    { mids: [ 'mid.1476854771032:fe4c1f6064' ],
2016-10-19T05:26:14.556171+00:00 app[web.1]:      watermark: 1476854771032,
2016-10-19T05:26:14.556172+00:00 app[web.1]:      seq: 190 } }
2016-10-19T05:26:14.548078+00:00 heroku[router]: at=info method=POST path="/webhook" host=dry-badlands-98286.herokuapp.com request_id=48831492-12e2-4309-82b5-5a25904dd2a6 fwd="173.252.124.83" dyno=web.1 connect=0ms service=2ms status=400 bytes=247
2016-10-19T05:26:15.180407+00:00 app[web.1]: webhook event triggered
2016-10-19T05:26:15.181326+00:00 app[web.1]: Webhook received unknown messagingEvent:  { sender: { id: '1025933884186196' },
2016-10-19T05:26:15.181328+00:00 app[web.1]:   recipient: { id: '292396247443853' },
2016-10-19T05:26:15.181329+00:00 app[web.1]:   timestamp: 0,
2016-10-19T05:26:15.181329+00:00 app[web.1]:   delivery: 
2016-10-19T05:26:15.181330+00:00 app[web.1]:    { mids: [ 'mid.1476854771032:fe4c1f6064' ],
2016-10-19T05:26:15.181331+00:00 app[web.1]:      watermark: 1476854771032,
2016-10-19T05:26:15.181332+00:00 app[web.1]:      seq: 190 } }
2016-10-19T05:26:15.191608+00:00 heroku[router]: at=info method=POST path="/webhook" host=dry-badlands-98286.herokuapp.com request_id=aca29eed-46e5-4b05-9e9a-272173b1ead1 fwd="173.252.124.78" dyno=web.1 connect=0ms service=3ms status=400 bytes=247
2016-10-19T05:26:16.309126+00:00 app[web.1]: webhook event triggered
2016-10-19T05:26:16.309889+00:00 app[web.1]: Webhook received unknown messagingEvent:  { sender: { id: '1025933884186196' },
2016-10-19T05:26:16.309891+00:00 app[web.1]:   recipient: { id: '292396247443853' },
2016-10-19T05:26:16.309892+00:00 app[web.1]:   timestamp: 0,
2016-10-19T05:26:16.309893+00:00 app[web.1]:   delivery: 
2016-10-19T05:26:16.309893+00:00 app[web.1]:    { mids: [ 'mid.1476854771032:fe4c1f6064' ],
2016-10-19T05:26:16.309894+00:00 app[web.1]:      watermark: 1476854771032,
2016-10-19T05:26:16.309895+00:00 app[web.1]:      seq: 190 } }
2016-10-19T05:26:16.313548+00:00 heroku[router]: at=info method=POST path="/webhook" host=dry-badlands-98286.herokuapp.com request_id=377c271a-da9d-4b57-af6c-b6117e5b81f3 fwd="173.252.124.77" dyno=web.1 connect=0ms service=4ms status=400 bytes=247
2016-10-19T05:26:20.114836+00:00 app[web.1]: webhook event triggered
2016-10-19T05:26:20.115274+00:00 app[web.1]: Webhook received unknown messagingEvent:  { sender: { id: '1025933884186196' },
2016-10-19T05:26:20.115276+00:00 app[web.1]:   recipient: { id: '292396247443853' },
2016-10-19T05:26:20.115276+00:00 app[web.1]:   timestamp: 0,
2016-10-19T05:26:20.115277+00:00 app[web.1]:   delivery: 
2016-10-19T05:26:20.115277+00:00 app[web.1]:    { mids: [ 'mid.1476854771032:fe4c1f6064' ],
2016-10-19T05:26:20.115278+00:00 app[web.1]:      watermark: 1476854771032,
2016-10-19T05:26:20.115278+00:00 app[web.1]:      seq: 190 } }
2016-10-19T05:26:20.107655+00:00 heroku[router]: at=info method=POST path="/webhook" host=dry-badlands-98286.herokuapp.com request_id=0a17f2a3-4c66-4ce0-b850-5cd079b325d8 fwd="173.252.124.26" dyno=web.1 connect=0ms service=3ms status=400 bytes=247

And then , after about half an hour, the echo happens again and again for the same message ( almost endlessly ):

2016-10-19T06:03:23.942830+00:00 heroku[router]: at=info method=POST path="/webhook" host=dry-badlands-98286.herokuapp.com request_id=4198b440-b8cf-4aa8-8203-54a5e1ea1158 fwd="173.252.120.115" dyno=web.1 connect=0ms service=2ms status=400 bytes=247
2016-10-19T06:03:23.951121+00:00 app[web.1]: webhook event triggered
2016-10-19T06:03:23.951502+00:00 app[web.1]: Webhook received unknown messagingEvent:  { sender: { id: '1025933884186196' },
2016-10-19T06:03:23.951505+00:00 app[web.1]:   recipient: { id: '292396247443853' },
2016-10-19T06:03:23.951506+00:00 app[web.1]:   timestamp: 0,
2016-10-19T06:03:23.951506+00:00 app[web.1]:   delivery: 
2016-10-19T06:03:23.951507+00:00 app[web.1]:    { mids: [ 'mid.1476854771032:fe4c1f6064' ],
2016-10-19T06:03:23.951508+00:00 app[web.1]:      watermark: 1476854771032,
2016-10-19T06:03:23.951508+00:00 app[web.1]:      seq: 190 } }
2016-10-19T06:03:23.951960+00:00 app[web.1]: message_received event triggered
2016-10-19T06:03:23.957755+00:00 app[web.1]: Error: Can't set headers after they are sent.
2016-10-19T06:03:23.957757+00:00 app[web.1]:     at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:346:11)
2016-10-19T06:03:23.957757+00:00 app[web.1]:     at ServerResponse.header (/app/node_modules/express/lib/response.js:719:10)
2016-10-19T06:03:23.957759+00:00 app[web.1]:     at ServerResponse.contentType (/app/node_modules/express/lib/response.js:552:15)
2016-10-19T06:03:23.957760+00:00 app[web.1]:     at ServerResponse.sendStatus (/app/node_modules/express/lib/response.js:340:8)
2016-10-19T06:03:23.957761+00:00 app[web.1]:     at ServerResponse.res.success (/app/node_modules/bottr/lib/response-middleware.js:5:11)
2016-10-19T06:03:23.957761+00:00 app[web.1]:     at /app/node_modules/bottr/lib/facebook-messenger-client.js:64:15
2016-10-19T06:03:23.957762+00:00 app[web.1]:     at Array.forEach (native)
2016-10-19T06:03:23.957763+00:00 app[web.1]:     at /app/node_modules/bottr/lib/facebook-messenger-client.js:60:27
2016-10-19T06:03:23.957763+00:00 app[web.1]:     at Array.forEach (native)
2016-10-19T06:03:23.957765+00:00 app[web.1]:     at FacebookMessengerClient.handleEvent (/app/node_modules/bottr/lib/facebook-messenger-client.js:59:16)
2016-10-19T06:03:23.957766+00:00 app[web.1]:     at FacebookMessengerClient.<anonymous> (/app/node_modules/bottr/lib/facebook-messenger-client.js:35:12)
2016-10-19T06:03:23.957767+00:00 app[web.1]:     at Event.next (/app/node_modules/bottr/lib/event.js:16:14)
2016-10-19T06:03:23.957768+00:00 app[web.1]:     at EventEmitter.emit (/app/node_modules/bottr/lib/event-emitter.js:28:9)
2016-10-19T06:03:23.957768+00:00 app[web.1]:     at Bot.trigger (/app/node_modules/bottr/lib/bot.js:49:26)
2016-10-19T06:03:23.957769+00:00 app[web.1]:     at Bot.handleWebhookRequest (/app/node_modules/bottr/lib/bot.js:44:8)
2016-10-19T06:03:23.957770+00:00 app[web.1]:     at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
2016-10-19T06:03:24.053247+00:00 app[web.1]: Sending "hi"
2016-10-19T06:03:24.329363+00:00 app[web.1]: Successfully started typing indicator.
2016-10-19T06:03:24.332173+00:00 app[web.1]: Successfully started typing indicator.
2016-10-19T06:03:24.374676+00:00 app[web.1]: Successfully sent message.

TypeError: session.reply is not a function

I was following the docs in order to setup the bot and suddenly I've encountered this error.

$ bottr-cli start
Mon, 10 Oct 2016 16:42:13 GMT body-parser deprecated undefined extended: provide extended option at node_modules\bottr\lib\bot.js:36:30
new websocket connection
new websocket connection
message_received event triggered
Missing error handler on `socket`.
TypeError: session.reply is not a function
    at Event.<anonymous> (C:\wamp\www\bottr\index.js:13:11)
    at Event.next (C:\wamp\www\bottr\node_modules\bottr\lib\event.js:16:14)
    at Event.triggerNext (C:\wamp\www\bottr\node_modules\bottr\lib\event.js:10:12)
    at Event.<anonymous> (C:\wamp\www\bottr\node_modules\bottr\lib\bot.js:22:5)
    at Event.next (C:\wamp\www\bottr\node_modules\bottr\lib\event.js:16:14)
    at EventEmitter.emit (C:\wamp\www\bottr\node_modules\bottr\lib\event-emitter.js:28:9)
    at Bot.trigger (C:\wamp\www\bottr\node_modules\bottr\lib\bot.js:49:26)
    at WebsocketClient.<anonymous> (C:\wamp\www\bottr\node_modules\bottr\lib\websocket-client.js:24:14)
    at emitOne (events.js:78:13)
    at Socket.emit (events.js:170:7)
    at Socket.onevent (C:\wamp\www\bottr\node_modules\socket.io\lib\socket.js:348:8)
    at Socket.onpacket (C:\wamp\www\bottr\node_modules\socket.io\lib\socket.js:308:12)
    at Client.ondecoded (C:\wamp\www\bottr\node_modules\socket.io\lib\client.js:194:14)
    at Decoder.Emitter.emit (C:\wamp\www\bottr\node_modules\component-emitter\index.js:134:20)
    at Decoder.add (C:\wamp\www\bottr\node_modules\socket.io-parser\index.js:247:12)
    at Client.ondata (C:\wamp\www\bottr\node_modules\socket.io\lib\client.js:176:18)

Integrate Broid to focus on higher level features

After discussed with @jcampbell05. It will be a good idea to use @broidHQ librairies to integrate easily messaging platforms.

Actually Broid support: Slack, Twitter, Viber, Line, Callr, Twilio, Skype, Discord, Messenger, Telegram, Kik and Flowdock. Coming this month: IRC, Email, Alexa

This work can fix quickly request feature like #73

I create the issue to track the work in progress and the futures PRs associated.

Document clients

Document clients so developers know which options they have and how to use them.

Events

Some prototype code is on master but basically this is the ability to push events to the Bot from an external service (i.e push content to a user via the bot)

Make Our Site Look Awesome

We have a new site but it still needs a lot of work.

https://bottr.co/

  1. Tidy up vertical rhythmn spacing.
  2. Fix it on mobile devices
  3. Make sure it is obvious to the reader what it is, maybe add more examples of the platforms and services we support.

Allow using custom Session class

Current Session class stores user context in memory. This is legit when we are only serving bot on single machine. Once we are going to serve it onto multiple servers behind load balancer, we should allow user to implement their own Session logic to utilize Redis, Memcache etc.

Error: Can't set headers after they are sent.

I've deployed my messenger app the heroku, found following error for every messenger message event.

Also the messenger bot has a significant reply delay (1+hr) about 3 mins after setting subscription.

2016-10-13T17:29:13.499866+00:00 app[web.1]: Error: Can't set headers after they are sent.
2016-10-13T17:29:13.499871+00:00 app[web.1]:     at ServerResponse.contentType (/app/node_modules/express/lib/response.js:552:15)
2016-10-13T17:29:13.499872+00:00 app[web.1]:     at ServerResponse.sendStatus (/app/node_modules/express/lib/response.js:340:8)
2016-10-13T17:29:13.499872+00:00 app[web.1]:     at ServerResponse.res.success (/app/node_modules/bottr/lib/response-middleware.js:5:11)
2016-10-13T17:29:13.499873+00:00 app[web.1]:     at /app/node_modules/bottr/lib/facebook-messenger-client.js:64:15
2016-10-13T17:29:13.499874+00:00 app[web.1]:     at Array.forEach (native)
2016-10-13T17:29:13.499875+00:00 app[web.1]:     at /app/node_modules/bottr/lib/facebook-messenger-client.js:60:27
2016-10-13T17:29:13.499875+00:00 app[web.1]:     at Array.forEach (native)
2016-10-13T17:29:13.499876+00:00 app[web.1]:     at FacebookMessengerClient.handleEvent (/app/node_modules/bottr/lib/facebook-messenger-client.js:59:16)
2016-10-13T17:29:13.499877+00:00 app[web.1]:     at FacebookMessengerClient.<anonymous> (/app/node_modules/bottr/lib/facebook-messenger-client.js:35:12)
2016-10-13T17:29:13.499878+00:00 app[web.1]:     at Event.next (/app/node_modules/bottr/lib/event.js:16:14)
2016-10-13T17:29:13.499878+00:00 app[web.1]:     at EventEmitter.emit (/app/node_modules/bottr/lib/event-emitter.js:28:9)
2016-10-13T17:29:13.499879+00:00 app[web.1]:     at Bot.trigger (/app/node_modules/bottr/lib/bot.js:49:26)
2016-10-13T17:29:13.499880+00:00 app[web.1]:     at Bot.handleWebhookRequest (/app/node_modules/bottr/lib/bot.js:44:8)
2016-10-13T17:29:13.499880+00:00 app[web.1]:     at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)

Why not use "bottr" for CLI

For bottr-cli, it would be better to just use bottr. I know I can simply create an alias as a user, but it is a lot easier to type. Thoughts on why bottr-cli was chosen instead as the primary command?

Grammar change on website

This obviously isn't that important, just something I noticed.

On the homepage of the site in the box saying The World's Simpilest Bot Framework it uses Simpilest instead of Simplest.

It also says this in the homepage example code.

I'm guessing it should be The world's simplest bot framework as per the package.json file.

Failed to get the app working in the tutorial

Hi,

I found this project very interesting and was looking to contribute as well. Prior to that, wanted to build something for myself but ...

Tutorial in the wiki doesn't seem to be working -
https://gist.github.com/sbose78/bb5da79ea6332b539c3d9c88c6a1e3ff

Reached till the testing of the deployed app.
https://github.com/Bottr-js/Bottr/wiki/Deploying-Your-Bot#testing-it-out

I send a message from Facebook messenger which doesn't trigger anything on https://dry-badlands-98286.herokuapp.com/ and also https://dry-badlands-98286.herokuapp.com/webhook doesn't return a decent response :)

Could you help me debug?

Shoubhik

Topics

Allow the bot to listen out to messages regarding a certain topic. Code is already in `master for this.

For example a bot can ask "Whats your age?" then a topic is triggered where the bot will focus on listening out for that age.

An alternative name for this feature could be a Focus since that is what the bot does.

Allow user to customize Bottr app

Right now Bottr App uses a default theme with "Bottr" in the header.

It would be great to allow this to be customised so Bots can add their own branding.

Integration with infra.cat

I agree it would be cool to ingrate this with infra.cat. All we would need to do is change the messenger clients send api URI in /lib/facebook-messenger-client.js.

Options are:

  1. create a new client
  2. add a send-api config option
  3. add an environmental variable

I think option 2 is the best, thoughts?

remove user_agent check in messenger webhook

I can't find any official documentation that the user agent will be facebookplatform.

Is checking the x-hub-signature enough, since that is the only official way of checking validity?

Would love to see some tutorials.

Videos on YouTube about how to build a bot using Bottr for Messenger and Twitter, maybe more would be great for people to learn how to build bots with bottr 😃

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.