From 27d7566014105b6bbb9c366e56de8acee3d447c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Olender?= <92638966+TC-MO@users.noreply.github.com> Date: Wed, 5 Jun 2024 17:21:57 +0200 Subject: [PATCH 1/7] docs: reorganize integrations sidebar add new sub categories - programming - Actor-to-Actor - Workflows & notifications - Data storage - AI add _category_.yml to each new folder to control sidebar label and position fix all the md links to account for new structure --- .../development/actor_definition/index.md | 4 ++-- .../development/deployment/source_types.md | 2 +- .../integrations/actors/_category_.yml | 1 + sources/platform/integrations/actors/index.md | 2 +- .../platform/integrations/ai/_category_.yml | 2 ++ .../platform/integrations/{ => ai}/flowise.md | 8 ++++---- .../integrations/{ => ai}/langchain.md | 0 .../platform/integrations/{ => ai}/llama.md | 0 .../integrations/{ => ai}/pinecone.md | 4 ++-- sources/platform/integrations/api.md | 2 +- .../integrations/data-storage/_category_.yml | 2 ++ .../{ => data-storage}/airbyte.md | 8 ++++---- .../integrations/{ => data-storage}/drive.md | 8 ++++---- .../{ => data-storage}/keboola.md | 18 ++++++++--------- .../integrations/integrate_with_apify.md | 10 +++++----- .../integrations/programming/_category_.yml | 2 ++ .../integrations/{ => programming}/github.md | 10 +++++----- .../{ => programming}/webhooks/actions.md | 4 ++-- .../webhooks/ad_hoc_webhooks.md | 0 .../{ => programming}/webhooks/events.md | 4 ++-- .../{ => programming}/webhooks/index.md | 8 ++++---- .../_category_.yml | 2 ++ .../gmail.md | 12 +++++------ .../{ => workflows-and-notifications}/make.md | 14 ++++++------- .../slack.md | 6 +++--- .../telegram.md | 20 +++++++++---------- .../zapier.md | 14 ++++++------- 27 files changed, 88 insertions(+), 79 deletions(-) create mode 100644 sources/platform/integrations/actors/_category_.yml create mode 100644 sources/platform/integrations/ai/_category_.yml rename sources/platform/integrations/{ => ai}/flowise.md (90%) rename sources/platform/integrations/{ => ai}/langchain.md (100%) rename sources/platform/integrations/{ => ai}/llama.md (100%) rename sources/platform/integrations/{ => ai}/pinecone.md (96%) create mode 100644 sources/platform/integrations/data-storage/_category_.yml rename sources/platform/integrations/{ => data-storage}/airbyte.md (88%) rename sources/platform/integrations/{ => data-storage}/drive.md (78%) rename sources/platform/integrations/{ => data-storage}/keboola.md (87%) create mode 100644 sources/platform/integrations/programming/_category_.yml rename sources/platform/integrations/{ => programming}/github.md (84%) rename sources/platform/integrations/{ => programming}/webhooks/actions.md (98%) rename sources/platform/integrations/{ => programming}/webhooks/ad_hoc_webhooks.md (100%) rename sources/platform/integrations/{ => programming}/webhooks/events.md (91%) rename sources/platform/integrations/{ => programming}/webhooks/index.md (81%) create mode 100644 sources/platform/integrations/workflows-and-notifications/_category_.yml rename sources/platform/integrations/{ => workflows-and-notifications}/gmail.md (76%) rename sources/platform/integrations/{ => workflows-and-notifications}/make.md (94%) rename sources/platform/integrations/{ => workflows-and-notifications}/slack.md (93%) rename sources/platform/integrations/{ => workflows-and-notifications}/telegram.md (85%) rename sources/platform/integrations/{ => workflows-and-notifications}/zapier.md (92%) diff --git a/sources/platform/actors/development/actor_definition/index.md b/sources/platform/actors/development/actor_definition/index.md index 7825e49eee..b04ae93854 100644 --- a/sources/platform/actors/development/actor_definition/index.md +++ b/sources/platform/actors/development/actor_definition/index.md @@ -23,8 +23,8 @@ Actors have the following elements: The documentation and the input/output schemas make it possible for people to easily understand what the Actor does, enter the required inputs both in the user interface or API, and integrate the Actor's results with their other workflows. Actors can easily call and interact with each other, enabling building more complex systems on top of simple ones. -The Apify platform provides an open [API](/api/v2), cron-style [scheduler](../../schedules), [webhooks](../../../integrations/webhooks/index.md), and [integrations](../../integrations) to services such as Zapier or Make, which make it easy for users to integrate Actors with their existing workflows. Anyone is welcome to [publish Actors](/platform/actors/publishing) in [Apify Store](https://apify.com/store), and you can even [monetize your Actors](/platform/actors/publishing/monetize). +The Apify platform provides an open [API](/api/v2), cron-style [scheduler](../../schedules), [webhooks](../../../integrations/programming/webhooks/index.md), and [integrations](../../integrations) to services such as Zapier or Make, which make it easy for users to integrate Actors with their existing workflows. Anyone is welcome to [publish Actors](/platform/actors/publishing) in [Apify Store](https://apify.com/store), and you can even [monetize your Actors](/platform/actors/publishing/monetize). -Actors can be developed and run locally and then easily deployed to the Apify platform using the [Apify CLI](/cli) or a [GitHub integration](../../../integrations/github.md). For more details, see the [Deployment](../deployment/index.md) section. +Actors can be developed and run locally and then easily deployed to the Apify platform using the [Apify CLI](/cli) or a [GitHub integration](../../../integrations/programming/github.md). For more details, see the [Deployment](../deployment/index.md) section. > **To get a better idea of what Apify Actors are, visit [Apify Store](https://apify.com/store), and try out some of them!** diff --git a/sources/platform/actors/development/deployment/source_types.md b/sources/platform/actors/development/deployment/source_types.md index 99632b06e3..ea0a91681f 100644 --- a/sources/platform/actors/development/deployment/source_types.md +++ b/sources/platform/actors/development/deployment/source_types.md @@ -34,7 +34,7 @@ To specify a Git branch or tag to check out, add a URL fragment to the URL. For Optionally, the second part of the fragment in the Git URL (separated by a colon) specifies the directory from which the Actor will be built (and where the `.actor`) folder is located. For example, `https://github.com/jancurn/some-actor.git#develop:some/dir` will check out the **develop** branch and set **some/dir** as the root directory of the Actor. -Note that you can easily set up an integration where the Actor is automatically rebuilt on every commit to the Git repository. For more details, see [GitHub integration](../../../integrations/github.md). +Note that you can easily set up an integration where the Actor is automatically rebuilt on every commit to the Git repository. For more details, see [GitHub integration](../../../integrations/programming/github.md). ### [](#private-repositories)Private repositories diff --git a/sources/platform/integrations/actors/_category_.yml b/sources/platform/integrations/actors/_category_.yml new file mode 100644 index 0000000000..51e68dbcf6 --- /dev/null +++ b/sources/platform/integrations/actors/_category_.yml @@ -0,0 +1 @@ +position: 3 diff --git a/sources/platform/integrations/actors/index.md b/sources/platform/integrations/actors/index.md index c45e134dc6..f4005e7a19 100644 --- a/sources/platform/integrations/actors/index.md +++ b/sources/platform/integrations/actors/index.md @@ -1,5 +1,5 @@ --- -title: Actors +title: Actor-to-Actor description: Learn how to integrate with other Actors and tasks. sidebar_position: 11.10 slug: /integrations/actors diff --git a/sources/platform/integrations/ai/_category_.yml b/sources/platform/integrations/ai/_category_.yml new file mode 100644 index 0000000000..2bc8d69435 --- /dev/null +++ b/sources/platform/integrations/ai/_category_.yml @@ -0,0 +1,2 @@ +label: 'AI' +position: 6 diff --git a/sources/platform/integrations/flowise.md b/sources/platform/integrations/ai/flowise.md similarity index 90% rename from sources/platform/integrations/flowise.md rename to sources/platform/integrations/ai/flowise.md index f7f46e7691..dc963a1855 100644 --- a/sources/platform/integrations/flowise.md +++ b/sources/platform/integrations/ai/flowise.md @@ -43,15 +43,15 @@ The first step is to create a new flow in the web UI. In the left menu, you need to find Apify Website Content Crawler under Document Loaders. -![Flowise add Apify Crawler](./images/flowise-apify.png) +![Flowise add Apify Crawler](../images/flowise-apify.png) Now you need to configure the crawler. You can find more information about the crawler [here](https://apify.com/apify/website-content-crawler). -![Flowise and Apify](images/flowise.png) +![Flowise and Apify](../images/flowise.png) In the configuration, provide your Apify API token, which you can find in your [Apify account](https://my.apify.com/account#/integrations). -![Apify API token screen](./images/flowise-apify-api.png) +![Apify API token screen].(./images/flowise-apify-api.png) You can add more loaders, or you can add some processors to process the data. In our case, we create the flow that loads data from the Apify docs using Website Content Crawler and save them into the in-memory vector database. @@ -59,7 +59,7 @@ Connect the ChatOpenAI and the OpenAI embeddings and QA retrieval into the chatb The final flow can answer questions about Apify docs. -![Flowise and Apify](images/flowise-2.png) +![Flowise and Apify](../images/flowise-2.png) For more information visit the Flowise [documentation](https://flowiseai.com/). diff --git a/sources/platform/integrations/langchain.md b/sources/platform/integrations/ai/langchain.md similarity index 100% rename from sources/platform/integrations/langchain.md rename to sources/platform/integrations/ai/langchain.md diff --git a/sources/platform/integrations/llama.md b/sources/platform/integrations/ai/llama.md similarity index 100% rename from sources/platform/integrations/llama.md rename to sources/platform/integrations/ai/llama.md diff --git a/sources/platform/integrations/pinecone.md b/sources/platform/integrations/ai/pinecone.md similarity index 96% rename from sources/platform/integrations/pinecone.md rename to sources/platform/integrations/ai/pinecone.md index 9dc7fe0cb0..c945ed151c 100644 --- a/sources/platform/integrations/pinecone.md +++ b/sources/platform/integrations/ai/pinecone.md @@ -41,11 +41,11 @@ The examples utilize the Website Content Crawler Actor, which deeply crawls webs 1. Once you have the crawler ready, navigate to the integration section and add Apify’s Pinecone integration. - ![Website Content Crawler with Pinecone integration](./images/pinecone-wcc-integration.png) + ![Website Content Crawler with Pinecone integration](../images/pinecone-wcc-integration.png) 1. Select when to trigger this integration (typically when a run succeeds) and fill in all the required fields for the Pinecone integration. You can learn more about the input parameters at the [Pinecone integration input schema](https://apify.com/jan.turon/pinecone-integration/input-schema). - ![Pinecone integration configuration](./images/pinecone-integration-setup.png) + ![Pinecone integration configuration](../images/pinecone-integration-setup.png) 1. For a comprehensive explanation on how to combine Actors to accomplish more complex tasks, refer to the guide on [Actor-to-Actor](https://blog.apify.com/connecting-scrapers-apify-integration/) integrations. diff --git a/sources/platform/integrations/api.md b/sources/platform/integrations/api.md index 6f89fbf707..3d786a834d 100644 --- a/sources/platform/integrations/api.md +++ b/sources/platform/integrations/api.md @@ -1,7 +1,7 @@ --- title: API description: Learn how to integrate with Apify via API. -sidebar_position: 11.01 +sidebar_position: 1 slug: /integrations/api --- diff --git a/sources/platform/integrations/data-storage/_category_.yml b/sources/platform/integrations/data-storage/_category_.yml new file mode 100644 index 0000000000..9353a3f9eb --- /dev/null +++ b/sources/platform/integrations/data-storage/_category_.yml @@ -0,0 +1,2 @@ +label: Data Storage +position: 5 diff --git a/sources/platform/integrations/airbyte.md b/sources/platform/integrations/data-storage/airbyte.md similarity index 88% rename from sources/platform/integrations/airbyte.md rename to sources/platform/integrations/data-storage/airbyte.md index f1a19ba12c..7b8af9d92f 100644 --- a/sources/platform/integrations/airbyte.md +++ b/sources/platform/integrations/data-storage/airbyte.md @@ -23,19 +23,19 @@ To use Airbyte's Apify connector you need to: Once you have all the necessary accounts set up, you need to set up the Apify connector. To do so, you will need to navigate to **Sources** tab in Airbyte and select **Apify Dataset** -![Airbyte sources tab](./images/airbyte-sources.png) +![Airbyte sources tab](../images/airbyte-sources.png) You will need to provide a **dataset ID** and your Apify API Token. You can find both of these in [Apify Console](https://console.apify.com). -![Airbyte source setup](./images/airbyte-source-setup.png) +![Airbyte source setup](../images/airbyte-source-setup.png) To find your **dataset ID**, you need to navigate to the **Storage** tab in Apify Console. Copy it and paste it in Airbyte. -![Datasets in app](./images/datasets-app.png) +![Datasets in app](../images/datasets-app.png) To find your Apify API token, you need to navigate to the **Settings** tab and select **Integrations**. Copy it and paste it in the relevant field in Airbyte. -![Integrations token](./images/apify-integrations-token.png) +![Integrations token](../images/apify-integrations-token.png) And that's it! You now have Apify datasets set up as a Source, and you can use Airbyte to transfer your datasets to one of the available destinations. diff --git a/sources/platform/integrations/drive.md b/sources/platform/integrations/data-storage/drive.md similarity index 78% rename from sources/platform/integrations/drive.md rename to sources/platform/integrations/data-storage/drive.md index bfd3dacf6f..299cc19606 100644 --- a/sources/platform/integrations/drive.md +++ b/sources/platform/integrations/data-storage/drive.md @@ -26,19 +26,19 @@ To use the Apify integration for Google Drive, you will need: 1. Head over to **Integrations** tab in your saved task and click on the Google Drive integration. - ![Google Drive integration](./images/gdrive/google-maps-task-integrations.png) + ![Google Drive integration](../images/gdrive/google-maps-task-integrations.png) 1. Click on **Sign in with Google** button and select the account with which you want to use the integration. - ![Google Drive integration signup](./images/gdrive/google-maps-task-integration-setup.png) + ![Google Drive integration signup](../images/gdrive/google-maps-task-integration-setup.png) 1. Select the desired format of the dataset file. - ![Google Drive integration format](./images/gdrive/google-maps-task-integration-format.png) + ![Google Drive integration format](../images/gdrive/google-maps-task-integration-format.png) 1. Click on **Save** & enable the integration. - ![Google Drive integration save](./images/gdrive/google-maps-task-integration-save.png) + ![Google Drive integration save](../images/gdrive/google-maps-task-integration-save.png) Once this is done, run your Actor to test whether the integration is working. diff --git a/sources/platform/integrations/keboola.md b/sources/platform/integrations/data-storage/keboola.md similarity index 87% rename from sources/platform/integrations/keboola.md rename to sources/platform/integrations/data-storage/keboola.md index 85ebf44b7e..9bdceeae4a 100644 --- a/sources/platform/integrations/keboola.md +++ b/sources/platform/integrations/data-storage/keboola.md @@ -25,25 +25,25 @@ To use the Apify integration on Keboola, you will need to: Once your Keboola account is ready and you are logged in, navigate to the **Components** section in the top menu and click the **Add Component** button. -![Keboola dashboard](./images/keboola/keboola-dashboard.png) +![Keboola dashboard](../images/keboola/keboola-dashboard.png) In the list of available Components, find and select the **Apify** from Data Sources and click on the **Add Component** button. -![Keboola component search](./images/keboola/keboola-components.png) +![Keboola component search](../images/keboola/keboola-components.png) On the new window, click **Connect** to my data** -![Keboola Connector](./images/keboola/keboola-connector.png) +![Keboola Connector](../images/keboola/keboola-connector.png) Provide a name and description for your configuration, then click the **Create** Configuration** button. -![Keboola configuration setup](./images/keboola/keboola-create-configuration.png) +![Keboola configuration setup](../images/keboola/keboola-create-configuration.png) ### Step 2: Configure the Apify Data Source With the new configuration created, you can now configure the data source to retrieve the needed data. Click on the **Configure Component** button to begin the setup process. -![Keboola component configuration](./images/keboola/keboola-configure-component.png) +![Keboola component configuration](../images/keboola/keboola-configure-component.png) #### Choose an action @@ -56,13 +56,13 @@ In the next step, you can choose the action you want to perform: - **Retrieve items from the last task run** - This action takes the dataset of a specific task last run. - **Retrieve items from Dataset**: This action takes the dataset ID or dataset name and retrieves all items from that dataset. -![Keboola component action setup ](./images/keboola/keboola-component-setup.png) +![Keboola component action setup ](../images/keboola/keboola-component-setup.png) #### Authentication After selecting the action, you will need to provide your Apify API credentials. You can find these credentials on your Apify account page by navigating to **Settings > Integrations** and copying them into the provided form. -![Keboola API authentication](./images/keboola/keboola-setup-api-token.png) +![Keboola API authentication](../images/keboola/keboola-setup-api-token.png) #### Specifications @@ -77,13 +77,13 @@ In the specifications step, you can set up various options for your Actor run: Once you have filled in all the necessary options, click the **Save** button to save your configuration. -![Keboola component specification setup](./images/keboola/keboola-setup-specification.png) +![Keboola component specification setup](../images/keboola/keboola-setup-specification.png) ### Step 3: Run the configured Data Source After your data source has been configured, you can run it by clicking the **Run** button in the upper-right corner of your configuration. -![Keboola run configured component](./images/keboola/keboola-run-component.png) +![Keboola run configured component](../images/keboola/keboola-run-component.png) You can monitor the progress of your run in the job detail section on the right-hand side of the page. diff --git a/sources/platform/integrations/integrate_with_apify.md b/sources/platform/integrations/integrate_with_apify.md index 0bd34ee6b4..f893de9b94 100644 --- a/sources/platform/integrations/integrate_with_apify.md +++ b/sources/platform/integrations/integrate_with_apify.md @@ -1,6 +1,6 @@ --- title: Integrate with Apify 🀝 -sidebar_label: Integrate with Apify +sidebar_label: Create new description: Learn about how to integrate your service with Apify to benefit from a mutual integration. sidebar_position: 90.00 slug: /integrations/integrate @@ -8,9 +8,9 @@ slug: /integrations/integrate If you are building a service and your users could benefit from integrating with Apify or vice versa, we would love to hear from you! Contact us at [partners@apify.com](mailto:partners@apify.com) to discuss potential collaboration. We are always looking for ways to make our platform more useful and powerful for our users. Here are some examples of services and tools integrating with Apify: -- [Langchain](./langchain.md) integration enables developers to build their projects, such as AI chatbots, with Langchain to feed them with data from the web easily. -- [Zapier](./zapier.md) integration allows Zapier users to enrich their automation workflows with data from the web or to add additional Actions performed by [Apify Actors](https://apify.com/store). -- [Keboola](./keboola.md) integration enables Keboola users to easily pull data crawled from the web into their data pipelines. +- [Langchain](./ai/langchain.md) integration enables developers to build their projects, such as AI chatbots, with Langchain to feed them with data from the web easily. +- [Zapier](./workflows-and-notifications/zapier.md) integration allows Zapier users to enrich their automation workflows with data from the web or to add additional Actions performed by [Apify Actors](https://apify.com/store). +- [Keboola](integrations/keboola) integration enables Keboola users to easily pull data crawled from the web into their data pipelines. and many more that you can see at [integrations](./index.mdx). @@ -19,7 +19,7 @@ and many more that you can see at [integrations](./index.mdx). To integrate your service with Apify, you have two options. You can either: - build an [Apify actor](https://apify.com/docs/actor) that will be used as integration within the [Apify Console](https://console.apify.com) -- build an external integration, such as [Zapier](./zapier.md). +- build an external integration, such as [Zapier](./workflows-and-notifications/zapier.md). ![Integration-ready Actors](./images/integration-ready-actors.png) diff --git a/sources/platform/integrations/programming/_category_.yml b/sources/platform/integrations/programming/_category_.yml new file mode 100644 index 0000000000..6c538173b6 --- /dev/null +++ b/sources/platform/integrations/programming/_category_.yml @@ -0,0 +1,2 @@ +label: 'Programming' +position: 2 diff --git a/sources/platform/integrations/github.md b/sources/platform/integrations/programming/github.md similarity index 84% rename from sources/platform/integrations/github.md rename to sources/platform/integrations/programming/github.md index 70293e8a1e..97c29fe7bb 100644 --- a/sources/platform/integrations/github.md +++ b/sources/platform/integrations/programming/github.md @@ -21,24 +21,24 @@ To use the Apify integration for GitHub, you will need: Learn how to create an Actor from a GitHub repository. This is useful if you want to automatically deploy and build your code or push to your GitHub repository. -![New Actor page](./images/apify-git-repository.png) +![New Actor page](../images/apify-git-repository.png) Selecting _Link Git repository_ will open a new modal to select a provider to use. Selecting _GitHub_ will open a new window with GitHub authentication and select a GitHub repository. -![Git provider select modal](./images/apify-git-provider-select.png) +![Git provider select modal](../images/apify-git-provider-select.png) To link an account, click on _Add GitHub account_ and follow the instructions on github.com. Certain organizations or users can be selected. -![Git repository account select](./images/apify-git-repository-add.png) +![Git repository account select](../images/apify-git-repository-add.png) You can switch among all authorized users and organizations. -![Git repository account select](./images/apify-git-repository-account.png) +![Git repository account select](../images/apify-git-repository-account.png) If the required repository is missing, try finding it with _Search_. -![apify-git-repository-search.png](./images/apify-git-repository-search.png) +![apify-git-repository-search.png](../images/apify-git-repository-search.png) An Actor is created immediately from the selected repository. diff --git a/sources/platform/integrations/webhooks/actions.md b/sources/platform/integrations/programming/webhooks/actions.md similarity index 98% rename from sources/platform/integrations/webhooks/actions.md rename to sources/platform/integrations/programming/webhooks/actions.md index 52779f9c62..89cce3b1f2 100644 --- a/sources/platform/integrations/webhooks/actions.md +++ b/sources/platform/integrations/programming/webhooks/actions.md @@ -132,8 +132,8 @@ Description is an optional string that you can add to the webhook. It serves for |-------------|--------|-------------------------------------------------------------------------------------| | `userId` | string | ID of the user who owns the webhook. | | `createdAt` | string | ISO string date of the webhook's trigger event. | -| `eventType` | string | Type of the trigger event, [see Events](./events.md). | -| `eventData` | Object | Data associated with the trigger event, [see Events](./events.md). | +| `eventType` | string | Type of the trigger event, [see Events](/integrations/webhooks/events). | +| `eventData` | Object | Data associated with the trigger event, [see Events](/integrations/webhooks/events). | | `resource` | Object | The resource that caused the trigger event, [see below](#resource). | #### Resource diff --git a/sources/platform/integrations/webhooks/ad_hoc_webhooks.md b/sources/platform/integrations/programming/webhooks/ad_hoc_webhooks.md similarity index 100% rename from sources/platform/integrations/webhooks/ad_hoc_webhooks.md rename to sources/platform/integrations/programming/webhooks/ad_hoc_webhooks.md diff --git a/sources/platform/integrations/webhooks/events.md b/sources/platform/integrations/programming/webhooks/events.md similarity index 91% rename from sources/platform/integrations/webhooks/events.md rename to sources/platform/integrations/programming/webhooks/events.md index 67e08c3939..ddf029df66 100644 --- a/sources/platform/integrations/webhooks/events.md +++ b/sources/platform/integrations/programming/webhooks/events.md @@ -17,7 +17,7 @@ An event is represented by a **type** and related **data**. The type is a `strin ## [](#actor-run)Actor run -Actor run events are triggered when an Actor run gets created or transitions into a new state. Webhook can be defined for all runs of an [Actor](../../actors/index.mdx) at its detail page or for a specific [Actor task](../../actors/running/tasks.md) at its detail page. In that case, the webhook is invoked only for runs started for that task. +Actor run events are triggered when an Actor run gets created or transitions into a new state. Webhook can be defined for all runs of an [Actor](../../../actors/index.mdx) at its detail page or for a specific [Actor task](../../../actors/running/tasks.md) at its detail page. In that case, the webhook is invoked only for runs started for that task. ### Run event types @@ -50,7 +50,7 @@ Note that apart from event data, actions also have the `resource` object availab ## [](#actor-build)Actor build -Actor build events are triggered when an Actor build is created or transitions into a new state. Webhooks can be defined for all of an [Actor](../../actors/index.mdx)'s builds on its detail page. +Actor build events are triggered when an Actor build is created or transitions into a new state. Webhooks can be defined for all of an [Actor](../../../actors/index.mdx)'s builds on its detail page. ### Build event types diff --git a/sources/platform/integrations/webhooks/index.md b/sources/platform/integrations/programming/webhooks/index.md similarity index 81% rename from sources/platform/integrations/webhooks/index.md rename to sources/platform/integrations/programming/webhooks/index.md index b6f18e3191..2910eb344a 100644 --- a/sources/platform/integrations/webhooks/index.md +++ b/sources/platform/integrations/programming/webhooks/index.md @@ -15,12 +15,12 @@ Webhooks allow you to configure the Apify platform to perform an action when a c You can find webhooks under the **Integrations** tab on an Actor's page in [Apify Console](https://console.apify.com/actors). -![Integrations tab in Apify Console](../images/integrations-tab.png) +![Integrations tab in Apify Console](../../images/integrations-tab.png) To define a webhook, select a system **event** that triggers the webhook. Then, provide the **action** to execute after the event. When the event occurs, the system executes the action. > Currently, the only available action is to send a POST HTTP request to a URL specified in the webhook. -* [**Events**](./events.md) -* [**Actions**](./actions.md) -* [**Ad-hoc webhooks**](./ad_hoc_webhooks.md) +* [**Events**](/integrations/webhooks/events) +* [**Actions**](/integrations/webhooks/actions) +* [**Ad-hoc webhooks**](/integrations/webhooks/ad-hoc-webhooks) diff --git a/sources/platform/integrations/workflows-and-notifications/_category_.yml b/sources/platform/integrations/workflows-and-notifications/_category_.yml new file mode 100644 index 0000000000..836d96ded0 --- /dev/null +++ b/sources/platform/integrations/workflows-and-notifications/_category_.yml @@ -0,0 +1,2 @@ +label: Workflows & notifications +position: 4 diff --git a/sources/platform/integrations/gmail.md b/sources/platform/integrations/workflows-and-notifications/gmail.md similarity index 76% rename from sources/platform/integrations/gmail.md rename to sources/platform/integrations/workflows-and-notifications/gmail.md index 8fbc3b1b20..32994a648c 100644 --- a/sources/platform/integrations/gmail.md +++ b/sources/platform/integrations/workflows-and-notifications/gmail.md @@ -26,29 +26,29 @@ To use the Apify integration for Gmail, you will need: 1. Head over to **Integrations** tab in your task and click on Gmail integration. - ![Gmail integration](./images/gmail/google-maps-task-integrations.png) + ![Gmail integration](../images/gmail/google-maps-task-integrations.png) 1. In the popup window select: - Send results email via Gmail - Get notified when the run fails - ![Gmail integration setup](./images/gmail/google-maps-task-configuration.png) + ![Gmail integration setup](../images/gmail/google-maps-task-configuration.png) 1. Click on **Sign in with Google** button and select the account with which you want to use the integration. - ![Gmail integration email signup](./images/gmail/google-maps-task-email.png) + ![Gmail integration email signup](../images/gmail/google-maps-task-email.png) 1. After signing in you need to specify to what email account you want to send the message through the integration. Optionally you can also specify the subject and body of the email that will be sent. - ![Gmail integration email setup](./images/gmail/google-maps-task-email-filled.png) + ![Gmail integration email setup](../images/gmail/google-maps-task-email-filled.png) 1. Select the desired format of the attached dataset file. - ![Gmail integration format selection](./images/gmail/google-maps-task-email-format.png) + ![Gmail integration format selection](../images/gmail/google-maps-task-email-format.png) 1. Click on save & enable the integration. - ![Gmail integration save](./images/gmail/google-maps-task-email-save.png) + ![Gmail integration save](../images/gmail/google-maps-task-email-save.png) Once this is done, run your Actor to test whether the integration is working. diff --git a/sources/platform/integrations/make.md b/sources/platform/integrations/workflows-and-notifications/make.md similarity index 94% rename from sources/platform/integrations/make.md rename to sources/platform/integrations/workflows-and-notifications/make.md index 57d74c89ef..3b14d8c17b 100644 --- a/sources/platform/integrations/make.md +++ b/sources/platform/integrations/workflows-and-notifications/make.md @@ -25,17 +25,17 @@ Add the Apify module to your scenario. You can find this module by searching for Next, select one of the available options under Triggers, Actions and Searches, then click on the Apify module to open its configuration window. -![Apify module](./images/apify-module.png) +![Apify module](../images/apify-module.png) ## Step 2: Create a connection to your Apify account In the Connection configuration window, you will need to provide your Apify API token. -![API token](./images/apify-token.png) +![API token](../images/apify-token.png) You can find the token in the Apify Console by navigating to **Settings > Integrations**. -![Integrations token](./images/apify-integrations-token.png) +![Integrations token](../images/apify-integrations-token.png) Finally, copy your API token to the Make module and save it to create a connection. @@ -47,7 +47,7 @@ Congratulations! You have successfully connected the Apify app and can now use i > Triggers when a selected Actor run is finished. - + | Input | Description | | :----------- | :--------------------------------------------------------------------- | @@ -71,7 +71,7 @@ Congratulations! You have successfully connected the Apify app and can now use i > Runs a selected Actor task. - + | Input | Description | | :------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -83,7 +83,7 @@ Congratulations! You have successfully connected the Apify app and can now use i > Runs a selected Actor. - + | Input | Description | @@ -101,7 +101,7 @@ Congratulations! You have successfully connected the Apify app and can now use i > Retrieves items from a [dataset](/platform/storage/dataset). - + | Input | Description | diff --git a/sources/platform/integrations/slack.md b/sources/platform/integrations/workflows-and-notifications/slack.md similarity index 93% rename from sources/platform/integrations/slack.md rename to sources/platform/integrations/workflows-and-notifications/slack.md index 4c457db4d6..7d3921ec7c 100644 --- a/sources/platform/integrations/slack.md +++ b/sources/platform/integrations/workflows-and-notifications/slack.md @@ -30,11 +30,11 @@ You can find all integrations on an Actor's or task's **Integrations** tab. For Find the integration for Slack, then click the **Configure** button. You will be prompted to log in with your Slack account and select your workspace in the **Settings > Integrations** window. -![Integrations tab](./images/integrations-tab.png) +![Integrations tab](../images/integrations-tab.png) Then, head back to your task to finish the setup. Select what type of events you would like to be notified of (e.g., when a run is created, when a run succeeds, when a run fails, etc.), your workspace, and the channel you want to receive the notifications in (you can set up an ad-hoc channel for this test). In the **Message** field, you can see how the notification will look, or you can craft a new custom one. -![Integration setup](./images/slack-integration-setup.png) +![Integration setup](../images/slack-integration-setup.png) Once you are done, click the **Save** button. @@ -46,7 +46,7 @@ Click the **Start** button and head to the Slack channel you selected to see you You can now run the same Actor or task directly from Slack by typing `/apify call [Actor or task ID]` into the Slack message box. -![Use Apify from Slack](./images/slack-apify-message.png) +![Use Apify from Slack](../images/slack-apify-message.png) When an Actor doesn't require you to fill in any input fields, you can run it by simply typing `/apify call [Actor or task ID]`. diff --git a/sources/platform/integrations/telegram.md b/sources/platform/integrations/workflows-and-notifications/telegram.md similarity index 85% rename from sources/platform/integrations/telegram.md rename to sources/platform/integrations/workflows-and-notifications/telegram.md index 022ae70355..128408a60c 100644 --- a/sources/platform/integrations/telegram.md +++ b/sources/platform/integrations/workflows-and-notifications/telegram.md @@ -37,7 +37,7 @@ In the create Zap form, you can choose whether you want to use Apify as the trig Click on Trigger and find Apify using the search box. -![Zapier choosing source of trigger](./images/zapier-trigger.png) +![Zapier choosing source of trigger](../images/zapier-trigger.png) You have two possible triggers that you can choose while setting up your Telegram integration @@ -45,7 +45,7 @@ You have two possible triggers that you can choose while setting up your Telegra - Finished Task Run - triggers upon the completion of a selected Actor task run. -![Zapier choosing trigger event](./images/zapier-zap-choose-event.png) +![Zapier choosing trigger event](../images/zapier-zap-choose-event.png) :::info Available Actors & Tasks @@ -61,11 +61,11 @@ Click on the "Sign in" button next to the Connect to Apify title. Or you can sel The connection configuration options open in a new tab in your browser or in a modal window. -![Apify Zapier connection](./images/zapier-new-connection.png) +![Apify Zapier connection](../images/zapier-new-connection.png) In connection configuration, you need to provide your Apify API Token. You can find the token in Apify Console by navigating to **Settings > Integrations**. -![Integrations token](./images/apify-integrations-token.png) +![Integrations token](../images/apify-integrations-token.png) Copy the token and paste it into the configuration form and continue with the "Yes, Continue to Apify" button. @@ -77,7 +77,7 @@ The connection is now created and the configuration form closed. After setting up Apify as your trigger within Zapier, it's time to set up Telegram as the action that will occur based on the trigger. -![Choosing action source within Zapier](./images/zapier-zap-choose-action.png) +![Choosing action source within Zapier](../images/zapier-zap-choose-action.png) You have two possible actions that you can choose while setting up your Telegram integration @@ -85,21 +85,21 @@ You have two possible actions that you can choose while setting up your Telegram - Send Poll - sends a poll from your bot when trigger activates. -![Zapier choosing action event](./images/zapier-zap-choose-event-2.png) +![Zapier choosing action event](../images/zapier-zap-choose-event-2.png) After you choose your event that will be happening after trigger, you need to connect your Telegram bot that will be responsible for sending the message or sending polls. -![Telegram bot HTTP token](./images/zapier-zap-telegram-access.png) +![Telegram bot HTTP token](../images/zapier-zap-telegram-access.png) The best way to do it's to: 1. Start conversation with Telegrams BotFather, a bot that manages bots on Telegram. - ![BotFather conversation](./images/botfather-start.png) + ![BotFather conversation](../images/botfather-start.png) 1. Issue the `/newbot` command in conversation with it and follow the instructions, until you get your HTTP API token. - ![BotFather conversation with new HTTP API token](./images/botfather-HTTP-API-blurred.png) + ![BotFather conversation with new HTTP API token](../images/botfather-HTTP-API-blurred.png) ### Step 2: Create action for your new Telegram bot @@ -110,6 +110,6 @@ Start new conversation with your bot and copy the **Chat-Id** and input it withi Select **Chat-Id**, **Text Format**, and a **Message Text** that suits your need for example -![Zapier choosing Action event](./images/zapier-zap-action.png) +![Zapier choosing Action event](../images/zapier-zap-action.png) Once you fill all required fields, you can test your integration and if everything works hit **Publish** and you are done! diff --git a/sources/platform/integrations/zapier.md b/sources/platform/integrations/workflows-and-notifications/zapier.md similarity index 92% rename from sources/platform/integrations/zapier.md rename to sources/platform/integrations/workflows-and-notifications/zapier.md index 14fc3b91c7..e18c0b029d 100644 --- a/sources/platform/integrations/zapier.md +++ b/sources/platform/integrations/workflows-and-notifications/zapier.md @@ -33,11 +33,11 @@ In the create Zap form, you can choose whether you want to use Apify as the trig Click on Trigger and find Apify using the search box. -![Apify Zapier Trigger 2](./images/zapier-trigger.png) +![Apify Zapier Trigger 2](../images/zapier-trigger.png) Then select which trigger you want to use. -![Apify Zapier Trigger 2](./images/zapier-trigger-2.png) +![Apify Zapier Trigger 2](../images/zapier-trigger-2.png) ### Step 2: Create a connection to your Apify account @@ -47,11 +47,11 @@ Click on the "Sign in" button next to the Connect to Apify title. Or you can sel The connection configuration options open in a new tab in your browser or in a modal window. -![Apify Zapier connection](./images/zapier-new-connection.png) +![Apify Zapier connection](../images/zapier-new-connection.png) In connection configuration, you need to provide your Apify API Token. You can find the token in Apify Console by navigating to **Settings > Integrations**. -![Integrations token](./images/apify-integrations-token.png) +![Integrations token](../images/apify-integrations-token.png) Copy the token and paste it into the configuration form and continue with the "Yes, Continue to Apify" button. @@ -69,7 +69,7 @@ In this guide we'll show you how to use Apify as an action to start an Actor run After you select Apify as an action, you need to select the action you want to use. Let's use the "Run Actor" action for this example. -![Zapier Action](./images/zapier-action-1.png) +![Zapier Action](../images/zapier-action-1.png) You need to select the connection you want to use. If you don't have any connections, you can create a new one by clicking on the "Sign in" button and follow the steps in Step 2. @@ -77,7 +77,7 @@ In the next step, you need to select the Actor you want to use. You can use the We will use the Web Scraper Actor in this example. -![Zapier Action](./images/zapier-action-2.png) +![Zapier Action](../images/zapier-action-2.png) You need to fill the input for the Actor and use the "Continue" button to advance to the next step. @@ -88,7 +88,7 @@ In the next step, you can test the action and check if everything is using the " This button runs the Actor run on Apify and you can see the data in Zapier. -![Zapier Action](./images/zapier-action-3.png) +![Zapier Action](../images/zapier-action-3.png) Once you are happy with the test, you can publish the Zap. When it is turned on, it will run the Actor every time the trigger is fired. From 86745758fe6ba923acd0825a5e37753a9f572291 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Olender?= <92638966+TC-MO@users.noreply.github.com> Date: Wed, 5 Jun 2024 17:36:17 +0200 Subject: [PATCH 2/7] reorganize documents within subcategories --- .../platform/integrations/actors/integration_ready_actors.md | 2 +- sources/platform/integrations/ai/flowise.md | 2 +- sources/platform/integrations/ai/langchain.md | 2 +- sources/platform/integrations/ai/llama.md | 2 +- sources/platform/integrations/ai/pinecone.md | 2 +- sources/platform/integrations/data-storage/airbyte.md | 2 +- sources/platform/integrations/data-storage/drive.md | 2 +- sources/platform/integrations/data-storage/keboola.md | 2 +- sources/platform/integrations/integrate_with_apify.md | 2 +- .../platform/integrations/workflows-and-notifications/gmail.md | 2 +- .../platform/integrations/workflows-and-notifications/make.md | 2 +- .../platform/integrations/workflows-and-notifications/slack.md | 2 +- .../integrations/workflows-and-notifications/telegram.md | 2 +- .../platform/integrations/workflows-and-notifications/zapier.md | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/sources/platform/integrations/actors/integration_ready_actors.md b/sources/platform/integrations/actors/integration_ready_actors.md index c81d64cc9c..e7b40bb697 100644 --- a/sources/platform/integrations/actors/integration_ready_actors.md +++ b/sources/platform/integrations/actors/integration_ready_actors.md @@ -1,5 +1,5 @@ --- -title: Integration-ready Actors +title: Creating integration Actors description: Learn how to create Actors that are ready to be integrated with other Actors and tasks. sidebar_position: 1 slug: /integrations/actors/integration-ready-actors diff --git a/sources/platform/integrations/ai/flowise.md b/sources/platform/integrations/ai/flowise.md index dc963a1855..faf20767f4 100644 --- a/sources/platform/integrations/ai/flowise.md +++ b/sources/platform/integrations/ai/flowise.md @@ -1,7 +1,7 @@ --- title: Flowise description: Learn how to integrate Apify with Flowise. -sidebar_position: 11.20 +sidebar_position: 3 slug: /integrations/flowise --- diff --git a/sources/platform/integrations/ai/langchain.md b/sources/platform/integrations/ai/langchain.md index 3afb5f82c0..73ca434242 100644 --- a/sources/platform/integrations/ai/langchain.md +++ b/sources/platform/integrations/ai/langchain.md @@ -2,7 +2,7 @@ title: πŸ¦œπŸ”— LangChain sidebar_label: LangChain description: Learn how to integrate Apify with πŸ¦œπŸ”— LangChain, in order to feed vector databases and LLMs with data crawled from the web. -sidebar_position: 11.19 +sidebar_position: 1 slug: /integrations/langchain --- diff --git a/sources/platform/integrations/ai/llama.md b/sources/platform/integrations/ai/llama.md index c7fd6e4405..087c6fd9ef 100644 --- a/sources/platform/integrations/ai/llama.md +++ b/sources/platform/integrations/ai/llama.md @@ -1,7 +1,7 @@ --- title: LlamaIndex description: Learn how to integrate Apify with LlamaIndex in order to feed vector databases and LLMs with data crawled from the web. -sidebar_position: 11.21 +sidebar_position: 2 slug: /integrations/llama --- diff --git a/sources/platform/integrations/ai/pinecone.md b/sources/platform/integrations/ai/pinecone.md index c945ed151c..88a8de8f97 100644 --- a/sources/platform/integrations/ai/pinecone.md +++ b/sources/platform/integrations/ai/pinecone.md @@ -1,7 +1,7 @@ --- title: Pinecone description: Learn how to integrate Apify with Pinecone to feed data crawled from the web into the Pinecone vector database. -sidebar_position: 11.22 +sidebar_position: 4 slug: /integrations/pinecone toc_min_heading_level: 2 toc_max_heading_level: 4 diff --git a/sources/platform/integrations/data-storage/airbyte.md b/sources/platform/integrations/data-storage/airbyte.md index 7b8af9d92f..c6808ef841 100644 --- a/sources/platform/integrations/data-storage/airbyte.md +++ b/sources/platform/integrations/data-storage/airbyte.md @@ -2,7 +2,7 @@ title: Airbyte sidebar_lbel: Airbyte description: Learn how to integrate your Apify datasets with Airbyte. -sidebar_position: 11.15 +sidebar_position: 1 slug: /integrations/airbyte --- diff --git a/sources/platform/integrations/data-storage/drive.md b/sources/platform/integrations/data-storage/drive.md index 299cc19606..f26e6a7368 100644 --- a/sources/platform/integrations/data-storage/drive.md +++ b/sources/platform/integrations/data-storage/drive.md @@ -2,7 +2,7 @@ title: Google Drive sidebar_label: Google Drive description: Learn how to integrate Apify with Google Drive -sidebar_position: 11.18 +sidebar_position: 3 slug: /integrations/drive --- diff --git a/sources/platform/integrations/data-storage/keboola.md b/sources/platform/integrations/data-storage/keboola.md index 9bdceeae4a..0ae15a35cc 100644 --- a/sources/platform/integrations/data-storage/keboola.md +++ b/sources/platform/integrations/data-storage/keboola.md @@ -2,7 +2,7 @@ title: Keboola sidebar_lbel: Keboola description: Learn how to integrate your Apify datasets with Airbyte. -sidebar_position: 11.16 +sidebar_position: 2 slug: /integrations/keboola --- diff --git a/sources/platform/integrations/integrate_with_apify.md b/sources/platform/integrations/integrate_with_apify.md index f893de9b94..5ef45181c4 100644 --- a/sources/platform/integrations/integrate_with_apify.md +++ b/sources/platform/integrations/integrate_with_apify.md @@ -1,6 +1,6 @@ --- title: Integrate with Apify 🀝 -sidebar_label: Create new +sidebar_label: Create new integration description: Learn about how to integrate your service with Apify to benefit from a mutual integration. sidebar_position: 90.00 slug: /integrations/integrate diff --git a/sources/platform/integrations/workflows-and-notifications/gmail.md b/sources/platform/integrations/workflows-and-notifications/gmail.md index 32994a648c..7424512a43 100644 --- a/sources/platform/integrations/workflows-and-notifications/gmail.md +++ b/sources/platform/integrations/workflows-and-notifications/gmail.md @@ -2,7 +2,7 @@ title: Gmail sidebar_label: Gmail description: Learn how to integrate Apify with Gmail -sidebar_position: 11.17 +sidebar_position: 5 slug: /integrations/gmail --- diff --git a/sources/platform/integrations/workflows-and-notifications/make.md b/sources/platform/integrations/workflows-and-notifications/make.md index 3b14d8c17b..200d8759ee 100644 --- a/sources/platform/integrations/workflows-and-notifications/make.md +++ b/sources/platform/integrations/workflows-and-notifications/make.md @@ -2,7 +2,7 @@ title: Make sidebar_label: Make description: Learn how to integrate your Apify Actors with Make. -sidebar_position: 11.15 +sidebar_position: 2 slug: /integrations/make --- diff --git a/sources/platform/integrations/workflows-and-notifications/slack.md b/sources/platform/integrations/workflows-and-notifications/slack.md index 7d3921ec7c..6cf235ca2d 100644 --- a/sources/platform/integrations/workflows-and-notifications/slack.md +++ b/sources/platform/integrations/workflows-and-notifications/slack.md @@ -2,7 +2,7 @@ title: Slack sidebar_label: Slack description: Learn how to integrate your Apify Actors with Slack. This article guides you from installation through to automating your whole workflow in Slack. -sidebar_position: 11.16 +sidebar_position: 4 slug: /integrations/slack --- diff --git a/sources/platform/integrations/workflows-and-notifications/telegram.md b/sources/platform/integrations/workflows-and-notifications/telegram.md index 128408a60c..f835596a5e 100644 --- a/sources/platform/integrations/workflows-and-notifications/telegram.md +++ b/sources/platform/integrations/workflows-and-notifications/telegram.md @@ -2,7 +2,7 @@ title: Telegram integration through Zapier sidebar_label: Telegram description: Learn how to integrate your Apify Actors with Zapier. -sidebar_position: 11.13 +sidebar_position: 3 slug: /integrations/telegram --- diff --git a/sources/platform/integrations/workflows-and-notifications/zapier.md b/sources/platform/integrations/workflows-and-notifications/zapier.md index e18c0b029d..808bde1d91 100644 --- a/sources/platform/integrations/workflows-and-notifications/zapier.md +++ b/sources/platform/integrations/workflows-and-notifications/zapier.md @@ -2,7 +2,7 @@ title: Zapier sidebar_label: Zapier description: Learn how to integrate your Apify Actors with Zapier. -sidebar_position: 11.12 +sidebar_position: 1 slug: /integrations/zapier --- From fcd7c1f0be1d843f865469718ec39572c143fbb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Olender?= <92638966+TC-MO@users.noreply.github.com> Date: Wed, 5 Jun 2024 18:08:03 +0200 Subject: [PATCH 3/7] fix broken links --- sources/platform/integrations/integrate_with_apify.md | 2 +- .../platform/integrations/programming/webhooks/actions.md | 4 ++-- sources/platform/integrations/programming/webhooks/index.md | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/sources/platform/integrations/integrate_with_apify.md b/sources/platform/integrations/integrate_with_apify.md index 5ef45181c4..c2daca3cf6 100644 --- a/sources/platform/integrations/integrate_with_apify.md +++ b/sources/platform/integrations/integrate_with_apify.md @@ -10,7 +10,7 @@ If you are building a service and your users could benefit from integrating with - [Langchain](./ai/langchain.md) integration enables developers to build their projects, such as AI chatbots, with Langchain to feed them with data from the web easily. - [Zapier](./workflows-and-notifications/zapier.md) integration allows Zapier users to enrich their automation workflows with data from the web or to add additional Actions performed by [Apify Actors](https://apify.com/store). -- [Keboola](integrations/keboola) integration enables Keboola users to easily pull data crawled from the web into their data pipelines. +- [Keboola](/platform/integrations/keboola) integration enables Keboola users to easily pull data crawled from the web into their data pipelines. and many more that you can see at [integrations](./index.mdx). diff --git a/sources/platform/integrations/programming/webhooks/actions.md b/sources/platform/integrations/programming/webhooks/actions.md index 89cce3b1f2..8bbe0fa093 100644 --- a/sources/platform/integrations/programming/webhooks/actions.md +++ b/sources/platform/integrations/programming/webhooks/actions.md @@ -132,8 +132,8 @@ Description is an optional string that you can add to the webhook. It serves for |-------------|--------|-------------------------------------------------------------------------------------| | `userId` | string | ID of the user who owns the webhook. | | `createdAt` | string | ISO string date of the webhook's trigger event. | -| `eventType` | string | Type of the trigger event, [see Events](/integrations/webhooks/events). | -| `eventData` | Object | Data associated with the trigger event, [see Events](/integrations/webhooks/events). | +| `eventType` | string | Type of the trigger event, [see Events](/platform/integrations/webhooks/events). | +| `eventData` | Object | Data associated with the trigger event, [see Events](/platform/integrations/webhooks/events). | | `resource` | Object | The resource that caused the trigger event, [see below](#resource). | #### Resource diff --git a/sources/platform/integrations/programming/webhooks/index.md b/sources/platform/integrations/programming/webhooks/index.md index 2910eb344a..01040118d7 100644 --- a/sources/platform/integrations/programming/webhooks/index.md +++ b/sources/platform/integrations/programming/webhooks/index.md @@ -21,6 +21,6 @@ To define a webhook, select a system **event** that triggers the webhook. Then, > Currently, the only available action is to send a POST HTTP request to a URL specified in the webhook. -* [**Events**](/integrations/webhooks/events) -* [**Actions**](/integrations/webhooks/actions) -* [**Ad-hoc webhooks**](/integrations/webhooks/ad-hoc-webhooks) +* [**Events**](/platform/integrations/webhooks/events) +* [**Actions**](/platform/integrations/webhooks/actions) +* [**Ad-hoc webhooks**](/platform/integrations/webhooks/ad-hoc-webhooks) From e2f4f0b3edd155a2dc7521de6587d9bf05e3ad52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Olender?= <92638966+TC-MO@users.noreply.github.com> Date: Wed, 5 Jun 2024 19:02:16 +0200 Subject: [PATCH 4/7] move API integration doc under programming moved api integration doc into programming sub-category fixed broken links due to change of file structure fixed broken images in API doc due to change of file structure --- sources/platform/integrations/{ => programming}/api.md | 4 ++-- sources/platform/storage/dataset.md | 2 +- sources/platform/storage/key_value_store.md | 2 +- sources/platform/storage/request_queue.md | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) rename sources/platform/integrations/{ => programming}/api.md (96%) diff --git a/sources/platform/integrations/api.md b/sources/platform/integrations/programming/api.md similarity index 96% rename from sources/platform/integrations/api.md rename to sources/platform/integrations/programming/api.md index 3d786a834d..aa3c2b4324 100644 --- a/sources/platform/integrations/api.md +++ b/sources/platform/integrations/programming/api.md @@ -21,7 +21,7 @@ You are not required to those packagesβ€”the REST API works with any HTTP client To access the Apify API in your integrations, you need to authenticate using your secret API token. You can find it on the [Integrations](https://console.apify.com/account?tab=integrations) page in Apify Console. Give your token a reasonable description, and never use one token for several services, much like you shouldn't use the same password for different accounts. -![Integrations page in Apify Console](./images/api-token.png) +![Integrations page in Apify Console](../images/api-token.png) ## Authentication @@ -39,7 +39,7 @@ do not require an authentication token because they contain a hard-to-guess iden When working under an organization account, you will see two types of API tokens on the Integrations page. -![Integrations page in the Apify Console in organizatoin mode](./images/api-token-organization.png) +![Integrations page in the Apify Console in organizatoin mode](../images/api-token-organization.png) The Personal API tokens are different from your own Personal API tokens mentioned above. If you use this token in an integration, it will have the same permissions that you have within the organization, and all the operations you use it for will be ascribed to you. diff --git a/sources/platform/storage/dataset.md b/sources/platform/storage/dataset.md index fd4d761261..fda4a5eb0d 100644 --- a/sources/platform/storage/dataset.md +++ b/sources/platform/storage/dataset.md @@ -218,7 +218,7 @@ The [Apify API](/api/v2#/reference/datasets) enables you progammatic access to y If you are accessing your datasets using the `username~store-name` [store ID format](./index.md), you will need to use your [secret API token](../integrations/index.mdx#api-token). You can find the token (and your user ID) on the [Integrations](https://console.apify.com/account#/integrations)tab of **Settings** page of your Apify account. -> When providing your API authentication token, we recommend using the request's `Authorization` header, rather than the URL. ([More info](../integrations/api.md#authentication)). +> When providing your API authentication token, we recommend using the request's `Authorization` header, rather than the URL. ([More info](../integrations/programming/api.md#authentication)). To retrieve a list of you datasets, send a GET request to the [Get list of datasets](/api/v2#/reference/datasets/get-list-of-datasets) endpoint. diff --git a/sources/platform/storage/key_value_store.md b/sources/platform/storage/key_value_store.md index e8128224fd..1f24e8de8e 100644 --- a/sources/platform/storage/key_value_store.md +++ b/sources/platform/storage/key_value_store.md @@ -203,7 +203,7 @@ The [Apify API](/api/v2#/reference/key-value-stores) enables you programmatic ac If you are accessing your datasets using the `username~store-name` [store ID format](./index.md), you will need to use your [secret API token](../integrations/index.mdx#api-token). You can find the token (and your user ID) on the [Integrations](https://console.apify.com/account#/integrations) tab of **Settings** page of your Apify account. -> When providing your API authentication token, we recommend using the request's `Authorization` header, rather than the URL. ([More info](../integrations/api.md#authentication)). +> When providing your API authentication token, we recommend using the request's `Authorization` header, rather than the URL. ([More info](../integrations/programming/api.md#authentication)). To retrieve a list of your key-value stores, send a GET request to the [Get list of key-value stores](/api/v2#/reference/key-value-stores/store-collection/get-list-of-key-value-stores) endpoint. diff --git a/sources/platform/storage/request_queue.md b/sources/platform/storage/request_queue.md index ba3592b544..2f7e7e7c8f 100644 --- a/sources/platform/storage/request_queue.md +++ b/sources/platform/storage/request_queue.md @@ -215,7 +215,7 @@ The [Apify API](/api/v2#/reference/request-queues) allows you programmatic acces If you are accessing your datasets using the `username~store-name` [store ID format](./index.md), you will need to use your [secret API token](../integrations/index.mdx#api-token). You can find the token (and your user ID) on the [Integrations](https://console.apify.com/account#/integrations) page of your Apify account. -> When providing your API authentication token, we recommend using the request's `Authorization` header, rather than the URL. ([More info](../integrations/api.md#authentication)). +> When providing your API authentication token, we recommend using the request's `Authorization` header, rather than the URL. ([More info](../integrations/programming/api.md#authentication)). To get a list of your request queues, send a GET request to the [Get list of request queues](/api/v2#/reference/request-queues/store-collection/get-list-of-request-queues) endpoint. From 4f1a38a451181b23f1b8c779d2d0d0e7b1a31931 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Olender?= <92638966+TC-MO@users.noreply.github.com> Date: Wed, 5 Jun 2024 20:01:09 +0200 Subject: [PATCH 5/7] removed unnecessary frontmatter metadata removed sidebar positions from index.md in webhooks & actor-to-actor --- sources/platform/integrations/actors/index.md | 1 - sources/platform/integrations/programming/webhooks/index.md | 1 - 2 files changed, 2 deletions(-) diff --git a/sources/platform/integrations/actors/index.md b/sources/platform/integrations/actors/index.md index f4005e7a19..9341ee700e 100644 --- a/sources/platform/integrations/actors/index.md +++ b/sources/platform/integrations/actors/index.md @@ -1,7 +1,6 @@ --- title: Actor-to-Actor description: Learn how to integrate with other Actors and tasks. -sidebar_position: 11.10 slug: /integrations/actors --- diff --git a/sources/platform/integrations/programming/webhooks/index.md b/sources/platform/integrations/programming/webhooks/index.md index 01040118d7..4333fa25f7 100644 --- a/sources/platform/integrations/programming/webhooks/index.md +++ b/sources/platform/integrations/programming/webhooks/index.md @@ -1,7 +1,6 @@ --- title: Webhooks description: Learn how to integrate multiple Apify Actors or external systems with your Actor or task run. Send alerts when your Actor run succeeds or fails. -sidebar_position: 11.02 slug: /integrations/webhooks --- From e14e310cdc7bef2f6d1b472cecc42df60b422241 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Olender?= <92638966+TC-MO@users.noreply.github.com> Date: Wed, 5 Jun 2024 20:10:39 +0200 Subject: [PATCH 6/7] changed titles across integration docs --- sources/platform/integrations/actors/index.md | 1 + sources/platform/integrations/ai/flowise.md | 3 ++- sources/platform/integrations/ai/langchain.md | 2 +- sources/platform/integrations/ai/llama.md | 3 ++- sources/platform/integrations/ai/pinecone.md | 3 ++- sources/platform/integrations/data-storage/airbyte.md | 4 ++-- sources/platform/integrations/data-storage/drive.md | 4 ++-- sources/platform/integrations/data-storage/keboola.md | 4 ++-- sources/platform/integrations/programming/api.md | 3 ++- sources/platform/integrations/programming/github.md | 6 +++--- sources/platform/integrations/programming/webhooks/index.md | 6 +++--- .../integrations/workflows-and-notifications/gmail.md | 4 ++-- .../integrations/workflows-and-notifications/make.md | 4 ++-- .../integrations/workflows-and-notifications/slack.md | 4 ++-- .../integrations/workflows-and-notifications/zapier.md | 4 ++-- 15 files changed, 30 insertions(+), 25 deletions(-) diff --git a/sources/platform/integrations/actors/index.md b/sources/platform/integrations/actors/index.md index 9341ee700e..b024e5bce3 100644 --- a/sources/platform/integrations/actors/index.md +++ b/sources/platform/integrations/actors/index.md @@ -1,6 +1,7 @@ --- title: Actor-to-Actor description: Learn how to integrate with other Actors and tasks. +sidebar_label: Actor-to-Actor slug: /integrations/actors --- diff --git a/sources/platform/integrations/ai/flowise.md b/sources/platform/integrations/ai/flowise.md index faf20767f4..227ad4ec50 100644 --- a/sources/platform/integrations/ai/flowise.md +++ b/sources/platform/integrations/ai/flowise.md @@ -1,6 +1,7 @@ --- -title: Flowise +title: Flowise integration description: Learn how to integrate Apify with Flowise. +sidebar_label: Flowise sidebar_position: 3 slug: /integrations/flowise --- diff --git a/sources/platform/integrations/ai/langchain.md b/sources/platform/integrations/ai/langchain.md index 73ca434242..b5a99f3350 100644 --- a/sources/platform/integrations/ai/langchain.md +++ b/sources/platform/integrations/ai/langchain.md @@ -1,5 +1,5 @@ --- -title: πŸ¦œπŸ”— LangChain +title: πŸ¦œπŸ”— LangChain integration sidebar_label: LangChain description: Learn how to integrate Apify with πŸ¦œπŸ”— LangChain, in order to feed vector databases and LLMs with data crawled from the web. sidebar_position: 1 diff --git a/sources/platform/integrations/ai/llama.md b/sources/platform/integrations/ai/llama.md index 087c6fd9ef..bd00a7e6c4 100644 --- a/sources/platform/integrations/ai/llama.md +++ b/sources/platform/integrations/ai/llama.md @@ -1,6 +1,7 @@ --- -title: LlamaIndex +title: LlamaIndex integration description: Learn how to integrate Apify with LlamaIndex in order to feed vector databases and LLMs with data crawled from the web. +sidebar_label: Llamaindex sidebar_position: 2 slug: /integrations/llama --- diff --git a/sources/platform/integrations/ai/pinecone.md b/sources/platform/integrations/ai/pinecone.md index 88a8de8f97..e292b94078 100644 --- a/sources/platform/integrations/ai/pinecone.md +++ b/sources/platform/integrations/ai/pinecone.md @@ -1,6 +1,7 @@ --- -title: Pinecone +title: Pinecone integration description: Learn how to integrate Apify with Pinecone to feed data crawled from the web into the Pinecone vector database. +sidebar_label: Pinecone sidebar_position: 4 slug: /integrations/pinecone toc_min_heading_level: 2 diff --git a/sources/platform/integrations/data-storage/airbyte.md b/sources/platform/integrations/data-storage/airbyte.md index c6808ef841..8ba62f75e0 100644 --- a/sources/platform/integrations/data-storage/airbyte.md +++ b/sources/platform/integrations/data-storage/airbyte.md @@ -1,7 +1,7 @@ --- -title: Airbyte -sidebar_lbel: Airbyte +title: Airbyte integration description: Learn how to integrate your Apify datasets with Airbyte. +sidebar_label: Airbyte sidebar_position: 1 slug: /integrations/airbyte --- diff --git a/sources/platform/integrations/data-storage/drive.md b/sources/platform/integrations/data-storage/drive.md index f26e6a7368..3622634ee3 100644 --- a/sources/platform/integrations/data-storage/drive.md +++ b/sources/platform/integrations/data-storage/drive.md @@ -1,7 +1,7 @@ --- -title: Google Drive -sidebar_label: Google Drive +title: Google Drive integration description: Learn how to integrate Apify with Google Drive +sidebar_label: Google Drive sidebar_position: 3 slug: /integrations/drive --- diff --git a/sources/platform/integrations/data-storage/keboola.md b/sources/platform/integrations/data-storage/keboola.md index 0ae15a35cc..9cb0790791 100644 --- a/sources/platform/integrations/data-storage/keboola.md +++ b/sources/platform/integrations/data-storage/keboola.md @@ -1,7 +1,7 @@ --- -title: Keboola -sidebar_lbel: Keboola +title: Keboola integration description: Learn how to integrate your Apify datasets with Airbyte. +sidebar_label: Keboola sidebar_position: 2 slug: /integrations/keboola --- diff --git a/sources/platform/integrations/programming/api.md b/sources/platform/integrations/programming/api.md index aa3c2b4324..af6af7cc71 100644 --- a/sources/platform/integrations/programming/api.md +++ b/sources/platform/integrations/programming/api.md @@ -1,6 +1,7 @@ --- -title: API +title: API integration description: Learn how to integrate with Apify via API. +sidebar_label: API sidebar_position: 1 slug: /integrations/api --- diff --git a/sources/platform/integrations/programming/github.md b/sources/platform/integrations/programming/github.md index 97c29fe7bb..63eab5db43 100644 --- a/sources/platform/integrations/programming/github.md +++ b/sources/platform/integrations/programming/github.md @@ -1,8 +1,8 @@ --- -title: GitHub -sidebar_label: GitHub +title: GitHub integration description: Learn how to integrate your Apify Actors with GitHub. This article shows you how to automatically create an issue in your repo when an Actor run fails. -sidebar_position: 11.11 +sidebar_label: GitHub +sidebar_position: 3 slug: /integrations/github --- diff --git a/sources/platform/integrations/programming/webhooks/index.md b/sources/platform/integrations/programming/webhooks/index.md index 4333fa25f7..36459d2771 100644 --- a/sources/platform/integrations/programming/webhooks/index.md +++ b/sources/platform/integrations/programming/webhooks/index.md @@ -1,11 +1,11 @@ --- -title: Webhooks +title: Webhooks integration description: Learn how to integrate multiple Apify Actors or external systems with your Actor or task run. Send alerts when your Actor run succeeds or fails. +sidebar_position: 2 +sidebar_label: Webhooks slug: /integrations/webhooks --- -# Webhooks - **Learn how to integrate multiple Apify Actors or external systems with your Actor or task run. Send alerts when your Actor run succeeds or fails.** --- diff --git a/sources/platform/integrations/workflows-and-notifications/gmail.md b/sources/platform/integrations/workflows-and-notifications/gmail.md index 7424512a43..56c1c18378 100644 --- a/sources/platform/integrations/workflows-and-notifications/gmail.md +++ b/sources/platform/integrations/workflows-and-notifications/gmail.md @@ -1,7 +1,7 @@ --- -title: Gmail -sidebar_label: Gmail +title: Gmail integration description: Learn how to integrate Apify with Gmail +sidebar_label: Gmail sidebar_position: 5 slug: /integrations/gmail --- diff --git a/sources/platform/integrations/workflows-and-notifications/make.md b/sources/platform/integrations/workflows-and-notifications/make.md index 200d8759ee..5b99a4ef29 100644 --- a/sources/platform/integrations/workflows-and-notifications/make.md +++ b/sources/platform/integrations/workflows-and-notifications/make.md @@ -1,7 +1,7 @@ --- -title: Make -sidebar_label: Make +title: Make integration description: Learn how to integrate your Apify Actors with Make. +sidebar_label: Make sidebar_position: 2 slug: /integrations/make --- diff --git a/sources/platform/integrations/workflows-and-notifications/slack.md b/sources/platform/integrations/workflows-and-notifications/slack.md index 6cf235ca2d..10c1d2ca45 100644 --- a/sources/platform/integrations/workflows-and-notifications/slack.md +++ b/sources/platform/integrations/workflows-and-notifications/slack.md @@ -1,7 +1,7 @@ --- -title: Slack -sidebar_label: Slack +title: Slack integration description: Learn how to integrate your Apify Actors with Slack. This article guides you from installation through to automating your whole workflow in Slack. +sidebar_label: Slack sidebar_position: 4 slug: /integrations/slack --- diff --git a/sources/platform/integrations/workflows-and-notifications/zapier.md b/sources/platform/integrations/workflows-and-notifications/zapier.md index 808bde1d91..3539c606cf 100644 --- a/sources/platform/integrations/workflows-and-notifications/zapier.md +++ b/sources/platform/integrations/workflows-and-notifications/zapier.md @@ -1,7 +1,7 @@ --- -title: Zapier -sidebar_label: Zapier +title: Zapier integration description: Learn how to integrate your Apify Actors with Zapier. +sidebar_label: Zapier sidebar_position: 1 slug: /integrations/zapier --- From 6acc431dcfbb4882614d1080c6d5d03af5651a0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Olender?= <92638966+TC-MO@users.noreply.github.com> Date: Wed, 5 Jun 2024 22:09:33 +0200 Subject: [PATCH 7/7] removed integrations to match console & fixed pinecome img used same pinecone logo as console to fix dark mode issue remove integrations no longer supported in console - hevo - transposit --- sources/platform/integrations/index.mdx | 16 +----------- static/img/platform/integrations/pinecone.png | Bin 35898 -> 0 bytes static/img/platform/integrations/pinecone.svg | 24 ++++++++++++++++++ 3 files changed, 25 insertions(+), 15 deletions(-) delete mode 100644 static/img/platform/integrations/pinecone.png create mode 100644 static/img/platform/integrations/pinecone.svg diff --git a/sources/platform/integrations/index.mdx b/sources/platform/integrations/index.mdx index 8393915df0..87cf31c858 100644 --- a/sources/platform/integrations/index.mdx +++ b/sources/platform/integrations/index.mdx @@ -116,12 +116,6 @@ If you use one of the main automation platforms, Apify support is here for you. imageUrl="/img/platform/integrations/zapier.svg" smallImage /> - - ## Data pipelines, ETLs, and AI/LLM tools The Apify platform integrates with popular ETL and data pipeline services, enabling you to integrate Apify Actors directly into your data integration processes. @@ -148,12 +141,6 @@ The Apify platform integrates with popular ETL and data pipeline services, enabl imageUrl="/img/platform/integrations/airbyte.svg" smallImage /> -
@@ -181,10 +168,9 @@ If you are working on an AI/LLM-related project, we recommend you look into the - ## Other Actors diff --git a/static/img/platform/integrations/pinecone.png b/static/img/platform/integrations/pinecone.png deleted file mode 100644 index 052d1149a53d69264c4346b3f7f1d1bb7810f6db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35898 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 diff --git a/static/img/platform/integrations/pinecone.svg b/static/img/platform/integrations/pinecone.svg new file mode 100644 index 0000000000..02ae61cf45 --- /dev/null +++ b/static/img/platform/integrations/pinecone.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + +