Search code examples
google-cloud-platformgoogle-apidialogflow-esgoogle-api-python-client

Cannot find the EntityType - SessionEntityType name is composed of Session name and EntityType.display_name


Even though I have provided the correct information in the SessionEntityTypes, the I am getting the following errors. Tried from both REST & Python options, please let me know if there is anything which I am missing in the integrations.

Request HTTP Method: POST

{
  "name": "projects/{projectId}/locations/asia-northeast1/agent/environments/draft/users/-/sessions/c973fe-e44-9b5-34e-b404439b7/entityTypes/speciality_types",
  "entities": [
    {
      "value": "APPLE_KEY",
      "synonyms": [
        "apple",
        "green apple",
        "crabapple"
      ]
    },
    {
      "value": "ORANGE_KEY",
      "synonyms": [
        "orange"
      ]
    }
  ],
  "entityOverrideMode": "ENTITY_OVERRIDE_MODE_SUPPLEMENT"
}

Response

{
  "error": {
    "code": 400,
    "message": "com.google.apps.framework.request.BadRequestException: Cannot find the EntityType of SessionEntityType 'projects/{projectId}/locations/asia-northeast1/agent/environments/draft/users/-/sessions/c973fe-e44-9b5-34e-b404439b7/entityTypes/speciality_types'. Please note that the SessionEntityType name is composed of Session name and EntityType.display_name.",
    "status": "INVALID_ARGUMENT"
  }
}

Google Try this API

enter image description here


Solution

  • I am going to paraphrase the issue here in order to ensure I’m not missing any details: you are attempting to create a sessionEntity using the “Try this API” tool, which is the Create (POST) version 2.

    The issue is that the “name” you are passing in the request body does not have a valid format for API v2.

    The format you are using for the name is:
    projects/<ProjectID>/locations/<LocationID>/agent/environments/<EnvironmentID>/users/<UserID>/sessions/<SessionID>/entityTypes/<EntityTypeDisplayName>

    Below I’ve listed the two valid name formats for v2 and as you can see the locations/<Location ID> is not needed:

    projects/<Project ID>/agent/sessions/<Session ID>/entityTypes/<Entity Type Display Name>
    

    and

    projects/<Project ID>/agent/environments/<Environment ID>/users/<User ID>/sessions/<Session ID>/entityTypes/<Entity Type Display Name>
    

    The below request body works as intended, I tested it in the same “Try this API” tool:

    {
    "name":"projects/{projectId}/agent/environments/draft/users/-/sessions/c973fe-e44-9b5-34e-b404439b7/entityTypes/speciality_types",
      "entities":[
         {
            "value":"APPLE_KEY",
            "synonyms":[
               "apple",
               "green apple",
               "crabapple"
            ]
         },
         {
            "value":"ORANGE_KEY",
            "synonyms":[
               "orange"
            ]
         }
      ],
      "entityOverrideMode":"ENTITY_OVERRIDE_MODE_SUPPLEMENT"
    }