# Actions SDK overview (Dialogflow)

Actions on Google lets you extend the functionality of Google Assistant with
***Actions***. Actions let users get things done through a conversational interface
that can range from a quick command to turn on some lights or a longer
conversation, such as playing a trivia game.

The Actions SDK is a method of developing conversation fulfillment without
using Dialogflow. When using the Actions SDK, you use an Action package to
map intents to their fulfillment. You must also provide query patterns in the
Action package in order to define example phrases your users might say.

> [!CAUTION]
> **Caution:** Using the Actions SDK requires you to build or provide your own NLU solution. Although both Dialogflow and the Actions SDK are covered in the custom Actions documentation, we **highly** recommend using Dialogflow. The development experience changes significantly for Conversational Actions depending on what you use for conversation fulfillment.

## gactions CLI

When developing with the Actions SDK, you use the `gactions` command line
interface (CLI) to test and update your Actions project. The [`gactions` CLI](https://developers.google.com/assistant/df-asdk/actions-sdk/gactions-cli)
also helps you create and manage the Action package for your Conversational Action.

## Create Actions in your Action package

You create Actions in your Action package by mapping intents to fulfillment.
An Action defines an entry point to start conversations with a unique
identifier called an *intent*. Intents map to fulfillments, which process the
intent.

For example, say you wanted to build a project that contained Actions to
purchase some goods, check the status of orders, and to show some daily deals.
You can define intents that are triggered by saying:

- *"Hey Google, talk to ExampleAction."*
- *"Hey Google, talk to ExampleAction to buy some shoes."*
- *"Hey Google, talk to ExampleAction to check on my order."*
- *"Hey Google, talk to ExampleAction to show me today's deals."*

The Action package JSON file might look something like this:

    {
      "actions": [
        {
          "name": "MAIN",
          "intent": {
            "name": "actions.intent.MAIN"
          },
          "fulfillment": {
            "conversationName": "ExampleAction"
          }
        },
        {
          "name": "BUY",
          "intent": {
            "name": "com.example.ExampleAction.BUY",
            "parameters": [{
              "name": "color",
              "type": "org.schema.type.Color"
            }],
            "trigger": {
              "queryPatterns": [
                "find some $org.schema.type.Color:color sneakers",
                "buy some blue suede shoes",
                "get running shoes"
              ]
            }
          },
          "fulfillment": {
            "conversationName": "ExampleAction"
          }
        },
        {
          "name": "ORDER_STATUS",
          "intent": {
            "name": "com.example.ExampleAction.ORDER_STATUS",
            "trigger": {
              "queryPatterns": [
                "check on my order",
                "see order updates",
                "check where my order is"
              ]
            }
          },
          "fulfillment": {
            "conversationName": "ExampleAction"
          }
        },
        {
          "name": "DAILY_DEALS",
          "intent": {
            "name": "com.example.ExampleAction.DAILY_DEALS",
            "trigger": {
              "queryPatterns": [
                "hear about daily deals",
                "buying some daily deals",
                "get today's deals"
              ]
            }
          },
          "fulfillment": {
            "conversationName": "ExampleAction"
          }
        }
      ],
      "conversations": {
        "ExampleAction": {
          "name": "ExampleAction",
          "url": "https://www.example.com/ExampleAction"
        }
      }
    }

## Build and deploy a fulfillment webhook

When an Action in your project is invoked, Actions on Google calls your
fulfillment to start a conversation with users to fulfill the Action.

In every request to your fulfillment webhook, you receive the user input as a
text string. To process the intent, you typically parse the text input and
return a response. This back and forth exchange happens until your Action's
conversation ends.

## Upload your Action package

Once you [create your Action package](https://developers.google.com/assistant/df-asdk/actions-sdk/define-actions) and [deploy its fulfillment](https://developers.google.com/assistant/df-asdk/deploy-fulfillment),
you can upload your Action package to the Actions console. The [Actions console](https://console.actions.google.com/)
uses Action projects to group your Conversational Action with metadata like its review
status and display name in the Assistant directory. The project also lets you
define metadata about your Action and manage and track your Action through the
approval process.

Once you have a project, you can upload your Action package that defines all
your Actions using the [`gactions` CLI](https://developers.google.com/assistant/df-asdk/actions-sdk/gactions-cli).

![](https://developers.google.com/static/assistant/actions/images/aog-project-sdk-actions.png)

## Submit your project for approval and make it available to users

![](https://developers.google.com/static/assistant/actions/images/aog-project-info.png)

## Samples

To explore completed projects, view the Node.js and Java [Actions SDK samples](https://developers.google.com/assistant/df-asdk/samples/github#actions-sdk).