ironman5366 / W.I.L.L

A python written personal assistant
https://willbeddow.com
MIT License
377 stars 58 forks source link
ai assistant json-api pa personal-assistant plugins python spacy telegram

W.I.L.L 3.1

The W.I.L.L Project has been retired and development has stopped. Read more here: https://willbeddow.com/page/wheres-w-i-l-l

Welcome to W.I.L.L

W.I.L.L is an open source personal assistant that aims to be free, easy to use, and expandable by the user. It runs on a python based plugin framework accessible by a JSON API that let's you access it from a variety of different platforms. We've provided some platforms for you, but if you don't like any of those, you can easily create your own, or, if you want to change W.I.L.L, setup your own version

Docs: http://will.readthedocs.io

Quickstart

Use a provided platform

Signup

Before you can use W.I.L.L, you need to sign up. You can sign up for free at https://willbeddow.com/signup

Android

W.I.L.L is now available as an android app, complete with voice commands and app hookins for services like spotify and netflix! Download it now from https://play.google.com/store/apps/details?id=com.willbeddow.will

Telegram

All you have to do to use W.I.L.L on telegram is go @WillAssistantBot and click start!

Use the json api

The main W.I.L.L server, as well as the web app, is at https://willbeddow.com It runs on a flask server that provides a JSON API

Quickstart

Send a request with python

import requests
import json
#Assume that the user has already signed up
server_url = "https://willbeddow.com"
payload = dict(username="myusername", password="mypassword")
#Start the session and generate a session token. This session token will endure until you go to /end_session or the server reboots
response = requests.post(url="{0}/api/start_session".format(server_url), data=payload).json()
#{"type": "success", "text": "Authentication successful", "data": {"session_id": "aaaa-bbbb-cccc-dddd"}
session_id = response["data"]["session_id"]
#Submit a command
command_data = dict(session_id=session_id, command="What is the meaning of life?")
answer = requests.post(url="{0}/api/command".format(server_url), data=command_data).json()
#{"type": "success", "text", "42 (according to the book The Hitchhiker's Guide to the Galaxy, by Douglas Adams)", "data": {"command_id": "aaaa-bbbb-cccc-dddd_1", "command_response": "42 (according to the book The Hitchhiker's Guide to the Galaxy, by Douglas Adams)"}}
print answer["text"]
#42 (according to the book The Hitchhiker's Guide to the Galaxy, by Douglas Adams)
#End your session
requests.post(url="{0}/api/end_session".format(server_url), data={"session_id": session_id})

API Docs:

The core of the JSON API is a response object. A response object looks like this:

{"type": "success", "text": "Request successful!", "data": {}}

As you can see, each response object has three objects.

API Methods:

Events framework

W.I.L.L has a customizable events framework that allows you to pass events and notifications that will be asynchronously pushed to the user. At the moment W.I.L.L offers three classes of events, two of which endure between reboots of the server

An event object is defined by 5 keys: