Skip to main content

A simple api for goip32

Project description

goip32

A simple api for goip32

Installation

pip install goip32

Usage

CLI

usage: goip32 [-h] [-u USERNAME] [-p PASSWORD] [--host HOST] [-w TIME]
              [-W TIME] [-r NUM] [--retry-delay TIME] [--retry-all-errors]
              [-m TIMEOUT] [-k] [-L] [--max-redirs NUM] [-A UA] [-x PROXY]
              [-H HEADER] [-b COOKIE] [-B BROWSER]
              {status-summary,status-general,status-sim,status-callforward,send-sms,send-ussd,inbox,outbox,call-records,clean-inbox,clean-outbox,expect-inbox,expect-outbox} ...

A simple api for goip32

General:
  -h, --help            Show this help message and exit
  -u, --username USERNAME
                        Specify username for authentication, defaults to
                        $GOIP32_USER
  -p, --password PASSWORD
                        Specify password for authentication, defaults to
                        $GOIP32_PASS
  --host HOST           Specify host, defaults to $GOIP32_HOST

subcommands:
  {status-summary,status-general,status-sim,status-callforward,send-sms,send-ussd,inbox,outbox,call-records,clean-inbox,clean-outbox,expect-inbox,expect-outbox}
    status-summary      get summary of lines
    status-general      get general info about the system and call status
    status-sim          get info about gsm in json format
    status-callforward  get info about sim call forward for lines
    send-sms            send sms
    send-ussd           send ussd code
    inbox               get inbox
    outbox              get outbox
    call-records        get call records
    clean-inbox         remove messages from inbox
    clean-outbox        remove messages from outbox
    expect-inbox        return newly received message
    expect-outbox       return newly sent message

Request settings:
  -w, --wait TIME       Set waiting time for each request
  -W, --wait-random TIME
                        Set random waiting time for each request to be from 0
                        to TIME
  -r, --retry NUM       Set number of retries for failed request to NUM
  --retry-delay TIME    Set interval between each retry
  --retry-all-errors    Retry no matter the error
  -m, --timeout TIMEOUT
                        Set request timeout, if in TIME format it'll be set
                        for the whole request. If in TIME,TIME format first
                        TIME will specify connection timeout, the second read
                        timeout. If set to '-' timeout is disabled
  -k, --insecure        Ignore ssl errors
  -L, --location        Allow for redirections, can be dangerous if
                        credentials are passed in headers
  --max-redirs NUM      Set the maximum number of redirections to follow
  -A, --user-agent UA   Sets custom user agent
  -x, --proxy PROXY     Use the specified proxy, can be used multiple times.
                        If set to URL it'll be used for all protocols, if in
                        PROTOCOL URL format it'll be set only for given
                        protocol, if in URL URL format it'll be set only for
                        given path. If first character is '@' then proxies are
                        read from file
  -H, --header HEADER   Set curl style header, can be used multiple times e.g.
                        -H 'User: Admin' -H 'Pass: 12345', if first character
                        is '@' then headers are read from file e.g. -H @file
  -b, --cookie COOKIE   Set curl style cookie, can be used multiple times e.g.
                        -b 'auth=8f82ab' -b 'PHPSESSID=qw3r8an829', without
                        '=' character argument is read as a file
  -B, --browser BROWSER
                        Get cookies from specified browser e.g. -B firefox

The tool needs host, username and password arguments specified in it's arguments before the subcommand, or in GOIP32_HOST, GOIP32_USER, GOIP32_PASS.

goip32 --host 'http://192.168.1.8:80' --username admin --password admin inbox

export GOIP32_HOST='http://192.168.1.8:80'
export GOIP32_USER=admin
export GOIP32_PASS=admin
goip32 inbox

Additional options for requests also can be specified before the subcommand

goip32 --wait 0.1 -header 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0' inbox

status-summary

goip32 status-summary

Prints summary of lines in json format

{
  "13": {
    "lac": "",
    "call_count": "NO LIMIT",
    "volte": "",
    "nocall_t": "8726",
    "asr": "",
    "gsm_status": "Y",
    "line_state": "IDLE",
    "status_line": "N",
    "sim_remain": "NO LIMIT",
    "sms_login": "",
    "gsm_signal": "5",
    "module_title_gsm": "",
    "gsm_cur_oper": "COSMOTE",
    "gsm_cur_bst": "",
    "module_status": "Y",
    "gsm_sim": "Y",
    "module_title": "Click to shut down module",
    "rct": "2025-11-14 21:43:30",
    "module_status_gsm": "13",
    "callc": "0/0",
    "smb_login": "N",
    "acd": "",
    "sms_count": "NO LIMIT",
    "callt": ""
  },
  "7": {
    "lac": "",
    "call_count": "NO LIMIT",
    "volte": "",
    "nocall_t": "8726",
    "asr": "",
    "gsm_status": "Y",
    "line_state": "IDLE",
    "status_line": "N",
    "sim_remain": "NO LIMIT",
    "sms_login": "",
    "gsm_signal": "6",
    "module_title_gsm": "",
    "gsm_cur_oper": "COSMOTE",
    "gsm_cur_bst": "",
    "module_status": "Y",
    "gsm_sim": "Y",
    "module_title": "Click to shut down module",
    "rct": "2025-11-14 21:43:29",
    "module_status_gsm": "7",
    "callc": "0/0",
    "smb_login": "N",
    "acd": "",
    "sms_count": "NO LIMIT",
    "callt": ""
  },
  "15": {
    "lac": "",
    "call_count": "NO LIMIT",
    "volte": "",
    "nocall_t": "8726",
    "asr": "",
    "gsm_status": "Y",
    "line_state": "IDLE",
    "status_line": "N",
    "sim_remain": "NO LIMIT",
    "sms_login": "",
    "gsm_signal": "6",
    "module_title_gsm": "",
    "gsm_cur_oper": "COSMOTE",
    "gsm_cur_bst": "",
    "module_status": "Y",
    "gsm_sim": "Y",
    "module_title": "Click to shut down module",
    "rct": "2025-11-14 21:43:30",
    "module_status_gsm": "15",
    "callc": "0/0",
    "smb_login": "N",
    "acd": "",
    "sms_count": "NO LIMIT",
    "callt": ""
  },
  "5": {
    "lac": "",
    "call_count": "NO LIMIT",
    "volte": "",
    "nocall_t": "8726",
    "asr": "",
    "gsm_status": "Y",
    "line_state": "IDLE",
    "status_line": "N",
    "sim_remain": "NO LIMIT",
    "sms_login": "",
    "gsm_signal": "6",
    "module_title_gsm": "",
    "gsm_cur_oper": "COSMOTE",
    "gsm_cur_bst": "",
    "module_status": "Y",
    "gsm_sim": "Y",
    "module_title": "Click to shut down module",
    "rct": "2025-11-14 21:43:27",
    "module_status_gsm": "5",
    "callc": "0/0",
    "smb_login": "N",
    "acd": "",
    "sms_count": "NO LIMIT",
    "callt": ""
  }
}

status-general

goip32 status-general

Prints general info about the system and call status in json format

{
  "hardware": {
    "s/n": "32M2RXXXXXXXXXXX",
    "firmware": "GST1610-1.01-70-17-8\n",
    "model": "GoIPx32",
    "time": "2025-11-20 23:13:49"
  },
  "network": {
    "ip": "192.168.0.22",
    "mac": "39:4E:10:06:94:A0",
    "pc port": "192.168.8.1",
    "pppoe": "DISABLED",
    "gateway": "192.168.0.1",
    "dns": "192.168.0.1"
  },
  "call status": {
    "10": {
      "fw_to_pstn": "Y",
      "config_mode": "S",
      "digits": "",
      "sim_remain": "NO LIMIT",
      "server": "",
      "fw_to_voip": "Y",
      "gsm_status": "Y",
      "status_line": "N",
      "proxy": "",
      "sip_prefix": ""
    },
    "16": {
      "fw_to_pstn": "Y",
      "config_mode": "S",
      "digits": "",
      "sim_remain": "NO LIMIT",
      "server": "",
      "fw_to_voip": "Y",
      "gsm_status": "Y",
      "status_line": "N",
      "proxy": "",
      "sip_prefix": ""
    },
    "20": {
      "fw_to_pstn": "Y",
      "config_mode": "S",
      "digits": "",
      "sim_remain": "NO LIMIT",
      "server": "",
      "fw_to_voip": "Y",
      "gsm_status": "Y",
      "status_line": "N",
      "proxy": "",
      "sip_prefix": ""
    }
  }
}

status-sim

goip32 status-sim

Prints info about gsm in json format

{
  "sim_enable": "Remote SIM: DISABLE",
  "gsm": {
    "19": {
      "gsm_module_ver": "M26FBXXXXXX_RSIM",
      "gsm_module": "M26",
      "gsm_gprs_attach": "Y",
      "gsm_status": "Y",
      "gsm_gprs_login": "Y",
      "gsm_cur_bst": "",
      "gsm_sim": "Y",
      "lac": "LAC:32B1,CELL ID:C8C0",
      "gsm_signal": "8",
      "gsm_bst": "AUTO",
      "sim_imsi": "2260XXXXXXXXXXX",
      "gsm_imei": "8644XXXXXXXXXXX",
      "gsm_number": "",
      "sim_iccid": "89400XXXXXXXXXXXXXXX",
      "module_status_gsm": "19",
      "module_status_gsm2": "19",
      "gsm_cur_oper": "COSMOTE"
    },
    "4": {
      "gsm_module_ver": "M26FBXXXXXX_RSIM",
      "gsm_module": "M26",
      "gsm_gprs_attach": "Y",
      "gsm_status": "Y",
      "gsm_gprs_login": "Y",
      "gsm_cur_bst": "",
      "gsm_sim": "Y",
      "lac": "LAC:32B1,CELL ID:C8E0",
      "gsm_signal": "6",
      "gsm_bst": "AUTO",
      "sim_imsi": "2260XXXXXXXXXXX",
      "gsm_imei": "8644XXXXXXXXXXX",
      "gsm_number": "",
      "sim_iccid": "89400XXXXXXXXXXXXXXX",
      "module_status_gsm": "4",
      "module_status_gsm2": "4",
      "gsm_cur_oper": "COSMOTE"
    },
    "20": {
      "gsm_module_ver": "M26FBXXXXXX_RSIM",
      "gsm_module": "M26",
      "gsm_gprs_attach": "Y",
      "gsm_status": "Y",
      "gsm_gprs_login": "Y",
      "gsm_cur_bst": "",
      "gsm_sim": "Y",
      "lac": "LAC:32B1,CELL ID:C8E0",
      "gsm_signal": "9",
      "gsm_bst": "AUTO",
      "sim_imsi": "2260XXXXXXXXXXX",
      "gsm_imei": "8644XXXXXXXXXXX",
      "gsm_number": "",
      "sim_iccid": "89400XXXXXXXXXXXXXXX",
      "module_status_gsm": "20",
      "module_status_gsm2": "20",
      "gsm_cur_oper": "COSMOTE"
    }
  }
}

status-callforward

goip32 status-callforward

Prints info about sim call forward for lines in json format

{
  "5": {
    "cf_busy_status": "OFF",
    "cf_uncnd_status": "OFF",
    "cf_notreachable_status": "OFF",
    "module_status_ccfc": "5",
    "cf_noreply_status": "OFF"
  },
  "9": {
    "cf_busy_status": "OFF",
    "cf_uncnd_status": "OFF",
    "cf_notreachable_status": "OFF",
    "module_status_ccfc": "9",
    "cf_noreply_status": "OFF"
  },
  "15": {
    "cf_busy_status": "OFF",
    "cf_uncnd_status": "OFF",
    "cf_notreachable_status": "Not Set",
    "module_status_ccfc": "15",
    "cf_noreply_status": "OFF"
  },
  "6": {
    "cf_busy_status": "OFF",
    "cf_uncnd_status": "OFF",
    "cf_notreachable_status": "OFF",
    "module_status_ccfc": "6",
    "cf_noreply_status": "OFF"
  }
}

send-sms

goip32 send-sms 0238718819 MESSAGE 1 8

Sends MESSAGE to 0238718819 from line 1 and 8, adding --no-ensure disables waiting for status if the message was send.

If message fails to deliver errors are returned e.g.

{
  "1": "38",
  "8": "38"
}

send-ussd

goip32 send-ussd '#MSG#' 4 9

Send #MSG# code from line 4 and 9 and get the response (can be ignored by setting --no-ensure flag).

{
  "4": "send, but provider not reply.",
  "9": "send, but provider not reply."
}

inbox

goip32 inbox

Prints the inbox history in json format

{
  "6": [],
  "7": [],
  "8": [
    {
      "date": "11-16 19:03:18",
      "number": "+40766XXXXXX",
      "msg": "Test"
    },
    {
      "date": "11-16 18:58:13",
      "number": "+40766XXXXXX",
      "msg": "Test 2"
    }
  ],
  "16": [
    {
      "date": "11-20 17:49:16",
      "number": "888 Casino",
      "msg": "some black friday offer"
    }
  ]
}

Get inbox for specific lines

goip32 inbox 2 8

outbox

goip32 inbox

Prints the inbox history in json format

{
  "15": [],
  "16": [],
  "17": [],
  "18": [
    {
      "date": "11-16 11:31:06",
      "number": "0766XXXXXX",
      "msg": "YYYYYYYYYYYYYYYYYYYYYY"
    }
  ],
  "19": [
    {
      "date": "11-16 11:31:06",
      "number": "0766XXXXXX",
      "msg": "YYYYYYYYYYYYYYYYYYYYYY"
    },
    {
      "date": "11-15 11:34:10",
      "number": "0766XXXXXX",
      "msg": "UUUUUUUUUUUUUUUUUUUUUUUUUU"
    }
  ]
}

Get outbox for specific lines

goip32 inbox 7 11

call-records

goip32 call-records

Prints history of the call records in json format

[
  {
    "id": "160XXXXXXX",
    "Recv Time": "0753XXXXXXX,
    "Caller No.": "0772XXXXXXX,
    "Callee No.": "1",
    "Line ID": "0",
    "Outbound No.": "0",
    "Duration": "0",
    "Outbound Time": "0",
    "Answer Time": "0",
    "End Time": "0",
    "Hangup Side": "GoIP",
    "Hangup Reason": "403 ip auth fail"
  },
  {
    "id": "1609XXXXXXX,
    "Recv Time": "0753XXXXXXX,
    "Caller No.": "0772XXXXXXX,
    "Callee No.": "1",
    "Line ID": "0",
    "Outbound No.": "0772XXXXXXX,
    "Duration": "129",
    "Outbound Time": "1609XXXXXXX,
    "Answer Time": "1609XXXXXXX,
    "End Time": "1609XXXXXXX,
    "Hangup Side": "Network",
    "Hangup Reason": "BYE"
  }
]

clean-inbox

goip32 clean-inbox 1 4.0 4.1

Removes all records of line 1 from inbox, and 2 first records of line 4

clean-outbox

goip32 clean-inbox 2 5.8

Removes all records of line 2 from inbox, and 9th record of line 5

expect-inbox

goip32 expect-inbox

Waits for new messages and prints them, by default for 120s (can be changed with --expect-timeout)

{"date":"11-21 00:36:44","number":"+407XXXXXXXX","msg":"MESSAGE","line":"7"}

Waits for lines 8 and 3, with 360s timeout

goip32 expect-inbox --expect-timeout 360 8 3

expect-outbox

goip32 expect-outbox

Waits for new messages and prints them, by default for 120s (can be changed with --expect-timeout)

{"date":"11-21 00:41:16","number":"07XXXXXXXX","msg":"MESSAGE","line":"7"}
{"date":"11-21 00:41:16","number":"07XXXXXXXX","msg":"MESSAGE","line":"8"}

Waits for lines 3 and 5, with 360s timeout

goip32 expect-outbox --expect-timeout 360 3 5

Library

Code

from goip32 import Api, Error, RequestError, TimeoutError

goip = Api('http://127.0.0.1:19203','admin','admin')

try:
    # tries to send a message until it succeeds
    while goip.send_sms('07XXXXXXXX','MESSAGE',[1,4]) != {}:
        pass
except RequestError as e:
    print(repr(e))

# print newly arrived messages
expect = goip.expect_inbox()
while True:
    try:
        for i in expect.check():
            print(i)
    except Error as e:
        print(repr(e))

Api

Api class provides methods for interacting with goip32 site, at it's initialization requires host url, username and password, it also accepts parameters for treerequests session.

status_summary(self) -> dict

Gets summary of lines

status_general(self) -> dict

Gets general info about the system and call status

status_sim(self) -> dict

Gets info about gsm

status_callforward(self) -> dict

Gets info about sim call forward for lines

send_sms(self, number: str, msg: str, lines: List[int | str] = [], ensure: bool = True) -> dict

Sends msg to number using lines.

If ensure is True it waits for response about whether the message arrived. If so {} is returned, otherwise an error list is returned.

send_ussd(self, msg: str, lines: List[int | str] = [], ensure: bool = True) -> dict

Sends msg command using lines.

If ensure is True the response or errors are returned, otherwise {}.

inbox(self) -> dict

Gets the whole inbox for all lines

outbox(self) -> dict

Gets the whole outbox for all lines

call_records(self) -> List[dict]

Gets all call records

clean_inbox(self, line: int | str = -1, pos: int | str = -1) -> dict

Cleans the whole inbox.

If line is not -1, it applies only to set line. If pos also isn't -1, then it applies only to message in line at pos (starting from 0).

clean_outbox(self, line: int | str = -1, pos: int | str = -1) -> dict

Literal analog to clean_inbox for outbox.

expect_inbox(self) -> NewMsg

Returns initialized NewMsg object for inbox.

expect_outbox(self) -> NewMsg

Literal analog to expect_inbox for outbox.

NewMsg

Holds context of previous messages and should only be initialized by expect_inbox or expect_outbox.

check(self, retries: int = 40, wait: int = 3) -> Iterator[dict]

Returns the newest messages received, trying retries amount of times and waiting wait seconds in between them.

If nothing new is received TimeoutError is raised.

Exceptions

All exceptions raised by this library are derived from Error.

RequestError is raised for errors when handling requests.

TimeoutError is raised by NewMsg.check method.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

goip32-0.0.2.tar.gz (27.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

goip32-0.0.2-py3-none-any.whl (25.0 kB view details)

Uploaded Python 3

File details

Details for the file goip32-0.0.2.tar.gz.

File metadata

  • Download URL: goip32-0.0.2.tar.gz
  • Upload date:
  • Size: 27.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for goip32-0.0.2.tar.gz
Algorithm Hash digest
SHA256 3231f1ebd4942a1811dd8f173645ebd209baf439bee4547a619393284467be26
MD5 3c778a3dbb9026bac1608182f11f8228
BLAKE2b-256 e5912743c1ce0995f63db4c4b95aab883b7213113f040c807baa73a624554d60

See more details on using hashes here.

File details

Details for the file goip32-0.0.2-py3-none-any.whl.

File metadata

  • Download URL: goip32-0.0.2-py3-none-any.whl
  • Upload date:
  • Size: 25.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for goip32-0.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 1a60574a955de9de7dfe089c32e1d8ad33837fbcb95d9be617d964065f8dfaa0
MD5 7cfd10e21d3c9d162267e3024eb6a5d2
BLAKE2b-256 cc549a426d6d97464a61354d518c4527d1e9e0ffad41e5255b7b5c03469cba5e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page