UNPKG

rcs-data

Version:

RCS消息数据结构

150 lines 5.53 kB
"use strict"; 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