twilio-mock

Twilio Mock API Server

OTHER License

Stars
5

Twilio Mock API Server

Twilio API Simulator

Setup

Define host name for local Twilio region. Your server will be running on localhost:443 with self-signed TLS certificate.

echo '127.0.0.1 api.local.twilio.com' | sudo tee -a /etc/hosts
echo '127.0.0.1 conversations.local.twilio.com' | sudo tee -a /etc/hosts
echo '127.0.0.1 tsock.local.twilio.com' | sudo tee -a /etc/hosts

.env file:

NODE_TLS_REJECT_UNAUTHORIZED=0 # Allow self-signed certificates

Running server:

# Build
yarn && yarn build

# Start Nginx
yarn proxy

# Start Twilio API Mock server
yarn start:prod

Calling API:

// sample.ts
import {Twilio} from "twilio";
import dotenv from 'dotenv'

// Load environment variables
dotenv.config()

// Twilio Credentials
const accountSid = process.env.ACCOUNT_SID; // Your Account SID from www.twilio.com/console
const authToken = process.env.AUTH_TOKEN; // Your Auth Token from www.twilio.com/console

const client = new Twilio(accountSid, authToken, {
  region: 'local', // will connect to '*.local.twilio.com' === 127.0.0.1
  logLevel: 'info' // or 'debug'
})
const conversationsClient = client.conversations;

// Use Twilio API as usual
const result = await conversationsClient.conversations.create()
console.log('Created Conversation:', result)

Twilio client will get a dummy response from the mock server. This is the sample output:

Created Conversation: {
  accountSid: 'ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
  chatServiceSid: 'ISXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
  messagingServiceSid: 'MGXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
  sid: 'CHXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
  friendlyName: 'Friendly Conversation',
  uniqueName: 'unique_name',
  attributes: { topic: 'feedback' },
  state: 'inactive',
  dateCreated: 2015-12-16T22:18:37.000Z,
  dateUpdated: 2015-12-16T22:18:38.000Z,
  timers: {
    date_inactive: '2015-12-16T22:19:38Z',
    date_closed: '2015-12-16T22:28:38Z'
  },
  url: 'https://conversations.twilio.com/v1/Conversations/CHXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
  links: {
    participants: 'https://conversations.twilio.com/v1/Conversations/CHXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Participants',
    messages: 'https://conversations.twilio.com/v1/Conversations/CHXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Messages',
    webhooks: 'https://conversations.twilio.com/v1/Conversations/CHXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Webhooks'
  },
  bindings: {}
}

Note: Configuring SSL:

openssl req -x509 -newkey rsa:2048 -keyout keytmp.pem -out cert.pem -days 36525
openssl rsa -in keytmp.pem -out key.pem