I'm currently experiencing issues with Google's user storage object. This used to work fine, but lately different actions and environments have stopped working due to the user storage not persisting past the first intent. When investigating the issue I ran into the a stackoverflow post. It recommends to change from the Dialogflow SDK to the actionsOnGoogle SDK when you are having problems like this.
I've tried doing this, but when I change to the actions SDK I can no longer interact with the dialogflow context code.
Does changing to the actionSDK change anything about how the user storage works and if so, is it possible to migrate to the actionsSDK and keep using the dialogflow contexts?
Yes, of course you can manage the "context" of the conversation in an SDK Action but no, it is not "just like" DialogFlow. Take a look at the "data" and "userStorage" members of the conversation object. The former is used to store data across turns of a single conversation. The latter is used to persist data across conversations with your Action.
Related
I am trying to understand the different model in building a bot using dialogflow and came across this 2 methods.
Fulfillment model (with webhook enabled) documentation here
API Interactions documentation here
I understand that both of this models have their own pros and cons, and I understand how they both work. Most online examples are showing the fulfillment method (I guess that's more common?)
However, I would still like to ask what reason will it be to choose one or the other? If anyone had used either model before, what limitations are there?
p/s: I've look through quite a number of tutorials, and read through the dialogflow documentation.
the integration by fulfillment is indeed the default approach because you use DialogFlow to design your conversation flow and (big bonus) manage the integration with the various channels (ie Telegram, Facebook).
It is the easiest way to design a fully fledge conversation, you only need to worry about the post hooks that are sent to your backend to either save the data or alter the conversation (add contexts or trigger events).
Important remark: all user traffic (who says what) goes via Dialogflow cloud
The API interaction becomes a good option when you have already an existing frontend (say an existing application or web sites) and you want to plug in DialogFlow NLP capabilities.
I have done something like that to create a FAQ chatbot that called DialogFlow to identify which intent would match a certain phrase while the BOT was deployed in MS Teams.
The architecture would indeed look like the one in the documentation: MS Team ecosystem is the "End-User" part, then my Java app ("Your System") would use the API to call DialogFlow.
Important remark: only given statements (the ones you send) go to Dialogflow cloud
I am developing a Microsoft Teams Bot using the NodeJS v4 Bot Framework. This is the first time I have gone and developed a bot and it seems to me it is missing a core concept, conversations / previous message context. When the bot asks me how I am going and I answer "good" in the next message and following messages it doesn't seem to store in an object how I am going.
I have a work around for this by pushing answers into an array but it just seems strange that previous message context hasn't been implemented... Am I missing something?
I think what you might be missing is an understanding of Bot state management. This link gives an overview of the types of state (user vs conversation) as well as places you can store state (e.g. memory, Azure blob storage, etc.). Be aware that Cosmos DB, proposed in the article, can be an expensive option because of the high read state of bots (every turn results in a read, which is part of what Cosmos pricing is based on), so MongoDB for instance could be another possible option.
Another approach to "state" though is the concept of "dialogs", where there a specific "guided conversation" the user might be going through. As an example, in an flight booking scenario you would need departure location, destination, date, time, etc., so this is a multi-turn "mini conversation" and dialogs do their own state management in this context. See "Dialogs within the Bot Framework".
As an aside, the "array" approach you're taking is kind of similar to the in-memory state option, but it requires you to manage things 100%, it can't easily be scaled (with the built in state stuff, it's easy to switch out memory to another option), and it might not be multi-user safe (depending how you're working with the array, if you're saving one per user or so).
Hope that helps
I am new to the Azure Bot Framework and I am trying to do something that I think is quite simple.
I have a Node application that a few times a day needs to send notifications to various skype groups. I have been using skype-http for a while, but it is unreliable and not officially supported by Microsoft. So, I am looking to rebuild the notification system using azure services.
It seems like I should be creating an Azure Bot Function, but the Bot Functions use the V3 API, which is deprecated.
It looks like Web App Bots are now the recommended option to create bots, but they seem to be solving a slightly different problem. But going this route, it looks like I still need to set up an Azure Function as well as storage. So, it seems vastly more complex than my current implementation.
My question is: Should I be using a Bot Function, a Web App Bot, or something else entirely to send notifications to multiple chat groups?
EDIT: To be clear, I am looking for an officially supported solution. skype-http regularly breaks for us due to API changes, and the other node-based skype libraries are similarly brittle.
Or, please let me know if there is no Microsoft-supported solution, then at least I know I will be stuck using private APIs.
You should look at Azure Functions as your platform, instead. Azure Functions would allow you to make the API calls you need. Additionally, you can set it to run via a trigger (timer or http request).
Instead of skype-http, check out sky-web-plus (https://www.npmjs.com/package/sky-web-plus). It's basically a port of several other packages already out there, but is getting regular love from its developer (so, hopefully stable and up-to-date) and appears to do what you need. As the developer is active, you can reach out to him/her with any specific questions.
Azure Bot Framework would not be a good fit for this purpose, alone.
Hope of help!
Chatbot has been developed using IBM bulemix to respond the user queries of grade one students.
Suppose a question raised "What is the life cycle of the leaf?" As of now, Chatbot has no entities related to leaf, life cycle etc..
Chatbot identifies the above query as an irrelevant entity. For the above case is it possible call any Watson knowledge API to answer the above queries?
Or
Can we make any third party searches (google/bing).
Or
the only option we need teach more relevant entities to the chatbot
You can use Watson-Discovery Tool
https://www.ibm.com/watson/services/discovery/
As #Rabindra said, you can use Discovery. IBM Developers built one example using Conversation and Discovery service using Java. And I built one example using Node.js based on the Conversation simple example. You can read the README and will understand how it works.
Basically, you need to know: this example has one action variable to call for Discovery when don't have the "relevant information" for an answer to the user and the Discovery service is called for get relevant answers.
You can see more about in this video from Official IBM Watson channel.
See more about Discovery Service.
See the API Reference for using Discovery Service.
You can also check entity linking service from Bing: https://azure.microsoft.com/en-us/services/cognitive-services/entity-linking-intelligence-service/. It is in preview for now, so you will get limited queries per second but it is free for use.
I have 10 seconds response times through any channel. (WebChat and Facebook)
My endpoint is a PAAS instance located in the western United States.
The WebApp has an S3 size and the response times are constant (even if there is only one conversation).
I have the following questions:
Is there any way to optimize this?
What are the Azure Bot Framework SLAs?
As bot framework is a preview product, there is no current SLAs.
Are you using the default state storage? If so, part of the slow down you mentioned is probably related. We highly recommend implementing your own state service. There is a blog article here discussing the implementations there is also a repository here with samples. This is probably not 100% of your issue but it is probably at least part of it.
Another thing to keep in mind is where your bot is located in relationship to your WebChat client and what instance of the Bot Connector you are using this blog may provide more info. Please see the "Geographic Direct Line endpoints" section.