I want to be able to talk with Google Assistant, but connect the Actions project directly to an NLP service I already have running on my server. In other words, NOT use dialogflow.
All the following examples show how to do this.
With Rasa
https://blog.rasa.com/going-beyond-hey-google-building-a-rasa-powered-google-assistant/
With LUIS
https://www.grokkingandroid.com/using-the-actions-sdk/
https://dzone.com/articles/using-the-actions-sdk-for-google-assistant-develop
With Watson
https://www.youtube.com/watch?v=no0R0bSkHXc
They use the actions.intent.MAIN as the invocation and actions.intent.TEXT for all other utterances from the talker.
This is what I need. I don’t want to create a load of intents, with utterance phrases, inside the Action because I just want all the phrases spoken by the talker to be passed to my server, and for my NLP service to deal with them.
So I set up a new Action project, install the Actions CLI and then spend 3 days trying all possible combinations without success, because all these examples are using gactions cli 2.1.3 and Google have now moved on to gactions cli 3.1.0.
Not only have the commands changed, but so too has the file formats and structure.
It appears there is also a new Google Actions Console, and actions.intent.TEXT is no longer available.
My Action is webhook connected to my server, but I cannot figure out how to get the action.intent.TEXT included and working.
Everything I find, even here
Publishing Actions on google without Dialogflow
is pre version update and follows the same pattern.
Can anyone point to an up-to-date, v3.1.0, discussion, tutorial or example about how to send all talker phrases through to an NLP that isn’t dialogflow, or has Google closed that avenue?
Is it possible to somehow go back and use the 2.1 CLI either with the new Console or revert the console back. (I have both CLI versions, I can see how different their commands are)
Is it possible to go back and use 2.1?
There is no way to go back to AoG 2. You probably also don't want to do so - newer features aren't available with v2 and are only available with v3.
Can I use my own NLP with v3?
Yes, although it isn't as obvious, and there are some changes in semantics.
As an overview, what you'll need to do is:
Create a Type that can accept "Free form text". I usually call this type "Any".
In the console, it looks something like this:
Create a Custom Intent that has a single parameter of this Any Type and at least one phrase that captures everything for this parameter. (So you should add one training phrase, highlight the entire phrase, and set it for the parameter. Sometimes I also add additional phrases that includes words that I don't want to capture.) I usually call the Intent "matchAny" and the parameter "any".
In the console, it could be something like this:
Finally, you'll have a Scene that you transition to from the Main invocation. When it matches the "matchAny" Intent, it should call your webhook with a handler name. Your webhook will be called with the "any" parameter set with the user utterance. (Note that the JSON has also changed.
Again, the console might have it looking something like this:
That seems like a lot of work. Isn't there just some way to do all that from the command line?
Yes. You can do all of that in the configuration files that the CLI accesses and then upload it. (You can then also use the console to review the configuration, if necessary, to make sure they're configured as you expect. You can shift back and forth between them as appropriate.)
Google also has a github repository that contains most of the files pre-configured for this sort of setup.
You will need to update the configuration from the repository to handle the webhook correctly (it includes code to illustrate what is happening using the inline code editor) and to add your project ID.
I made an app and added this one to Launchpad with application type "SAPUI5-Fiori-App using LPD_CUST". Now I was taught, that this is application type deprecated and I shall use application type "SAPUI5-Fiori-App".
I tried to do it and tried to copy the necessary entries from an app, that already has these settings, but I cannot copy those for my application because I dont know what to fill into the fields "URL" and "ID".
I suppose the field "URL" needs a SICF-service with path "/sap/bc/ui5_ui5/sap/". But for my namespace there is no service generated wihtin that path. So I created this service manually. But I don't know if this is the correct way. I just gave it a try.
And the field "ID" has some entry like com.customersname.APPNAME. But I have no clue where I can find this information.
Furhtermore I cannot find an manual or instruction in the internet for adding an app to LPD with this application type. I can only find some information for application type "SAPUI5-Fiori-App using LPD_CUST".
I hope somebody can help me and give me a hint what to do or where I can find a manual for my case.
Many thanks in advance!
I'm a complete newb in this field, so started with the tutorial in the documentation. This is the page where I'm having problem.
I'm able to create the welcome dialog, and changes in the anything_else dialog are reflecting fine. But when I create a new dialog and set the trigger to the intent, it does not work. I've tried typing in the name, copy pasting it, clicking on (create new condition) and not. Tried different browsers and restarted project too.
There is a dropdown on the text that I type in the bot panel that says choose intent name and gives the list of two intents I've made. When I try clicking on the intent it's supposed to be in, I get this error :
Unable to change the intent. Error: Unique Violation: The value "good morning" already exists
I don't know what I'm doing wrong and googling it gives no result! Comment sections on different websites too seem to be having no problem with it as well.
Any help is appreciated!
Edit : JSON as downloaded from the project menu:
{"name":"Car tutorial","created":"2017-04-30T16:42:55.215Z","intents":[{"intent":"greeting","created":"2017-04-30T17:50:08.575Z","updated":"2017-04-30T17:50:08.575Z","examples":[{"text":"Good afternoon","created":"2017-04-30T17:50:08.575Z","updated":"2017-04-30T17:50:08.575Z"},{"text":"Good evening","created":"2017-04-30T17:50:08.575Z","updated":"2017-04-30T17:50:08.575Z"},{"text":"Good morning","created":"2017-04-30T17:50:08.575Z","updated":"2017-04-30T17:50:08.575Z"},{"text":"Hello","created":"2017-04-30T17:50:08.575Z","updated":"2017-04-30T17:50:08.575Z"},{"text":"Hi","created":"2017-04-30T17:50:08.575Z","updated":"2017-04-30T17:50:08.575Z"}],"description":null},{"intent":"turn_on","created":"2017-04-30T17:49:26.312Z","updated":"2017-04-30T17:49:26.312Z","examples":[{"text":"Air on please","created":"2017-04-30T17:49:26.312Z","updated":"2017-04-30T17:49:26.312Z"},{"text":"I need lights","created":"2017-04-30T17:49:26.312Z","updated":"2017-04-30T17:49:26.312Z"},{"text":"Listen to some music","created":"2017-04-30T17:49:26.312Z","updated":"2017-04-30T17:49:26.312Z"},{"text":"Play some tunes","created":"2017-04-30T17:49:26.312Z","updated":"2017-04-30T17:49:26.312Z"},{"text":"Turn on the headlights","created":"2017-04-30T17:49:26.312Z","updated":"2017-04-30T17:49:26.312Z"}],"description":null}],"updated":"2017-04-30T17:56:05.345Z","entities":[{"entity":"appliance","values":[{"value":"air conditioning","created":"2017-04-30T17:51:41.232Z","updated":"2017-04-30T17:51:41.232Z","metadata":null,"synonyms":["air"]},{"value":"headlights","created":"2017-04-30T17:51:41.232Z","updated":"2017-04-30T17:51:41.232Z","metadata":null,"synonyms":["lights"]},{"value":"music","created":"2017-04-30T17:51:41.232Z","updated":"2017-04-30T17:51:41.232Z","metadata":null,"synonyms":["radio"]}],"created":"2017-04-30T17:51:41.232Z","updated":"2017-04-30T17:51:41.232Z","metadata":null,"description":null},{"entity":"genre","values":[{"value":"classical","created":"2017-04-30T17:52:56.711Z","updated":"2017-04-30T17:52:56.711Z","metadata":null,"synonyms":["symphonic"]},{"value":"rhythm and blues","created":"2017-04-30T17:52:56.711Z","updated":"2017-04-30T17:52:56.711Z","metadata":null,"synonyms":["r&b"]},{"value":"rock","created":"2017-04-30T17:52:56.711Z","updated":"2017-04-30T17:52:56.711Z","metadata":null,"synonyms":["pop"]}],"created":"2017-04-30T17:52:56.711Z","updated":"2017-04-30T17:52:56.711Z","metadata":null,"description":null}],"language":"en","metadata":null,"description":"","dialog_nodes":[{"go_to":null,"output":{"text":{"values":["Hi! What can I do for you?"],"selection_policy":"sequential"}},"parent":null,"context":null,"created":"2017-04-30T17:55:24.851Z","updated":"2017-04-30T17:55:48.868Z","metadata":null,"conditions":"#greeting","description":null,"dialog_node":"node_3_1493574922154","previous_sibling":"node_1_1493574794528"},{"go_to":null,"output":{"text":{"values":["I'm sorry, I don't understand. Please try again."],"selection_policy":"sequential"}},"parent":null,"context":null,"created":"2017-04-30T17:53:39.404Z","updated":"2017-04-30T17:56:05.345Z","metadata":null,"conditions":"anything_else","description":null,"dialog_node":"node_5_1493574962852","previous_sibling":"node_3_1493574922154"},{"go_to":null,"output":{"text":{"values":["Welcome to the car demo!"],"selection_policy":"sequential"}},"parent":null,"context":null,"created":"2017-04-30T17:53:17.084Z","updated":"2017-04-30T17:53:57.004Z","metadata":null,"conditions":"welcome","description":null,"dialog_node":"node_1_1493574794528","previous_sibling":null}],"workspace_id":"2b6d0fdd-c04f-40e0-9310-0bba1ad38cef","counterexamples":[]}
Based on attached JSON, your problem is that Watson conversation is stuck in the training process (if the pink message is showing a long time, that means he stuck).
I cannot explain why it happened. But I know the solution, just use "conversation_start" instead of "welcome" trigger
Most probably, you placed "anything_else" node above your intent node.
Anything_else should be the latest node, because watson is executing it sequentional, once he will find match, it will go into.
Be sure, that you have the same order:
I'm migrating a large amount of projects from a on premise tfs2010 to vso, nearly all of them was able to migrate without any problems, but a few are creating errors. I am using Opshub Integration Manager Framework-OVSMU-V1.2.0.000.
1.
OH-TFS-Connector-0054: Test Step Id cannot be empty and It must be a valid number. Please check the Mapping and add valid mapping for the Test Step Id.
The most common error. This error is also described in opshub-visual-studio-online-migration-utility-test-cases-failing, but has yet to receive an accepted answer. As mentioned in this post the cause if the problem might be Shared Steps, so I tried removing one from a test case, and that made it pass in the migration utility. Unfortunately I need those test cases and it is not feasible for me to just delete them.
2.
OH-TFS-Connector-0051: Operation failed getCollectionMetaData. Server Error : TF201063: Adding a Test Case link to work item 18374 would result in a circular relationship. To create this link, evaluate the existing links, and remove one of the other links in the cycle.
After inspecting the Work Items that causes the error and concluding that there is no links, and no clear circular reference, not even a Shared Step linking to work item 18374. Upon further inspection I noticed that work item 18374 doesn't even exist.
Any help would be much appreciated.
OH-TFS-Connector-0054: Test Step Id cannot be empty and It must be a valid number. Please check the Mapping and add valid mapping for the Test Step Id.
This issue is addressed in latest release of OVSMU (1.3.0.000). You can download from
https://visualstudiogallery.msdn.microsoft.com/28a90a17-d00c-4660-b7ae-42d58315ccf2
OH-TFS-Connector-0051: Operation failed getCollectionMetaData. Server Error : TF201063: Adding a Test Case link to work item 18374 would result in a circular relationship.
This issue is scheduled for next release which will be out shortly. Check Visual Studio Gallery for further updates.
Thanks.
I've started investigating alternatives to my project and a few questions came out that I couldn't answer by myself.
The problem is: I want to create a web page able to access multiple Magento instances installed in the same server. Currently, I have one Magento instance per client and this project will access several Magneto instances to export reports from each one (for example).
The alternatives I thought til this moment are:
Have another Magento instance, create a new module within it that changes its 'database target' before triggering operations/queries;
Questions until this moment:
Can I 'change the database target' of a Magento instance?
How can I access data from a Magento instance without appeal to SOAP/REST?
I want to re-use some components (grids, tabs, forms..) from Magento, that's why I'm not considering an independent project (Zend, for instance) that can access this code from another projects. Does it make sense?
Any other idea?
==Edited==
Thanks by the tips and sorry by my ignorance. The comments let me believe that I'm able to execute something like this:
// File myScript.php
require '/home/DOMAIN1/app/Mage.php';
Mage::app('default');
// get some products from DOMAIN1
require '/home/DOMAIN2/app/Mage.php';
Mage::app('default');
// get some products from DOMAIN2
Is it right? Can I execute require twice (and override things from first require)?
==Edited2==
I'm still trying to connect to several Magento instances from a single third party file. Is there any tip? I'm facing several/different errors at this moment.
The only thing I know is that I can still rely on SOAP to get the information I need, but this will be expensive.
Thanks!
The easiest way would be to include Mage.php from each shop instance. You would need to use namespaces or some other trickery to be able to load more then one.
Or if that doesn't work - make your own API in a separate file to get what you want from one shop, and combine the results in the PHP-file that calls the API.
Here's a sample on how to use Magento functionality outside of Magento:
require 'app/Mage.php';
if (!Mage::isInstalled()) {
echo "Application is not installed yet, please complete install wizard first.";
exit;
}
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
// your custom code here, for example, get the product model..
$productModel = Mage::getModel('catalog/product');