feat(provider): added twilio provider

This commit is contained in:
Leifer Mendez
2022-12-06 21:28:52 +01:00
parent 24ac9fbf48
commit 8dd3be909b
4 changed files with 59 additions and 11 deletions

View File

@@ -1,24 +1,59 @@
const twilio = require('twilio')
const { ProviderClass } = require('@bot-whatsapp/bot')
const WebHookServer = require('./server')
const TwilioWebHookServer = require('./server')
const { parseNumber } = require('./utils')
/**
* { accountSid, authToken, vendorNumber }
*/
class TwilioProvider extends ProviderClass {
twilioHook
vendor
vendorNumber
constructor({ accountSid, authToken, vendorNumber }) {
super()
this.vendor = new twilio(accountSid, authToken)
this.twilioHook = new TwilioWebHookServer()
this.vendorNumber = vendorNumber
new WebHookServer().start()
this.twilioHook.start()
const listEvents = this.busEvents()
for (const { event, func } of listEvents) {
this.twilioHook.on(event, func)
}
}
sendMessage = async (number, message) => {
return this.vendor.messages.create({
body: message,
from: ['whatsapp:', this.vendorNumber].join(''),
to: ['whatsapp:', number].join(''),
from: ['whatsapp:+', parseNumber(this.vendorNumber)].join(''),
to: ['whatsapp:+', parseNumber(number)].join(''),
})
}
/**
* Mapeamos los eventos nativos de whatsapp-web.js a los que la clase Provider espera
* para tener un standar de eventos
* @returns
*/
busEvents = () => [
{
event: 'auth_failure',
func: (payload) => this.emit('error', payload),
},
{
event: 'ready',
func: () => this.emit('ready', true),
},
{
event: 'message',
func: (payload) => {
this.emit('message', payload)
},
},
]
}
module.exports = TwilioProvider