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):
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):
No Terraform:
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:
-
Na UI, exporte o script (extensão .script).
-
Renomeie para algo como meu_script.script.json.
-
Abra o arquivo e substitua IDs fixos por placeholders {{...}} onde for necessário (queueId, divisionId, datatableId, etc.).
-
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
7) Deployment cycle recomendado
-
Fonte única do JSON do script em repositório (padrão *.script.json).
-
PR revisa mudanças no JSON e placeholders.
-
Pipeline executa terraform plan e apply com o -var-file correto.
-
file_content_hash assegura atualização quando o conteúdo muda.
-
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
------------------------------
Original Message:
Sent: 10-30-2025 16:55
From: Rohit Sharma
Subject: genesyscloud_script: Automation for script resources
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
------------------------------