在bothub.studio上构建无服务器聊天机器人
bothub的Python项目详细描述
这个包提供了与BotHub.Studio一起工作的组件,这是一个chatbot托管服务。
使用bothub-cli,只需四行命令就可以部署一个新的聊天机器人。
安装
要安装Bothub:
$ pip install bothub
Bothub包对python2和3都有效。
开始
您可以通过子类化BaseBot类并重写handle_message方法来构建echo聊天机器人。
# -*- coding: utf-8 -*-from__future__import(absolute_import,division,print_function,unicode_literals)frombothub_client.botimportBaseBotfrombothub_client.decoratorsimportchannelclassBot(BaseBot):"""Represent a Bot logic which interacts with a user. BaseBot superclass have methods belows: * Send message * self.send_message(message, chat_id=None, channel=None) * Data Storage * self.set_project_data(data) * self.get_project_data() * self.set_user_data(data, user_id=None, channel=None) * self.get_user_data(user_id=None, channel=None) * Channel Handler from bothub_client.decorators import channel @channel('<channel_name>') def channel_handler(self, event, context): # Handle a specific channel message * Command Handler from bothub_client.decorators import command @command('<command_name>') def command_handler(self, event, context, args): # Handle a command('/<command_name>') * Intent Handler from bothub_client.decorators import intent @intent('<intent_id>') def intent_result_handler(self, event, context, answers): # Handle a intent result # answers is a dict and contains intent's input data { "<intent slot id>" : <entered slot value> ... } """@channel()defdefault_handler(self,event,context):
当bot接收到来自用户的消息时,它用event和context对象触发handle_message方法。
event是包含以下项的dict:
- content:收到消息文本。
- channel:哪个频道(信使平台)发送了消息。
- sender:发送消息的人。{"id": <user-id>, "name": "<username>}
- chat_id:发送消息的聊天室ID。它可以是1:1聊天室或小组聊天室。
- location:位置信息(如果可能的话){"longitude": <float>, "latitude": <float>}
- postback:回发数据。
- new_joined:一个布尔值,表示此机器人是否被邀请到某个聊天室。
- raw_data:原始数据本身是Messenger平台发送的。
您可以使用我们提供的各种工具响应此消息。
信息
要发送消息,请对要发送的消息使用self.send_message方法。
self.send_message('hello')
在大多数情况下,可以省略user_id和channel参数。然后它会回复给你的机器人发信息的人。如果要指定接收器,请将值放入这些参数。
您可以使用Message对象发送带有丰富控件(如“快速答复”或“按钮”)的消息。
frombothub_client.messagesimportMessagemessage=Message(event).add_quick_reply('Go ahead')\ .add_quick_reply('Never mind')\ .set_text('May I reserve the seat?')self.send_message(message)
Message类提供以下方法:
- set_text(text)
- add_url_button(text, url):
- add_postback_button(text, payload)
- add_quick_reply(text, payload=None, image_url=None)
- add_location_request(text)
- add_keyboard_button(text)
储存
要存储/检索属性数据,我们提供以下方法:
- 项目级别
- self.set_project_data(data):将数据设置为项目
- self.get_project_data(key=None):从项目获取数据
- 用户级别
- self.set_user_data(data, user_id=None, channel=None):设置用户数据
- self.get_user_data(user_id=None, channel=None, key=None):获取用户数据
^ TT32 } $应该是一个DATA。不包含在^ {TT32 } $中的现有属性将被忽略,不被删除。
- 如果user_id和channel是None,则将其视为消息发送者。
- 当key是None时,将返回get-whole dictionary。否则,将返回给定密钥的子树。
NLU积分
在bothub.studio上设置NLU集成后,可以使用nlu方法执行NLU。
有两种样式可请求NLU服务。(例如使用api.ai)
首先,使用事件对象构造消息和会话id。
defhandle_message(self,event,context):response=self.nlu('apiai').ask(event=event)self.send_message(response.next_message)
或者,自己放置明确的消息和会话id。
defhandle_message(self,event,context):response=self.nlu('apiai').ask(message='hello',session_id='customer1')self.send_message(response.next_message)
如果要使用英语以外的语言,请对ask()函数使用lang关键字参数。
ask方法返回一个NluResponse对象,该对象包含如下属性:
- raw_response:NLU服务返回的原始响应。
- action:用于标识意图和所需参数的NluAction类对象。
- next_message:响应NLU服务建议的下一条消息文本。
NluAction对象包含如下属性:
- intent:意向名称
- parameters:参数dict
- completed:布尔值指示操作是否已完成
对于未完成的操作,您需要使用nlureponse实例的next_message属性回复用户以完成操作。
许可证
此软件包根据AGPLv3授权用于非商业性个人用途。如果您想将此软件包用于商业用途,请联系bothub@bothub.studio。