feat(provider): 🔥 add twilii (weoking)

This commit is contained in:
Leifer Mendez
2022-12-05 20:45:05 +01:00
parent 30e3d443bb
commit 4350dff22a
8 changed files with 53 additions and 27 deletions

View File

@@ -1,3 +1,9 @@
{ {
"conventionalCommits.scopes": ["hook", "contributing", "cli", "bot"] "conventionalCommits.scopes": [
"hook",
"contributing",
"cli",
"bot",
"provider"
]
} }

View File

@@ -18,7 +18,7 @@
- [X] agregar export package - [X] agregar export package
- [X] __(doc):__ Video para explicar como implementar nuevos database - [X] __(doc):__ Video para explicar como implementar nuevos database
- [X] Mongo adapter - [X] Mongo adapter
- [ ] MySQL adapter - [X] MySQL adapter
- [ ] JsonFile adapter - [ ] JsonFile adapter
### @bot-whatsapp/provider ### @bot-whatsapp/provider

View File

@@ -25,6 +25,10 @@ class CoreClass {
* Manejador de eventos * Manejador de eventos
*/ */
listenerBusEvents = () => [ listenerBusEvents = () => [
{
event: 'preinit',
func: () => printer('Iniciando provider espere...'),
},
{ {
event: 'require_action', event: 'require_action',
func: ({ instructions, title = '⚡⚡ ACCION REQUERIDA ⚡⚡' }) => func: ({ instructions, title = '⚡⚡ ACCION REQUERIDA ⚡⚡' }) =>

View File

@@ -25,8 +25,8 @@ const createFlow = (args) => {
* @param {*} args * @param {*} args
* @returns * @returns
*/ */
const createProvider = (providerClass = class {}) => { const createProvider = (providerClass = class {}, args = null) => {
const providerInstance = new providerClass() const providerInstance = new providerClass(args)
if (!providerClass.prototype instanceof ProviderClass) if (!providerClass.prototype instanceof ProviderClass)
throw new Error('El provider no implementa ProviderClass') throw new Error('El provider no implementa ProviderClass')
return providerInstance return providerInstance

View File

@@ -1,24 +1,18 @@
require('dotenv').config() require('dotenv').config()
const mysql = require('mysql2') const mysql = require('mysql2')
const DB_NAME = process.env.DB_NAME || 'db_bot'
const DB_HOST = process.env.DB_HOST || 'localhost'
const DB_USER = process.env.DB_USER || 'root'
class MyslAdapter { class MyslAdapter {
db db
listHistory = [] listHistory = []
credentials = { host: null, user: null, database: null }
constructor() { constructor(_credentials) {
this.credentials = _credentials
this.init().then() this.init().then()
} }
async init() { async init() {
this.db = mysql.createConnection({ this.db = mysql.createConnection(this.credentials)
host: DB_HOST,
user: DB_USER,
database: DB_NAME,
})
await this.db.connect((error) => { await this.db.connect((error) => {
if (!error) { if (!error) {

View File

@@ -1,19 +1,24 @@
const twilio = require('twilio') const twilio = require('twilio')
const { ProviderClass } = require('@bot-whatsapp/bot') const { ProviderClass } = require('@bot-whatsapp/bot')
const TwilioVendor = new twilio(accountSid, authToken) const WebHookServer = require('./server')
class TwilioProvider extends ProviderClass { class TwilioProvider extends ProviderClass {
constructor() { vendor
super(TwilioVendor) vendorNumber
constructor({ accountSid, authToken, vendorNumber }) {
super()
this.vendor = new twilio(accountSid, authToken)
this.vendorNumber = vendorNumber
new WebHookServer().start()
} }
sendMessage = (message) => sendMessage = async (number, message) => {
this.vendor.messages.create({ return this.vendor.messages.create({
body: message, body: message,
to: '+12345678901', // Text this number from: ['whatsapp:', this.vendorNumber].join(''),
from: '+12345678901', // From a valid Twilio number to: ['whatsapp:', number].join(''),
}) })
}
} }
module.exports = TwilioProvider module.exports = TwilioProvider

View File

@@ -0,0 +1,21 @@
const polka = require('polka')
const parsePolka = require('@polka/parse')
class WebHookServer {
incomingMsg = (req, res, next) => {
const { body } = req
let json = JSON.stringify({ error: 'Missing CSRF token', body })
res.end(json)
}
start = () => {
polka()
.use(parsePolka.urlencoded({ extended: false }))
.post('/hook', this.incomingMsg)
.listen(3000, () => {
console.log(`> Running on localhost:3000 /hook`)
})
}
}
module.exports = WebHookServer

View File

@@ -32,7 +32,7 @@ class WebWhatsappProvider extends ProviderClass {
for (const { event, func } of listEvents) { for (const { event, func } of listEvents) {
this.vendor.on(event, func) this.vendor.on(event, func)
} }
this.vendor.emit('preinit')
this.vendor.initialize().catch((e) => { this.vendor.initialize().catch((e) => {
logger.log(e) logger.log(e)
this.emit('require_action', { this.emit('require_action', {
@@ -72,10 +72,6 @@ class WebWhatsappProvider extends ProviderClass {
event: 'ready', event: 'ready',
func: () => this.emit('ready', true), func: () => this.emit('ready', true),
}, },
{
event: 'authenticated',
func: () => this.emit('ready', true),
},
{ {
event: 'message', event: 'message',
func: (payload) => { func: (payload) => {