Genesys Cloud - Developer Community!

 View Only

Sign Up

  • 1.  genesyscloud_script: Automation for script resources

    Posted 22 days ago

    Hi Team,

    We are trying to maintain Script resources through Terraform automation, we are facing some design challenges, can you please guide us, how to implement same?

    • Different formats:
      • While making changes on UI it accepts ".script" format and UI export also returns same format
      • Terraform accepts .json format and Terraform export also exports .json format
        • How can we export script file from UI and use in terraform
    • Use of ID in the exports
      • Considering portability of script to different environments, how we can automate TF file to use generic configuration without ID;s and same can be used in all places just by using substitution variable?

    Can you please guide us how to implement scripts in the deployment cycles?

    Regards,

    Rohit S 


    #CXasCode

    ------------------------------
    Rohit Sharma
    ------------------------------


  • 2.  RE: genesyscloud_script: Automation for script resources

    Posted 18 days ago

    Hi Rohit, 

    You can export the file from the UI and save it as .json and reference the file in your terraform resource as per the below from the documentation.

    resource "genesyscloud_script" "example_script" {
      script_name       = "Example script name ${random_uuid.uuid.result}"
      filepath          = "${local.working_dir.script}/email.script.json"
      file_content_hash = filesha256("${local.working_dir.script}/email.script.json")
      substitutions = {
        /* Inside the script file, "{{foo}}" will be replaced with "bar" */
        foo = "bar"
      }
    }


    ------------------------------
    Savino Ricci
    Senior Technical Consultant
    ------------------------------



  • 3.  RE: genesyscloud_script: Automation for script resources

    Posted 16 days ago

    Olá Rohit! Você está no caminho certo. Eis como costumo estruturar scripts do Genesys Cloud com Terraform para manter portabilidade e automação:

    1) Formatos: .script (UI) vs .json (Terraform)

    • O export da UI entrega um arquivo com extensão .script, mas o conteúdo é JSON puro.

    • Para usar no Terraform, basta salvar o mesmo conteúdo como .json (por exemplo, renomear para meu_script.script.json).

    • Dica: garanta que o arquivo esteja em UTF-8 sem BOM.

    2) Usando o arquivo exportado no recurso genesyscloud_script

    Exemplo funcional (similar ao que já foi mencionado):

    resource "genesyscloud_script" "example_script" {
      script_name       = "Script Exemplo ${random_uuid.uuid.result}"
      filepath          = "${path.module}/scripts/meu_script.script.json"
      file_content_hash = filesha256("${path.module}/scripts/meu_script.script.json")
     
      # Substituições: placeholders no JSON do script do tipo {{chave}}
      substitutions = {
        # Dentro do JSON, algo como "queueId": "{{queue_id_sales}}"
        # será substituído pelo valor abaixo em tempo de apply
        queue_id_sales = data.genesyscloud_routing_queue.sales.id
        division_id    = data.genesyscloud_auth_division.this.id
        # etc...
      }
    }
     
    data "genesyscloud_routing_queue" "sales" {
      name = var.sales_queue_name   # evita ID fixo; resolve por nome
    }
     
    data "genesyscloud_auth_division" "this" {
      name = var.division_name
    }
     
    resource "random_uuid" "uuid" {}

    Pontos importantes:

    • filepath aponta para o arquivo JSON do script.

    • file_content_hash com filesha256(...) garante que mudanças no arquivo acionem atualização.

    • substitutions injeta valores nos placeholders do arquivo (ex.: {{queue_id_sales}}).

    3) Tornando o script "genérico" sem IDs fixos

    O segredo é trocar IDs por placeholders no arquivo exportado da UI. Exemplos práticos:

    No JSON do script (arquivo):

    {
      "someControl": {
        "queueId": "{{queue_id_sales}}",
        "divisionId": "{{division_id}}",
        "flowName": "{{flow_name}}"
      }
    }

    No Terraform:

    substitutions = {
      queue_id_sales = data.genesyscloud_routing_queue.sales.id     # resolve por nome
      division_id    = data.genesyscloud_auth_division.this.id
      flow_name      = var.flow_name                                 # variável por ambiente
    }

    Assim você evita IDs "hard-coded" e mantém portabilidade: em cada ambiente, muda apenas *.tfvars com os nomes dos recursos e o Terraform resolve os IDs dinamicamente via data sources.

    4) "Como exportar da UI e usar no Terraform"

    Passo a passo objetivo:

    1. Na UI, exporte o script (extensão .script).

    2. Renomeie para algo como meu_script.script.json.

    3. Abra o arquivo e substitua IDs fixos por placeholders {{...}} onde for necessário (queueId, divisionId, datatableId, etc.).

    4. Referencie esse arquivo no recurso genesyscloud_script e preencha os placeholders via substitutions, usando:

      • data "genesyscloud_*" para resolver IDs por nome, ou

      • variáveis var.* para valores específicos por ambiente.

    5) Uso de ID nos exports

    • Exports da UI trazem vários IDs. Troque por {{placeholders}} e resolva no Terraform com:

      • data "genesyscloud_routing_queue" por nome de fila

      • data "genesyscloud_auth_division" por nome de divisão

      • data "genesyscloud_*" equivalentes para outros recursos

    • Se algum recurso não existe no ambiente de destino, crie-o com Terraform e depois referencie resource.*.id na substitution.

    6) Portabilidade entre ambientes

    • Mantenha um módulo de script e diferentes *.tfvars:

      • dev.tfvars, staging.tfvars, prod.tfvars

      • Cada um define division_name, sales_queue_name, flow_name etc.

    • No CI/CD, rode:

      • terraform plan -var-file=dev.tfvars

      • terraform apply -var-file=dev.tfvars

      • Repita para staging/prod.

    • Isso permite o mesmo template de script servir a todos os ambientes.

    7) Deployment cycle recomendado

    1. Fonte única do JSON do script em repositório (padrão *.script.json).

    2. PR revisa mudanças no JSON e placeholders.

    3. Pipeline executa terraform plan e apply com o -var-file correto.

    4. file_content_hash assegura atualização quando o conteúdo muda.

    5. Monitorar drift (se alguém editar o script na UI, o plan acusará divergência).

    8) E se já existe um script em produção?

    • Use terraform import genesyscloud_script.<nome> <script_id> para trazer ao estado do Terraform.

    • Em seguida, alinhe o arquivo e as substituições até o plan ficar limpo.



    ------------------------------
    Fernando Sotto dos Santos
    Consultor Grupo Casas Bahia
    ------------------------------



  • 4.  RE: genesyscloud_script: Automation for script resources

    Posted 8 days ago

    Thank you @Fernando Sotto dos Santos for detailed information. Appreciate your response.



    ------------------------------
    Rohit Sharma
    ------------------------------