Created
December 7, 2018 17:49
-
-
Save johnotu/f80219abed4490e9cabfa0ad9b5f1063 to your computer and use it in GitHub Desktop.
Payment for Messenger - Handle Bot Messages
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Handle messages received by bot server | |
* | |
*/ | |
'use strict'; | |
// Assume you have these functions defined and exported in your project folder | |
const sendTextMessage = require('../actions/sendTextMsg'); | |
const sendButtonMsg = require('../actions/sendButtonMsg'); | |
const sendReceiptMessage = require('../actions/sendReceiptMsg'); | |
const botApi = require('../utils/botApi'); | |
const receivedMessage = (event, storeName, user, pageObj) => { | |
const senderID = event.sender.id; | |
const recipientID = event.recipient.id; | |
const timeOfMessage = event.timestamp; | |
const message = event.message; | |
console.log('Received message for user %d and page %d at %d with message:', senderID, recipientID, timeOfMessage); | |
const messageId = message.mid; | |
const quickReply = message.quick_reply; | |
if (quickReply) { | |
// Quick reply received | |
const payload = quickReply.payload; | |
console.log('Quick reply for message %s with payload %s', messageId, payload); | |
if (payload.split('***')[0] === 'orderQty') { | |
// Prepare order data for sending to db | |
const orderInfo = payload.split('***'); | |
const qty = orderInfo[1]; const productId = orderInfo[2]; const productName = orderInfo[3]; const productPrice = orderInfo[4]; const productImage = orderInfo[5]; const productDesc = orderInfo[6]; | |
const orderedProducts = [{ | |
product_id: productId, | |
product_qty: qty, | |
product_name: productName, | |
product_price: productPrice, | |
product_image: productImage, | |
product_description: productDesc | |
}]; | |
const orderOwner = { | |
'name': user.name, | |
'address': user.address, | |
'phone_number': user.phone_number, | |
'receipt_address': { | |
'street_1': user.address, | |
'city': user.city, | |
'postal_code': user.postal_code, | |
'state': user.state, | |
'country': user.country_code | |
} | |
}; | |
const orderTotal = orderedProducts.reduce((total, product) => { | |
return total + (parseInt(product.product_price) * parseInt(product.product_qty)); | |
}, 0); | |
const orderNumber = botApi.getOrderNumber(); | |
const orderData = { | |
'order_number': orderNumber, | |
'order_items': orderedProducts, | |
'order_total': orderTotal, | |
'order_owner': orderOwner, | |
'order_status': 'Pending' | |
}; | |
botApi.postOrder(storeName, orderData, (err, resp, body) => { | |
if (!err && resp.statusCode === 200) { | |
const submittedOrder = JSON.parse(body).order; | |
const msg = `Thank you ${user.first_name}, your order #${submittedOrder.orderNumber} has been received. Please find your invoice attached below.`; | |
sendTextMessage({ | |
recipientId: senderID, | |
messageText: msg, | |
page_token: pageObj.page_token, | |
callback: () => { | |
// Send user a receipt | |
sendReceiptMessage(senderID, submittedOrder, pageObj.page_token, () => { | |
// Send payment options to user | |
const buttonMsg = { | |
attachment: { | |
type: 'template', | |
payload: { | |
template_type: 'button', | |
text: 'How would you like to pay for your order?', | |
buttons: [{ | |
type: 'postback', | |
payload: `pay_mobilemoney_${submittedOrder.order_number}_${submittedOrder.order_total}_${submittedOrder.order_owner.phone_number}`, | |
title: 'Mobile Money (Ghana)' | |
}, | |
{ | |
type: 'web_url', | |
url: `${process.env.SERVER_URL}payment?store_name=${storeName}&user_id=${senderID}&mm_number=${submittedOrder.order_owner.phone_number}&page_name=${pageObj.page_name}&page_id=${pageObj.page_id}&order_number=${submittedOrder.order_number}&order_total=${submittedOrder.order_total}&order_id=${submittedOrder.order._id}`, | |
title: 'Card', | |
webview_height_ratio: 'compact', | |
messenger_extensions: true | |
}, | |
{ | |
type: 'postback', | |
payload: `pay_cashondelivery_${submittedOrder.order_number}_${submittedOrder.order_total}_${submittedOrder.order_owner.phone_number}`, | |
title: 'Cash on delivery' | |
}] | |
} | |
} | |
}; | |
sendButtonMsg(senderID, buttonMsg, pageObj.page_token); | |
}); | |
} | |
}); | |
} else { | |
// You should handle errors here | |
} | |
}); | |
} | |
} | |
}; | |
module.exports = receivedMessage; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment