PHPackages                             indatus/gopher - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. indatus/gopher

ActiveLibrary

indatus/gopher
==============

A CLI tool for automated testing of telecom dial-in apps.

v1.1(11y ago)622MITPHPPHP &gt;=5.4

Since May 8Pushed 11y ago2 watchersCompare

[ Source](https://github.com/Indatus/gopher)[ Packagist](https://packagist.org/packages/indatus/gopher)[ RSS](/packages/indatus-gopher/feed)WikiDiscussions master Synced 1w ago

READMEChangelogDependencies (6)Versions (4)Used By (0)

Gopher
======

[](#gopher)

[![Gopher Banner](https://camo.githubusercontent.com/3060114ad3d377426ab947a809cc1c11f8c8ba03a072d3317fc2ff3dc76e5984/68747470733a2f2f73332d75732d776573742d322e616d617a6f6e6177732e636f6d2f6f73732d617661746172732f676f706865722e706e67)](https://camo.githubusercontent.com/3060114ad3d377426ab947a809cc1c11f8c8ba03a072d3317fc2ff3dc76e5984/68747470733a2f2f73332d75732d776573742d322e616d617a6f6e6177732e636f6d2f6f73732d617661746172732f676f706865722e706e67)

A stand-alone PHP package for testing telecom dial-in apps. Gopher provides a simple CLI interface for making batches of test calls. It is configured to use Twilio out of the box, but can be configured to use any similar service. Credit to [brainwebb01](https://github.com/brianwebb01) for the original concept for this package.

Installation with Composer
--------------------------

[](#installation-with-composer)

Install Gopher via Composer with the following one-liner:

```
$ composer create-project indatus/gopher --prefer-source

```

If you need to pull Gopher into an existing project, add the following line to the require block of your composer.json:

```
"indatus/gopher": "dev-master"

```

Next run `composer install`.

---

Configuration
-------------

[](#configuration)

### Twilio Setup

[](#twilio-setup)

1. Signup for a free [Twilio](https://www.twilio.com/try-twilio) account.
2. Open `config/callservice.php` and fill in your Account SID and Auth Token.
3. Enter your Twilio number as the default `from` number and update `timezone` with your preferred timezone. Select from PHP's supported timezone list [here](http://www.php.net/manual/en/timezones.php).

### Amazon S3 Setup

[](#amazon-s3-setup)

Twilio requires an XML script located at a public URL for each call it makes. The script at this URL tells Twilio what to do once the call is answered. Gopher is configured to push your scripts up to an Amazon S3 bucket out of the box.

1. Signup for an [Amazon S3](https://console.aws.amazon.com/s3/) account.
2. Create a bucket and give Everyone "View" permissions in the S3 console.
3. Open `config/filesystem.php` and locate the `s3` configuration section.
4. Enter your Access Key, Secret Key, and bucket name.

---

Usage
-----

[](#usage)

The root-level `gopher` executable is used to run three different commands:

Command NameDescriptioncall:singleRun a single batch of calls that share the same call scriptcall:multiRun multiple batches of calls, each batch having it's own call scriptcall:detailsFetch and display details of outgoing callsSee below for further description and usage examples of each.

---

### Run a Single Batch of Calls

[](#run-a-single-batch-of-calls)

The `call:single` command can be used to run a single batch of calls that share the same call script. It requires two arguments:

1. A comma-separated list of phone numbers to call
2. The local path to the call script relative to the `gopher` executable

```
$ ./gopher call:single 5551234567,5551234561,5551234562 call-scripts/test-script.xml

```

`call:single` uses the default from phone number you provided in `congig.php`. You can override the default from number by passing the `from` option:

```
$ ./gopher call:single 5551234567 call-scripts/test-script.xml --from="5551234567"

```

> The root-level `call-scripts` directory is used to store your call scripts. An example script is provided to get you up and running quickly. The example script contains [TwiML](https://www.twilio.com/docs/api/twiml)(Twilio Markup Language) that tells Twilio how to handle the outgoing call. Feel free to modify `test-script.xml`and create your own call scripts. You can store your scripts globally, just be sure the path provided is relative to the `gopher` executable.

---

### Run Multiple Batches of Calls

[](#run-multiple-batches-of-calls)

The `call:multi` command can be used to run multiple batches of calls, each batch having it's own call script.

#### Setup

[](#setup)

Open `batches.php` and look at the example batch provided:

```
'batches' => [
    'example-1' =>
        [
            'to' => ['5551234567', '5551234567', '5551234567'],
            'script' => 'call-scripts/test-script.xml'
        ]
]

```

A batch has two required elements: `to` and `script`. `to` is an array of phone numbers to call and `script` is the local path to the call script to use for the batch.

`call:multi` uses the default from phone number you provided in `callservice.php`. You can override the default from number by including a `from` element with the batch:

```
'batches' => [
    'example-1' =>
        [
            'to' => ['5551234567', '5551234567', '5551234567'],
            'from' => '5557654321',
            'script' => 'call-scripts/test-script.xml'
        ]
]

```

Add as many batches as you'd like to the `batches` array and then run:

```
$ ./gopher call:multi

```

#### Run Specific Batches

[](#run-specific-batches)

You can pass a comma-separated list of batch names to `call:multi` to specify which specific batches to run. Make sure to give your batches unique names if you want to use this feature.

```
$ ./gopher call:multi example-1,example-2

```

---

### Display Details of Outgoing Calls

[](#display-details-of-outgoing-calls)

The `call:details` command can be used to display the details of outgoing calls.

Display the details of a specific call with the `id` option:

```
$ ./gopher call:details --id="UNIQUE_ID"

```

You can specify multiple unique ids with the `id` option.

```
$ ./gopher call:details --id="UNIQUE_ID_1,UNIQUE_ID_2,UNIQUE_ID_3"

```

### Using Filters to Narrow Call Details

[](#using-filters-to-narrow-call-details)

#### Available Filters

[](#available-filters)

OptionDescriptionafterOnly show calls placed after this date. (`Y-m-d H:i:s` format)beforeOnly show calls placed before this date. (`Y-m-d H:i:s` format)onOnly show calls calls placed on this date. (`Y-m-d` format)toOnly show calls to this phone number.fromOnly show calls from this phone number.statusOnly show calls currently in this status. May be `queued`, `ringing`, `in-progress`, `canceled`, `completed`, `failed`, `busy`, or `no-answer`.#### Examples

[](#examples)

Get details for calls made on **April 5, 2014** from **555-123-4567**

```
$ ./gopher call:details --on="2014-04-05" --from="5551234567"

```

Get details for calls made between **7:00 am** and **10:00 am** on **April 5, 2014** with a **completed** status

```
$ ./gopher call:details --after="2014-04-05 07:00:00" --before="2014-04-05 10:00:00" --status="completed"

```

Display details for all **failed** calls made to **555-123-4567**

```
$ ./gopher call:details --status="failed" --to="5551234567"

```

###  Health Score

27

—

LowBetter than 49% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity9

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity60

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~43 days

Total

3

Last Release

4307d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/4945353?v=4)[John Arstingstall](/maintainers/jarstingstall)[@jarstingstall](https://github.com/jarstingstall)

---

Top Contributors

[![jarstingstall](https://avatars.githubusercontent.com/u/4945353?v=4)](https://github.com/jarstingstall "jarstingstall (40 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/indatus-gopher/health.svg)

```
[![Health](https://phpackages.com/badges/indatus-gopher/health.svg)](https://phpackages.com/packages/indatus-gopher)
```

###  Alternatives

[laravel/framework

The Laravel Framework.

34.6k509.9M17.0k](/packages/laravel-framework)[spatie/laravel-backup

A Laravel package to backup your application

6.0k21.8M191](/packages/spatie-laravel-backup)[league/flysystem-aws-s3-v3

AWS S3 filesystem adapter for Flysystem.

1.6k263.6M790](/packages/league-flysystem-aws-s3-v3)[shopware/platform

The Shopware e-commerce core

3.3k1.5M3](/packages/shopware-platform)[magento/community-edition

Magento 2 (Open Source)

12.1k52.1k10](/packages/magento-community-edition)[sulu/sulu

Core framework that implements the functionality of the Sulu content management system

1.3k1.3M152](/packages/sulu-sulu)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
