mirror of
https://github.com/cheveguerra/bot-whatsapp.git
synced 2026-04-17 19:26:23 +00:00
feat(provider): 🔥 add twilii (weoking)
This commit is contained in:
8
.vscode/settings.json
vendored
8
.vscode/settings.json
vendored
@@ -1,3 +1,9 @@
|
|||||||
{
|
{
|
||||||
"conventionalCommits.scopes": ["hook", "contributing", "cli", "bot"]
|
"conventionalCommits.scopes": [
|
||||||
|
"hook",
|
||||||
|
"contributing",
|
||||||
|
"cli",
|
||||||
|
"bot",
|
||||||
|
"provider"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
2
TODO.md
2
TODO.md
@@ -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
|
||||||
|
|||||||
@@ -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 ⚡⚡' }) =>
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
21
packages/provider/src/twilio/server.js
Normal file
21
packages/provider/src/twilio/server.js
Normal 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
|
||||||
@@ -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) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user