<img src="https://avatars2.githubusercontent.com/u/38847544?s=96&v=4" alt="Upwire logo" title="Upwire" align="right" height="96" width="96"/>

# Upwire APIs Node.js Client

A Node.js package to consume Upwire Restful services

## Usage

Install the package using npm:

    npm install upwire --save

Then, require the package with your Upwire usenrame and passcode:
	
	const Upwire = require('upwire')({username: '[username]', passcode: '[passcode]'});

Services from the Upwire API https://upwire.docs.apiary.io/  can be executed by calling a method with options. 

For example to send an SMS:

``` js
	options = {
        	"callerid": "[callerid]",
        	"destinations": "[destination]",
        	"message": "Test message from Upwire"
	}

	Upwire.Message.send(options)
        	.then(function(value) {
                	console.log(value);
        	})
        	.catch(function(err) {
                	console.log(err);
        	})
```

Note: 'callerid' must be an SMS enabled number purchased from Upwire and 'destination' must be in international number format.

## Complete List of Services

## Master Job

Docs: https://upwire.docs.apiary.io/#reference/master-job

### Master Submit

#### Create

``` js
	options = {
                "action": "create",
                "templateId": "[templateId]",
		"csvData": "False",
		"data": {
			"id": "[id]",
			"name": "[name]",
			"mobile": "[mobile]",
			"landline": "[landline]",
			"email": "[email]"
		}
        }

        Upwire.Master.create(options)
                .then(function(value) {
                        console.log(value);
                })
                .catch(function(err) {
                        console.log(err);
                })
```

#### Wait for API Call

``` js
        options = {
                "templateId": "[templateId]",
        }

        Upwire.Master.startOutbound(options)
                .then(function(value) {
                        console.log(value);
                })
                .catch(function(err) {
                        console.log(err);
                })
```

#### Append

``` js
        options = {
                "templateId": "[templateId]",
		"autoStart": "True",
                "csvData": "False",
                "data": {
                        "id": "[id]",
                        "name": "[name]",
                        "mobile": "[mobile]",
                        "landline": "[landline]",
                        "email": "[email]"
                }
        }

        Upwire.Master.append(options)
                .then(function(value) {
                        console.log(value);
                })
                .catch(function(err) {
                        console.log(err);
                })
```

Note: If "autoStart" is set to "True" the append service will check for a running masterJob, if none found a new masterJob will be started

### Job Control

#### Pause Job

``` js
        options = {
                "jobNumber": "[master_job_number]",
        }

        Upwire.Control.pauseMaster(options)
                .then(function(value) {
                        console.log(value);
                })
                .catch(function(err) {
                        console.log(err);
                })
```

#### Restart Job

``` js
        options = {
                "jobNumber": "[master_job_number]",
        }

        Upwire.Control.restartMaster(options)
                .then(function(value) {
                        console.log(value);
                })
                .catch(function(err) {
                        console.log(err);
                })
```

#### Cancel Job

``` js
        options = {
                "jobNumber": "[master_job_number]",
        }

        Upwire.Control.cancelMaster(options)
                .then(function(value) {
                        console.log(value);
                })
                .catch(function(err) {
                        console.log(err);
                })
```

### Job Reporting

#### List Master Jobs

``` js
        options = {
                "limit": 1,
        }

        Upwire.Reporing.listMasterJobs(options)
                .then(function(value) {
                        console.log(value);
                })
                .catch(function(err) {
                        console.log(err);
                })
```

#### Get Master Job

``` js
        options = {
		"jobnumber": "[master_job_number]"
        }

        Upwire.Reporing.getMasterJob(options)
                .then(function(value) {
                        console.log(value);
                })
                .catch(function(err) {
                        console.log(err);
                })
```

#### Get Master Data

``` js
        options = {
                "jobnumber": "[master_job_number]"
        }

        Upwire.Reporing.getMasterData(options)
                .then(function(value) {
                        console.log(value);
                })
                .catch(function(err) {
                        console.log(err);
                })
```

#### Get Master Stats

``` js
        options = {
                "jobnumber": "[master_job_number]"
        }

        Upwire.Reporing.getMasterStats(options)
                .then(function(value) {
                        console.log(value);
                })
                .catch(function(err) {
                        console.log(err);
                })
```

#### Get SMS Job Stats

``` js
        options = {
                "jobnumber": "[sms_job_number]"
        }

        Upwire.Reporing.getSmsJobStats(options)
                .then(function(value) {
                        console.log(value);
                })
                .catch(function(err) {
                        console.log(err);
                })
```

#### Get Voice Job Stats

``` js
        options = {
                "jobnumber": "[voice_job_number]"
        }

        Upwire.Reporing.getVoiceJobStats(options)
                .then(function(value) {
                        console.log(value);
                })
                .catch(function(err) {
                        console.log(err);
                })
```

#### Get Voice Job Responses

``` js
        options = {
                "jobnumber": "[voice_job_number]"
        }

        Upwire.Reporing.getVoiceJobResponses(options)
                .then(function(value) {
                        console.log(value);
                })
                .catch(function(err) {
                        console.log(err);
                })
```

#### Get Email Job Stats

``` js
        options = {
                "jobnumber": "[email_job_number]"
        }

        Upwire.Reporing.getVoiceJobResponses(options)
                .then(function(value) {
                        console.log(value);
                })
                .catch(function(err) {
                        console.log(err);
                })
```

## Admin

Docs: https://upwire.docs.apiary.io/#reference/sms-raw/admin/get-sub-jobs-stats-email

#### List Countries


``` js
        Upwire.Reporing.listCountries()
                .then(function(value) {
                        console.log(value);
                })
                .catch(function(err) {
                        console.log(err);
                })
```

#### Get Country Capabilities

``` js
        options = {
                "country": "country"
        }

        Upwire.Reporing.getCountry(options)
                .then(function(value) {
                        console.log(value);
                })
                .catch(function(err) {
                        console.log(err);
                })
```

#### Search Numbers

``` js
        options = {
                "numberType": "mobile",
		"countryCode": "44",
		"searchString": "447"
        }

        Upwire.Reporing.searchNumbers(options)
                .then(function(value) {
                        console.log(value);
                })
                .catch(function(err) {
                        console.log(err);
                })
```


