Как понять, что присылает подписка Xsi-events АТС Билайн на указанный для нее URL?

228
07 января 2022, 02:10

Оформлена подписка Xsi-event через PUT запрос в API АТС Билайн. В параметре URL был указан адрес, который принимает POST запросы. Сервер на NodeJs(Express). Когда происходят звонки, подписка отправляет пустое тело запроса. Как получать информацию о звонке? Или как разобрать тот запрос, что она присылает.

Answer 1

Пустым тело запроса было, потому что ответ приходил потоком. Формировать данные нужно было посло того, как заканчивается поток. В среде NodeJs + Express это выглядит так

app.post('/path/to/api', (request, response)=>{
    response.status(200); // ответ должен быть обязательно со статусом 200
    let body = '';
    request.on('data', (chunk) => {
        body += chunk;
    });
    request.on('end', () => {
        response.write('OK'); 
        response.end(); 
    });
})

Проблема для среды NodeJS и программирования на Js заключается в том, что ответ приходит в формате XML. Для удобной обработки информации, можно использовать конвертер в json формат. Дополнив код, получим следующее:

app.post('/api/beeline/subscription', (request, response)=>{
    console.log(request.method, request.url, request.headers);
    console.log("------------------------------");
    response.status(200);
    let body = '';
    request.on('data', (chunk) => {
        body += chunk;
    });
    request.on('end', () => {
        let option = {
            elementNameFn: function(val) {return val.replace('xsi:','');},
            compact: true,
            spaces: 4,
            ignoreInstruction:true,
            ignoreDeclaration: true,
            ignoreAttributes: true, 
            ignoreCdata:true,
            instructionHasAttributes: true,
            textKey: 'text'
        }
        let body_JSON = convert.xml2json(body, option);
        response.write('OK'); 
        response.send(); 
    });
})
READ ALSO
HTML JS Как задать изначальные значения в indexeddb

HTML JS Как задать изначальные значения в indexeddb

Имеется база данных indexeddb внутри браузераКак задать ей изначальные значения? Например пользователь заходит в первый раз, значения по умолчанию...

276
Как обратиться к элементу из форму?

Как обратиться к элементу из форму?

Генерируемая формаКоличество пунктов неизвестно

110
jquery добавить get параметр

jquery добавить get параметр

при выборе select скрипт постоянно добавляет параметр, как его раз добавить и при следующих изменениях просто менять?

176