Consulta de IP Público + Meu IP e IPinfo.io (Alexa) - PT-BR
-
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ÇÃOPor exemplo:
123.456.789.123 - XXXXXXXXXX XXXXXXXXXX XXXXXXXXXXO 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}} ↓ ALEXAO 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.batdisponí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.batExemplo:
@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:
.ps1Por exemplo (C:\SCRIPTS\IP_PUBLICO.ps1):
IP_PUBLICO.ps1Utilize 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 05 - ENTENDENDO O SCRIPT:
5.1 - Configuração do TLS
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12Essa 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.batutilizando:$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.phpO PowerShell executa:
$RESPOSTA_MEUIP = Invoke-RestMethod -Uri "https://meuip.com/api/meuip.php" -TimeoutSec 3 -ErrorAction StopDepois, 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_PUBLICOPor exemplo:
https://ipinfo.io/123.456.789.123O resultado é armazenado em:
$RESPOSTA_IPINFO
10 - OBTENDO A ORGANIZAÇÃO - ISP:
O campo utilizado pelo script é:
orgO IPinfo.io pode retornar algo semelhante a:
AS123456 XXXXXXXXXX XXXXXXXXXX XXXXXXXXXXO 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.123será 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.bate envia o conteúdo de
$RESULTADO_MEUIPpara 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 ReplyUtilize:
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 XXXXXXXXXXa 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ÇÃOA frase em português é configurada diretamente no TRIGGERcmd.
Isso possui uma vantagem importante: evita problemas de codificação de caracteres entre PowerShell, Windows,
SendResult.bate 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 XXXXXXXXXXRESPOSTA 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-a35b74100Este 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.
-
@igorneth nice job!
-
@igorneth nice job!
Thank you very much, my friend Russ!
I’m really glad you liked it! Truly!
I'm currently trying, working and adapting on a translation into American English, so that the community can understand and enjoy the project and any future versions.
It would be really cool and interesting to make this example available within the software's GUI, with a link to the documentation post! What do you think of that idea?

Thank you so much again!

Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login