 So welcome, thank you for joining us. What are we here to chat about today? That's my one joke for the presentation. All right. We're here to chat about chat bots. We're here to chat about chat bots in Drupal. My name's Everett Zufelt. I'm Associate Director of Technology at MyPlanet. I work with a number of our customers and our development and implementation teams just to keep everything running smoothly. I'm Rafael Silva, a senior Drupal developer at MyPlanet. And I develop as well websites and many other systems for the company. Cool. And we want to just give you a little bit of an introduction. What is this presentation about today and what it's not about? This is not a conversation about artificial intelligence. We actually want to get in. At the end, we want to talk about some of the experiments we want to do next. And integrating AI with the chat bot work that we've done so far definitely is what we want to look at. But this is not a conversation about AI. This is a conversation about everything you need to do with a chat bot before you start to look at integrating artificial intelligence. So what we are talking about today, we're talking about chat bots, what comprises a chat bot, how we can integrate chat bots with Drupal, how we can build chat bots based on Drupal. MyPlanet really quickly about us. We're a design and development organization. We're headquartered in Toronto. We have offices Toronto, Vancouver. Some offices in Europe. And we've got a small sales office in Chicago. I'd say probably about half of the work we do at the moment is Drupal-based design and delivery. The other half of the work we do is around a couple of different technologies, areas. We do some native work. We've done some Android Wear work. That was kind of interesting. We do JavaScript application development. So whether it's Angular, React, or other types of frameworks on the front end. And we do some Java work as well because everybody loves Java. Agenda for today, what are we going to talk about? We're going to talk about an overview of chat bots. We're going to talk about some use cases in the wild where we've seen chat bots actually in use on live production sites. We're going to talk about chat bots in Drupal. There's a couple of modules to just be aware of that exist along with the experimental one that we're working on at the moment and that we're going to be demonstrating. We're going to talk about our experimental module, how it went together and how it works. We're going to show a couple of demos, fingers crossed with the Wi-Fi, one with Facebook Messenger, one with Slack. And then we're going to talk to you about where we want to go next with our experimentation, maybe some experimentation that you can do along with us, because this module is up on Drupal.org. It's project chat bot. That namespace was available, so we grabbed it. And then just talking about some of the interesting things we'd like to do through the rest of the year to build up our understanding of how we can marry a rich content management system like Drupal together with the idea that's really in the last, chat bots have been around forever, but really in the last year or so has really started to pick up speed. There's been acquisitions in the industry, so it's definitely a place that's ripe for innovation. I'll start off by giving a little chat about chat bots and kind of an overview, and then Raphael will pick it up from there. So I think we're all familiar. We all have smartphones, most smartphones today have a chat bot integrated. We've got Siri here, so I can ask, let's see, that she's not going to understand me right here. What's the weather in Baltimore? Cloudy, oh. Cloudy skies starting in the afternoon, and these conditions will continue throughout the rest of the day with temperatures. She's chatty. So currently cloudy 15 degrees, and it's going to rain for the rest of the day. Really unpleasant week here in Baltimore this week. So we're familiar with this. We interact with chat bots. We might not think about it as a chat bot, but whether it's Alexa, Google Home, Siri, or many, many other devices, we all interact with these tools, or at least most of us do on a daily basis. I know I use Siri every day. So I think we're all familiar with what it is. There's a system somewhere. There's some content analytics, some rich data. There's us sending a request to that system. I think most of the sizzle, I think that for a lot of people is in the natural language processing. We can ask Siri 20 different ways for the weather in Baltimore. Somehow she's able to understand that I'm looking for weather and I'm looking for it in Baltimore. And as Rafael starts to talk about the components of what goes into a chat bot, he's going to explain some things around entities and intents. So really that's what a chat bot is. It's really just a way for a human to interact with a computer, whether or not it's doing it through a more of a directed choose your own adventure. Hey, Everett, would you like to know the weather in? Drop down list of cities. And I select the one I'm interested in. Or if it's using natural language processing to infer from my speech what it is or my writing what it is I'm looking to achieve. The experiment really that we are looking to do around chat bots or the goal that we set out for ourselves was, number one, we really just wanted to understand structurally what is a chat bot. What are they made of? How does the messaging back and forth work? We didn't want to reinvent the wheel and there's many frameworks out there to look at. So step one, we just wanted to understand commonly what are the components that go into a chat bot. Secondly, and really quite inspired by the Facebook messenger work that was released by the former White House, we wanted to take a look at how can we build on top of that? We thought it was a really interesting architecture that they put together, but really tightly coupled in a couple of places. First of all, the Facebook messenger module really tightly unsurprisingly coupled to Facebook. So there wasn't an ability to swap out that Facebook component with other chat clients. On the back end, the Facebook messenger module really tightly coupled into a workflow management that requires a developer to write code. So in order to program that Facebook messenger bot there needs to be some coding that gets done. So what we wanted to do, second part of the experiment, first part was just understand chat bots better. And the second part, can we use the plugin system in Drupal? Along with kind of starting from the Facebook module to extend and allow for us to have a framework where on the front end, you can build a client framework so the two that Raphael's gonna demonstrate are Facebook and Slack. And on the back end to have a plugin or a pluggable approach to how we can actually create that workflow and how we can take the workflow out of the hands of just being a development tool and into the hands of a content creator. Or I guess in the case of chat bot, the person who's actually writing the story that the chat bot's telling to the consumer who's interacting with it. So that's what we were looking to do. Now Raphael, I think you're gonna talk a little bit about use cases for chat bots. Yeah. So I would like to talk about some common use cases for chat bots. So one of the first things that you can think of when talking about chat bots is asking, just like Everett did, asking for the weather. So you talk to Siri or you can use any other kind of approach to talk to a chat bot and the chat bot will know how to treat it and give it back for you this information. So for example, this high poncho Facebook chat or Siri or any kind of other chat bot that can go to a weather site and grab information gives you back that information based on your query. The same thing goes for a survey. You can have a chat bot where the chat bot asks you, would you like to answer some survey and you answer saying yes or no and then it gives you the questions and you give back the answers. That's this survey bot as example. And a to-do list, you can create a to-do list just sending your to-do items or even asking to mark, check out the item or anyway, remove an item for the chat bot as well. There's a to-do bot for that. News, you can retrieve news from websites. CNN has a chat bot that does just that. You can even buy stuff from a chat bot like the Nordstrom and you always have the chance to just chat with a chat bot that does nothing. It's just chat with you back. So, cause you're very lonely. Yeah, so yeah, these are some use cases for chat bots. You can think in many, many orders use cases. But in the end of the day, the chat bot will automate some process that you have so you don't have to have a person on the other side to do this repetitive task or boring task. You can automate that and scale your business. So, next on, chat bots and Drupal. What do we have already about chat bots in the Drupal community? And specifically for modules, what modules do we have for chat bots? Well, on Drupal, Drupal Warg, you can find three modules. One another is the one we built. So, you can already find it there, but I didn't list it here. So, the first one is the bot module. It's an IRC chat bot model. I guess it's just for a Drupal 7 version. But yeah, you can install it and use it for your IRC channel to answer you back. The second one is AIML parser. It's not really a chat bot per se. It's just an integration with a tool but it uses a markup language for talking back to this other chat bot. So, but yeah, you can consider that one. And the last one is the Facebook Messenger bot. It's hosted, right now it's hosted on GitHub. And it's the one we forked from. We created our own module deriving from this one. And it's a very, very good module. It's very structured. But as Everett said in the beginning, it's also tightly coupled to only Facebook. So, we tried another different approach so we can use a module that works not only with Facebook but with Slack or your custom chat bot or your chat mechanism, your application. So, how is this module built? It's only Drupal 8, so we didn't backport it for Drupal 7. So, you will have, because the main reason of that is because we are leveraging on the plugin API. So, it doesn't exist in Drupal 7. And of course, it doesn't make any sense to backport it. As I said, it's forked from Facebook Messenger bottom. You can use the plugin API to extend it. When we deliver that, we deliver that with two integrations right now, Facebook and Slack. And you can, of course, extend it. What are the components of a chat bot? So, for this module, you probably will have seen these names differently depending on the context you're familiar with. But these are the names we choose to use. So, we are using a message type. What kind of things a message type? So, when you interact with a chat bot, you're just not, you're probably sending them just text most of the time, but it will send you back information in a more rich format. So, you might have images, you might have videos, links, buttons that you can interact with, and even it can have some decision behind, but you can program under it to say, okay, if that word come up, I want to lead this conversation to this way, or if this word come up, I want to go to the other way. So, that's another type. So, these are the message types. It's extensible, so you can create your own. Oh, my chat mechanism has a different way. We don't like images, but we like, I don't know, some kind of obscure way to send information to the user. I want to send them, I don't know, a calendar information, ICS, whatever, you can create your message type. Next one is the message. Of course, this is the way that these messages are delivered to the user. So, when the user interacts with the chat bot, the chat bot gives back message from those types, and then we have steps that can be just a simple message that is delivered back to the user, or a compound of message, a group of message that doesn't matter really the type of the message, but it gathers together a lot of message and send back to the user. You're gonna see that on the demo, if it's not making sense now, I hopefully believe it will make sense then. And last, but not last, or last, but not least, there is workflows. Workflows are the way that you organize these steps. So, a workflow is a compound, a group of steps that make sense that the chat bot will follow and deliver it back for you when you are interacting with it. So, as I said, we have message types, can be text, image, video, buttons, these kind of, I'm calling decisions that are based on the text the user sent to the chat bot. It will interact back. And here's kind of how a step will behave. You have a decision, for instance, with a lot of message that can be just text, image, videos anyway. And when you have a decision type or a button type that are the two main ways to go to another step, that's not the following one. You can interact with that and go to another step, a different step. And so you can continue on and on until your workflow is done. And as I said, there's the workflow with a lot of steps. So, we are ready to a quick demo. I want to demo the Drupal user interface that we created to manage this chat bot. Let's see if I can make it go there. Let me try another approach that didn't work. I guess I can move that back. So, here we have a Drupal website, Drupal 8, running this chat bot. And as you can see, I can see what you can see. We have the chat bot. Let me see if I can just make my screen go together. So I can see what you can see. Lost here. Now it's much better. Okay, so we can see the same thing. So, as you can see here, I guess it's a little bit small, but we'll try to make it a little bigger. So, we have set up this module with a lot of mechanisms so you can interact with. So, you have the workflow list, the step list, the message list, chat bot list because you have more than one chat bot and you have message types. You're, and everything is configurable. So, I'm not going to the configuration part, but I'm gonna show you some kind of message types that we already have set up. So, you can see there is a button, a decision message, an image, and a text. Each item of that is an entity, a Drupal entity, so you can add fields, remove fields, and so on and so forth. Let me go back here and go to field, manage fields for the buttons, for instance. So, this module has a dependence that is field collection. So, you can have many buttons, as many buttons as you want, as many messages as you want, and so on and so forth. Would not be able to access this from here. I have to go there. But anyway, let me get the image. Okay, you have an image field here, just like any regular entity in Drupal where you can set up the fields the way you want. And these are the type messages, message types, and then you go to chatbot list. So, as I said, we developed two plugins, and you can create as many workflows or as many chatbots you want. And just as simple as just clicking an add button and filling some fields. The name of the chatbot, the plugin type, this one you of course have to develop, and the endpoint, the webhook endpoint where the chat mechanism will interact with your chatbot and some configuration. This is a point where we are improving that. It's not quite the perfect way yet, but we are working. And you can assign the workflow. I'm gonna get the one that is already set up. I guess can be the Facebook one. So you have a bunch of variables. Those variables, as I said, it's leading us to improvement. We are going to make these fieldables so you don't have to use these syntax. But as for now, it's just the way it is. And it's set up to a workflow here. And if we go to the workflow, you see, we have two workflows. These two workflows can be set to any chatbot, or you can create as many workflows as you want for as many chatbots you want. So for the button workflow, we have a bunch of steps here, as you can see. Four steps are set. Depending on the way you set these steps, they can have as many messages within these steps. And when we are going to demo the actual bot, you will see how it works. And let me go back here, the message list. So these are the messages we set for this demo. So there are a lot of messages here, and some of them are just pure text, some are decisions, some are buttons, and some are images, okay? So what does that mean for you guys? It means once you, if you are planning to use just these two chatbots, the two chat mechanisms, Facebook Messenger and Slack, you don't have to do anything else to program or to implement a chatbot using Drupal right now. You can just go ahead, grab the module, install it, configure, and go play with it. If you are planning to use a different chat mechanism, you'll probably extend this module, and I will show you later on how to do that. So coming back to the presentation. So what are you going to do to extend the chatbot module? You will have to implement a plugin API, well, we created the plugin API, and then you just implement it. You will have the ability to create your own message types. So you see, we have image, text, decision buttons, but as I mentioned, you can have a video, or a link, or a Slack link, or in Slack you have those fancy messages. You can have your own fancy message type created. So you implement that in your module, and it's pluggable, and it will work the same way, it will show it up on the screen you just saw, and you can continue one. You can create your service, you will have to create your service because it's the way you interact with the chat mechanism. So that's the biggest part you are going to implement alongside with the workflow, that's the next thing. You're gonna have to implement those things because every chatbot has a chat mechanism, has its own API, and sometimes it's a standard one, sometimes it's not, and you ended up having to customize that. We are planning to make it more extensible in the sense that the default configuration you don't have to rewrite, but for this moment you have to rewrite some part of what we have for new workflows. And hopefully you can see this. This is a simple example of what does a chatbot plugin look like? It's as simple as that. You probably have to implement, as I said, these services and the workflow, it will consume a lot more code, but as for the plugin itself, it's basically these two methods and one class that you write with the appropriate annotation. Right, so let's go to another demo. For the guys that are more into code, I will show you some code later on. So let's see if my, let's see if the chatbot will work on the presentation, hopefully it will. So these chatbots I have, I'll go back to Drupal just a second just to show you. Let me go back here first, chatbot list. So I'm going to interact with Slack. So what is the workflow that I'm using? It's this pizza workflow that I created. And if I go back to the workflow list you'll see these steps. This is what the chatbot will interact with me when I was in Slack and hopefully you'll see this in action. So let's go back there and I say hi. And let's see if the chatbot's alive. All right, it worked. So on my chatbot workflow I created an image type. So it came with an image. This image is being served by Drupal. I can show you that back later. But we also have a tree, I'm sorry, two other text messages in this very first step. So let me go back a little bit here. The pizza start step here is composed by these three main items, the image and the two text. Let me go back there and show you the pizza start step. So hopefully it will make sense for you. Okay, you see, I said three. It says two messages here. You can see two messages. Let me go back a bit. Yeah, now I see there was a little flicker on the chatbot. But anyway, it's two messages, not three, as I said before, but anyway. So it's asking me what kind of interaction do I want to do. And these message here, hi, welcome to Pizza Planet. How can I help you? This message is also a decision message. Depending on what I send to the chatbot, it will answer me differently. That's why it sent me this to continue. Please inform your option. So if I say, hi, I would like to see your message. Okay, and so it gave me back the options on their menu. These options are also defined in Drupal as three simple text messages in a single step. So I say, oh, okay, I went peep, runny. And it answers me back and say, okay, it's 12 and a half. Thank you, it will take 15 minutes to prepare it. And so this workflow is done. If I started over again, and I say hi, it will, oh, it's given me the operation time because that's one of the things that we are yet to complete on the chatbot module. For now, you only, the chatbot module will go through all the steps in the workflow. And these steps specifically, the one for the operation time, is another, a different step that I could take on the, right on the beginning. So let me start it over. And ask, what is your opening time? And now you see, it's the same message because it's the same step. The difference is because the chatbot didn't go to the end of a flux and stop it there. It continued on until then the last message was sent. So that's something that we are yet to improve in this module, but anyway. So this, this step, I'm sorry, this flux, this flow is set for chat for, is lack. But what if I change, I want to change it to use a different workflow. So I go to my chatbot list and I edit it. And instead of, oh, sorry. And instead of using the pizza workflow, I can set it up to use the button workflow. Once it's saved, go back here. And I say, hi again. And this time it's not giving me the pizza menu workflow. It's giving me the button's workflow. So it's a different workflow working independently. I mean, working no matter what chat mechanism you are using. It's, as I said, it's pluggable. So here you can see a different approach. It gives us some message and a decision through buttons, not anymore through text. So I can say, oh, I'm feeling good. And it will send back the message to the chatbot and depending on what message you choose, it will lead you to a different flow, to a different step. It's taking a little bit longer, probably the wifi or something like that. But anyway, you see, you can just change it through the interface. But what about Facebook? Well, let's try to, let's try on Facebook here. Say hi. And let's see if it will work. I'm guessing I'm experiencing some connect. Oh yeah, that's it. Let me do a quick change and do a tether so I can use my own internet connection. Hmm, let's see if that will work. Okay, you see, now that we have a connection, it came back with a lot of blabbering. But anyway, if I choose I feel bad, it says, oh, I'm sorry, it took a different path. Our Facebook chat is set to use the same flow, so we have, oh, hi there, how are you, how are you feeling? The very same workflow is working here. If I say hi again, hi, it will start spitting some message. And I can choose whatever I want. And just to demo purposes, let me show you. If I go back to the Facebook and change it to use the very same pizza workflow, okay? Let's try it again. Let's see if it work. Facebook is kind of quirky. Sometimes it's just say, oh, you're good, but you're not. Okay, so Facebook has given us a hard time. Nevermind, we can work on that later. But as you can see, it's plugable in the sense that you can develop your own chatbot module or plugin. And it's in the sense that we can just flip for one workflow to a chatbot or to another chatbot. Let me go back here. Okay, before I go to the further improvements, I've mentioned some, I just want to show you and hopefully it will enter presenter mode. It's not a wide room. Yeah, if I type the right name, it will work better. Chatbot Facebook. Okay, so I don't know if you can see, it's too dark. But anyway, that's the code for the plugin. So you see there's, oh, I'm sorry, there's this annotation. It extends for the chatbot plugin interface. I mean, it implements, it extends for the chatbot plugin. And you see some methods that are instantiated here. Those methods are pretty standard. That's why I choose these two to put on that slide because they are the ones that really does the trick. And if you go to Facebook, I'm sorry, Facebook service. As I said, here is where the magic happens. You have the type of message that you can interact with. And the way it will answer is when the chat mechanism talks to your chatbot, it will know how to give it back the information in the sense that it can talk to the chat mechanism API. So basically it's the implementation of the API, but only the part that makes sense for your chat to chat with the chatbots and the chat service. So you can send messages and so on and so forth. As I said, this module is available on Drupal.org. So if you can go now, Drupal, you see you can get the code and see better than in the big screen here. But anyway, it's there and you can see. So let's go back now to the presentation. Okay, so what are the future improvements that we want to make on this module? And the future improvements we want to see for the chatbot as a whole. Of course, there's room for refactoring on this code. As I said, this code was forked from the Facebook module, White House build. But yeah, some things are, we improved, some things are the same and some things changed along the way and so we have to adapt it and we have to do this refactoring. You can of course create fancy and many other message types. So these message types are going to be used throughout the other plugins. So you can think of that as a way to make it better for the user interact and get a rich experience. And of course, there is the integration with the AI mechanisms. As I said in the beginning, this presentation is not about AI, but it's inevitable that you probably, inevitable that you want some kind of AI behind it and you will try to implement it. So this is one of the next steps we are looking for to implement. It's some kind of way to interact with these AI APIs so you can send the text the user send to you back to the AI API so it can evaluate and come back to a more relevant, just not just a simple workflow, but a more relevant just like Siri or any kind of way of think of that, like Amazon Lex or IBM Watson and it can give you a better answer. So these are the improvements we are looking for. There's a couple of other things that we would want to do. One of them is some of the things we have listed here is AI platforms. They really are chatbot platforms. So API.ai I think is a good example of that. We want to take a look at, so we have the idea of a chatbot. We have Drupal which I think if we're here we all know as a rich content management framework. And I think some of the experimentation we want to do as we look into the future is, does it make sense to necessarily be having maybe the intense or the behaviors assessed by the AI platform brought into Drupal, married with content and then shared back out to the chat service. And maybe it's worth doing an experiment to see if it makes sense to plug Drupal in as a system integration into some of these chat services so that the message could go from, say, Slack to API.ai it can go to Drupal then and pick up some content and share it back. So exactly what order these three integrated systems integrate in. I think we want to experiment with that as well. We know that Drupal has the rich content about a lot of the brands that we work with. We just want to know where to plug that into the experience around message evaluation and connecting with the chat service APIs. And then another thing that we want to take a look at is if we have customers, if we have consumers and users interacting and they're essentially exhibiting behaviors with the chat bot, how can we take some of those behaviors and push it into a platform like Aquialift to be able to better understand who that anonymous consumer is. Maybe taking that a step further, how can we pull some of the segmentation knowledge about the user out of a platform like Aquialift and pull it into the chat workflow experience so I can know if you're a returning customer, have you purchased before, are you in the evaluation part of your decision-making workflow. If I can understand better who you are from some of that behavioral segmentation data that we would get out of a tool like Lyft, we can then perhaps curate the chat experience or give you a variation on the workflow that's going to speak specifically to where you are in your user journey or in your customer journey. So those are some other things that we want to experiment with over the course of the year to better understand how we can take all of these different tools from behavior analysis, segmentation, artificial intelligence, natural language processing along with the content-rich repository that we have in Drupal to pull it together into a unified user or customer experience. Rafael, before we do questions, did you have something else you wanted to add? No, I guess that's pretty much it. The DrupalCon organization just asked us to mention about the code sprint that we'll run and also to take the survey about the DrupalCon. Right behind, right below you can see the link, this Google link is a link for this presentation in case you want it, it's a slider deck. I will publish it a little bit later after this presentation. Okay, that's it. We are open to questions if you have any. Can you use the microphone, please? Thank you for the presentation. I have a question regarding the chatbot module. Is there any way to implement some kind of decision tree? I'm sorry? Like to implement decision tree, like if you have two buttons, like A and B, and then user clicks A, and then there is another two buttons, D and E, and then if it clicks D, then, and so on. Yeah, you can pretty much do it as long as the way we created the steps, you can map any decision to a next step that can be another decision, and so you can go dip and dip and dip into these buttons mechanism. If I understand your question? Yeah. Yeah, you can do that right now. Oh, cool. And another question is, is there any capability of submission of web forms or web form integration, like to say what user enters? I don't think so. No, I think that's a good suggestion though for an improvement would be whether some sort of a logging mechanism or some sort of a, the ability to then be able to look through some logs and see the, not just the customer input, but see what the story was all the way through. I think about a chat system for maybe contact centers where you can go back and look through the log and see what each party said, so I think that could be an interesting opportunity for improvement. Yeah, right now you can see a history of what the user sent to the chat box. We have it log it in a no object in a table, so it goes on and on, and once it's done it says it's flag saying it's done. But yeah, we don't see, right now we don't have the chat box part because it can change, so it would be a good suggestion to have also what the chat box said to the user because right now we just have what the user said to the chat box. Okay, got it, thank you, no problem. Just a quick question, do you have any documentation for it or is this slide the documentation? Yeah, yeah, it's pretty much it. No, yeah, we are planning to release a documentation at least for the basic stuff. The code is almost entirely commented with at least the most important parts, but yeah, we definitely plan to soon release some documentation, how to set up, and it's not that hard right now, but we definitely are planning to do that. We could also, I mean, the best way is if there's specific questions, create an issue in the issue queue for the module and tag it with documentation and we can answer those specific questions. And honestly, those specific questions, we can take those answers, compile it into a page on drupal.org so that the answers are there for everyone. Yeah. That's really awesome, thank you guys. And I have quick two questions, so regarding message types, what do you think about sending back objects, like for example, like say, audio player objects, and also web views, like returning back simplified web view of your website, so what do you think about that message type? Yeah, the returning message, the message type that you are planning to implement, it's depend on the chat mechanism you're interacting with. If your chat mechanism, like Slack or Facebook, if they support a specific type of returning message, we can send it right now, you can create your simple message type and send it back. It's depend only on the way the chat mechanism is expected back. So right now, most mechanisms has something for a video, for image, for text, for buttons, but many of them doesn't have for audio or anything like that. But since they have that, it's as simple as just writing a small message type. I think Facebook is going to implement like Apple Music in two or one week. Oh, so yeah, as soon as they get that, we can implement that as easy as that. Thank you. Okay, thank you. I'm sorry, I couldn't hear you. Thank you. Well, you're talking about chat boxes, chat box, okay, on the back end, when we are having a conversation, mistakes can happen. Is there any mechanism that your chat box on the back and is supported by a cognitive system that can automatically do auto-corrections? Not yet. Not yet. Not yet, okay. But I thought you were talking about Watson. Yeah. And that's the reason. Is that part of the mechanism that Watson will do the cognitive corrections? Correct, that's the reason why we want to look into some of these AI platforms that are specifically designed around analyzing conversation, sentiment, and being able to pull meaning out of what's being sent through by the user so that we can have a more reliable way of understanding what the customer's asking for and how to respond. One more question if you have the time. The three modules that you explained, I think they were AI, something, bot, and Facebook, right? Facebook, right? What's the difference between the three? Why would I need three? Are there any pluses and minuses? Or are there any situations where you would say, gee, under these circumstances, you would use Facebook. Under these circumstances, you would use bot. I don't see if I really understand your question. I can try to answer. So the bot module, as far as we know, really keely tied into an IRC workflow. The Facebook Messenger module, once again, the two things that we, because we started with the Facebook Messenger module, the two limitations that we saw there, one tightly coupled to Facebook, so great if you want a Facebook Messenger bot, really doesn't help you at all if you want to use any other chat service. The second limitation that we saw was you have to code out the workflow in code. There's no UI that allows you to create the steps and start to tell the story. And then the AIML, Raphael, what was that one? Yeah, the AIML is just a specific tool to work with a specific, it's a specific module to work with a specific tool. I guess it's called Alice. It's an old chatbot. And it just sent back XML files to the server, to this chatbot. So yeah, it's very specific, and nothing related to the chatbots. We are proposing to build here. And all these APIs, they are restful? I'm sorry? APIs, are they restful APIs? The APIs for? No, no, they're not restful. Okay, thank you. We have one or two minutes left to any other final questions. Great. All right, well, thank you all once again. Please. Oh, thank you. Please do fill in the feedback survey. I know I'll be honest, I seldom do, but really do please fill in the feedback survey because we would like to hear what you have to say and how we can improve upon this for the future. Yeah, thank you. Thank you.