[MD] Added template support and footers for buttons & templates (#942)

* Added template support and footers for buttons & templates

* Template message readme
This commit is contained in:
Rajeh Taher
2021-11-30 07:10:54 +02:00
committed by GitHub
parent a8decb9c11
commit cd9c313e47
3 changed files with 70 additions and 4 deletions

View File

@@ -265,6 +265,21 @@ const buttonMessage = {
} }
const sendMsg = await sock.sendMessage(id, buttonMessage) const sendMsg = await sock.sendMessage(id, buttonMessage)
//send a template message!
const templateButtons = [
{index: 1, urlButton: {displayText: '⭐ Star Baileys on GitHub!', url: 'https://github.com/adiwajshing/Baileys'}},
{index: 2, callButton: {displayText: 'Call me!', phoneNumber: '+1 (234) 5678-901'}},
{index: 3, quickReplyButton: {displayText: 'This is a reply, just like normal buttons!', id: 'id-like-buttons-message'}},
]
const buttonMessage = {
text: "Hi it's a template message",
footer: 'Hello World',
templateButtons: templateButttons
}
const sendMsg = await sock.sendMessage(id, templateMessage)
``` ```
### Media Messages ### Media Messages
@@ -325,6 +340,22 @@ const buttonMessage = {
} }
const sendMsg = await sock.sendMessage(id, buttonMessage) const sendMsg = await sock.sendMessage(id, buttonMessage)
//send a template message with an image **attached**!
const templateButtons = [
{index: 1, urlButton: {displayText: '⭐ Star Baileys on GitHub!', url: 'https://github.com/adiwajshing/Baileys'}},
{index: 2, callButton: {displayText: 'Call me!', phoneNumber: '+1 (234) 5678-901'}},
{index: 3, quickReplyButton: {displayText: 'This is a reply, just like normal buttons!', id: 'id-like-buttons-message'}},
]
const buttonMessage = {
text: "Hi it's a template message",
footer: 'Hello World',
templateButtons: templateButttons,
image: {url: 'https://example.com/image.jpeg'}
}
const sendMsg = await sock.sendMessage(id, templateMessage)
``` ```
### Notes ### Notes

View File

@@ -50,6 +50,12 @@ type Buttonable = {
/** add buttons to the message */ /** add buttons to the message */
buttons?: proto.IButton[] buttons?: proto.IButton[]
} }
type Templatable = {
/** add buttons to the message (conflicts with normal buttons)*/
templateButtons?: proto.IHydratedTemplateButton[]
footer?: string
}
type WithDimensions = { type WithDimensions = {
width?: number width?: number
height?: number height?: number
@@ -60,13 +66,13 @@ export type AnyMediaMessageContent = (
image: WAMediaUpload image: WAMediaUpload
caption?: string caption?: string
jpegThumbnail?: string jpegThumbnail?: string
} & Mentionable & Buttonable & WithDimensions) | } & Mentionable & Buttonable & Templatable & WithDimensions) |
({ ({
video: WAMediaUpload video: WAMediaUpload
caption?: string caption?: string
gifPlayback?: boolean gifPlayback?: boolean
jpegThumbnail?: string jpegThumbnail?: string
} & Mentionable & Buttonable & WithDimensions) | { } & Mentionable & Buttonable & Templatable & WithDimensions) | {
audio: WAMediaUpload audio: WAMediaUpload
/** if set to true, will send as a `voice note` */ /** if set to true, will send as a `voice note` */
pttAudio?: boolean pttAudio?: boolean
@@ -78,14 +84,14 @@ export type AnyMediaMessageContent = (
document: WAMediaUpload document: WAMediaUpload
mimetype: string mimetype: string
fileName?: string fileName?: string
} & Buttonable)) & } & Buttonable & Templatable)) &
{ mimetype?: string } { mimetype?: string }
export type AnyRegularMessageContent = ( export type AnyRegularMessageContent = (
({ ({
text: string text: string
} }
& Mentionable & Buttonable) | & Mentionable & Buttonable & Templatable) |
AnyMediaMessageContent | AnyMediaMessageContent |
{ {
contacts: { contacts: {

View File

@@ -262,8 +262,37 @@ export const generateWAMessageContent = async(
Object.assign(buttonsMessage, m) Object.assign(buttonsMessage, m)
} }
if ('footer' in message && !!message.footer) {
buttonsMessage.footerText = message.footer
}
m = { buttonsMessage } m = { buttonsMessage }
} else if ('templateButtons' in message && !!message.templateButtons) {
const templateMessage: proto.ITemplateMessage = {
hydratedTemplate: {
hydratedButtons: message.templateButtons
}
}
if ('text' in message) {
templateMessage.hydratedTemplate.hydratedContentText = message.text
} else {
if('caption' in message) {
templateMessage.hydratedTemplate.hydratedContentText = message.caption
}
Object.assign(templateMessage.hydratedTemplate, m)
}
if ('footer' in message && !!message.footer) {
templateMessage.hydratedTemplate.hydratedFooterText = message.footer
}
m = { templateMessage }
} }
if('viewOnce' in message && !!message.viewOnce) { if('viewOnce' in message && !!message.viewOnce) {
m = { viewOnceMessage: { message: m } } m = { viewOnceMessage: { message: m } }
} }