DialogFlow (C #) рдореЗрдВ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд╕рд╛рде CRUD рд╕рдВрдЪрд╛рд▓рди

рдкрд░рд┐рдЪрдп


рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдореИрдВрдиреЗ рдПрдХ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдХрд╛рдо рд╢реБрд░реВ рдХрд┐рдпрд╛, рдЬрд┐рд╕рдореЗрдВ Google рдХреА рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬреНрдЮрд╛рдд рд╕реЗрд╡рд╛ (рдПрдЖрдИ) - рдбрд╛рдпрд▓реЙрдЧрдлреНрд▓реЛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рдерд╛ред рд▓рдмреНрдмреЛрд▓реБрдЖрдм рдпрд╣ рдерд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдмреЙрдЯ (рдЯреЗрд▓реАрдЧреНрд░рд╛рдо) рдерд╛ рдЬреЛ рдХрдИ рд╕рд╛рдЗрдЯреЛрдВ рдХреЗ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рдерд╛, рдФрд░ рдЦреБрдж рдбрд╛рдпрд▓реЙрдЧрдлреНрд▓реЛ рдиреЗ рд╣рдореЗрдВ рдПрдХ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рд╣реА рд╕рдВрдЪрд╛рд░ рд╕рдВрд░рдЪрдирд╛ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХреА, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╡рд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдореБрдЭреЗ рдпрд╣ рдХрд╣рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣ рд▓реЗрдЦ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЕрднреА-рдЕрднреА рд╕реЗрд╡рд╛ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рд╣реИ рдпрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╣реБрдд рдХрдо рдЕрдиреБрднрд╡ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╢рд░реНрддреЗрдВ рд╕рдВрднрд╡ рд╣реИрдВ: рдЗрд░рд╛рджреЗ, рд╕рдВрджрд░реНрдн, рдХрд╛рд░реНрдп, рдШрдЯрдирд╛ рдФрд░ рд╣рдо - рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдХреБрдЫ рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рд╣реИред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд▓реЗрдЦ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдЬреЛ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрдпрд╛ рдХрд┐ рдХреЛрдб рдХреЗ рд╕рд╛рде CRUD рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

DialogFlow рдореЗрдВ рдПрдВрдЯрд┐рдЯреАрдЬ


DialogFlow Entities рдореЗрдВ рдХреБрдЫ рдЗрдХрд╛рдЗрдпрд╛рдБ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ ReferenceValue рдФрд░ Synonyms рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдПрдХ рдХреБрдВрдЬреА-рдореВрд▓реНрдп рдХреЗ рд╕рдорд╛рди рдХреБрдЫ, рдХреЗрд╡рд▓ рдЗрд╕ рдЕрдВрддрд░ рдХреЗ рд╕рд╛рде рдХрд┐ рдХрдИ рдкрд░реНрдпрд╛рдпрд╡рд╛рдЪреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЬрд┐рддрдирд╛ рдЕрдзрд┐рдХ рд╣реЛ, рдЙрддрдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ "рдмреЙрдЯ рдХреЗ рдЬреАрд╡рди рдХреЛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИ" рдФрд░ рдЙрд╕рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рдордЭрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдХрд┐рд╕ рдореВрд▓реНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ, рдФрд░ рдЪреЗрдХрдорд╛рд░реНрдХ рдлрдЬреА рдорд┐рд▓рд╛рди рд╕реЗ рдмреЙрдЯ рдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдореЗрдВ рднреА рдорджрдж рдорд┐рд▓реЗрдЧреА рдХрд┐ рджрд╛рдВрд╡ рдкрд░ рдХреНрдпрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдЖрдк рдПрдХ рдкрддреНрд░ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░рддреАрдХ рдХреЛ рдпрд╛рдж рдХрд░рддреЗ рд╣реЛрдВред рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

рдореЙрд╕реНрдХреЛ - рдореЙрд╕реНрдХреЛ, рдореЙрд╕реНрдХреЛ, рдореЙрд╕реНрдХреЛ ...

рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рднреНрд░рдордг рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдирд╛, рдореИрдВ рдпрд╣ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдПрдВрдЯрд┐рдЯреА рдХреЗ рд╕рд╛рде рд╣реИ рдХрд┐ рдмрд╣реБрдд рдЙрдкрджреНрд░рд╡ рд╣реИред рдмреЗрд╢рдХ, рдореИрдВ рдЗрд░рд╛рджреЛрдВ рдХреЗ рдЕрд░реНрде рдХреЛ рдХрдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рдЗрд╕реА рддрд░рд╣, рд▓реЗрдХрд┐рди рддрдереНрдп рдпрд╣ рд╣реИред

EntityTypes


рдпрд╣рд╛рдБ рдореЗрд░реЗ рд▓рд┐рдП рдкрд╣рд▓рд╛, рдЫреЛрдЯрд╛, рдмрдбрд╝рд╛ рдиреБрдХрд╕рд╛рди рдерд╛ред рдЖрдЦрд┐рд░рдХрд╛рд░, рдбреЙрдХреНрдпреВрдореЗрдВрдЯреЗрд╢рди рдореЗрдВ Entity рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╣реИрдВ, рдФрд░ EntityType рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╣реИрдВ - рдЙрдирдореЗрдВ рд╕реЗ рдХреМрди рд╕рд╛ рд╣реИ?

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдмрд╕ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рднреНрд░рдо рдкреИрджрд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ DialogFlow рдореЗрдВ рд╣реА EntityTypes рдХреЗ рд╕рд╛рде рдЯреИрдм рдХреЛ Entities рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ:

рдЫрд╡рд┐

EntityType: рдЫрд╡рд┐

Entitie: рдЫрд╡рд┐

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ DialogFlo рдореЗрдВ рд╣реА рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ Entity рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ Entries рд╣реИ (рдЕрд░реНрдерд╛рдд рдЗрд╕рдореЗрдВ рд╕рд╛рд░ рдФрд░ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ)ред

рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред

рдЖрдк рд╕реАрдзреЗ рдбрд╛рдпрд▓реЛрдлрд╝реНрд▓реЛ рдкрд░ рдПрдХ рдПрдВрдЯрд┐рдЯреА рдЯрд╛рдЗрдк рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЖрдЦрд┐рд░рдХрд╛рд░, рдПрдВрдЯрд┐рдЯреАрдЬ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдпрд╣ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдПрдВрдЯрд┐рдЯреА рдЯрд╛рдЗрдк рдпрд╣ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП)ред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, NuGet рдкреИрдХреЗрдЬ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ Google.Cloud.Dialogflow.V2ред рд▓реЗрдЦрди рдХреЗ рд╕рдордп, рд╕рдВрд╕реНрдХрд░рдг 1.1.0 рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:

рдЫрд╡рд┐

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рд╣рдо рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдПрдВрдЯрд┐рдЯреАрдЯрд╛рдЗрдкрдореЗрдВрдЯ рдХрд╣рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдмреБрдирд┐рдпрд╛рджреА рд╕реБрд╡рд┐рдзрд╛рдПрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреА:

using Google.Api.Gax;
using Google.Cloud.Dialogflow.V2;

public class EntityTypeManagement
    {
      //Create -   EntityType   Test1 (  ) 
      //projectId - Id    DialogFlow
      //displayName -         
        public async Task Create(string projectId, string displayName, EntityType.Types.Kind kind = 
      EntityType.Types.Kind.Map)
        {
            var client = await EntityTypesClient.CreateAsync();

            var entityType = new EntityType();
            entityType.DisplayName = displayName;
            entityType.Kind = kind;

            var createdEntityType = client.CreateEntityType(
                parent: new ProjectAgentName(projectId),
                entityType: entityType
            );

            Console.WriteLine($"Created EntityType: {createdEntityType.Name}");
        }
       
      //List -   EntityTypes   
      //projectId - Id    DialogFlow
        public async Task<PagedEnumerable<ListEntityTypesResponse,EntityType>> List(string projectId)
        {
            var client = await EntityTypesClient.CreateAsync();
            var response = client.ListEntityTypes(
                parent: new ProjectAgentName(projectId)
            );
            return response;
        }

       //GetEntityTypeId -  EntityType  
       //projectId - Id    DialogFlow
       //targetEventTypeName -  EntityType,    
        public async Task<string> GetEntityTypeId(string projectId,string targetEventTypeName)
        {
            var client = await EntityTypesClient.CreateAsync();
            var response = client.ListEntityTypes(
                parent: new ProjectAgentName(projectId)
            );
            string id = response.Where(x => x.DisplayName == targetEventTypeName).FirstOrDefault().Name;
            string returningId = id.Replace($"projects/{projectId}/agent/entityTypes/", "");
            return returningId;
        }

       //Delete  BatchDelete      EntityType
       //   entityTypeId
        public async Task Delete(string projectId, string entityTypeId)
        {
            var client = await EntityTypesClient.CreateAsync();

            client.DeleteEntityType(new EntityTypeName(projectId, entityTypeId: entityTypeId));

            Console.WriteLine($"Deleted EntityType: {entityTypeId}");

        }

        
        public async Task BatchDelete(string projectId, IEnumerable<string> entityTypeIds)
        {
            var client = await EntityTypesClient.CreateAsync();
            var entityTypeNames = entityTypeIds.Select(
                id => new EntityTypeName(projectId, id).ToString());
            client.BatchDeleteEntityTypes(new ProjectAgentName(projectId),
                entityTypeNames);
        }
    }

рдпрд╣рд╛рдБ рдпрд╣ рддреБрд░рдВрдд рдХрд╣рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреЗрд╡рд▓ рдХреЛрдИ рдЕрдкрдбреЗрдЯ рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ Create рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдкрдирд╛ рдлрд╝рдВрдХреНрд╢рди рдХрд░рддрд╛ рд╣реИред

рдЕрдм рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ EntityTypes рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреБрдирд┐рдпрд╛рджреА рддрд░реАрдХреЗ рд╣реИрдВ, рддреЛ рдЪрд▓рд┐рдП Entity рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рддреБрд░рдВрдд рдПрдХ EntityManagement рд╢реНрд░реЗрдгреА рдмрдирд╛рдПрдВ

public class EntityManagement
    {
       using Google.Cloud.Dialogflow.V2;        


      //Create -    Entity
      //entityTypeId - Id EntityType      Entity
      //entityValue - ReferenceValue  Entity
      // synonyms -    Entity
        public async Task Create(string projectId,
                                 string entityTypeId,
                                 string entityValue,
                                 string[] synonyms)
        {
            var client = await EntityTypesClient.CreateAsync();
            var entity = new EntityType.Types.Entity() { Value = entityValue};
            entity.Synonyms.AddRange(synonyms);
            
            var operation = await client.BatchCreateEntitiesAsync(
                parent: new EntityTypeName(projectId, entityTypeId),
                entities: new[] { entity }
            ); 
            operation.PollUntilCompleted();
        }

       //CreateMany -   Entities 
       //entityTypeId - Id EntityType      Entity
       //entities -  Entities  
        public async Task CreateMany(string projectId,string entityTypeId, IEnumerable<Entity> entities)
        {
            var client = await EntityTypesClient.CreateAsync();
            List<EntityType.Types.Entity> results = new List<EntityType.Types.Entity>();
            foreach (var item in entities)
            {
                var entity = new EntityType.Types.Entity() { Value = item.value };
                entity.Synonyms.AddRange(item.synonyms);
                results.Add(entity);
            }
           
            var operation = await client.BatchCreateEntitiesAsync(
                parent: new EntityTypeName(projectId, entityTypeId),
                entities: results.ToArray());
            operation.PollUntilCompleted();
        }

      //Delete -    Entity,   "string entityValue"   
     //string[] entityValue      entityValues: entityValue
     //    .
        public async Task Delete(string projectId, string entityTypeId, string entityValue)
        {
            var client = await EntityTypesClient.CreateAsync();

            var operation = await client.BatchDeleteEntitiesAsync(
                parent: new EntityTypeName(projectId, entityTypeId),
                entityValues: new[] { entityValue }
            );

            Console.WriteLine("Waiting for the entity deletion operation to complete.");
            operation.PollUntilCompleted();

            Console.WriteLine($"Deleted Entity: {entityValue}");

        }
        
      //List -   Entities  EntityType 
     public async Task<List<Entity>> List(string projectId, string entityTypeId)
        {
            var client = await EntityTypesClient.CreateAsync();
            var entityType = await client.GetEntityTypeAsync(new EntityTypeName(
                projectId, entityTypeId
            ));
            List<Entity> EntitiesList = new List<Entity>();
            
            foreach (var entity in entityType.Entities)
            {
                List<string> Synonyms = new List<string>();
                foreach (var item in entity.Synonyms)
                {
                    Synonyms.Add(item);
                }
                EntitiesList.Add(new Entity { value = entity.Value, synonyms = Synonyms.ToArray() });
                Synonyms = null;
            }

            return EntitiesList;
        }
    }

рд╣рдорд╛рд░рд╛ рдореЙрдбрд▓ рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рдЗрдХрд╛рдИ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░реЗрдЧрд╛:

public class Entity
    {
        public string value { get; set; }
        public string[] synonyms { get; set; }
    }

рд╣реЛ рдЧрдпрд╛, рд╕рднреА рдмреБрдирд┐рдпрд╛рджреА CRUD рд╕реБрд╡рд┐рдзрд╛рдПрдБ рддреИрдпрд╛рд░ рд╣реИрдВред рдлрд┐рд░ рд╕реЗ, рдЕрдкрдбреЗрдЯ рдореЗрдВ рд▓реМрдЯрдХрд░, рдЗрд╕реЗ рдЕрд▓рдЧ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреНрд░рд┐рдПрдЯ рднреА рдЕрдкрдбреЗрдЯ рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИрдВ рдФрд░, рдореБрдЭреЗ рд╕рд╣рдордд рд╣реЛрдирд╛ рд╣реЛрдЧрд╛, рдЕрднреА рднреА рдПрдХ "рд╣рд╛рд░реНрдбрдХреЛрдб" рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рд▓реЗрдЦ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ, рдЬреЛ рдореЗрд░реЗ рдЬреИрд╕реЗ, рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реАрдЖрд░рдпреВрдбреА рд╕рдВрдЪрд╛рд▓рди рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХреИрд╕реЗ рдХрд░реЗрдВ, рдпрд╣ рдкрддрд╛ рдирд╣реАрдВ рд▓рдЧрд╛ рд╕рдХреЗред

static void Main(string[] args)
        {
      EntityTypesManagement entityTypesManagement = new EntityTypesManagement();
      EntityManagement entityManagement = new EntityManagement();
       string ProjectId = "Your Project`s id";
       string EntityName = "Your EntityName";
      var entityId = await entityTypesManagement.GetEntityTypeId(ProjectId, EntityName);
       Entity entity =  new Entity{value = "1", synonyms = new[]{"1","1"}};
      /*await*/ entityManagement.Create(ProjectId,entityId,entity);
 }

Source: https://habr.com/ru/post/undefined/


All Articles