Google Actions: invocation name duplicate - dialogflow-es

I'm currently working on a Google Action which is in alpha test with one Google account, and I need to move my action to another Google Account, keeping the same invocation name.
I first thought to just export the zip of my agent and import it in Dialogflow, using the same invocation name. But I read here that Google does not allow the same invocation name in two different Actions. Is it valid also if one of the agents in in alpha test, or is this valid only once the Action is published?
In summary, can I keep both Actions with the same name, leaving one in alpha test and publishing the second one in beta test or live?

Hello and welcome Alessia,
The short answer to your question is: No, you can't have two actions with the same Invocation Name, especially when one is deployed.
Let me briefly walk you through you my own experience: I also have two projects for one Action, one is for testing and the other is for production. When I try to use the same Invocation Name first error I encounter is in the panel:
Could not reserve your pronunciation 'Action Name'
But I thought; "But it still saves the details. I'm not going to deploy it anyway so I don't need it to be reserved." But when I try to test the Action in the Simulator, I encounter a second error:
You cannot use Actions deployed by others in the Simulator. If you want to try the Actions, use Google Assistant on your phone or other compatible devices.
In short, Simulator thinks that you're trying to invoke the Action that's on production and forbids it since it's not connected to your current project.
How Did I Get Around This?
It's quite simple actually: I named the test version of the Action "Action Name Dev". Since I won't ever be deploying this version, it's not a problem at all. I only use it to invoke the Action, it doesn't affect the conversational experience or the code.
If you have any other questions, go ahead and post it.

Related

NetSuite Script Works in SANDBOX but not PRODUCTION account

I have a very simple NetSuite scrip that sets the value of the externalid when the record is saved. I have done testing on the SB account and it is working as expected. Copying the same configuration into the production account and the script is not executing. I've even added some dialog boxes to see if I can see any activity but there is none. The script is deployed, released and has "all roles" as the audience.
Any ideas what I can do to get the script to work?
Thanks.
Is your sandbox a very recent copy of Production? Does it have all the same scripts deployed as there is in production? You may want to look at the scripted record list for User Event Scripts in both environments, make sure they are the same.
You could also post your code here for us to look at it.

Deploying an Azure Function from VS Code - Succesfull but not visible in the Portal

I created a function and I am trying to deploy it from VS Code by clicking the Deploy to Function App.... The Deployment runs successfully based on the output log - Deployment successful but then when I go to the portal, the function is not listed under Functions.
What shall I do and what is the problem here?
When I debug in VS Code, I get this: No job functions found. Try making your job classes and methods public. If you're using binding extensions (e.g. Azure Storage, ServiceBus, Timers, etc.) make sure you've called the registration method for the extension(s) in your startup code (e.g. builder.AddAzureStorage(), builder.AddServiceBus(), builder.AddTimers(), etc.).
Unfortunatly I would not know if those steps don't work for uploading. The deployment finishes, and every single time it becomes visible in my portal. Uh, maybe there is a slight difference. The app service itself is pre-created via terraform. Just the uploading of the code I do via VSC.
As far as deletion goes:
Open the resource group, in the list lookup the App Service. Select the checkbox in front of it. Delete in the top nav bar of that pane.
Trying to delete it any other way will indeed give you the "Not found" error.
I've had the same 'issue', in my case it turns out that the issue was a bad entry in the requirements.txt
I had an incorrect line with 'io' and when it was present despite the deployment appearing to complete successfully in VS code, the function was not updated if it was previously deployed or not deployed if it wasn't resulting in the same 'no results' in the functions list.
Having other requirements such as 'numpy' or 'scipy' worked just fine.
It's an old thread but maybe it'll be helpful to whoever gets here in the future.
Even as of now, some changes I make in VS Code seem to take time to be immediately visible on the portal. I had a similar issue with resources, i.e. creating a resource from VS Code wouldn't make it immediately visible on Azure Portal. You can always go to Functions on the portal and click Refresh. Also try going to Advanced Tools, then Kudu and checking if your function can be found there.
One word of advice: if you publish your functions from VS Code, then work on that resource only from VS Code. You will find it reiterated all over Azure Functions docs that:
Publishing to an existing function app overwrites the content of that
app in Azure.

stripe a similar object exists in test mode, but a live mode key was used to make this request

This is less a question and more of an answer to this issue that caused me several hours of aggravation. I did find the solution online but not in a direct or easy place.
It turns out that the problem actually had nothing to do with whether I was using test or live keys on my site.
I had deployed my code to heroku, updated my env to match the live keys and received the error listed in the title of this thread.
The solution is actually pretty simple and the problem actually exists in stripe not my code.
I had defined Subscription Plans in test, I then had to create new plans for the live version (no import ability, but that is a frustration for another day).
The problem is that you actually have to go back into your test plans, temporarily rename them, and then rename them back.
So if I have Plan-A in test and I create Plan-A in live, I then need to rename Plan-A in test to something else like Plan-A1. Then I can rename it back to Plan-A and Stripe then works properly.
Anyway, I hope this solves the issues for others because it is really annoying to try to figure out what is wrong and blaming your code is not always the case.

Actions on Google Console showing "Your app must have at least one action to test"

I am having this very weird problem which I don't understand how it happened. I have created this my own app and I added a lot of intents in it. But when I need to test this app under the simulator, I can't seem to set the Test status to active. It says that my app must have at least one action to test. I am really confused because I do have a lot of actions. Is there something that I am missing here?
Then I check the FactsApp sample which Google provided. The Test Status of that app seems to be switchable. I tried to check the settings of that app but I didn't find anything that I missed to set.
Please help. Thanks!
I have managed to solved the problem by myself. It seems to happen that I created an agent in API AI console that consist of a project ID that does that match any of my current projects.
I don't know how I did that. But because I was experimenting with the projects and agents. I somehow created projects of the same name but did not link it properly with the agent that I created.
You can check the project ID of your agent under the settings of that agent. Just click on the small gear located at the left side of your agent name.
So when you create an agent, make sure that its project ID is the same as the project ID of the correct project.
You have to have at least one intent which handles the GOOGLE_ASSISTANT_WELCOME event.
See the docs: https://developers.google.com/actions/apiai/define-actions

Can I reset the simulator's contacts and location permission settings for my app, to simulate a first-time usage scenario?

My iOS app currently has a deployment target of iOS 7 (although my scheme runs the iOS 9.2 simulator), and links with the AddressBook, AddressBookUI, and CoreLocation frameworks. I have a suite of Swift UI tests in Xcode 7 (not in Instruments). When a user first uses my app, they are asked for permission to access their contacts, and their location while the app is running. Since this involves a fair amount of code that needs to execute perfectly, I'd love to automate all of the possible outcomes and ensure the UI is in the desired state.
Can I use Xcode UI testing to reset the Simulator's settings for access to contacts and locations? For example, I could implement this in the setUp() function within my test case class. I've found some tutorials about how to respond to the dialogs, but before I get to that point, I need to simulate the condition where the permissions are requested. Here's a question that explains how to respond to such an alert.
Short answer: no. There is no API for UI Testing to reset the simulator (and therefore reset the permission dialogs). I suggest filing a bug report with Apple explaining why you need this.
UI Testing doesn't make it easy to test "unhappy paths." In your question you mentioned testing all of the flows for permissions. Without manually reseting the simulator between tests this will prove impossible. I suggest only testing the happy path with UI Testing and leaving the other cases to unit tests.
I understand that this is not ideal but for now it's a decent workaround. For what it's worth, that is the approach I take when testing our app. (The app asks for push notifications and location permissions.)
xcrun simctl privacy booted reset location <your_app_bundle_id>
Source: https://developer.apple.com/videos/play/wwdc2020/10647/
In UITesting, it is simple:
let app = XCUIApplication()
app.resetAuthorizationStatus(for: .location)
Here is how I would do it. I would delete the simulator data which will delete the saved settings, hopefully this works in your situation. In Swift:
let filemanager = NSFileManager.defaultManager()
do {
try filemanager.removeItemAtPath(NSHomeDirectory())
}
catch let error as NSError {
print("Ooops! Something went wrong: \(error)")
}
Just figure out a good spot to put that in your code and poof--simulator data gone.

Resources