Available regions for mod_dialogflow
Closed this issue · 10 comments
Hello,
https://cloud.google.com/dialogflow/es/docs/how/region#detect-intent-region-java
Flows in Dialogflow are by default in the "global" region. However, is there any support for flows that are deployed in a different region? I tried contacting a flow deployed in "Europe | Belgium | europe-west1" for example and it failed
I realized that the region was hardcoded as the global one in here
The global URL is "dialogflow.googleapis.com"
The other URLs for specific regions have a prefix such as "europe-west1-dialogflow.googleapis.com"
Our infrastructure consists of FreeSWITCH + Drachtio Server + a Drachtio App
Error logs:
FreeSWITCH:
google_glue.cpp:316 StreamingDetectIntentRequest finished with err com.google.apps.framework.request.NotFoundException: No DesignTimeAgent found for project '<PROJECTID>'. (5):
Drachtio App:
5 NOT_FOUND: com.google.apps.framework.request.NotFoundException: No DesignTimeAgent found for project '<PROJECTID>'.","code":5,"details":"com.google.apps.framework.request.NotFoundException: No DesignTimeAgent found for project '<PROJECTID>'
I think the change would be more than that, that session name would need to be different as well?
true, the session name would also have to be changed depending on the region
projects/PROJECT_ID/locations/REGION_ID/agent/sessions/SESSION_ID
do you think this is something that will be supported by drachtio in the future?
Yes, I would like to support this. Just trying to figure out how to make it backwards compatible. Right now, someone can specify a project as either
project-id
or
project-id:environment
it seems like I need to provide a way for someone to additionally specify location-id
I've made changes to support this but not working yet. Following the instructions here, but getting back an error:
Request had invalid authentication credentials.
Expected OAuth 2 access token, login cookie or other valid authentication credential.
One thing not clear in the instructions is this statement they make:
if you need to manually provide a credentials file in your code, you need to take one additional step
when calling a regionalized endpoint. Set the scope to https://www.googleapis.com/auth/cloud-platform
when generating your authentication credentials
They then give an example of doing so in Java; however, I can not find any place in the C++ grpc api to accomplish the same thing (i.e., setting the scope). If anyone with knowledge in this area wants to contribute a thought, please do. Otherwise I'm kind of blocked at the moment..
In case anyone is interested, here is a gist of a grpc debug log when I try to connect to a dialogflow agent in europe-west1.
I'm creating the credentials like this:
auto callCreds = grpc::ServiceAccountJWTAccessCredentials(var, INT64_MAX);
auto creds = grpc::CompositeChannelCredentials(channelCreds, callCreds);
m_channel = grpc::CreateChannel(endpoint, creds);
where 'var' has the json key for the service account of the gcp project associated with the dialogflow agent.
current changes are on the feature/dialogflow-location-support branch.
I've also updated to grpc v1.39.1 for testing on this branch.
related:
this is addressed in PR 67.
Will close this issue once merged
here is an example shell script showing how to build with the proper versions of grpc and googleapis
ansible script updated here