:doc:`ConnectWisdomService <../../wisdom>` / Client / create_knowledge_base

*********************
create_knowledge_base
*********************



.. py:method:: ConnectWisdomService.Client.create_knowledge_base(**kwargs)

  

  Creates a knowledge base.

   

  .. note::

    

    When using this API, you cannot reuse `Amazon AppIntegrations <https://docs.aws.amazon.com/appintegrations/latest/APIReference/Welcome.html>`__ DataIntegrations with external knowledge bases such as Salesforce and ServiceNow. If you do, you'll get an ``InvalidRequestException`` error.

     

    For example, you're programmatically managing your external knowledge base, and you want to add or remove one of the fields that is being ingested from Salesforce. Do the following:

     

    
    * Call `DeleteKnowledgeBase <https://docs.aws.amazon.com/wisdom/latest/APIReference/API_DeleteKnowledgeBase.html>`__.
     
    * Call `DeleteDataIntegration <https://docs.aws.amazon.com/appintegrations/latest/APIReference/API_DeleteDataIntegration.html>`__.
     
    * Call `CreateDataIntegration <https://docs.aws.amazon.com/appintegrations/latest/APIReference/API_CreateDataIntegration.html>`__ to recreate the DataIntegration or a create different one.
     
    * Call CreateKnowledgeBase.
    

    

  

  See also: `AWS API Documentation <https://docs.aws.amazon.com/goto/WebAPI/wisdom-2020-10-19/CreateKnowledgeBase>`_  


  **Request Syntax**
  ::

    response = client.create_knowledge_base(
        clientToken='string',
        description='string',
        knowledgeBaseType='EXTERNAL'|'CUSTOM'|'QUICK_RESPONSES',
        name='string',
        renderingConfiguration={
            'templateUri': 'string'
        },
        serverSideEncryptionConfiguration={
            'kmsKeyId': 'string'
        },
        sourceConfiguration={
            'appIntegrations': {
                'appIntegrationArn': 'string',
                'objectFields': [
                    'string',
                ]
            }
        },
        tags={
            'string': 'string'
        }
    )
    
  :type clientToken: string
  :param clientToken: 

    A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the Amazon Web Services SDK populates this field. For more information about idempotency, see `Making retries safe with idempotent APIs <https://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/>`__.

    This field is autopopulated if not provided.

  
  :type description: string
  :param description: 

    The description.

    

  
  :type knowledgeBaseType: string
  :param knowledgeBaseType: **[REQUIRED]** 

    The type of knowledge base. Only CUSTOM knowledge bases allow you to upload your own content. EXTERNAL knowledge bases support integrations with third-party systems whose content is synchronized automatically.

    

  
  :type name: string
  :param name: **[REQUIRED]** 

    The name of the knowledge base.

    

  
  :type renderingConfiguration: dict
  :param renderingConfiguration: 

    Information about how to render the content.

    

  
    - **templateUri** *(string) --* 

      A URI template containing exactly one variable in ``${variableName} ``format. This can only be set for ``EXTERNAL`` knowledge bases. For Salesforce, ServiceNow, and Zendesk, the variable must be one of the following:

       

      
      * Salesforce: ``Id``, ``ArticleNumber``, ``VersionNumber``, ``Title``, ``PublishStatus``, or ``IsDeleted``
       
      * ServiceNow: ``number``, ``short_description``, ``sys_mod_count``, ``workflow_state``, or ``active``
       
      * Zendesk: ``id``, ``title``, ``updated_at``, or ``draft``
      

       

      The variable is replaced with the actual value for a piece of content when calling `GetContent <https://docs.aws.amazon.com/wisdom/latest/APIReference/API_GetContent.html>`__.

      

    
  
  :type serverSideEncryptionConfiguration: dict
  :param serverSideEncryptionConfiguration: 

    The configuration information for the customer managed key used for encryption.

     

    This KMS key must have a policy that allows ``kms:CreateGrant``, ``kms:DescribeKey``, and ``kms:Decrypt/kms:GenerateDataKey`` permissions to the IAM identity using the key to invoke Wisdom.

     

    For more information about setting up a customer managed key for Wisdom, see `Enable Amazon Connect Wisdom for your instance <https://docs.aws.amazon.com/connect/latest/adminguide/enable-wisdom.html>`__.

    

  
    - **kmsKeyId** *(string) --* 

      The customer managed key used for encryption. For more information about setting up a customer managed key for Wisdom, see `Enable Amazon Connect Wisdom for your instance <https://docs.aws.amazon.com/connect/latest/adminguide/enable-wisdom.html>`__. For information about valid ID values, see `Key identifiers (KeyId) <https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id>`__.

      

    
  
  :type sourceConfiguration: dict
  :param sourceConfiguration: 

    The source of the knowledge base content. Only set this argument for EXTERNAL knowledge bases.

    .. note::    This is a Tagged Union structure. Only one of the     following top level keys can be set: ``appIntegrations``. 

  
    - **appIntegrations** *(dict) --* 

      Configuration information for Amazon AppIntegrations to automatically ingest content.

      

    
      - **appIntegrationArn** *(string) --* **[REQUIRED]** 

        The Amazon Resource Name (ARN) of the AppIntegrations DataIntegration to use for ingesting content.

         

        
        * For `Salesforce <https://developer.salesforce.com/docs/atlas.en-us.knowledge_dev.meta/knowledge_dev/sforce_api_objects_knowledge__kav.htm>`__, your AppIntegrations DataIntegration must have an ObjectConfiguration if objectFields is not provided, including at least ``Id``, ``ArticleNumber``, ``VersionNumber``, ``Title``, ``PublishStatus``, and ``IsDeleted`` as source fields.
         
        * For `ServiceNow <https://developer.servicenow.com/dev.do#!/reference/api/rome/rest/knowledge-management-api>`__, your AppIntegrations DataIntegration must have an ObjectConfiguration if objectFields is not provided, including at least ``number``, ``short_description``, ``sys_mod_count``, ``workflow_state``, and ``active`` as source fields.
         
        * For `Zendesk <https://developer.zendesk.com/api-reference/help_center/help-center-api/articles/>`__, your AppIntegrations DataIntegration must have an ObjectConfiguration if ``objectFields`` is not provided, including at least ``id``, ``title``, ``updated_at``, and ``draft`` as source fields.
         
        * For `SharePoint <https://learn.microsoft.com/en-us/sharepoint/dev/sp-add-ins/sharepoint-net-server-csom-jsom-and-rest-api-index>`__, your AppIntegrations DataIntegration must have a FileConfiguration, including only file extensions that are among ``docx``, ``pdf``, ``html``, ``htm``, and ``txt``.
         
        * For `Amazon S3 <https://aws.amazon.com/s3/>`__, the ObjectConfiguration and FileConfiguration of your AppIntegrations DataIntegration must be null. The ``SourceURI`` of your DataIntegration must use the following format: ``s3://your_s3_bucket_name``. 

        .. warning::

          The bucket policy of the corresponding S3 bucket must allow the Amazon Web Services principal ``app-integrations.amazonaws.com`` to perform ``s3:ListBucket``, ``s3:GetObject``, and ``s3:GetBucketLocation`` against the bucket.

        
        

        

      
      - **objectFields** *(list) --* 

        The fields from the source that are made available to your agents in Wisdom. Optional if ObjectConfiguration is included in the provided DataIntegration.

         

        
        * For `Salesforce <https://developer.salesforce.com/docs/atlas.en-us.knowledge_dev.meta/knowledge_dev/sforce_api_objects_knowledge__kav.htm>`__, you must include at least ``Id``, ``ArticleNumber``, ``VersionNumber``, ``Title``, ``PublishStatus``, and ``IsDeleted``.
         
        * For `ServiceNow <https://developer.servicenow.com/dev.do#!/reference/api/rome/rest/knowledge-management-api>`__, you must include at least ``number``, ``short_description``, ``sys_mod_count``, ``workflow_state``, and ``active``.
         
        * For `Zendesk <https://developer.zendesk.com/api-reference/help_center/help-center-api/articles/>`__, you must include at least ``id``, ``title``, ``updated_at``, and ``draft``.
        

         

        Make sure to include additional fields. These fields are indexed and used to source recommendations.

        

      
        - *(string) --* 

        
    
    
  
  :type tags: dict
  :param tags: 

    The tags used to organize, track, or control access for this resource.

    

  
    - *(string) --* 

    
      - *(string) --* 

      


  
  :rtype: dict
  :returns: 
    
    **Response Syntax**

    
    ::

      {
          'knowledgeBase': {
              'description': 'string',
              'knowledgeBaseArn': 'string',
              'knowledgeBaseId': 'string',
              'knowledgeBaseType': 'EXTERNAL'|'CUSTOM'|'QUICK_RESPONSES',
              'lastContentModificationTime': datetime(2015, 1, 1),
              'name': 'string',
              'renderingConfiguration': {
                  'templateUri': 'string'
              },
              'serverSideEncryptionConfiguration': {
                  'kmsKeyId': 'string'
              },
              'sourceConfiguration': {
                  'appIntegrations': {
                      'appIntegrationArn': 'string',
                      'objectFields': [
                          'string',
                      ]
                  }
              },
              'status': 'CREATE_IN_PROGRESS'|'CREATE_FAILED'|'ACTIVE'|'DELETE_IN_PROGRESS'|'DELETE_FAILED'|'DELETED',
              'tags': {
                  'string': 'string'
              }
          }
      }
      
    **Response Structure**

    

    - *(dict) --* 
      

      - **knowledgeBase** *(dict) --* 

        The knowledge base.

        
        

        - **description** *(string) --* 

          The description.

          
        

        - **knowledgeBaseArn** *(string) --* 

          The Amazon Resource Name (ARN) of the knowledge base.

          
        

        - **knowledgeBaseId** *(string) --* 

          The identifier of the knowledge base. This should not be a QUICK_RESPONSES type knowledge base if you're storing Wisdom Content resource to it.

          
        

        - **knowledgeBaseType** *(string) --* 

          The type of knowledge base.

          
        

        - **lastContentModificationTime** *(datetime) --* 

          An epoch timestamp indicating the most recent content modification inside the knowledge base. If no content exists in a knowledge base, this value is unset.

          
        

        - **name** *(string) --* 

          The name of the knowledge base.

          
        

        - **renderingConfiguration** *(dict) --* 

          Information about how to render the content.

          
          

          - **templateUri** *(string) --* 

            A URI template containing exactly one variable in ``${variableName} ``format. This can only be set for ``EXTERNAL`` knowledge bases. For Salesforce, ServiceNow, and Zendesk, the variable must be one of the following:

             

            
            * Salesforce: ``Id``, ``ArticleNumber``, ``VersionNumber``, ``Title``, ``PublishStatus``, or ``IsDeleted``
             
            * ServiceNow: ``number``, ``short_description``, ``sys_mod_count``, ``workflow_state``, or ``active``
             
            * Zendesk: ``id``, ``title``, ``updated_at``, or ``draft``
            

             

            The variable is replaced with the actual value for a piece of content when calling `GetContent <https://docs.aws.amazon.com/wisdom/latest/APIReference/API_GetContent.html>`__.

            
      
        

        - **serverSideEncryptionConfiguration** *(dict) --* 

          The configuration information for the customer managed key used for encryption.

           

          This KMS key must have a policy that allows ``kms:CreateGrant``, ``kms:DescribeKey``, and ``kms:Decrypt/kms:GenerateDataKey`` permissions to the IAM identity using the key to invoke Wisdom.

           

          For more information about setting up a customer managed key for Wisdom, see `Enable Amazon Connect Wisdom for your instance <https://docs.aws.amazon.com/connect/latest/adminguide/enable-wisdom.html>`__.

          
          

          - **kmsKeyId** *(string) --* 

            The customer managed key used for encryption. For more information about setting up a customer managed key for Wisdom, see `Enable Amazon Connect Wisdom for your instance <https://docs.aws.amazon.com/connect/latest/adminguide/enable-wisdom.html>`__. For information about valid ID values, see `Key identifiers (KeyId) <https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id>`__.

            
      
        

        - **sourceConfiguration** *(dict) --* 

          Source configuration information about the knowledge base.

          .. note::    This is a Tagged Union structure. Only one of the     following top level keys will be set: ``appIntegrations``.     If a client receives an unknown member it will     set ``SDK_UNKNOWN_MEMBER`` as the top level key,     which maps to the name or tag of the unknown     member. The structure of ``SDK_UNKNOWN_MEMBER`` is     as follows::

                    'SDK_UNKNOWN_MEMBER': {'name': 'UnknownMemberName'}


        
          

          - **appIntegrations** *(dict) --* 

            Configuration information for Amazon AppIntegrations to automatically ingest content.

            
            

            - **appIntegrationArn** *(string) --* 

              The Amazon Resource Name (ARN) of the AppIntegrations DataIntegration to use for ingesting content.

               

              
              * For `Salesforce <https://developer.salesforce.com/docs/atlas.en-us.knowledge_dev.meta/knowledge_dev/sforce_api_objects_knowledge__kav.htm>`__, your AppIntegrations DataIntegration must have an ObjectConfiguration if objectFields is not provided, including at least ``Id``, ``ArticleNumber``, ``VersionNumber``, ``Title``, ``PublishStatus``, and ``IsDeleted`` as source fields.
               
              * For `ServiceNow <https://developer.servicenow.com/dev.do#!/reference/api/rome/rest/knowledge-management-api>`__, your AppIntegrations DataIntegration must have an ObjectConfiguration if objectFields is not provided, including at least ``number``, ``short_description``, ``sys_mod_count``, ``workflow_state``, and ``active`` as source fields.
               
              * For `Zendesk <https://developer.zendesk.com/api-reference/help_center/help-center-api/articles/>`__, your AppIntegrations DataIntegration must have an ObjectConfiguration if ``objectFields`` is not provided, including at least ``id``, ``title``, ``updated_at``, and ``draft`` as source fields.
               
              * For `SharePoint <https://learn.microsoft.com/en-us/sharepoint/dev/sp-add-ins/sharepoint-net-server-csom-jsom-and-rest-api-index>`__, your AppIntegrations DataIntegration must have a FileConfiguration, including only file extensions that are among ``docx``, ``pdf``, ``html``, ``htm``, and ``txt``.
               
              * For `Amazon S3 <https://aws.amazon.com/s3/>`__, the ObjectConfiguration and FileConfiguration of your AppIntegrations DataIntegration must be null. The ``SourceURI`` of your DataIntegration must use the following format: ``s3://your_s3_bucket_name``. 

              .. warning::

                The bucket policy of the corresponding S3 bucket must allow the Amazon Web Services principal ``app-integrations.amazonaws.com`` to perform ``s3:ListBucket``, ``s3:GetObject``, and ``s3:GetBucketLocation`` against the bucket.

              
              

              
            

            - **objectFields** *(list) --* 

              The fields from the source that are made available to your agents in Wisdom. Optional if ObjectConfiguration is included in the provided DataIntegration.

               

              
              * For `Salesforce <https://developer.salesforce.com/docs/atlas.en-us.knowledge_dev.meta/knowledge_dev/sforce_api_objects_knowledge__kav.htm>`__, you must include at least ``Id``, ``ArticleNumber``, ``VersionNumber``, ``Title``, ``PublishStatus``, and ``IsDeleted``.
               
              * For `ServiceNow <https://developer.servicenow.com/dev.do#!/reference/api/rome/rest/knowledge-management-api>`__, you must include at least ``number``, ``short_description``, ``sys_mod_count``, ``workflow_state``, and ``active``.
               
              * For `Zendesk <https://developer.zendesk.com/api-reference/help_center/help-center-api/articles/>`__, you must include at least ``id``, ``title``, ``updated_at``, and ``draft``.
              

               

              Make sure to include additional fields. These fields are indexed and used to source recommendations.

              
              

              - *(string) --* 
          
        
      
        

        - **status** *(string) --* 

          The status of the knowledge base.

          
        

        - **tags** *(dict) --* 

          The tags used to organize, track, or control access for this resource.

          
          

          - *(string) --* 
            

            - *(string) --* 
      
    
    
  
  **Exceptions**
  
  *   :py:class:`ConnectWisdomService.Client.exceptions.ConflictException`

  
  *   :py:class:`ConnectWisdomService.Client.exceptions.ValidationException`

  
  *   :py:class:`ConnectWisdomService.Client.exceptions.ServiceQuotaExceededException`

  
  *   :py:class:`ConnectWisdomService.Client.exceptions.AccessDeniedException`

  