INTRODUÇÃO
Este tutorial demonstra como utilizar o TRIGGERcmd para executar um script PowerShell capaz de consultar o endereço IP Público de um Provedor de Internet - ISP, através de um computador e retornar o resultado para o TRIGGERcmd.
A solução utiliza duas APIs:
- MEU IP - responsável por obter o endereço IP Público.
- IPinfo.io - responsável por identificar a Organização / ISP associada ao endereço IP.
O resultado final será enviado ao TRIGGERcmd no seguinte formato:
$RESULTADO_MEUIP - $ORGANIZAÇÃO
Por exemplo:
123.456.789.123 - XXXXXXXXXX XXXXXXXXXX XXXXXXXXXX
O resultado poderá então ser utilizado pelo recurso Voice/MCP Reply, permitindo que o Alexa fale a informação ao usuário.
1 - COMO FUNCIONA:
O funcionamento da solução é dividido em etapas:
ALEXA
↓
TRIGGERcmd
↓
POWERSHELL
↓
MEU IP API
↓
ENDEREÇO IP PÚBLICO
↓
IPINFO.IO API
↓
ORGANIZAÇÃO / ISP
↓
POWERSHELL
↓
SendResult.bat
↓
TRIGGERcmd
↓
{{result}}
↓
ALEXA
O PowerShell é responsável pela lógica principal.
O SendResult.bat é responsável por enviar o resultado processado de volta para o TRIGGERcmd.
2 - PRÉ-REQUISITOS:
Antes de começar, você deverá possuir:
- Uma conta no TRIGGERcmd.
- O TRIGGERcmd Agent instalado no computador.
- PowerShell disponível no Windows.
- Acesso à Internet.
- Um comando configurado no TRIGGERcmd.
- O arquivo
SendResult.bat disponível no diretório do TRIGGERcmd.
- Skills ativas: TRIGGERcmd Smart Home e Execute Comando
O diretório utilizado pelo TRIGGERcmd neste projeto é:
%USERPROFILE%\.TRIGGERcmdData\
3 - ARQUIVO SendResult.bat:
O SendResult.bat é responsável por enviar o resultado do comando para a API do TRIGGERcmd.
O arquivo deve estar localizado em:
%USERPROFILE%\.TRIGGERcmdData\SendResult.bat
Exemplo:
@echo off
if "%~1"=="" goto noparams
goto yesparams
:noparams
echo You need to specify the command result as a quoted sentence.
echo Example:
echo SendResult.bat "This is the result of my command."
goto end
:yesparams
set /p TCMD_TOKEN=<"%USERPROFILE%\.TRIGGERcmdData\token.tkn"
curl -X POST "https://www.triggercmd.com/api/command/result" ^
-H "Authorization: Bearer %TCMD_TOKEN%" ^
-H "content-type: multipart/form-data" ^
-F "computer_id=%TCMD_COMPUTER_ID%" ^
-F "command_id=%TCMD_COMMAND_ID%" ^
-F "result=%~1" ^
>>"%USERPROFILE%\.TRIGGERcmdData\results.log" 2>&1
:end

IMPORTANTE: não é necessário modificar esse arquivo para utilizar o script deste tutorial - Caso queira substituir o conteúdo, não há problema.
4 - CRIANDO O SCRIPT POWERSHELL:
Crie um arquivo com a extensão:
.ps1
Por exemplo (C:\SCRIPTS\IP_PUBLICO.ps1):
IP_PUBLICO.ps1
Utilize o seguinte código:
# =====================================================================
# NOME DO PROJETO : CONSULTA DE IP PÚBLICO - TRIGGERcmd
# AUTOR : IGOR NETH DOS SANTOS
# ALMA MATER : UniCesumar - Superior de Tecnologia em Redes de Computadores (2015 - 2018)
# APOIO : EDSON ALEXANDRE DOMINGUES MORENO - Professor Moreno
# PAÍS : BRASIL
# VERSÃO : 1.1.0
# DATA : 03/09/2026 - 3 de Setembro de 2026
#
# DESCRIÇÃO:
# ESTE SCRIPT CONSULTA O ENDEREÇO IP PÚBLICO ATRAVÉS DA API DO SITE MEU IP
# E CONSULTA A ORGANIZAÇÃO RESPONSÁVEL PELO IP ATRAVÉS DA API IPINFO.IO.
#
# O RESULTADO FINAL É ENVIADO PARA O TRIGGERCMD ATRAVÉS DO SendResult.bat.
#
# SITE MEU IP: https://meuip.com | API MEU IP: https://meuip.com/api/meuip.php
#
# SITE IPINFO: https://ipinfo.io | API IPINFO: https://ipinfo.io
#
# FORMATO DO RESULTADO: IP - ORGANIZAÇÃO | EXEMPLO: 123.456.789.123 - NOME DO ASN
#
# OBSERVAÇÃO:
# A API IPINFO.IO RETORNA O PARÂMETRO "org" NO SEGUINTE FORMATO:
#
# AS123456 XXXXXXXXXX XXXXXXXXXX XXXXXXXXXX
#
# O SCRIPT REMOVE AUTOMATICAMENTE O PREFIXO "AS" E OS NÚMEROS,
# MANTENDO SOMENTE O NOME DA ORGANIZAÇÃO:
#
# OBSERVAÇÃO:
# O SCRIPT ENVIA O RESULTADO PARA O TRIGGERCMD SEM A FRASE EM
# PORTUGUÊS QUE SERÁ FALADA PELA ALEXA.
#
# A FRASE QUE SERÁ FALADA PELA ALEXA É CONFIGURADA DIRETAMENTE
# NO CAMPO "VOICE/MCP REPLY" DO TRIGGERCMD, UTILIZANDO {{result}}.
#
# EXEMPLO DE VOICE/MCP REPLY: SEU IP PÚBLICO É: {{result}}
#
# RESULTADO ENVIADO PELO SCRIPT: 123.456.789.123 - XXXXXXXXXX XXXXXXXXXX XXXXXXXXXX
#
# HISTÓRICO DE VERSÕES:
# 1.0.0 - VERSÃO INICIAL FUNCIONAL.
# 1.1.0 - ADICIONADA CONSULTA À API IPINFO.IO PARA OBTER A ORGANIZAÇÃO.
# =====================================================================
# DEFINE O PROTOCOLO DE SEGURANÇA TLS 1.2 PARA AS CONEXÕES HTTPS.
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
# MONTA AUTOMATICAMENTE O CAMINHO COMPLETO DO ARQUIVO SENDRESULT.BAT.
# $ENV:USERPROFILE REPRESENTA A PASTA DO USUÁRIO ATUALMENTE CONECTADO AO WINDOWS.
$SENDRESULT = Join-Path $env:USERPROFILE ".TRIGGERcmdData\SendResult.bat"
# INICIA O BLOCO PRINCIPAL DE TRATAMENTO DE ERROS.
try {
# ================================================================
# CONSULTA A API DO MEU IP PARA OBTER O ENDEREÇO IP PÚBLICO.
# ================================================================
#
# -URI:
# DEFINE O ENDEREÇO DA API QUE SERÁ CONSULTADA.
#
# -TIMEOUTSEC 3:
# DEFINE UM LIMITE DE 3 SEGUNDOS PARA A RESPOSTA DA API.
#
# -ERRORACTION STOP:
# FAZ COM QUE UM ERRO NA CONSULTA SEJA TRATADO PELO CATCH.
$RESPOSTA_MEUIP = Invoke-RestMethod -Uri "https://meuip.com/api/meuip.php" -TimeoutSec 3 -ErrorAction Stop
# CONVERTE A RESPOSTA RECEBIDA DA API PARA TEXTO.
#
# OUT-STRING:
# CONVERTE O CONTEÚDO RETORNADO PARA UMA STRING.
#
# TRIM():
# REMOVE ESPAÇOS E QUEBRAS DE LINHA NO INÍCIO OU NO FINAL.
$IP_PUBLICO = ($RESPOSTA_MEUIP | Out-String).Trim()
# ================================================================
# VERIFICA SE A RESPOSTA POSSUI O FORMATO DE UM ENDEREÇO IPV4.
# ================================================================
#
# A EXPRESSÃO REGULAR VERIFICA SE EXISTEM QUATRO GRUPOS NUMÉRICOS
# SEPARADOS POR PONTOS.
#
# EXEMPLO DE FORMATO ESPERADO: 123.456.789.123
if ($IP_PUBLICO -match '^\d{1,3}(\.\d{1,3}){3}$') {
# ============================================================
# CONSULTA A API DO IPINFO.IO.
# ============================================================
#
# O IP OBTIDO ATRAVÉS DO MEU IP É INFORMADO DIRETAMENTE NA URL.
#
# EXEMPLO:
# https://ipinfo.io/123.456.789.123
#
# O OBJETIVO É OBTER AS INFORMAÇÕES REFERENTES EXATAMENTE AO
# ENDEREÇO IP QUE FOI RETORNADO PELA API DO MEU IP.
try {
$RESPOSTA_IPINFO = Invoke-RestMethod -Uri "https://ipinfo.io/$IP_PUBLICO" -TimeoutSec 3 -ErrorAction Stop
# O PARÂMETRO "org" DA API IPINFO RETORNA, POR EXEMPLO:
#
# AS123456 XXXXXXXXXX XXXXXXXXXX XXXXXXXXXX
#
# REMOVE:
# AS123456
#
# E MANTÉM:
# XXXXXXXXXX XXXXXXXXXX XXXXXXXXXX
$ORGANIZACAO = $RESPOSTA_IPINFO.org -replace '^AS\d+\s+', ''
# MONTA O RESULTADO FINAL QUE SERÁ ENVIADO AO TRIGGERCMD.
#
# EXEMPLO:
# 123.456.789.123 - XXXXXXXXXX XXXXXXXXXX XXXXXXXXXX
$RESULTADO_MEUIP = "$IP_PUBLICO - $ORGANIZACAO"
}
# CASO A API IPINFO.IO NÃO RESPONDA OU OCORRA ALGUM ERRO,
# O SCRIPT MANTÉM O IP OBTIDO ATRAVÉS DA API DO MEU IP.
catch {
# ENVIA SOMENTE O ENDEREÇO IP COMO RESULTADO.
$RESULTADO_MEUIP = "$IP_PUBLICO"
}
}
# ================================================================
# CASO A RESPOSTA DA API DO MEU IP NÃO TENHA FORMATO DE IPV4.
# ================================================================
else {
# DEFINE UMA MENSAGEM INFORMANDO QUE A RESPOSTA DA API
# NÃO CORRESPONDEU AO FORMATO ESPERADO.
$RESULTADO_MEUIP = "A API retornou uma resposta invalida."
}
}
# ================================================================
# CAPTURA ERROS OCORRIDOS DURANTE A CONSULTA DO MEU IP.
# ================================================================
catch {
# DEFINE UMA MENSAGEM INFORMANDO QUE NÃO FOI POSSÍVEL
# CONSULTAR O ENDEREÇO IP PÚBLICO.
$RESULTADO_MEUIP = "Nao foi possivel consultar o seu IP Publico."
}
# ================================================================
# ENVIA O RESULTADO PARA O TRIGGERCMD.
# ================================================================
#
# $SENDRESULT:
# CONTÉM O CAMINHO COMPLETO PARA O ARQUIVO SENDRESULT.BAT.
#
# "$RESULTADO_MEUIP":
# PASSA O RESULTADO COMO ARGUMENTO PARA O ARQUIVO BAT.
#
# EXEMPLO DO VALOR ENVIADO:
#
# 123.456.789.123 - XXXXXXXXXX XXXXXXXXXX XXXXXXXXXX
#
# IMPORTANTE:
# O SCRIPT NÃO ENVIA A FRASE "SEU IP PÚBLICO É".
# ESSA FRASE DEVE SER CONFIGURADA NO TRIGGERCMD EM VOICE/MCP REPLY".
& $SENDRESULT "$RESULTADO_MEUIP"
# ENCERRA O SCRIPT POWERSHELL INFORMANDO QUE A EXECUÇÃO FOI
# CONCLUÍDA NORMALMENTE.
#
# O CÓDIGO 0 INDICA EXECUÇÃO CONCLUÍDA COM SUCESSO.
exit 0
5 - ENTENDENDO O SCRIPT:
5.1 - Configuração do TLS
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Essa configuração força o uso do TLS 1.2 para as conexões HTTPS realizadas pelo PowerShell.
6 - LOCALIZAÇÃO DO SendResult.bat:
O script identifica automaticamente o arquivo SendResult.bat utilizando:
$SENDRESULT = Join-Path $env:USERPROFILE ".TRIGGERcmdData\SendResult.bat"
Isso evita colocar um caminho absoluto como:
C:\Users\NomeDoUsuario\...
Dessa forma, o script pode ser utilizado por diferentes usuários do Windows.
7 - CONSULTANDO O IP PÚBLICO - MEU IP:
A primeira API utilizada é:
https://meuip.com/api/meuip.php
O PowerShell executa:
$RESPOSTA_MEUIP = Invoke-RestMethod -Uri "https://meuip.com/api/meuip.php" -TimeoutSec 3 -ErrorAction Stop
Depois, o resultado é armazenado em:
$IP_PUBLICO
8 - VALIDANDO O ENDEREÇO IP:
O script verifica se a resposta possui o formato básico de um endereço IPv4:
if ($IP_PUBLICO -match '^\d{1,3}(\.\d{1,3}){3}$')
Se a resposta for considerada válida, o script continua para a consulta no IPinfo.io.
9 - CONSULTANDO A ORGANIZAÇÂO - IPINFO.IO:
Depois de obter o endereço IP, o script consulta a segunda API:
https://ipinfo.io/$IP_PUBLICO
Por exemplo:
https://ipinfo.io/123.456.789.123
O resultado é armazenado em:
$RESPOSTA_IPINFO
10 - OBTENDO A ORGANIZAÇÃO - ISP:
O campo utilizado pelo script é:
org
O IPinfo.io pode retornar algo semelhante a:
AS123456 XXXXXXXXXX XXXXXXXXXX XXXXXXXXXX
O script remove automaticamente o ASN:
$ORGANIZACAO = $RESPOSTA_IPINFO.org -replace '^AS\d+\s+', ''
O resultado passa a ser:
O NOME DO SEU ASN OU PROVEDOR DE INTERNET
11 - MONTANDO O RESULTADO FINAL:
O script combina o endereço IP e a organização:
$RESULTADO_MEUIP = "$IP_PUBLICO - $ORGANIZACAO"
Resultado:
123.456.789.123 - XXXXXXXXXX XXXXXXXXXX XXXXXXXXXX
12 - TRATAMENTO DE FALHA DO IPINFO.IO:
Uma característica importante desta implementação é que o IPinfo.io possui seu próprio try/catch.
Isso significa que, se o IPinfo.io estiver indisponível, o script ainda poderá retornar o IP público obtido pelo MEU IP.
Nesse caso:
123.456.789.123
será enviado ao TRIGGERcmd.
Assim, uma falha secundária não impede completamente a execução do comando.
13 - ENVIANDO O RESULTADO PARA O TRIGGERcmd:
Depois de processar as informações, o script executa:
& $SENDRESULT "$RESULTADO_MEUIP"
Isso chama o:
SendResult.bat
e envia o conteúdo de $RESULTADO_MEUIP para o TRIGGERcmd.
14 - CONFIGURANDO O COMANDO NO TRIGGERcmd:
No TRIGGERcmd, crie ou edite um comando para executar o PowerShell.
O comando deverá executar o arquivo .ps1.
Por exemplo:
powershell.exe -ExecutionPolicy Bypass -File "C:\SCRIPTS\IP_PUBLICO.ps1"
Substitua o caminho pelo local onde você salvou o script.
15 - CONFIGURANDO O VOICE/MCP REPLY:
Para utilizar o resultado com Alexa, configure o campo:
Voice/MCP Reply
Utilize:
Seu IP Público é: {{result}}
O {{result}} será substituído automaticamente pelo resultado enviado pelo script.
Por exemplo, se o PowerShell enviar:
123.456.789.123 - XXXXXXXXXX XXXXXXXXXX XXXXXXXXXX
a resposta poderá ser:
Seu IP Público é: 123.456.789.123 - XXXXXXXXXX XXXXXXXXXX XXXXXXXXXX
16 - POR QUE A FRASE NÃO É ENVIADA PELO POWERSHELL?
Nesta implementação, o PowerShell envia somente os dados:
IP - ORGANIZAÇÃO
A frase em português é configurada diretamente no TRIGGERcmd.
Isso possui uma vantagem importante: evita problemas de codificação de caracteres entre PowerShell, Windows, SendResult.bat e a API.
Por exemplo, caracteres como:
A: á, à, â, ã, Á, À, Â, Ã
E: é, ê, É, Ê
I: í, Í
O: ó, ô, õ, Ó, Ô, Õ
U: ú, Ú
Cedilha: ç, Ç (usado com a letra c)
Trema: ¨
podem sofrer alterações dependendo da codificação utilizada durante o processamento.
Por isso, a solução separa:
DADOS:
123.456.789.123 - XXXXXXXXXX XXXXXXXXXX XXXXXXXXXX
RESPOSTA DE VOZ:
Seu IP Público é: {{result}}
17 - TESTANDO:
Antes de utilizar Alexa, recomenda-se testar o script diretamente no Windows.
Execute:
powershell.exe -ExecutionPolicy Bypass -File "C:\SCRIPTS\IP_PUBLICO.ps1"
Depois, verifique o resultado no TRIGGERcmd.
O resultado esperado será semelhante a:
123.456.789.123 - XXXXXXXXXX XXXXXXXXXX XXXXXXXXXX
18 - TESTANDO COM ALEXA:
Depois que o comando estiver funcionando no TRIGGERcmd, execute o comando através da integração de voz configurada.
A Alexa deverá utilizar o conteúdo de:
{{result}}
para gerar a resposta.
Exemplo:
Seu IP Público é: 123.456.789.123 - XXXXXXXXXX XXXXXXXXXX XXXXXXXXXX
19 - ESTRUTURA FINAL:
A solução completa fica organizada da seguinte maneira:
TRIGGERcmd
│
├── Trigger:
│ └── IP Público
│
├── Command:
│ └── powershell -ExecutionPolicy Bypass -File "C:\SCRIPTS\IP_PUBLICO.ps1"
│
├── Ground:
│ └── Foreground
│
├── Voice:
│ └── Rede
│
├── Voice/MCP Reply:
│ └── Seu IP Público é: {{result}}
│
├── MCP Tool Description:
│ └── Consulta o IP Público
│
├── Permitir Parâmetros:
│ └── False
│
└── Computador Windows
│
└── PowerShell
│
├── MEU IP API
│ └── IP Público
│
├── IPinfo.io API
│ └── Organização
│
└── SendResult.bat
└── TRIGGERcmd Result


20 - CRIAR ROTINA PERSONALIZADA NA ALEXA:
A rotina completa fica organizada da seguinte maneira:
ROTINA
│
├── Nome:
│ └── Abrir Rede
│
├── Quando:
│ └── Voz
│ ├── Abrir Rede
│ └── Qual é minha Rede
│
└── Alexa Vai:
└── Personalizar
└── pergunte à Execute Comando para executar Rede


Para seu Dispositivo Alexa, pergunte à ela: "Alexa, abrir Rede"
21 - CHECAR A EXECUÇÂO EM SUA LISTA DE TRIGGERS:
A execução do comando de Voz e a execução da Trigger será mostrada em Ver Execuções.

22 - CONSIDERAÇÕES FINAIS:
Esta implementação foi desenvolvida com foco em simplicidade, reutilização e compatibilidade com o ambiente Windows + TRIGGERcmd.
O objetivo não é apenas consultar um endereço IP, mas demonstrar como um script PowerShell pode:
- Consumir uma API externa.
- Processar uma resposta.
- Consumir uma segunda API.
- Manipular os dados recebidos.
- Tratar falhas de serviços externos.
- Enviar o resultado para o TRIGGERcmd.
- Utilizar
{{result}} em uma resposta de voz.
A estrutura também permite que outras APIs sejam adicionadas futuramente, mantendo o mesmo conceito de integração.
Nota de rodapé
Autor: Igor Neth dos Santos
Alma Mater: UniCesumar - Superior de Tecnologia em Redes de Computadores (2015 - 2018)
Apoio: Edson Alexandre Domingues Moreno - Professor Moreno
País: Brasil
Projeto: Consulta de IP Público - TRIGGERcmd
Versão: 1.1.0
LinkedIn:
https://www.linkedin.com/in/igorneth
https://www.linkedin.com/in/alexandre-moreno-a35b74100
Este projeto foi desenvolvido com o auxílio e orientação do meu Professor, Edson Alexandre Domingues Moreno - Professor Moreno, a quem agradeço pelo apoio técnico e pela contribuição durante o desenvolvimento e testes da solução.