Создание коннектора webservice
Пример создание собственного коннектора вебсервиса
В качестве примера мы создадим простой коннектор вебсервис для получения сообщений от VIber. Данный коннектор будет автоматически подписываться на обновления Viber и передавать данные полученного сообщения следующим коннекторам.
Для начала создайте новый процесс для отладки нашего будующего коннектора

После этого откройте Библиотеку коннекторов нажав на ссылку Add connector в правом углу редактора процесса. После этого откроется библиотека доступных коннекторов.

Далле выберите пункт Upload connector в правом верхнем углу для загрузки нового коннектора, после нажатия которого откроется редактор нового коннектора

В редакторе коннектора доступны следующие основные секции:
General - общая информация о коннекторе, такая, как: название, описание, тип, версия и подробная информация. В этой секции также можно загрузить изображение для нашего коннектора.
Schema - раздел, где необходимо описать все методы нашего коннектора, а также входные и исходящие схемы данных для каждого метода.
Code - раздел где редактируется основной код бизнес-логики коннектора.
Install handler - раздел где задается обработчик коннектора, который будет выполнен при инициализации коннектора в процессе.
NPM modules - раздел, где добавляются NPM модули коннектора, которые будут необходимы для его работы.
Шаг 1. Заполнение общей информации о коннекторе
На вкладке General заполните название, описание, версию создаваемого коннектора, а также загрузите картинку.
Так как мы создаем коннектор вебсервис, который будет принимать запросы от Viber, то параметр Type должен быть со значением Webservice.

Шаг 2. Описание методов и схемы коннектора
Вкладка Schema имеет 3 основных поля для описания схем данных коннектора
Methods - методы коннектора
Input schema - описание входной схемы данных в зависимости от метода
Output schema - описание исходящей схемы данных в зависимости от метода
Описание методов коннектора
Сперва опишем методы нашего коннектора. Так как мы будем принимать только сообщения, то метод у нас будет только один, назовем его default
[
{
"title": "Default",
"value": "viber_default_method",
"http_methods": ["POST", "GET"]
}
]
Описание схемы для входных данных
Для работы с Viber нам необходимо предоставить пользователю возможность заполнить в настройках коннектора следующие параметры:
Токен (X-Viber-Auth-Token)
Endpoint (action) - параметр, формирующий полный URL нашего вебхука
С учетом этих данных опишем схему, с использованием параметров Presenter, чтобы дать возможность позже редактировать значение параметров в настройках коннектора.
{
"viber_default_method": {
"type": "object",
"properties": {
"X-Viber-Auth-Token": {
"type": "string",
"required": false,
"presenter": {
"title": "Viber auth token",
"desc": "X-Viber-Auth-Token, ypu can get it on partners.viber.com. Just create a bot",
"component": "string",
"order": 0
}
},
"action": {
"type": "string",
"required": true,
"min": 4,
"presenter": {
"title": "Endpoint",
"component": "string",
"order": 0
}
}
}
}
}
Описание схемы для исходящих данных
Предварительно ознакомившись с API Viber мы знаем, что будет получать следующий формат данных:
{
"event":"message",
"timestamp":1457764197627,
"message_token":4912661846655238145,
"sender":{
"id":"01234567890A=",
"name":"John McClane",
"avatar":"http://avatar.example.com",
"country":"UK",
"language":"en",
"api_version":1
},
"message":{
"type":"text",
"text":"a message to the service",
"media":"http://example.com",
"location":{
"lat":50.76891,
"lon":6.11499
},
"tracking_data":"tracking data"
}
}
Для наших целей, мы немного оптимизируем схему данных, которые будет отдавать наш коннектор в следующий вид:
{
"result": {
"id": "01234567890A=",
"name": "John McClane",
"avatar": "http://avatar.example.com",
"text": "a message to the service"
}
}
С учетом оптимизированной схемы, опишем схему исходящих данных для нашего коннектора
{
"viber_default_method": {
"type": "object",
"properties": {
"result": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"avatar": {
"type": "string"
},
"text": {
"type": "string"
}
}
}
}
}
}
Шаг 3. Основной код коннектора
Во вкладке Code необходимо написать основной код нашего коннектора, который будет работать с запросом от Viber, в котором коннектор распарсит входные данные, и передаст их в контексте следубщим коннекторам.
const https = require('https');
if (ctx.connector.method !== "viber_default_method") {
console.error("Unknown connector method", ctx.connector.method);
ctx.reject(false);
ctx.response.json({error: false});
return Promise.resolve();
}
// Функция для парсинга тела запроса от Viber
const parseContent = (request) => {
return new Promise((resolve, reject) => {
var body = '';
request.on('data', (data) => {
body += data;
});
request.on('end', () => {
let data;
try {
data = JSON.parse(body);
} catch (err) {
console.error(err);
return reject('Bad request');
}
resolve(data);
});
});
};
return (async () => {
var body = {};
try {
if (ctx.request.method == 'POST') {
body = await parseContent(ctx.request);
}
} catch (err) {
ctx.reject(false);
return Promise.resolve();
}
// Передаем данные в контекст с учетом описанной нами схемы
ctx.setData({
result: {
id: body.sender.id,
name: body.sender.name,
avatar: body.sender.avatar || '',
text: body.message.text
}
});
ctx.response.json({error: false});
return Promise.resolve();
})();
Шаг 4. Установка предобработчика installHandler
Viber требует чтобы наш вебсервис был предварительно зарегистрирован. Для этих целей идеально подходит предобработчик installHandler, который позволит в момент инициализации коннектора подписать наш создаваемый вебхук на события в Viber избавив пользователей от ручной регистрации вебхуков.
Опишем следующий код, который позволит автоматически зарегистрировать наш вебхук.
const https = require('https');
return (async () => {
const { connector, workplace, processID } = ctx;
const opts = {
host: 'chatapi.viber.com',
port: 443,
path: '/pa/set_webhook',
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Viber-Auth-Token': connector.params['X-Viber-Auth-Token']
}
}
const requestData = JSON.stringify({
url: `https://api.mixapp.io/webhooks/${workplace}/${processID}/${connector.params.action}`,
event_types: ["receive_message_from_user"],
send_name: true,
send_photo: true
});
return new Promise((resolve, reject) => {
const req = https.request(opts, resolve);
req.on('error', reject);
req.write(requestData);
req.end();
}).catch(err => console.error);
})();
Шаг 5. Сохраняем коннектор и тестируем
После того, как мы описали весь функционал нового коннектора, необходимо его сохранить, после чего он появится в Библиотеке коннектов и можно приступать к его тестированию.

Для тестирования мы добавим в процесс наш новый коннектор и коннектор Expression, в котором напишем вывод поступающих через контекст данных от нашего коннектора к Viber с помощью кода: console.log(ctx.data.data);

В настройках коннектора к Viber заполним Endpoint и токен

После чего запустим процесс и отправим сообщение через Viber нашему пользователю. В свою очередь Viber это сообщение отправит на наш созданный вебсервис и в консоле процесса мы сможем увидеть информацию о нем:

Last updated
Was this helpful?