Ampalibe is a light Python framework for quickly creating bots Facebook Messenger.
It provides a new concept for creating bots, it manages webhook sides, processes data sent by facebook and provides api messengers with advanced functions ( payload management. items length, ...) .
pip install ampalibe==1.0.4
OR you can install dev version
pip install https://github.com/iTeam-S/Ampalibe/archive/refs/heads/main.zip
command-line ampalibe is ampalibe.bat for Windows
ampalibe create myproject
OR
$ cd myproject
$ ampalibe init
to run project, just use
ampalibe run
for dev mode with Hot Reload
ampalibe run --dev
- [Youtube] Create a Facebook Bot Messenger with AMPALIBE Framework (EN)
- [Youtube] Tutoriel Framework Ampalibe (FR)
- [Youtube] Ampalibe Framework Episode (Teny Vary Masaka)
Ampalibe is a word of Malagasy 🇲🇬 origin designating the fruit jackfruit.
We have made a promise to
- keep it light
- make it easy to use
- do it quickly to develop
- No need to manage webhooks and data:
messages are received directly in a main function
import ampalibe
from conf import Configuration
bot = ampalibe.init(Configuration())
chat = bot.chat
@ampalibe.command('/')
def main(sender_id, cmd, **extends):
chat.send_message(sender_id, 'Hello world')
chat.send_message(sender_id, f'This is your message: {cmd}')
chat.send_message(sender_id, f'and this is your facebook id: {sender_id}')
- Manages the actions expected by the users:
define the function of the next treatment
import ampalibe
from conf import Configuration
bot = ampalibe.init(Configuration())
chat = bot.chat
query = bot.query
@ampalibe.command('/')
def main(sender_id, cmd, **extends):
chat.send_message(sender_id, 'Enter your name')
query.set_action(sender_id, '/get_name')
@ampalibe.action('/get_name')
def get_name(sender_id, cmd, **extends):
query.set_action(sender_id, None) # clear current action
chat.send_message(sender_id, f'Hello {cmd}')
- Manage temporary data:
set, get, and delete
import ampalibe
from conf import Configuration
bot = ampalibe.init(Configuration())
chat = bot.chat
query = bot.query
@ampalibe.command('/')
def main(sender_id, cmd, **extends):
chat.send_message(sender_id, 'Enter your mail')
query.set_action(sender_id, '/get_mail')
@ampalibe.action('/get_mail')
def get_mail(sender_id, cmd, **extends):
# save the mail in temporary data
query.set_temp(sender_id, 'mail', cmd)
chat.send_message(sender_id, f'Enter your password')
query.set_action(sender_id, '/get_password')
@ampalibe.action('/get_password')
def get_password(sender_id, cmd, **extends):
query.set_action(sender_id, None) # clear current action
mail = query.get_temp(sender_id, 'mail') # get mail in temporary data
chat.send_message(sender_id, f'your mail and your password are {mail} {cmd}')
query.del_temp(sender_id, 'mail') # delete temporary data
- Manage Payload:
send data with Payload object and get it in destination function's parameter
import ampalibe
from ampalibe import Payload
from conf import Configuration
bot = ampalibe.init(Configuration())
chat = bot.chat
@ampalibe.command('/')
def main(sender_id, cmd, **extends):
quick_rep = [
{
"content_type": "text",
"title": 'Angela',
"payload": Payload('/membre', name='Angela', ref='2016-sac')
},
{
"content_type": "text",
"title": 'Rivo',
"payload": Payload('/membre', name='Rivo')
}
]
chat.send_quick_reply(sender_id, quick_rep, 'Who?')
@ampalibe.command('/membre')
def get_membre(sender_id, cmd, name, **extends):
chat.send_message(sender_id, "Hello " + name)
# if the arg is not defined in the list of parameters,
# it is put in the extends variable
if extends.get('ref'):
chat.send_message(sender_id, 'your ref is ' + extends.get('ref'))
- No need to manage the length of the items to send:
A next page button will be displayed directly
import ampalibe
from ampalibe import Payload
from conf import Configuration
bot = ampalibe.init(Configuration())
chat = bot.chat
@ampalibe.command('/')
def main(sender_id, cmd, **extends):
list_items = [
{
"title": f"item n°{i+1}",
"image_url": "https://i.imgflip.com/6b45bi.jpg",
"buttons": [
{
"type": "postback",
"title": "Get item",
"payload": Payload("/item", id_item=i+1)
}
]
}
for i in range(30)
]
# next=True for displaying directly next page button.
chat.send_template(sender_id, list_items, next=True)
@ampalibe.command('/item')
def get_item(sender_id, id_item, **extends):
chat.send_message(sender_id, f"item n°{id_item} selected")