rcs-data
Version:
RCS消息数据结构
150 lines • 5.53 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.parseSuggestions = exports.SuggestionsFrame = exports.SuggestionChiplist = exports.SuggestionDialerAction = exports.SuggestionUrlAction = exports.SuggestionAction = exports.Suggestion = exports.Postback = exports.SuggestionActionFrame = exports.SuggestionReplyFrame = void 0;
const mime_1 = require("../mime");
const RcsMsgDecorator_1 = require("./RcsMsgDecorator");
class Postback {
constructor(data) {
this.data = data;
}
}
exports.Postback = Postback;
class Suggestion {
constructor(displayText, postback) {
this.displayText = displayText;
this.postback =
typeof postback === 'string' ? new Postback(postback) : postback;
}
}
exports.Suggestion = Suggestion;
class SuggestionAction extends Suggestion {
}
exports.SuggestionAction = SuggestionAction;
var ActionApplication;
(function (ActionApplication) {
ActionApplication["browser"] = "browser";
ActionApplication["webview"] = "webview";
})(ActionApplication || (ActionApplication = {}));
class SuggestionUrlAction extends SuggestionAction {
constructor(displayText, postback, url, application) {
super(displayText, postback);
this.urlAction = { openUrl: { url, application } };
}
}
exports.SuggestionUrlAction = SuggestionUrlAction;
class SuggestionDialerAction extends SuggestionAction {
constructor(displayText, postback, phoneNumber) {
super(displayText, postback);
this.dialerAction = { dialPhoneNumber: { phoneNumber } };
}
}
exports.SuggestionDialerAction = SuggestionDialerAction;
class SuggestionActionFrame {
constructor(suggestion) {
this.action = suggestion;
}
get suggestion() {
return this.action;
}
}
exports.SuggestionActionFrame = SuggestionActionFrame;
class SuggestionReplyFrame {
constructor(suggestion) {
this.reply = suggestion;
}
get suggestion() {
return this.reply;
}
}
exports.SuggestionReplyFrame = SuggestionReplyFrame;
class SuggestionsFrame {
constructor() {
this._suggestions = [];
}
get suggestions() {
return this._suggestions;
}
toJSON() {
return { suggestions: this.suggestions };
}
}
exports.SuggestionsFrame = SuggestionsFrame;
class SuggestionChiplist extends RcsMsgDecorator_1.RcsMsgDecorator {
constructor(input, rcsmsg) {
let suglist, multi;
if (input instanceof mime_1.Entity) {
if (typeof input.body === 'string')
suglist = JSON.parse(input.body);
multi = (0, mime_1.factory)({ body: [rcsmsg.mime, input] });
}
else {
suglist = input;
let body = JSON.stringify(input, null, 1);
let sugmime = (0, mime_1.factory)({
contentType: 'application/vnd.gsma.botsuggestion.v1.0+json',
body,
});
sugmime.header('Content-Disposition', 'attachment; filename=”Chiplist.lst');
sugmime.header('Content-Length', `${sugmime.body.length}`);
multi = (0, mime_1.factory)({ body: [rcsmsg.mime, sugmime] });
}
multi.header('Content-Length', `${multi.toString({ noHeaders: true }).length}`);
super(rcsmsg, multi);
this._suglist = suglist;
}
get content() {
return this._rcsmsg.content;
}
get messagePlainObject() {
let msg = {
contentType: 'application/vnd.gsma.botsuggestion.v1.0+json',
contentText: this._suglist.toJSON(),
};
return [this._rcsmsg.messagePlainObject, msg];
}
get suggestions() {
return this._suglist.suggestions;
}
}
exports.SuggestionChiplist = SuggestionChiplist;
function parseSuggestions(suggestions) {
if (!suggestions)
throw Error('没有提供建议列表数据');
if (typeof suggestions === 'string')
suggestions = JSON.parse(suggestions);
if (!Array.isArray(suggestions))
throw Error('建议列表数据不是数组类型');
const frame = new SuggestionsFrame();
suggestions.forEach((sug) => {
let { reply, action } = sug;
if (reply) {
let { displayText, postback } = reply;
let { data } = postback;
let rcssug = new Suggestion(displayText, data);
let replyframe = new SuggestionReplyFrame(rcssug);
frame.suggestions.push(replyframe);
}
else if (action) {
let { displayText, postback } = action;
let { data } = postback;
let { urlAction, dialerAction } = action;
if (urlAction) {
let { openUrl } = urlAction;
let { url } = openUrl;
let rcsUrlAction = new SuggestionUrlAction(displayText, new Postback(data), url);
let actionFrame = new SuggestionActionFrame(rcsUrlAction);
frame.suggestions.push(actionFrame);
}
else if (dialerAction) {
let { dialPhoneNumber } = dialerAction;
let { phoneNumber } = dialPhoneNumber;
let rcsAction = new SuggestionDialerAction(displayText, new Postback(data), phoneNumber);
let actionFrame = new SuggestionActionFrame(rcsAction);
frame.suggestions.push(actionFrame);
}
}
});
return frame;
}
exports.parseSuggestions = parseSuggestions;
//# sourceMappingURL=Suggestion.js.map