TRIGGERcmd
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Register
    • Login

    Consulta de IP Público + Meu IP e IPinfo.io (Alexa) - PT-BR

    Scheduled Pinned Locked Moved Windows
    2 Posts 2 Posters 12 Views 1 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • igornethI Offline
      igorneth
      last edited by

      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
      

      SendResult.jpeg

      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
      

      TRIGGERcmd.jpeg

      TRIGGERcmd2.jpeg


      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
      

      IMG_0853.PNG

      IMG_0854.PNG

      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.
      IP.jpeg


      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:

      1. Consumir uma API externa.
      2. Processar uma resposta.
      3. Consumir uma segunda API.
      4. Manipular os dados recebidos.
      5. Tratar falhas de serviços externos.
      6. Enviar o resultado para o TRIGGERcmd.
      7. 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.

      RussR 1 Reply Last reply Reply Quote 0
      • RussR Offline
        Russ @igorneth
        last edited by

        @igorneth nice job!

        Russell VanderMey

        1 Reply Last reply Reply Quote 0

        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
        • First post
          Last post