This commit is contained in:
ajay-plivo 2022-04-21 12:49:43 +05:30
commit 90e622815f
11 changed files with 508 additions and 116 deletions

View file

@ -1,10 +1,14 @@
# Change Log
## [v4.29.2](https://github.com/plivo/plivo-node/tree/v4.29.2) (2022-04-11)
## [v4.30.1](https://github.com/plivo/plivo-node/tree/v4.30.1) (2022-04-11)
**Features - List all recordings**
- `fromNumber` and `toNumber` added in filtering params [List all recordings](https://www.plivo.com/docs/voice/api/recording#list-all-recordings)
- `record_min_member_count` param added to [Add a participant to a multiparty call using API](https://www.plivo.com/docs/voice/api/multiparty-call/participants#add-a-participant)
## [v4.30.0](https://github.com/plivo/plivo-node/tree/v4.30.0) (2022-04-14)
**Features - Profile Api**
- Profile api added for 10dlc support
## [v4.29.1](https://github.com/plivo/plivo-node/tree/v4.29.1) (2022-03-25)
**Bug Fix - DialElement**
- `confirmTimeout` parameter added to [The Dial element](https://www.plivo.com/docs/voice/xml/dial/)

View file

@ -36,7 +36,8 @@ export class BrandCreationResponse {
constructor(params) {
params = params || {};
this.apiId = params.apiId;
this.brand = params.brand;
this.brand_id = params.brandId;
this.message = params.message;
}
}
@ -79,45 +80,19 @@ export class BrandCreationResponse {
* Brand Registration
* @method
* @param {object} params
* @param {string} city
* @param {string} company_name
* @param {string} country
* @param {string} ein
* @param {string} ein_issuing_country
* @param {string} email
* @param {string} entity_type
* @param {string} postal_code
* @param {string} registration_status
* @param {string} state
* @param {string} stock_exchange
* @param {string} stock_symbol
* @param {string} street
* @param {string} vertical
* @param {string} [params.website] -
* @param {string} [params.secondary_vetting]
* @param {string} [params.first_name]
* @param {string} [params.last_name]
* @param {string} [params.alt_business_id_type]
* @param {string} [params.alt_business_id]
* @param {string} brand_alias
* @param {string} profile_uuid
* @param {string} brand_type
* @param {string} secondary_vetting
* @promise {object} return {@link PlivoGenericResponse} object
* @fail {Error} return Error
*/
create(city,company_name,country,ein,ein_issuing_country,email,entity_type,phone,postal_code,registration_status,state,stock_exchange,stock_symbol,street,vertical, params = {}) {
params.city=city;
params.company_name=company_name;
params.country=country;
params.ein=ein;
params.ein_issuing_country=ein_issuing_country;
params.email=email;
params.entity_type=entity_type;
params.phone=phone;
params.postal_code=postal_code;
params.registration_status=registration_status;
params.state=state;
params.stock_exchange=stock_exchange;
params.stock_symbol=stock_symbol;
params.street=street;
params.vertical=vertical;
create(brand_alias,profile_uuid,brand_type,secondary_vetting) {
let params = {};
params.brand_alias=brand_alias;
params.profile_uuid=profile_uuid;
params.brand_type=brand_type;
params.secondary_vetting=secondary_vetting;
let client = this[clientKey];
let idField = this[idKey];
return new Promise((resolve, reject) => {

View file

@ -41,7 +41,22 @@ export class CampaignCreateResponse {
constructor(params) {
params = params || {};
this.apiId = params.apiId;
this.campaign = params.campaign;
this.campaignId = params.campaignId;
this.message = params.message;
this.error = params.error;
}
}
export class LinkUnlinkNumberResponse {
constructor(params) {
params = params || {};
this.apiId = params.apiId;
if (params.message)
this.message = params.message;
if (params.error)
this.error = params.error;
if (params.remark)
this.remark = params.remark;
}
}
@ -84,7 +99,6 @@ export class CampaignCreateResponse {
return super.customexecuteAction(action,'GET', params);
}
/**
* create Campaign
* @method
@ -133,7 +147,75 @@ export class CampaignCreateResponse {
reject(error);
});
});
}
/**
* getNumber CampaignNumbers by given campaignId, number
* @method
* @param {string} campaignID - id of Campaign
* @param {string} number - number
* @promise {object} return {@link Campaign} object
* @fail {Error} return Error
*/
getNumber(campaignID, number) {
return super.customexecuteAction(action+campaignID+'/Number/'+number+'/', 'GET');
}
/**
* listNumber CampaignNumbers by given campaignId
* @method
* @param {string} campaignID - id of Campaign
* @param {number} limit
* @param {number} offset
* @promise {object} returns {@link Campaign} object
* @fail {Error} return Error
*/
listNumber(campaignID, params) {
return super.customexecuteAction(action+campaignID+'/Number/', 'GET', params);
}
/**
* linkNumber link number to Campaign
* @method
* @param {string} campaignID
* @param {list} numbers
* @promise {object} return {@link Campaign} object
* @fail {Error} return Error
*/
linkNumber(campaignID, numbers) {
let params = {}
params.numbers=numbers;
let client = this[clientKey];
return new Promise((resolve, reject) => {
client('POST', action+campaignID+'/Number/', params)
.then(response => {
resolve(new LinkUnlinkNumberResponse(response.body));
})
.catch(error => {
reject(error);
});
});
}
/**
* unlinkNumber unlink number from Campaign
* @method
* @param {string} campaignID
* @param {string} number
* @promise {object} return {@link Campaign} object
* @fail {Error} return Error
*/
unlinkNumber(campaignID, number) {
let params = {}
let client = this[clientKey];
return new Promise((resolve, reject) => {
client('DELETE', action+campaignID+'/Number/'+number+'/', params)
.then(response => {
resolve(new LinkUnlinkNumberResponse(response.body));
})
.catch(error => {
reject(error);
});
});
}
}

161
lib/resources/profile.js Normal file
View file

@ -0,0 +1,161 @@
import * as _ from "lodash";
import {
PlivoResource,
PlivoResourceInterface
} from '../base';
import {
extend,
validate
} from '../utils/common.js';
const action = 'Profile/';
const idField = 'profileUUID';
let actionKey = Symbol('api action');
let klassKey = Symbol('constructor');
let idKey = Symbol('id filed');
let clientKey = Symbol('make api call');
/**
* Represents a Profile
* @constructor
* @param {function} client - make api call
* @param {object} [data] - data of call
*/
export class Profile extends PlivoResource {
constructor(client, data = {}) {
super(action, Profile, idField, client);
this[actionKey] = action;
this[clientKey] = client;
if (idField in data) {
this.id = data[idField];
};
extend(this, data);
}
}
export class ProfileResponse {
constructor(params) {
params = params || {};
this.apiId = params.apiId;
this.profileUuid = params.profileUuid;
this.message = params.message;
}
}
/**
* Represents a Profile Interface
* @constructor
* @param {function} client - make api call
* @param {object} [data] - data of call
*/
export class ProfileInterface extends PlivoResource {
constructor(client, data = {}) {
super(action, Profile, idField, client);
extend(this, data);
this[clientKey] = client;
this[actionKey] = action;
this[klassKey] = Profile;
this[idKey] = idField;
}
/**
* get Profile by given profileuuid
* @method
* @param {string} profileUUID - id of profileUUID
* @promise {object} return {@link profile} object
* @fail {Error} return Error
*/
get(profileUUID) {
let params = {};
return super.customexecuteAction(action+profileUUID+'/', 'GET', params);
}
/**
* Get All Profile Detail
* @method
* @param {object} params - params limit and offset
* @promise {object[]} returns list of profile Object
* @fail {Error} returns Error
*/
list(params) {
return super.customexecuteAction(action,'GET', params);
}
/**
* delete Profile by given profileuuid
* @method
* @param {string} profileUUID - id of profileUUID
* @fail {Error} return Error
*/
delete(profileUUID) {
let params = {};
return super.customexecuteAction(action+profileUUID+'/', 'DELETE', params);
}
/**
* Create a new Profile
*
* @param {string} profile_alias
* @param {string} plivo_subaccount
* @param {string} customer_type
* @param {string} entity_type
* @param {string} company_name
* @param {string} ein
* @param {string} vertical
* @param {string} ein_issuing_country
* @param {string} stock_symbol
* @param {string} stock_exchange
* @param {string} alt_business_id_type
* @param {string} website
* @param {object} address
* @param {object} authorized_contact
* @return profileResponse response output
*/
create(profile_alias,plivo_subaccount,customer_type,entity_type, company_name,ein,vertical,ein_issuing_country,stock_symbol,stock_exchange, alt_business_id_type, website, address, authorized_contact){
let params = {}
params.profile_alias=profile_alias;
params.plivo_subaccount=plivo_subaccount;
params.customer_type=customer_type;
params.entity_type=entity_type;
params.company_name=company_name;
params.ein=ein;
params.vertical=vertical;
params.ein_issuing_country=ein_issuing_country;
params.stock_symbol=stock_symbol;
params.stock_exchange=stock_exchange;
params.alt_business_id_type=alt_business_id_type;
params.website=website;
params.address=address;
params.authorized_contact=authorized_contact;
let client = this[clientKey];
return new Promise((resolve, reject) => {
client('POST', action, params)
.then(response => {
resolve(new ProfileResponse(response.body, idField));
})
.catch(error => {
reject(error);
});
});
}
/**
* update a new Profile
*
* @param {string} profile_uuid
* @param {object } address
* @param {object } authorized_contact
* @param {string} entity_type
* @param {string} vertical
* @param {string} company_name
* @param {string} website
* @return profileResponse response output
*/
update(profile_uuid, params){
return super.customexecuteAction(action+profile_uuid+'/', 'POST', params);
}
}

View file

@ -39,6 +39,9 @@ import {
import{
CampaignInterface
} from '../resources/campaign.js';
import{
ProfileInterface
}from '../resources/profile.js';
import {
NumberInterface
} from '../resources/numbers.js';
@ -101,6 +104,7 @@ export class Client {
this.messages = new MessageInterface(client);
this.brand = new BrandInterface(client);
this.campaign = new CampaignInterface(client);
this.profile = new ProfileInterface(client);
this.lookup = new LookupInterface(client);
this.powerpacks = new PowerpackInterface(client);
this.numbers = new NumberInterface(client);

View file

@ -12,6 +12,7 @@ import { LookupInterface } from "../resources/lookup";
import { PowerpackInterface } from "../resources/powerpacks";
import { BrandInterface } from "../resources/brand.js";
import { CampaignInterface } from "../resources/campaign.js";
import { ProfileInterface } from "../resources/profile.js";
import { NumberInterface } from "../resources/numbers";
import { PricingInterface } from "../resources/pricings";
import { RecordingInterface } from "../resources/recordings";
@ -94,6 +95,7 @@ export class Client {
this.powerpacks = new PowerpackInterface(client);
this.brand = new BrandInterface(client);
this.campaign = new CampaignInterface(client);
this.profile = new ProfileInterface(client);
this.numbers = new NumberInterface(client);
this.pricings = new PricingInterface(client);
this.recordings = new RecordingInterface(client);

View file

@ -1216,21 +1216,152 @@ export function Request(config) {
resolve({
response: {},
body: {
api_id: "71aa47e0-3750-11ec-8e4c-0242ac110002",
brand: {
brand_id: "BRPXS6E",
api_id: "4bac497c-b963-11ec-b7ca-0242ac110002",
brand: {
address: {
city: "New York",
country: "IN",
postal_code: "10001",
state: "NY",
street: "123"
},
authorized_contact: {
email: "vishnu@plivo.com",
first_nam: "vishnu",
last_name: "Doe",
phone: "919742763781",
seniority: "admin",
title: "Doe"
},
brand_id: "B1QSGGS",
ein_issuing_country: "IN",
entity_type: "SOLE_PROPRIETOR",
profile_uuid: "3cf3e991-2f94-4910-9712-61442987a2d0",
registration_status: "COMPLETED",
vertical: "ENTERTAINMENT"
}
}
});
}
else if(action == 'Profile/' && method == 'GET'){
resolve({
response: {},
body: {
api_id: "97a1c5ee-b019-11ec-88b1-0242ac110002",
count: 10,
limit: 2,
offset: 0,
profiles: [
{
alt_business_id_type: "NONE",
authorized_contact: {
email: "johndoe.com",
name: "John Doe",
seniority: "admin",
title: "Doe"
},
company_name: "ABC Inc.",
customer_type: "RESELLER",
ein_issuing_country: "US",
entity_type: "PUBLIC_PROFIT",
profile_alias: "vishnu1",
profile_type: "SECONDARY",
profile_uuid: "1c41faed-a38e-42a3-a966-fe7df34b51b9",
stock_symbol: "ABC",
vertical: "ENERGY"
},
{
alt_business_id_type: "NONE",
authorized_contact: {
email: "johndoe.com",
name: "John Doe",
seniority: "admin",
title: "Doe"
},
company_name: "ABC Inc.",
customer_type: "RESELLER",
ein_issuing_country: "US",
entity_type: "SOLE_PROPRIETOR",
profile_alias: "vishnu1",
profile_type: "SECONDARY",
profile_uuid: "1d77a5fe-bca4-4a6d-a7c4-58b70e8cd7a2",
stock_symbol: "ABC",
vertical: "ENERGY"
}
]
}
});
}
else if(action == 'Profile/06ecae31-4bf8-40b9-ac62-e902418e9935/' && method == 'GET'){
resolve({
response: {},
body: {
api_id: "63287a98-b018-11ec-bc21-0242ac110002",
profile: {
alt_business_id_type: "NONE",
authorized_contact: {
name: " "
},
company_name: "ABC Inc.",
customer_type: "RESELLER",
ein: "111111111",
ein_issuing_country: "US",
email: "johndoe@abc.com",
entity_type: "PRIVATE_PROFIT",
registration_status: "COMPLETED",
vertical: "RETAIL",
website: "http://www.abcmobile.com"
entity_type: "PUBLIC_PROFIT",
profile_alias: "vishnu1",
profile_type: "SECONDARY",
profile_uuid: "06ecae31-4bf8-40b9-ac62-e902418e9935",
stock_symbol: "ABC",
vertical: "ENERGY"
}
}
});
}
else if(action == 'Profile/06ecae31-4bf8-40b9-ac62-e902418e9935/' && method == 'DELETE'){
resolve({
response: {},
body: {
api_id: "eb1e71ae-b01e-11ec-88b1-0242ac110002"
}
});
}
else if(action == 'Profile/06ecae31-4bf8-40b9-ac62-e902418e9935/' && method == 'POST'){
resolve({
response: {},
body: {
api_id: "15783daa-b01e-11ec-88b1-0242ac110002",
profile: {
address: "123 New York NY 10001 IN",
alt_business_id_type: "NONE",
authorized_contact: {
email: "Doe",
name: "Joh11n Doe",
seniority: "admin",
title: "Doe"
},
company_name: "ABC Inc.",
customer_type: "RESELLER",
ein_issuing_country: "US",
entity_type: "PRIVATE_PROFIT",
primary_profile: "303edff6-8525-43e5-87e6-48c571ddca25",
profile_alias: "vishnu1",
profile_type: "SECONDARY",
profile_uuid: "1c41faed-a38e-42a3-a966-fe7df34b51b9",
stock_symbol: "ABC",
vertical: "PROFESSIONAL",
website: "google.com"
}
}
});
}
else if(action == 'Profile/' && method == 'POST'){
resolve({
response: {},
body: {
api_id: "99ab47ae-b01c-11ec-bc21-0242ac110002",
profile_uuid: "43d0616e-d50a-445a-a84e-310a089f0618"
}
});
}
else if (action == '10dlc/Campaign/CMPT4EP/' && method == 'GET'){
resolve({
response: {},
@ -1249,7 +1380,8 @@ export function Request(config) {
Verizon_Wireless: {}
},
reseller_id: "RPDPPUM",
usecase: "ACCOUNT_NOTIFICATION"
usecase: "ACCOUNT_NOTIFICATION",
sub_usecase: "2FA,ACCOUNT_NOTIFICATION"
}
}
});
@ -1260,28 +1392,48 @@ export function Request(config) {
body: {
api_id: "b9df43c0-374c-11ec-97b3-0242ac110002",
brands: [
{
brand_id: "ABCDEFG",
company_name: "ABC Inc.",
ein: "111111111",
ein_issuing_country: "US",
email: "johndoe@abc.com",
entity_type: "PRIVATE_PROFIT",
registration_status: "COMPLETED",
vertical: "RETAIL",
website: "http://www.abcmobile.com"
{
address: {
city: "",
country: "",
postal_code: "",
state: "",
street: ""
},
{
brand_id: "QWERTYU",
company_name: "ABC Inc.",
ein: "111111111",
ein_issuing_country: "US",
email: "johndoe@abc.com",
entity_type: "PRIVATE_PROFIT",
registration_status: "COMPLETED",
vertical: "RETAIL",
website: "http://www.abcmobile.com"
}
authorized_contact: {},
brand_alias: "Ren_With_Vetting",
brand_id: "BXZRASW",
company_name: "Ren_With_Vetting",
ein: "2342334534231",
ein_issuing_country: "IN",
entity_type: "NON_PROFIT",
registration_status: "COMPLETED",
vertical: "COMMUNICATION",
vetting_score: 80,
vetting_status: "ACTIVE",
website: "www.renold.com"
},
{
address: {
city: "",
country: "",
postal_code: "",
state: "",
street: ""
},
authorized_contact: {},
brand_alias: "CSP Testing 003",
brand_id: "BMIORKY",
company_name: "CSP Testing 003",
ein: "234234234",
ein_issuing_country: "IN",
entity_type: "PUBLIC_PROFIT",
registration_status: "COMPLETED",
vertical: "COMMUNICATION",
vetting_score: 80,
vetting_status: "ACTIVE",
website: "www.standard1.com"
}
]
}
});
@ -1305,7 +1457,8 @@ export function Request(config) {
Verizon_Wireless: {}
},
reseller_id: "RPDPPUM",
usecase: "ACCOUNT_NOTIFICATION"
usecase: "ACCOUNT_NOTIFICATION",
sub_usecase: "2FA,ACCOUNT_NOTIFICATION"
},
{
brand_id: "B8OD95Z",
@ -1321,7 +1474,8 @@ export function Request(config) {
Verizon_Wireless: {}
},
reseller_id: "",
usecase: "MIXED"
usecase: "MIXED",
sub_usecase: "2FA,ACCOUNT_NOTIFICATION"
}
]
}
@ -1331,27 +1485,9 @@ export function Request(config) {
resolve({
response: {},
body: {
api_id: "a52a5398-3751-11ec-8e4c-0242ac110002",
brand: {
alt_business_id_type: "GIIN",
brand_id: "BVI0UQA",
city: "New York",
country: "US",
ein_issuing_country: "US",
email: "johndoe@abc.com",
entity_type: "SOLE_PROPRIETOR",
first_name: "John",
last_name: "Doe",
phone: "+11234567890",
postal_code: "10001",
registration_status: "PENDING",
state: "NY",
stock_exchange: "NASDAQ",
stock_symbol: "ABC",
street: "123",
vertical: "RETAIL",
website: "http://www.abcmobile.com"
}
api_id: "ab2e4754-b951-11ec-b7ca-0242ac110002",
brand_id: "B1QSGGS",
message: "Request to create brand was received and is being processed."
}
});
}
@ -1359,22 +1495,9 @@ export function Request(config) {
resolve({
response: {},
body: {
api_id: "12ae5a32-3751-11ec-8e4c-0242ac110002",
campaign: {
brand_id: "BHYYNCK",
campaign_id: "CMPT4EP",
mno_metadata: {
AT_T: {
tpm: 4500
},
T_Mobile: {
brand_tier: "TOP"
},
Verizon_Wireless: {}
},
reseller_id: "RPDPPUM",
usecase: "ACCOUNT_NOTIFICATION"
}
apiId: '5b058374-bba8-11ec-ab4d-0242ac110002',
campaignId: 'CFSOBZQ',
message: 'Request to create campaign was received and is being processed.'
}
});
}

View file

@ -1,6 +1,6 @@
{
"name": "plivo",
"version": "4.29.2",
"version": "4.30.1",
"description": "A Node.js SDK to make voice calls and send SMS using Plivo and to generate Plivo XML",
"homepage": "https://github.com/plivo/plivo-node",
"files": [

View file

@ -13,7 +13,7 @@ import {
it('should get brand', function () {
return client.brand.get('BRPXS6E')
.then(function (brand) {
assert.equal(brand.brand.brandId, 'BRPXS6E')
assert.equal(brand.brand.brandId, 'B1QSGGS')
})
});
@ -25,10 +25,9 @@ import {
});
it('create brand', function () {
return client.brand.create("New York","ABC Inc.", "US", "111111111","US","johndoe@abc.com","PRIVATE_PROFIT","+11234567890","10001","PENDING",
"NY", "NASDAQ","ABC","123", "RETAIL")
return client.brand.create("vishnu128", "3cf3e991-2f94-4910-9712-61442987a2d0","starter", false)
.then(function (brand) {
assert.equal(brand.brand.brandId, 'BVI0UQA')
assert.equal(brand.brand_id, 'B1QSGGS')
})
});

View file

@ -30,7 +30,7 @@ import {
"2FA"
],"sample description text",false,false,false,false,true,true,true,"sample1","sample2")
.then(function (campaign) {
assert.equal(campaign.campaign.brandId, 'BHYYNCK')
assert.equal(campaign.campaignId, 'CFSOBZQ')
})
});
});

42
test/profile.js Normal file
View file

@ -0,0 +1,42 @@
import {
Client
} from '../lib/rest/client-test';
import {
PlivoGenericResponse
} from '../lib/base.js';
import assert from 'assert';
import sinon from 'sinon';
let client = new Client('sampleid', 'sammpletoken', 'sampleproxy');
describe('profile', function () {
it('should get profile', function () {
return client.profile.get("06ecae31-4bf8-40b9-ac62-e902418e9935")
.then(function (response) {
assert.equal(response.profile.profileUuid, "06ecae31-4bf8-40b9-ac62-e902418e9935")
})
});
it('list profile', function () {
return client.profile.list({})
.then(function (response) {
assert.equal(response.profiles.length, 2)
})
});
it('delete profile', function () {
return client.profile.delete("06ecae31-4bf8-40b9-ac62-e902418e9935")
.then(function (response) {
assert.equal(response.apiId, "eb1e71ae-b01e-11ec-88b1-0242ac110002")
})
});
it('create profile', function () {
var authorized_contact = {"first_name":"Hello", "last_name":"Test", "email":"vishnu@plivo.com", "title":"bro", "seniority":"admin"}
var address = {"street":"123", "city":"Band", "state":"NY", "postal_code":"10001", "country":"US"}
return client.profile.create("vishnu104", "SECONDARY", "RESELLER","PRIVATE_PROFIT","ABC Inc", "111111111", "PROFESSIONAL", "US", "ABC","NASDAQ","NONE", "google.com", address,authorized_contact)
.then(function (profile) {
assert.equal(profile.profileUuid, '43d0616e-d50a-445a-a84e-310a089f0618')
})
});
});