GithubHelp home page GithubHelp logo

tracardi / tracardi Goto Github PK

View Code? Open in Web Editor NEW
475.0 475.0 90.0 11.42 MB

TRACARDI is a new HOME for your customer data. TRACARDI is an Composable API-first solution for any company that need unexpensive CDP to intergrate with.

Home Page: https://www.tracardi.com

License: Other

Python 99.94% Shell 0.03% Dockerfile 0.04%
api-first cdp customer customer-data-platform e-commerce elastic-search hacktoberfest hacktoberfest2023 headless open-source platform python tracardi unomi user-profile web

tracardi's Introduction

github_banner

Customer data and engagement suite, an open-source alternative to Segment, RudderStack, etc.


Explore Tracardi Documentation · ⭐️ Support the project · 👨‍💻 Join the community · 📺 Watch tutorials on YOUTUBE

GitHub Repository Stars Count Follow Us on Twitter Subscribe on our Youtube Channel Subscribe on our Youtube Channel Subscribe on our Youtube Channel

API-First Composable Open-source Customer Data Platform

TRACARDI is an API-first, composable CDP solution, that is tailored for any company willing to integrate CDP into their Platform. Tracardi comes with a low-code or no-code editor aimed at any business that wants to start using user data for automated customer engagement. It is intended for anyone who carries out any type of customer interaction, be it through sales or service delivery.

Tracardi collects data from customer journeys and assigns it to a profile, automates data enhancement, and facilitates 🚀 Machine Learning APIs usage.

⭐️ Screenshots

flow-1

✨ Features!

What TRACARDI can do for you:

  • Reuse Current Infrastructure - Tracardi doesn’t require complex integration or dedicated infrastructure. It runs on top of cloud-managed services, reusing your existing infrastructure and spinning up new resources when needed.

  • Collect Customer Data - You can collect, ingest, aggregate, and store customer data from multiple sources in real time.

  • Model Customer Data - You can model data. Create rules that will model the data from your page and copy it into the user profile.

  • Personalize User Experience - You can personalise the user experience with real-time frontend apps injected into your existing webpage, customised messages, marketing segmentation, and in-time messaging.

  • Unify Profiles - You can merge customer data from various sources into a single profile. Automate the process of eliminating duplicate customer records. Blend customers into one account.

  • Integrate Internal Systems - Tracardi is a centralised communication and orchestration hub that can integrate different parts of your IT.

  • Scale E-commerce Easily - Tracardi is a headless, API-first platform. Built with modern tools and designed as a decentralised system that can handle your needs.

  • Use Social Engagement - Connect your e-commerce platform to existing social media networks using Tracardi bridges. Reward your customers for sharing your products or leaving comments on contents that helps you sell.

  • Stay open to all the tools available on the Internet - Tracardi is open source. Do not limit your business to a closed set of tools. If there is any tool that will help you sell Tracardi, it will help you connect it with your business.

Want to see Tracardi in action? Subscribe to our 📺 Youtube channel!

👇 Installation and getting started

The easiest way to run TRACARDI is to run it as a 🐳 docker container.

  • Install docker and docker-compose on your local machine

  • Clone tracardi/tracardi-api by executing the following line in your terminal.

    git clone https://github.com/Tracardi/tracardi-api.git
  • Go to the TRACARDI API folder, and run the following command:

cd tracardi-api
docker-compose up
  • Visit the url http://127.0.0.1:8787 and complete the installation in Tracardi GUI.

👇 Alternate Methods of Installation

There are alternate methods of installation available as well. These are described in detail in our documentation.

👇 Need help ?

Join our community Visit our YouTube Channel Tweet with us

👇 Documentation

👇 Call for Contributors

Have you found a bug 🐛 ? Or maybe you have a nice feature ✨ to contribute? The CONTRIBUTING guide will help you get your development environment ready in minutes.

All contributors willing to start coding TRACARDI plugins are urged to read the follwing beginners' tutorial:

👇 Support us

If you wish to support us, follow us on:

  • Facebook
  • X (Twitter), tag TRACARDI and leave your comments.
  • Subscribe to our Youtube channel to see development process and new upcoming features. Don't forget to turn on the notifications by pressing the bell icon to stay updated about the latest updates and releases.
  • ⭐️ Star the TRACARDI GitHub project - it really matters and puts a smile on our faces.

We are grateful for any assistance that contributes to the popularity of TRACARDI.

👇 Donate

You can support us on Open Collective

👇 Referral programs

You can support us via referral programs by purchasing a service from the following link(s)

DigitalOcean Referral Badge

👇 License

TRACARDI is available under MIT with Common Clause license.

👇 Recent activities

Stargazers repo roster for @tracardi/tracardi

Forkers repo roster for @tracardi/tracardi

tracardi's People

Contributors

agnik7 avatar atompie avatar bobsburgers avatar bytepl avatar danieldemedziuk avatar dawidekzagajnik avatar fahurox avatar kaushik-iyer avatar knittl avatar kokobhara avatar mattcam avatar mefpef avatar patromi avatar rainbowdwarf309 avatar ri10073 avatar sameersecond avatar schmelto avatar stefaanneyts avatar tanayseven avatar yk-jp avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

tracardi's Issues

Plugin: Language detection

This is a simple plugin that calls https://api.meaningcloud.com/lang-4.0/identification
and returns result.

Requirements

MeaningCloud Free Account - it generates access-key
Use of aiohttp for all API calls

Documentation

Documentation uses requests library but this plugin needs aiohttp instead.

https://learn.meaningcloud.com/developer/language-identification/4.0/doc/what-is-language-identification

Example of aiohttp use in other plugins.

https://github.com/atompie/tracardi-zapier-webhook/blob/master/tracardi_zapier_webhook/plugin.py

Rebuld AppendTraitAction and add remove feature

Currently app.process_engine.v1.AppendTraitAction can only append data to given target.
It appends data to lists based on provided configuration.

Rebuild this action to remove data from list as well

Current configuration example

{
      "append": {
                    "[email protected]": "payload@interest",
                    "[email protected]": "programming",
      }
},

Desired configuration

{
"append": {
"[email protected]": "payload@interest",
"[email protected]": "programming",
}
"remove": ["[email protected]"]
},

Write manual as well. Currently there is no documentation at manual/en/docs/flow/actions.

Make copy traits configurable

Now copy traits accepts the following config:

It will always override traits. But there are examples when it should append data.
For example if user name already exists we may want to append data.

Solution:

Will set value is not available but append data if available.

Plugin that posts to Slack

Input:

{
"workspace":...,
"channel":"...,
"message": "",
"recepient": "", // optional
}

Configuration:

{
// All needed credantials
}

This plugins send message to define workspace and channel.

Add logging to plugins

We need more information on the plugin's execution. We need to know if it did not fail. Right now we see it only when debugging.

Plugin that filters the time of execution to given timespan.

What it does.

This plugin is similar to #34 but it checks if the local time is within defined time span.

For example for a given configuration:

{
"runOnlyWithin": {
    "start": "12:00:00",
    "end":"14:00:00"
  }
}

It will run when local time is between "12:00:00" and "14:00:00". It has to check time zone.

It will return True if the condition is met.
Or None if not.

Issue with missing js

Hello,

I built the app with docker-compose up, and I had the following problems:

The path the app uses to invoke the .js is /app/static/js, but that directory does not exist. There is app/frontend/static/js.

I copied the information to /app/static/js/ and now it looks for the main.bd9b1100.chunk.js file and can't find it.

Can you help me?
Thank you very much

Plugin is not updating

Plugin will not update when it was imported for the first time.
It is due to the fact that it needs upgrading.

Php sdk for tracking

Sdk in PHP, C# for tracardi track endpoint. SDK must be able to use /track endpoint to send new events to Tracardi.

Introduction

Endpoint /track is used to collect data in Tracardi. To register an event, connect to the /track endpoint on the server where Tracardi is installed.

You need to write a code that will connect to the POST method to the url e.g. http://tracardi.page.com/track and send the data about event plus additional information on the source and session. The purpose of this task is to write and SDK in C# or PHP to abstract connecting to /track.

Documentation

Please visit:

This will shed some light on /track endpoint

Visit this to get familiar with core terms

Track payload model

/track endpoint takes a payload. A model for that data can be found in:

Find

class TrackerPayload(BaseModel):
    source: Entity
    session: Entity

    metadata: Optional[Metadata]
    profile: Optional[Entity] = None
    context: Optional[dict] = {}
    properties: Optional[dict] = {}
    events: List[EventPayload] = []
    options: Optional[dict] = {}

This defines the body of POST request. You can see what parts are optional and what type they require.
Notice that events requires a list of EventPayload.

class EventPayload(BaseModel):
    type: str
    properties: Optional[dict] = {}
    user: Optional[Entity] = None
    options: Optional[dict] = {}

Task

Write a PHP or C# SDK that models and sends data to /track endpoint.

Events dint load after connecting to unomi

Describe the bug
After pulling latest tag and docker-compose up, tracardi couldnt load the events immediately, i see events after long time. but we could see events are triggered to elastic search

Plugin that sends email via GMAIL account

The plugin receives the following payload:

{
"to":e-mail,
"from":e-mai,
"replyTo":e-mail,
"title":title,
"message":message
}

and configuration:

{
"smtp": host
"port": port
"username":username
"password":password,

  • other-needed-parametrs-to-send-an-email
    }

And sends email via gmail account

Fire base connector

Plug-in that connects to fire base and reads data from database on given query

Plugin: OpenWeather Plugin

Connect to openWeather and get weather for provided location.
Location can should be based on provided payload.

Plugin that sends event to Google Analitics

Requirements

Google analytics account

Description

Plugin that sends information from event to google analytics. Tracardi collects events in the form of JSON objects. We would like to send it to google analytics.

Getting started

The best way to understand how the system works is to see this video. It should clear how Tracardi collects events. The event need to be sent to google analytics. It can be done with this library

What we need with this plugin is to send the data from Tracardi event to google analytics.

Manual

To do this feature please read how to write a plugin. This a very simple explanation how to add a plugin to Tracardi. If you get familiar with the post you should be ready to start.

Questions

If you have a question you can as it here or join our slack channel

Notifications API

Duplicate of

It will allow to send a scheduled notification with a workflow with a data like this:

{
 "date":...
 "type":...
 "title": ....
 "message": ....
  "expires": ....
  "profileId": ....
}

It will be saved and returned to tracardiJs when a user returns and the expiration date did not pass.

It need new Plugin, new API and new EventHandler in Tracardi-js

Plugin: CounterByKey

CounterByKey plugin will count the number of delivered string keys.

For example we would like to count the number of visits to the page made form mobile device and desktop device.

So on the input to this node we will have the following data:

string "mobile" or "desktop"
or we could devliver both ["mobile","dekstop"] - this does not make sense but the may be use cases when w values can be provided for example ['mobile','android']

Lest assume the the user visited the page 10 times. Then we have 10 events that will deliver 4 times "mobile" and 6 times "desktop"

The output of this node must return:

{
"mobile":4,
"desktop": 6
}

To do that it must read the previous number of counts.

Configuration of this node must provide the path to the profile where the number of counts must be stored.

Exception while getting /openapi.json

172.18.0.1:39336 - "GET /docs HTTP/1.0" 200
172.18.0.1:39340 - "GET /openapi.json HTTP/1.0" 500
[2021-08-09 22:52:20 +0000] [9] [ERROR] Exception in ASGI application
Traceback (most recent call last):
File "/usr/local/lib/python3.8/site-packages/uvicorn/protocols/http/httptools_impl.py", line 371, in run_asgi
result = await app(self.scope, self.receive, self.send)
File "/usr/local/lib/python3.8/site-packages/uvicorn/middleware/proxy_headers.py", line 59, in call
return await self.app(scope, receive, send)
File "/usr/local/lib/python3.8/site-packages/fastapi/applications.py", line 208, in call
await super().call(scope, receive, send)
File "/usr/local/lib/python3.8/site-packages/starlette/applications.py", line 112, in call
await self.middleware_stack(scope, receive, send)
File "/usr/local/lib/python3.8/site-packages/starlette/middleware/errors.py", line 181, in call
raise exc from None
File "/usr/local/lib/python3.8/site-packages/starlette/middleware/errors.py", line 159, in call
await self.app(scope, receive, _send)
File "/usr/local/lib/python3.8/site-packages/starlette/middleware/cors.py", line 78, in call
await self.app(scope, receive, send)
File "/usr/local/lib/python3.8/site-packages/starlette/exceptions.py", line 82, in call
raise exc from None
File "/usr/local/lib/python3.8/site-packages/starlette/exceptions.py", line 71, in call
await self.app(scope, receive, sender)
File "/usr/local/lib/python3.8/site-packages/starlette/routing.py", line 580, in call
await route.handle(scope, receive, send)
File "/usr/local/lib/python3.8/site-packages/starlette/routing.py", line 241, in handle
await self.app(scope, receive, send)
File "/usr/local/lib/python3.8/site-packages/starlette/routing.py", line 52, in app
response = await func(request)
File "/usr/local/lib/python3.8/site-packages/fastapi/applications.py", line 161, in openapi
return JSONResponse(self.openapi())
File "/usr/local/lib/python3.8/site-packages/fastapi/applications.py", line 136, in openapi
self.openapi_schema = get_openapi(
File "/usr/local/lib/python3.8/site-packages/fastapi/openapi/utils.py", line 410, in get_openapi
return jsonable_encoder(OpenAPI(**output), by_alias=True, exclude_none=True) # type: ignore
File "/usr/local/lib/python3.8/site-packages/fastapi/encoders.py", line 58, in jsonable_encoder
return jsonable_encoder(
File "/usr/local/lib/python3.8/site-packages/fastapi/encoders.py", line 93, in jsonable_encoder
encoded_value = jsonable_encoder(
File "/usr/local/lib/python3.8/site-packages/fastapi/encoders.py", line 93, in jsonable_encoder
encoded_value = jsonable_encoder(
File "/usr/local/lib/python3.8/site-packages/fastapi/encoders.py", line 93, in jsonable_encoder
encoded_value = jsonable_encoder(
[Previous line repeated 5 more times]
File "/usr/local/lib/python3.8/site-packages/fastapi/encoders.py", line 107, in jsonable_encoder
jsonable_encoder(
File "/usr/local/lib/python3.8/site-packages/fastapi/encoders.py", line 145, in jsonable_encoder
return jsonable_encoder(
File "/usr/local/lib/python3.8/site-packages/fastapi/encoders.py", line 145, in jsonable_encoder
return jsonable_encoder(
File "/usr/local/lib/python3.8/site-packages/fastapi/encoders.py", line 93, in jsonable_encoder
encoded_value = jsonable_encoder(
File "/usr/local/lib/python3.8/site-packages/fastapi/encoders.py", line 144, in jsonable_encoder
raise ValueError(errors)
ValueError: [TypeError("'getset_descriptor' object is not iterable"), TypeError('vars() argument must have dict attribute')]

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.