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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3231f1ebd4942a1811dd8f173645ebd209baf439bee4547a619393284467be26
|
|
| MD5 |
3c778a3dbb9026bac1608182f11f8228
|
|
| BLAKE2b-256 |
e5912743c1ce0995f63db4c4b95aab883b7213113f040c807baa73a624554d60
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1a60574a955de9de7dfe089c32e1d8ad33837fbcb95d9be617d964065f8dfaa0
|
|
| MD5 |
7cfd10e21d3c9d162267e3024eb6a5d2
|
|
| BLAKE2b-256 |
cc549a426d6d97464a61354d518c4527d1e9e0ffad41e5255b7b5c03469cba5e
|