es6 syntax
This commit is contained in:
parent
b430a9146f
commit
74cdccf5cf
5
.gitignore
vendored
5
.gitignore
vendored
@ -60,4 +60,7 @@ typings/
|
||||
# next.js build output
|
||||
.next
|
||||
.idea
|
||||
package-lock.json
|
||||
|
||||
package-lock.json
|
||||
out/
|
||||
dist/
|
45
README.md
45
README.md
@ -18,11 +18,11 @@ var RetailcrmBotApiClient = require('mg-api-client');
|
||||
# Usage
|
||||
#### Get users
|
||||
```javascript
|
||||
var api = new RetailcrmBotApiClient({
|
||||
const api = new RetailcrmBotApiClient({
|
||||
host: 'https://api.example.com',
|
||||
token: 'your bot token',
|
||||
apiVersion: 'v1' // optional
|
||||
}).getClient();
|
||||
}).client;
|
||||
|
||||
api.getUsers()
|
||||
.then(function (users) {
|
||||
@ -35,13 +35,13 @@ api.getUsers()
|
||||
|
||||
#### Send message
|
||||
```javascript
|
||||
var api = new RetailcrmBotApiClient({
|
||||
const api = new RetailcrmBotApiClient({
|
||||
host: 'https://api.example.com',
|
||||
token: 'your bot token',
|
||||
apiVersion: 'v1' // optional
|
||||
}).getClient();
|
||||
}).client;
|
||||
|
||||
var message = {
|
||||
let message = {
|
||||
chat_id: 1,
|
||||
content: 'Text message',
|
||||
scope: 'public',
|
||||
@ -56,3 +56,38 @@ api.sendMessage(message)
|
||||
console.log(e);
|
||||
});
|
||||
```
|
||||
#### Websocket Example
|
||||
```javascript
|
||||
const WebSocket = require('ws');
|
||||
|
||||
const api = new RetailcrmBotApiClient({
|
||||
host: 'https://api.example.com',
|
||||
token: 'your bot token',
|
||||
apiVersion: 'v1' // optional
|
||||
}).client;
|
||||
|
||||
const wsData = api.getWebsocketData(['message_new']);
|
||||
const ws = new WebSocket(wsData.get('url'), {
|
||||
headers: wsData.get('headers')
|
||||
});
|
||||
|
||||
ws.on('message', function (content) {
|
||||
let event = JSON.parse(content);
|
||||
let data = event.data;
|
||||
|
||||
if (event.type === 'message_new' && data.message.from.type !== 'bot') {
|
||||
let message = {
|
||||
chat_id: data.message.chat_id,
|
||||
content: 'Bonjour!',
|
||||
scope: 'public',
|
||||
type: 'text'
|
||||
};
|
||||
|
||||
api.sendMessage(message).then(function (res) {
|
||||
console.log(res);
|
||||
}).catch(function (e) {
|
||||
console.log(e);
|
||||
})
|
||||
}
|
||||
});
|
||||
```
|
||||
|
81
index.js
81
index.js
@ -1,48 +1,49 @@
|
||||
'use strict';
|
||||
|
||||
var v1 = require('./lib/v1/client');
|
||||
var request = require('./lib/request');
|
||||
import v1 from './lib/v1/client'
|
||||
import Request from './lib/request'
|
||||
|
||||
module.exports = RetailcrmBotApiClient;
|
||||
const lastApiVersion = 'v1';
|
||||
|
||||
/**
|
||||
* @param {Object} options
|
||||
* @throws {Error}
|
||||
* @constructor
|
||||
*/
|
||||
function RetailcrmBotApiClient(options) {
|
||||
if (!options.host) {
|
||||
throw new Error('Url is required');
|
||||
/** Class init bot api client */
|
||||
export default class RetailcrmBotApiClient {
|
||||
/**
|
||||
* @param {Object} options
|
||||
* @throws {Error}
|
||||
*/
|
||||
constructor(options) {
|
||||
if (!options.host) {
|
||||
throw new Error('Url is required');
|
||||
}
|
||||
|
||||
if (options.host.indexOf('https') !== 0) {
|
||||
throw new Error('HTTPS required');
|
||||
}
|
||||
|
||||
if (!(options.token)) {
|
||||
throw new Error('Token is required');
|
||||
}
|
||||
|
||||
let currentVersion;
|
||||
|
||||
const clients = {
|
||||
'v1': v1
|
||||
};
|
||||
|
||||
if (options.apiVersion) {
|
||||
currentVersion = options.apiVersion;
|
||||
} else {
|
||||
currentVersion = lastApiVersion;
|
||||
}
|
||||
|
||||
this._client = new clients[currentVersion](new Request(options));
|
||||
}
|
||||
|
||||
if (options.host.indexOf('https') !== 0) {
|
||||
throw new Error('HTTPS required');
|
||||
}
|
||||
|
||||
if (!(options.token)) {
|
||||
throw new Error('Token is required');
|
||||
}
|
||||
|
||||
var currentVersion;
|
||||
var lastApiVersion = 'v1';
|
||||
|
||||
var clients = {
|
||||
'v1': v1.Client
|
||||
/**
|
||||
* Get API client
|
||||
* @returns {Client}
|
||||
*/
|
||||
get client() {
|
||||
return this._client;
|
||||
};
|
||||
|
||||
if (options.apiVersion) {
|
||||
currentVersion = options.apiVersion;
|
||||
} else {
|
||||
currentVersion = lastApiVersion;
|
||||
}
|
||||
|
||||
this._client = new clients[currentVersion](new request.Request(options));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get API client
|
||||
* @returns {Client}
|
||||
*/
|
||||
RetailcrmBotApiClient.prototype.getClient = function () {
|
||||
return this._client;
|
||||
};
|
||||
|
301
lib/request.js
301
lib/request.js
@ -1,161 +1,180 @@
|
||||
'use strict';
|
||||
|
||||
var url = require('url');
|
||||
var https = require('https');
|
||||
var querystring = require('querystring');
|
||||
import url from 'url'
|
||||
import https from 'https'
|
||||
import querystring from 'querystring'
|
||||
|
||||
exports.Request = Request;
|
||||
export default class Request {
|
||||
/**
|
||||
* @param {Object} options
|
||||
* @constructor
|
||||
*/
|
||||
constructor(options) {
|
||||
/**
|
||||
* @prop System host
|
||||
* @type {string}
|
||||
* @private
|
||||
*/
|
||||
this._host = url.parse(options.host).host;
|
||||
|
||||
/**
|
||||
* @param {Object} options
|
||||
* @constructor
|
||||
*/
|
||||
function Request(options) {
|
||||
this._host = url.parse(options.host).host;
|
||||
this._token = options.token;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get request path
|
||||
* @param {string} endpoint
|
||||
* @returns {string}
|
||||
* @private
|
||||
*/
|
||||
Request.prototype._getPath = function (endpoint) {
|
||||
return '/api/bot/' + endpoint;
|
||||
};
|
||||
|
||||
/**
|
||||
* Make request
|
||||
* @param {string} endpoint
|
||||
* @param {string} method
|
||||
* @param {Object} data
|
||||
* @returns {Promise}
|
||||
* @throws {Error}
|
||||
* @private
|
||||
*/
|
||||
Request.prototype._request = function (endpoint, method, data) {
|
||||
var path = this._getPath(endpoint);
|
||||
var response = '';
|
||||
|
||||
if (method === 'GET' && data.length > 0) {
|
||||
path += '?' + querystring.stringify(data);
|
||||
/**
|
||||
* @prop Bot token
|
||||
* @type {*|string|string}
|
||||
* @private
|
||||
*/
|
||||
this._token = options.token;
|
||||
}
|
||||
|
||||
var options = {
|
||||
host: this._host,
|
||||
method: method,
|
||||
path: path,
|
||||
headers: {
|
||||
'x-bot-token': this._token
|
||||
/**
|
||||
* Get request path
|
||||
* @param {string} endpoint
|
||||
* @returns {string}
|
||||
* @private
|
||||
*/
|
||||
_getPath(endpoint) {
|
||||
return '/api/bot/' + endpoint;
|
||||
}
|
||||
|
||||
/**
|
||||
* Make request
|
||||
* @param {string} endpoint
|
||||
* @param {string} method
|
||||
* @param {Object} data
|
||||
* @returns {Promise}
|
||||
* @throws {Error}
|
||||
* @private
|
||||
*/
|
||||
_request(endpoint, method, data = {}) {
|
||||
let path = this._getPath(endpoint);
|
||||
let response = '';
|
||||
|
||||
if (method === 'GET' && data.length > 0) {
|
||||
path += '?' + querystring.stringify(data);
|
||||
}
|
||||
|
||||
const options = {
|
||||
host: this._host,
|
||||
method: method,
|
||||
path: path,
|
||||
headers: {
|
||||
'X-Bot-Token': this._token
|
||||
}
|
||||
};
|
||||
|
||||
return new Promise(function(resolve, reject) {
|
||||
const request = https.request(options, function (res) {
|
||||
res.on('data', function (chunk) {
|
||||
response += chunk;
|
||||
});
|
||||
|
||||
res.on('end', function () {
|
||||
try {
|
||||
const result = JSON.parse(response);
|
||||
|
||||
if (res.statusCode < 400) {
|
||||
resolve(result);
|
||||
} else {
|
||||
reject(new Error(result.errors.join(',')));
|
||||
}
|
||||
} catch (e) {
|
||||
reject(e);
|
||||
}
|
||||
});
|
||||
|
||||
res.on('error', function (e) {
|
||||
reject(e);
|
||||
})
|
||||
});
|
||||
|
||||
if (['POST', 'PUT', 'PATCH'].includes(method)) {
|
||||
request.write(JSON.stringify(data));
|
||||
}
|
||||
|
||||
request.end();
|
||||
|
||||
request.on('error', function(e) {
|
||||
reject(e);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Method GET
|
||||
* @param {string} endpoint
|
||||
* @param {Object} params
|
||||
* @returns {Promise}
|
||||
*/
|
||||
get(endpoint, params = {}) {
|
||||
return this._request(endpoint, 'GET', params);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method POST
|
||||
* @param {string} endpoint
|
||||
* @param {Object} data
|
||||
* @returns {Promise}
|
||||
* @throws {Error}
|
||||
*/
|
||||
post(endpoint, data) {
|
||||
if (!data) {
|
||||
throw new Error('Body is not be empty');
|
||||
}
|
||||
|
||||
return this._request(endpoint, 'POST', data);
|
||||
};
|
||||
|
||||
return new Promise(function(resolve, reject) {
|
||||
var request = https.request(options, function (res) {
|
||||
res.on('data', function (chunk) {
|
||||
response += chunk;
|
||||
});
|
||||
|
||||
res.on('end', function () {
|
||||
try {
|
||||
var result = JSON.parse(response);
|
||||
|
||||
if (res.statusCode < 400) {
|
||||
resolve(result);
|
||||
} else {
|
||||
reject(new Error(result.errors.join(',')));
|
||||
}
|
||||
} catch (e) {
|
||||
reject(e);
|
||||
}
|
||||
});
|
||||
|
||||
res.on('error', function (e) {
|
||||
reject(e);
|
||||
})
|
||||
});
|
||||
|
||||
if (['POST', 'PUT', 'PATCH'].includes(method)) {
|
||||
request.write(JSON.stringify(data));
|
||||
/**
|
||||
* Method PATCH
|
||||
* @param {string} endpoint
|
||||
* @param {Object} data
|
||||
* @returns {Promise}
|
||||
* @throws {Error}
|
||||
*/
|
||||
patch(endpoint, data) {
|
||||
if (!data) {
|
||||
throw new Error('Body is not be empty');
|
||||
}
|
||||
|
||||
request.end();
|
||||
|
||||
request.on('error', function(e) {
|
||||
reject(e);
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Method GET
|
||||
* @param {string} endpoint
|
||||
* @param {Object} params
|
||||
* @returns {Promise}
|
||||
*/
|
||||
Request.prototype.get = function (endpoint, params) {
|
||||
if (params === undefined) {
|
||||
params = {};
|
||||
return this._request(endpoint, 'PATCH', data);
|
||||
}
|
||||
|
||||
return this._request(endpoint, 'GET', params);
|
||||
};
|
||||
/**
|
||||
* Method PUT
|
||||
* @param {string} endpoint
|
||||
* @param {Object} data
|
||||
* @returns {Promise}
|
||||
* @throws {Error}
|
||||
*/
|
||||
put(endpoint, data) {
|
||||
if (!data) {
|
||||
throw new Error('Body is not be empty');
|
||||
}
|
||||
|
||||
/**
|
||||
* Method POST
|
||||
* @param {string} endpoint
|
||||
* @param {Object} data
|
||||
* @returns {Promise}
|
||||
* @throws {Error}
|
||||
*/
|
||||
Request.prototype.post = function (endpoint, data) {
|
||||
if (!data) {
|
||||
throw new Error('Body is not be empty');
|
||||
return this._request(endpoint, 'PUT', data);
|
||||
}
|
||||
|
||||
return this._request(endpoint, 'POST', data);
|
||||
};
|
||||
|
||||
/**
|
||||
* Method PATCH
|
||||
* @param {string} endpoint
|
||||
* @param {Object} data
|
||||
* @returns {Promise}
|
||||
* @throws {Error}
|
||||
*/
|
||||
Request.prototype.patch = function (endpoint, data) {
|
||||
if (!data) {
|
||||
throw new Error('Body is not be empty');
|
||||
/**
|
||||
* Method DELETE
|
||||
* @param {string} endpoint
|
||||
* @returns {Promise}
|
||||
*/
|
||||
delete(endpoint) {
|
||||
return this._request(endpoint, 'DELETE');
|
||||
}
|
||||
|
||||
return this._request(endpoint, 'PATCH', data);
|
||||
};
|
||||
|
||||
/**
|
||||
* Method PUT
|
||||
* @param {string} endpoint
|
||||
* @param {Object} data
|
||||
* @returns {Promise}
|
||||
* @throws {Error}
|
||||
*/
|
||||
Request.prototype.put = function (endpoint, data) {
|
||||
if (!data) {
|
||||
throw new Error('Body is not be empty');
|
||||
/**
|
||||
* Get api host
|
||||
* @returns {string | *}
|
||||
*/
|
||||
get host() {
|
||||
return this._host;
|
||||
}
|
||||
|
||||
return this._request(endpoint, 'PUT', data);
|
||||
};
|
||||
|
||||
/**
|
||||
* Method DELETE
|
||||
* @param {string} endpoint
|
||||
* @returns {Promise}
|
||||
*/
|
||||
Request.prototype.delete = function (endpoint) {
|
||||
return this._request(endpoint, 'DELETE', {});
|
||||
};
|
||||
|
||||
Request.prototype.getHost = function () {
|
||||
return this._host;
|
||||
};
|
||||
/**
|
||||
* Get bot token
|
||||
* @returns {*|string}
|
||||
*/
|
||||
get token() {
|
||||
return this._token;
|
||||
}
|
||||
}
|
||||
|
443
lib/v1/client.js
443
lib/v1/client.js
@ -1,210 +1,243 @@
|
||||
'use strict';
|
||||
|
||||
exports.Client = Client;
|
||||
|
||||
/**
|
||||
* @param {Request} request
|
||||
* @constructor
|
||||
* @classdesc Bot API v1 methods
|
||||
* @namespace ClientV1
|
||||
* @readonly
|
||||
*/
|
||||
function Client(request) {
|
||||
this._version = 'v1';
|
||||
this._request = request;
|
||||
export default class Client {
|
||||
/**
|
||||
* @param {Request} request
|
||||
* @constructor
|
||||
*/
|
||||
constructor(request) {
|
||||
/**
|
||||
* @prop API version
|
||||
* @type {string}
|
||||
* @private
|
||||
*/
|
||||
this._version = 'v1';
|
||||
|
||||
/**
|
||||
* @prop Request object
|
||||
* @type {Request}
|
||||
* @private
|
||||
*/
|
||||
this._request = request;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get bots
|
||||
* @param {Object} params
|
||||
* @since 1.0.0
|
||||
* @returns {Promise}
|
||||
*/
|
||||
getBots(params = {}) {
|
||||
return this._request.get(this._version + '/bots', params);
|
||||
};
|
||||
|
||||
/**
|
||||
* Get channels
|
||||
* @param {Object} params
|
||||
* @returns {Promise}
|
||||
*/
|
||||
getChannels(params = {}) {
|
||||
return this._request.get(this._version + '/channels', params);
|
||||
};
|
||||
|
||||
/**
|
||||
* Get chats
|
||||
* @param {Object} params
|
||||
* @returns {Promise}
|
||||
*/
|
||||
getChats(params = {}) {
|
||||
return this._request.get(this._version + '/chats', params);
|
||||
};
|
||||
|
||||
/**
|
||||
* Get customers
|
||||
* @param {Object} params
|
||||
* @returns {Promise}
|
||||
*/
|
||||
getCustomers(params = {}) {
|
||||
return this._request.get(this._version + '/customers', params);
|
||||
};
|
||||
|
||||
/**
|
||||
* Get dialogs
|
||||
* @param {Object} params
|
||||
* @returns {Promise}
|
||||
*/
|
||||
getDialogs(params = {}) {
|
||||
return this._request.get(this._version + '/dialogs', params);
|
||||
};
|
||||
|
||||
/**
|
||||
* Get members
|
||||
* @param {Object} params
|
||||
* @returns {Promise}
|
||||
*/
|
||||
getMembers(params = {}) {
|
||||
return this._request.get(this._version + '/members', params);
|
||||
};
|
||||
|
||||
/**
|
||||
* Assign dialog
|
||||
* @param {Number} dialog_id - Dialog identificator
|
||||
* @param {Object} dialog - Dialog object
|
||||
* @returns {Promise}
|
||||
* @throws {Error}
|
||||
*/
|
||||
assignDialog(dialog_id, dialog) {
|
||||
if (!dialog_id) {
|
||||
throw new Error('Parameter `dialog_id` is required');
|
||||
}
|
||||
|
||||
return this._request.patch(this._version + '/dialogs/'+ dialog_id + '/assign', dialog);
|
||||
};
|
||||
|
||||
/**
|
||||
* Close dialog
|
||||
* @param {Number} dialog_id
|
||||
* @returns {Promise}
|
||||
* @throws {Error}
|
||||
*/
|
||||
closeDialog(dialog_id) {
|
||||
if (!dialog_id) {
|
||||
throw new Error('Parameter `dialog_id` is required');
|
||||
}
|
||||
|
||||
return this._request.delete(this._version + '/dialogs/'+ dialog_id + '/close');
|
||||
};
|
||||
|
||||
/**
|
||||
* Send message
|
||||
* @param {Object} data
|
||||
* @returns {Promise}
|
||||
*/
|
||||
sendMessage(data) {
|
||||
return this._request.post(this._version + '/messages', data);
|
||||
};
|
||||
|
||||
/**
|
||||
* Get messages
|
||||
* @param {Object} params
|
||||
* @returns {Promise}
|
||||
*/
|
||||
getMessages(params = {}) {
|
||||
return this._request.get(this._version + '/messages', params);
|
||||
};
|
||||
|
||||
/**
|
||||
* Delete message
|
||||
* @param {Number} message_id
|
||||
* @returns {Promise}
|
||||
* @throws {Error}
|
||||
*/
|
||||
deleteMessage(message_id) {
|
||||
if (!message_id) {
|
||||
throw new Error('Parameter `message_id` is required');
|
||||
}
|
||||
|
||||
return this._request.delete(this._version + '/messages/' + message_id);
|
||||
};
|
||||
|
||||
/**
|
||||
* Edit message
|
||||
* @param {Number} message_id
|
||||
* @param {Object} message
|
||||
* @returns {Promise}
|
||||
* @throws {Error}
|
||||
*/
|
||||
editMessage(message_id, message) {
|
||||
if (!message_id) {
|
||||
throw new Error('Parameter `message_id` is required');
|
||||
}
|
||||
|
||||
return this._request.patch(this._version + '/messages/' + message_id, message);
|
||||
};
|
||||
|
||||
/**
|
||||
* Get bot commands
|
||||
* @param {Object} params
|
||||
* @returns {Promise}
|
||||
*/
|
||||
getCommands(params = {}) {
|
||||
return this._request.get(this._version + '/my/commands', params);
|
||||
};
|
||||
|
||||
/**
|
||||
* Edit bot command
|
||||
* @param {string} command_name
|
||||
* @param {Object} data
|
||||
* @returns {Promise}
|
||||
* @throws {Error}
|
||||
*/
|
||||
editCommand(command_name, data) {
|
||||
if (!command_name) {
|
||||
throw new Error('Parameter `command_name` is required');
|
||||
}
|
||||
|
||||
return this._request.put(this._version + '/my/commands/' + command_name, data);
|
||||
};
|
||||
|
||||
/**
|
||||
* Delete bot command
|
||||
* @param {string} command_name
|
||||
* @returns {Promise}
|
||||
* @throws {Error}
|
||||
*/
|
||||
deleteCommand(command_name) {
|
||||
if (!command_name) {
|
||||
throw new Error('Parameter `command_name` is required');
|
||||
}
|
||||
|
||||
return this._request.delete(this._version + '/my/commands/' + command_name);
|
||||
};
|
||||
|
||||
/**
|
||||
* Bot information update
|
||||
* @param {Object} data
|
||||
* @returns {Promise}
|
||||
*/
|
||||
info(data) {
|
||||
return this._request.patch(this._version + '/my/info', data);
|
||||
};
|
||||
|
||||
/**
|
||||
* Get users
|
||||
* @param {Object} params
|
||||
* @returns {Promise}
|
||||
*/
|
||||
getUsers(params = {}) {
|
||||
return this._request.get(this._version + '/users', params);
|
||||
};
|
||||
|
||||
/**
|
||||
* Get websocket url
|
||||
* @param {array<string>} events
|
||||
* @returns {Map}
|
||||
* @throws {Error}
|
||||
*/
|
||||
getWebsocketData(events) {
|
||||
if (!events) {
|
||||
throw new Error('Events is required');
|
||||
}
|
||||
|
||||
let map = new Map();
|
||||
let url = 'wss://' + this._request.host + '/api/bot/' + this._version + '/ws?events=';
|
||||
|
||||
events.forEach(function (event) {
|
||||
url += event + ',';
|
||||
});
|
||||
|
||||
url = url.slice(0, -1);
|
||||
|
||||
map.set('url', url);
|
||||
map.set('headers', {
|
||||
'X-Bot-Token': this._request.token
|
||||
});
|
||||
|
||||
return map;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Get bots
|
||||
* @param {string} params
|
||||
* @returns {Promise}
|
||||
*/
|
||||
Client.prototype.getBots = function (params) {
|
||||
return this._request.get(this._version + '/bots', params);
|
||||
};
|
||||
|
||||
/**
|
||||
* Get channels
|
||||
* @param {string} params
|
||||
* @returns {Promise}
|
||||
*/
|
||||
Client.prototype.getChannels = function (params) {
|
||||
return this._request.get(this._version + '/channels', params);
|
||||
};
|
||||
|
||||
/**
|
||||
* Get chats
|
||||
* @param {string} params
|
||||
* @returns {Promise}
|
||||
*/
|
||||
Client.prototype.getChats = function (params) {
|
||||
return this._request.get(this._version + '/chats', params);
|
||||
};
|
||||
|
||||
/**
|
||||
* Get customers
|
||||
* @param {string} params
|
||||
* @returns {Promise}
|
||||
*/
|
||||
Client.prototype.getCustomers = function (params) {
|
||||
return this._request.get(this._version + '/customers', params);
|
||||
};
|
||||
|
||||
/**
|
||||
* Get dialogs
|
||||
* @param {string} params
|
||||
* @returns {Promise}
|
||||
*/
|
||||
Client.prototype.getDialogs = function (params) {
|
||||
return this._request.get(this._version + '/dialogs', params);
|
||||
};
|
||||
|
||||
/**
|
||||
* Get members
|
||||
* @param {string} params
|
||||
* @returns {Promise}
|
||||
*/
|
||||
Client.prototype.getMembers = function (params) {
|
||||
return this._request.get(this._version + '/members', params);
|
||||
};
|
||||
|
||||
/**
|
||||
* Assign dialog
|
||||
* @param {Number} dialog_id
|
||||
* @param {Object} dialog
|
||||
* @returns {Promise}
|
||||
*/
|
||||
Client.prototype.assignDialog = function (dialog_id, dialog) {
|
||||
return this._request.patch(this._version + '/dialogs/'+ dialog_id + '/assign', dialog);
|
||||
};
|
||||
|
||||
/**
|
||||
* Close dialog
|
||||
* @param {Number} dialog_id
|
||||
* @returns {Promise}
|
||||
* @throws {Error}
|
||||
*/
|
||||
Client.prototype.closeDialog = function (dialog_id) {
|
||||
if (!dialog_id) {
|
||||
throw new Error('dialog_id is required');
|
||||
}
|
||||
|
||||
return this._request.delete(this._version + '/dialogs/'+ dialog_id + '/close');
|
||||
};
|
||||
|
||||
/**
|
||||
* Send message
|
||||
* @param {Object} data
|
||||
* @returns {Promise}
|
||||
*/
|
||||
Client.prototype.sendMessage = function (data) {
|
||||
return this._request.post(this._version + '/messages', data);
|
||||
};
|
||||
|
||||
/**
|
||||
* Get messages
|
||||
* @param {Object} params
|
||||
* @returns {Promise}
|
||||
*/
|
||||
Client.prototype.getMessages = function (params) {
|
||||
return this._request.get(this._version + '/messages', params);
|
||||
};
|
||||
|
||||
/**
|
||||
* Delete message
|
||||
* @param {Number} message_id
|
||||
* @returns {Promise}
|
||||
* @throws {Error}
|
||||
*/
|
||||
Client.prototype.deleteMessage = function (message_id) {
|
||||
if (!message_id) {
|
||||
throw new Error('message_id is required');
|
||||
}
|
||||
|
||||
return this._request.delete(this._version + '/messages/' + message_id);
|
||||
};
|
||||
|
||||
/**
|
||||
* Edit message
|
||||
* @param {Number} message_id
|
||||
* @param {Object} message
|
||||
* @returns {Promise}
|
||||
*/
|
||||
Client.prototype.editMessage = function (message_id, message) {
|
||||
return this._request.patch(this._version + '/messages/' + message_id, message);
|
||||
};
|
||||
|
||||
/**
|
||||
* Get bot commands
|
||||
* @param {Object} params
|
||||
* @returns {Promise}
|
||||
*/
|
||||
Client.prototype.getCommands = function (params) {
|
||||
return this._request.get(this._version + '/my/commands', params);
|
||||
};
|
||||
|
||||
/**
|
||||
* Edit bot command
|
||||
* @param {string} command_name
|
||||
* @param {Object} data
|
||||
* @returns {Promise}
|
||||
* @throws {Error}
|
||||
*/
|
||||
Client.prototype.editCommand = function (command_name, data) {
|
||||
if (!command_name) {
|
||||
throw new Error('Parameter command name is required');
|
||||
}
|
||||
|
||||
return this._request.put(this._version + '/my/commands/' + command_name, data);
|
||||
};
|
||||
|
||||
/**
|
||||
* Delete bot command
|
||||
* @param {string} command_name
|
||||
* @returns {Promise}
|
||||
* @throws {Error}
|
||||
*/
|
||||
Client.prototype.deleteCommand = function (command_name) {
|
||||
if (!command_name) {
|
||||
throw new Error('command_name is required');
|
||||
}
|
||||
|
||||
return this._request.delete(this._version + '/my/commands/' + command_name);
|
||||
};
|
||||
|
||||
/**
|
||||
* Bot information update
|
||||
* @param {Object} data
|
||||
* @returns {Promise}
|
||||
*/
|
||||
Client.prototype.info = function (data) {
|
||||
return this._request.patch(this._version + '/my/info', data);
|
||||
};
|
||||
|
||||
/**
|
||||
* Get users
|
||||
* @param {Object} params
|
||||
* @returns {Promise}
|
||||
*/
|
||||
Client.prototype.getUsers = function (params) {
|
||||
return this._request.get(this._version + '/users', params);
|
||||
};
|
||||
|
||||
/**
|
||||
* Get websocket url
|
||||
* @param {array<string>} events
|
||||
* @returns {string}
|
||||
* @throws {Error}
|
||||
*/
|
||||
Client.prototype.getWebsocketUrl = function (events) {
|
||||
if (!events) {
|
||||
throw new Error('Events is required');
|
||||
}
|
||||
|
||||
var url = 'wss://' + this._request.getHost() + '/api/bot/' + this._version + '/ws?events=';
|
||||
|
||||
events.forEach(function (event) {
|
||||
url += event + ',';
|
||||
});
|
||||
|
||||
url = url.slice(0, -1);
|
||||
|
||||
return url;
|
||||
};
|
||||
|
23
package.json
23
package.json
@ -1,22 +1,37 @@
|
||||
{
|
||||
"name": "mg-api-client",
|
||||
"description": "JS client for retailCRM Bot API",
|
||||
"tags": ["API", "retailCRM", "Bot", "Chat"],
|
||||
"tags": [
|
||||
"API",
|
||||
"retailCRM",
|
||||
"Bot",
|
||||
"Chat"
|
||||
],
|
||||
"version": "1.0.1",
|
||||
"scripts": {
|
||||
"test": "./node_modules/.bin/_mocha ./tests/."
|
||||
"build": "./node_modules/.bin/rollup -c",
|
||||
"test": "./node_modules/.bin/_mocha --compilers js:@babel/register ./tests/."
|
||||
},
|
||||
"author": "retailCRM",
|
||||
"license": "MIT",
|
||||
"main": "index.js",
|
||||
"main": "./dist/index.js",
|
||||
"bugs": {
|
||||
"url": "https://github.com/retailcrm/mg-bot-api-client-js/issues"
|
||||
},
|
||||
"dependencies": {},
|
||||
"devDependencies": {
|
||||
"@babel/cli": "^7.2.3",
|
||||
"@babel/core": "^7.3.3",
|
||||
"@babel/preset-env": "^7.3.1",
|
||||
"@babel/register": "^7.0.0",
|
||||
"babelrc-rollup": "^3.0.0",
|
||||
"chai": "^4.2.0",
|
||||
"mocha": "^5.2.0",
|
||||
"nock": "^10.0.6"
|
||||
"nock": "^10.0.6",
|
||||
"rollup": "^1.2.2",
|
||||
"rollup-plugin-babel": "^4.3.2",
|
||||
"rollup-plugin-node-builtins": "^2.1.2",
|
||||
"rollup-plugin-node-globals": "^1.4.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 4.0.0"
|
||||
|
19
rollup.config.js
Normal file
19
rollup.config.js
Normal file
@ -0,0 +1,19 @@
|
||||
import babel from 'rollup-plugin-babel';
|
||||
// import builtins from 'rollup-plugin-node-builtins';
|
||||
|
||||
let pluginOptions = [
|
||||
// builtins(),
|
||||
babel({
|
||||
exclude: 'node_modules/**',
|
||||
}),
|
||||
];
|
||||
|
||||
export default [{
|
||||
input: 'index.js',
|
||||
output: {
|
||||
name: 'main',
|
||||
file: 'dist/index.js',
|
||||
format: 'umd',
|
||||
},
|
||||
plugins: pluginOptions,
|
||||
}];
|
@ -1,6 +1,5 @@
|
||||
var nock = require('nock');
|
||||
var chai = require('chai');
|
||||
var RetailcrmBotApiClient = require('../index');
|
||||
import chai from 'chai'
|
||||
import RetailcrmBotApiClient from '../dist/index'
|
||||
|
||||
describe('#Constructor', function () {
|
||||
it('Empty url', function () {
|
||||
|
@ -1,8 +1,8 @@
|
||||
var chai = require('chai');
|
||||
var request = require('../lib/request');
|
||||
import chai from 'chai'
|
||||
import Request from '../lib/request'
|
||||
|
||||
describe('#Request', function () {
|
||||
var req = new request.Request({
|
||||
let req = new Request({
|
||||
host: 'http://api.example.com',
|
||||
token: 'test_token'
|
||||
});
|
||||
|
@ -1,16 +1,16 @@
|
||||
var nock = require('nock');
|
||||
var chai = require('chai');
|
||||
var RetailcrmBotApiClient = require('../index');
|
||||
import nock from 'nock'
|
||||
import chai from 'chai'
|
||||
import RetailcrmBotApiClient from '../index'
|
||||
|
||||
describe('#API client v1', function() {
|
||||
beforeEach(function() {
|
||||
nock.cleanAll();
|
||||
});
|
||||
|
||||
var retailcrm = new RetailcrmBotApiClient({
|
||||
const retailcrm = new RetailcrmBotApiClient({
|
||||
host: 'https://api.example.com',
|
||||
token: 'test_token'
|
||||
}).getClient();
|
||||
}).client;
|
||||
|
||||
it('Get bots list', function() {
|
||||
nock('https://api.example.com/api/bot/v1').get('/bots').reply(200, [{
|
||||
@ -153,7 +153,7 @@ describe('#API client v1', function() {
|
||||
});
|
||||
|
||||
it('Assign dialog incorrect', function () {
|
||||
chai.expect(retailcrm.assignDialog.bind(retailcrm)).to.throw('Body is not be empty');
|
||||
chai.expect(retailcrm.assignDialog.bind(retailcrm)).to.throw('Parameter `dialog_id` is required');
|
||||
});
|
||||
|
||||
it('Close dialog', function () {
|
||||
@ -165,7 +165,7 @@ describe('#API client v1', function() {
|
||||
});
|
||||
|
||||
it('Close dialog incorrect', function () {
|
||||
chai.expect(retailcrm.closeDialog.bind(retailcrm)).to.throw('dialog_id is required');
|
||||
chai.expect(retailcrm.closeDialog.bind(retailcrm)).to.throw('Parameter `dialog_id` is required');
|
||||
});
|
||||
|
||||
it('Send message', function () {
|
||||
@ -226,7 +226,7 @@ describe('#API client v1', function() {
|
||||
});
|
||||
|
||||
it('Delete message incorrect', function () {
|
||||
chai.expect(retailcrm.deleteMessage.bind(retailcrm)).to.throw('message_id is required');
|
||||
chai.expect(retailcrm.deleteMessage.bind(retailcrm)).to.throw('Parameter `message_id` is required');
|
||||
});
|
||||
|
||||
it('Edit message', function () {
|
||||
@ -242,7 +242,7 @@ describe('#API client v1', function() {
|
||||
});
|
||||
|
||||
it('Edit message incorrect', function () {
|
||||
chai.expect(retailcrm.editMessage.bind(retailcrm)).to.throw('Body is not be empty');
|
||||
chai.expect(retailcrm.editMessage.bind(retailcrm)).to.throw('Parameter `message_id` is required');
|
||||
});
|
||||
|
||||
it('Get commands', function () {
|
||||
@ -282,7 +282,7 @@ describe('#API client v1', function() {
|
||||
|
||||
it('Edit command incorrect', function () {
|
||||
chai.expect(retailcrm.editCommand.bind(retailcrm, 'command')).to.throw('Body is not be empty');
|
||||
chai.expect(retailcrm.editCommand.bind(retailcrm)).to.throw('Parameter command name is required');
|
||||
chai.expect(retailcrm.editCommand.bind(retailcrm)).to.throw('Parameter `command_name` is required');
|
||||
});
|
||||
|
||||
it('Delete command', function () {
|
||||
@ -294,7 +294,7 @@ describe('#API client v1', function() {
|
||||
});
|
||||
|
||||
it('Delete command incorrect', function () {
|
||||
chai.expect(retailcrm.deleteCommand.bind(retailcrm)).to.throw('command_name is required');
|
||||
chai.expect(retailcrm.deleteCommand.bind(retailcrm)).to.throw('Parameter `command_name` is required');
|
||||
});
|
||||
|
||||
it('Update bot info', function () {
|
||||
@ -336,14 +336,16 @@ describe('#API client v1', function() {
|
||||
});
|
||||
});
|
||||
|
||||
it('Get websocket url', function () {
|
||||
var url = retailcrm.getWebsocketUrl(['message_new', 'message_updated']);
|
||||
var expected = 'wss://api.example.com/api/bot/v1/ws?events=message_new,message_updated';
|
||||
it('Get websocket data', function () {
|
||||
const wsData = retailcrm.getWebsocketData(['message_new', 'message_updated']);
|
||||
const expectedUrl = 'wss://api.example.com/api/bot/v1/ws?events=message_new,message_updated';
|
||||
const expectedHeaders = {'X-Bot-Token': 'test_token'};
|
||||
|
||||
chai.assert.equal(url, expected);
|
||||
chai.assert.equal(wsData.get('url'), expectedUrl);
|
||||
chai.assert.equal(wsData.get('headers')["X-Bot-Token"], expectedHeaders["X-Bot-Token"]);
|
||||
});
|
||||
|
||||
it('Get websocket url incorrect', function () {
|
||||
chai.expect(retailcrm.getWebsocketUrl.bind(retailcrm)).to.throw('Events is required');
|
||||
chai.expect(retailcrm.getWebsocketData.bind(retailcrm)).to.throw('Events is required');
|
||||
});
|
||||
});
|
||||
|
Loading…
Reference in New Issue
Block a user