diff --git a/CHANGELOG.md b/CHANGELOG.md index 9990d859..7626d806 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,9 @@ # Change Log -## [4.2.0](https://github.com/plivo/plivo-node/releases/tag/v4.2.0)(2020-02-25) +## [4.3.0](https://github.com/plivo/plivo-node/releases/tag/v4.3.0)(2020-03-27) +- Add post call quality feedback API support. +## [4.2.0](https://github.com/plivo/plivo-node/releases/tag/v4.2.0)(2020-02-25) - Add Media support. ## [4.1.9](https://github.com/plivo/plivo-node/releases/tag/v4.1.9)(2020-02-12) diff --git a/examples/callFeedback.js b/examples/callFeedback.js new file mode 100644 index 00000000..187d6624 --- /dev/null +++ b/examples/callFeedback.js @@ -0,0 +1,9 @@ +var Plivo = require('../dist/rest/client.js'); +var client = new Plivo.Client(); + +client.callFeedback.create('call_uuid', 4, ["ISSUE"], "User Feedback").then(function(call_feedback) { + console.log("\n============ send feedback ===========\n", call_feedback) +}) +.catch(function(response) { + console.log("\n============ Error :: ===========\n", response); +}); \ No newline at end of file diff --git a/lib/resources/callFeedback.js b/lib/resources/callFeedback.js new file mode 100644 index 00000000..0bfa5351 --- /dev/null +++ b/lib/resources/callFeedback.js @@ -0,0 +1,61 @@ +import {extend, validate} from '../utils/common.js'; +import {PlivoResource, PlivoResourceInterface} from '../base'; +import * as _ from "lodash"; + +const clientKey = Symbol(); +const action = 'Call/'; +const idField = 'callUuid'; +const CALLINSIGHTS_BASE_URL = 'https://stats.plivo.com/' + +export class CallFeedback extends PlivoResource { + constructor(client, data = {}) { + super(action, Call, idField, client); + + if (idField in data) { + this.id = data[idField]; + } + + extend(this, data); + this[clientKey] = client; + } +} + +/** + * Represents a CallFeedback Interface + * @constructor + * @param {function} client - make api call + * @param {object} [data] - data of call + */ +export class CallFeedbackInterface extends PlivoResourceInterface { + constructor(client, data = {}) { + super(action, CallFeedback, idField, client); + extend(this, data); + + this[clientKey] = client; + } + + create(callUUID, rating, issues=[], notes="") { + let errors = validate([ + {field: 'callUUId', value: callUUID, validators: ['isRequired']}, + {field: 'rating', value: rating, validators: ['isRequired']} + ]); + + if (errors) { + return errors; + } + + var params = {}; + params.rating = rating; + if (issues.length > 0) { + params.issues = issues; + } + if (notes.length > 0) { + params.notes = notes; + } + params.isCallInsightsRequest = ""; + params.CallInsightsBaseUrl = CALLINSIGHTS_BASE_URL; + params.CallInsightsRequestPath = `v1/Call/${callUUID}/Feedback/`; + return super.create(params); + } + +} \ No newline at end of file diff --git a/lib/rest/client.js b/lib/rest/client.js index 6d017e39..599631ca 100644 --- a/lib/rest/client.js +++ b/lib/rest/client.js @@ -15,6 +15,7 @@ import { RecordingInterface } from "../resources/recordings"; import { Response } from "../utils/plivoxml"; import { validateSignature } from "../utils/security"; import { stringify } from "./../utils/jsonStrinfigier"; +import { CallFeedbackInterface } from "../resources/callFeedback"; import { MediaInterface } from "../resources/media.js"; exports.Response = function() { @@ -72,6 +73,7 @@ export class Client { this.numbers = new NumberInterface(client); this.pricings = new PricingInterface(client); this.recordings = new RecordingInterface(client); + this.callFeedback = new CallFeedbackInterface(client); this.media = new MediaInterface(client); } diff --git a/lib/rest/request.js b/lib/rest/request.js index 5ec73a68..d9dcba9c 100644 --- a/lib/rest/request.js +++ b/lib/rest/request.js @@ -32,6 +32,15 @@ export function Request(config) { headers: headers, json: true }; + + if (params.hasOwnProperty('is_call_insights_request')) { + options.url = params.call_insights_base_url + params.call_insights_request_path; + delete params.is_call_insights_request; + delete params.call_insights_base_url; + delete params.call_insights_request_path; + delete options.formData; + options.json = params; + } if (method === 'GET' && options.formData !== '') { let query = '?' + queryString.stringify(params); diff --git a/package.json b/package.json index 1c2c074e..ad0297d7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "plivo", - "version": "4.2.0", + "version": "4.3.0", "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": [