How to save user input to an Airtable database in Dialogflow ES

In this tutorial, I will explain how you can save the data you collected from the lead capture bot and save it to Airtable.

Why Airtable?

Airtable is the best low code database for non-programmers who are building Dialogflow chatbots

In the user.provides.url intent, enable the “Enable webhook call for this intent” toggle switch at the bottom of the intent.

This is the Python code you will use in the webhook. If you are not clear on how to get started with Python for Dialogflow, check out the resources below.

Resources

Python webhook tutorial
How to set up Python webhook debugging using ngrok

This is the webhook route in the Flask app

@app.route('/webhook', methods=['POST'])
def hello_webhook():
    req = request.get_json(silent=True, force=True)
    result = save_to_db(req)
    return {
        'fulfillmentText': str(result)
    }

This is the code for the save_to_db method

def save_to_db(req):
    try:
        query_result = req.get('queryResult')
        output_contexts = query_result.get('outputContexts')
        session_vars = next(
            context for context in output_contexts if str(context.get('name')).endswith('/session-vars'))

        name = session_vars.get('parameters').get('person').get('name')
        email = session_vars.get('parameters').get('email')
        url = query_result.get('parameters').get('url')

        table = Table(api_key, base_id, table_name)
        result = table.create({'Name': name, 'Email': email, 'Website': url})
        return 'Thanks. We will be in touch soon.'
    except Exception as e:
        error_str = str(e)
        return 'Something went wrong. Please try again later'

Remember to add the ngrok generate URL to your fulfillment

Demo

This is what the output looks like in Dialogflow Messenger

And you can see that the data we input has been saved to Airtable