# Journey অবজেক্ট

[লাইফসাইকেল](/bn/developer/api-reference/customer-journey-api/lifecycle/), [তৈরি এবং আপডেট](/bn/developer/api-reference/customer-journey-api/create-update/) পদ্ধতিগুলি সবই একই টপ-লেভেল আকৃতির একটি জার্নি অবজেক্ট ফেরত দেয়:

```json title="আকৃতি"
{
  "info": { ... },        // read-only metadata (responses only)
  "params": { ... },      // journey-wide configuration (create / update)
  "points": [ ... ],      // canvas nodes and their connections
  "comments": [ ... ]     // canvas comments
}
```

যখন আপনি একটি জার্নি **তৈরি** বা **আপডেট** করেন, তখন আপনি `title`, `params`, `points`, এবং `comments` পাঠান। প্রতিক্রিয়াগুলি `info` (যাতে `params` থাকে) এবং এর সাথে `points` ও `comments` ফেরত দেয়।

## Info

শুধুমাত্র পঠনযোগ্য জার্নি মেটাডেটা। প্রতিটি v3 পদ্ধতি দ্বারা ফেরত দেওয়া হয়। অনুরোধের বডির অংশ নয়।

| ফিল্ড | টাইপ | বিবরণ |
|---|---|---|
| `uuid` | string | [জার্নি আইডি](/bn/developer/api-reference/api-identifiers/#journey-id)। |
| `title` | string | জার্নির নাম। |
| `status` | [`JourneyStatus`](#journeystatus-enum) | বর্তমান অবস্থা। |
| `created_at` | string | তৈরির টাইমস্ট্যাম্প (ISO 8601)। |
| `updated_at` | string | শেষ আপডেটের টাইমস্ট্যাম্প (ISO 8601)। |
| `is_first_activated` | bool | জার্নিটি অন্তত একবার শুরু হয়েছে কিনা। |
| `params` | [`JourneyParams`](#journeyparams) | জার্নি-ব্যাপী কনফিগারেশন। |
| `category_uuid` | string | ক্যাটাগরির UUID, অথবা যদি কোনো ক্যাটাগরিতে না থাকে তবে খালি। |
| `pointCounts` | map&lt;string, uint32&gt; | প্রকার অনুসারে পয়েন্টের সংখ্যা। |
| `campaign_type` | [`CampaignType`](#campaigntype-enum) | ব্যবহারকারীরা কীভাবে জার্নিতে প্রবেশ করে। |
| `stop_reason` | string | প্রযোজ্য হলে, জার্নিটি কেন থেমে গেছে। |
| `last_edited_by` | `User` | যে ব্যবহারকারী শেষবার জার্নিটি সম্পাদনা করেছেন। |
| `dynamic_entry` | bool | ডাইনামিক এন্ট্রি সক্রিয় আছে কিনা। |

## JourneyParams

জার্নি-ব্যাপী কনফিগারেশন। তৈরি/আপডেট করার সময় পাঠানো হয় এবং `info.params`-এর ভিতরে ফেরত দেওয়া হয়।

| ফিল্ড | টাইপ | বিবরণ |
|---|---|---|
| `application_code` | string | [অ্যাপ্লিকেশন কোড](/bn/developer/api-reference/api-identifiers/#application-code) যার সাথে জার্নিটি সম্পর্কিত। তৈরি করার সময় আবশ্যক। |
| `silent_hours` | [`SilentHours`](#silenthours) | প্রতি চ্যানেলে যে ঘন্টাগুলিতে বার্তা পাঠানো বন্ধ থাকে। |
| `capping` | [`EntryCapping`](#entrycapping) | একজন ব্যবহারকারী কতবার জার্নিতে পুনরায় প্রবেশ করতে পারবে তার সীমা। |
| `conversion_window` | [`ConversionWindow`](#conversionwindow) | লক্ষ্যের রূপান্তরগুলি আরোপ করার জন্য উইন্ডো। |
| `user_id_track_change_policy` | [`UserIDTrackChangePolicy`](#useridtrackchangepolicy-enum) | জার্নির মাঝপথে কোনো ব্যবহারকারীর আইডি পরিবর্তন হলে কীভাবে তা সামলানো হবে। |

### SilentHours

শান্ত সময়ে বার্তা পাঠানো বন্ধ রাখে। **প্রতি চ্যানেল** অনুযায়ী কনফিগার করা হয়: প্রতিটি চ্যানেল তার নিজস্ব `SilentHoursParams` নেয়:

| ফিল্ড | টাইপ | বিবরণ |
|---|---|---|
| `push_params` | `SilentHoursParams` | পুশ নোটিফিকেশনের জন্য সাইলেন্ট আওয়ার্স। |
| `inapp_params` | `SilentHoursParams` | ইন-অ্যাপ মেসেজের জন্য সাইলেন্ট আওয়ার্স। |
| `email_params` | `SilentHoursParams` | ইমেইলের জন্য সাইলেন্ট আওয়ার্স। |
| `sms_params` | `SilentHoursParams` | SMS-এর জন্য সাইলেন্ট আওয়ার্স। |
| `whatsapp_params` | `SilentHoursParams` | WhatsApp-এর জন্য সাইলেন্ট আওয়ার্স। |
| `line_params` | `SilentHoursParams` | LINE-এর জন্য সাইলেন্ট আওয়ার্স। |

প্রতিটি `SilentHoursParams` হল:

| ফিল্ড | টাইপ | বিবরণ |
|---|---|---|
| `enabled` | bool | এই চ্যানেলে সাইলেন্ট আওয়ার্স প্রযোজ্য কিনা। |
| `from_time` | `Time` | শান্ত উইন্ডোর শুরু: `{ "hour": 0–23, "minute": 0–59 }`। |
| `to_time` | `Time` | শান্ত উইন্ডোর শেষ। |
| `week_days` | bool[] | উইন্ডোটি সপ্তাহের কোন দিনগুলিতে প্রযোজ্য তার জন্য সাতটি বুলিয়ান (সোমবার = ইনডেক্স 0)। |
| `behavior` | enum | যখন একটি বার্তা সাইলেন্ট আওয়ার্সের মধ্যে পড়ে তখন কী করতে হবে: `WaitAndSend` (ধরে রাখুন, তারপর উইন্ডো শেষ হলে পাঠান), `DropAndGo` (বার্তাটি এড়িয়ে যান, অবিলম্বে জার্নি চালিয়ে যান), অথবা `WaitAndDrop` (উইন্ডো শেষ হওয়া পর্যন্ত অপেক্ষা করুন, তারপর না পাঠিয়ে চালিয়ে যান)। |

### EntryCapping

একই ব্যবহারকারী কতবার জার্নিতে প্রবেশ করতে পারবে তা সীমিত করে।

| ফিল্ড | টাইপ | বিবরণ |
|---|---|---|
| `is_enabled` | bool | এন্ট্রি ক্যাপিং চালু আছে কিনা। |
| `period` | uint64 | একজন ব্যবহারকারীর প্রবেশের মধ্যে ন্যূনতম সেকেন্ডের সংখ্যা। |

### ConversionWindow

| ফিল্ড | টাইপ | বিবরণ |
|---|---|---|
| `seconds` | uint64 | একটি জার্নিতে প্রবেশের কতক্ষণ পর পর্যন্ত একজন ব্যবহারকারীর লক্ষ্য পূরণ একটি রূপান্তর হিসাবে গণ্য হবে। |

## Point

একটি পয়েন্ট হল জার্নি ক্যানভাসের একটি নোড: একটি এন্ট্রি পয়েন্ট, একটি বার্তা, একটি ডিলে, একটি স্প্লিটার, ইত্যাদি।

| ফিল্ড | টাইপ | বিবরণ |
|---|---|---|
| `uuid` | string | জার্নির মধ্যে পয়েন্টের ইউনিক আইডি। অবশ্যই একটি ক্যানোনিকাল [RFC 4122](https://www.rfc-editor.org/rfc/rfc4122) UUID হতে হবে: 8-4-4-4-12 গ্রুপে 32 হেক্স ডিজিট। |
| `title` | string | পয়েন্টের প্রদর্শনের নাম। |
| `point_type` | [`PointType`](#pointtype-enum) | নোডের প্রকার। |
| `outputs` | array of [`PointOutput`](#pointoutput) | ডাউনস্ট্রিম পয়েন্টগুলির সাথে সংযোগ। |
| `position` | [`Position`](#position) | ক্যানভাসের স্থানাঙ্ক। |
| `point_data` | object | ঠিক একটি নেস্টেড কী, যা `point_type`-এর সাথে মেলে ([পয়েন্টের প্রকার](#point-types-and-point_data) টেবিল দেখুন)। |

<Aside type="note">
সমস্ত UUID (`info.uuid`, প্রতিটি পয়েন্টের `uuid`, এবং প্রতিটি আউটপুটের `next_point_uuid`) অবশ্যই ক্যানোনিকাল RFC 4122 UUID (8-4-4-4-12 হেক্স গ্রুপ) হতে হবে।
</Aside>

### PointOutput

একটি পয়েন্টের আউটপুট হল তার বহির্গামী শাখা। তাদের কীগুলি **ফ্রি-ফর্ম নয়**। ভ্যালিডেটর প্রতিটি পয়েন্ট টাইপের জন্য একটি নির্দিষ্ট সেট কী আশা করে, এবং যদি কোনো পয়েন্টে ভুল সংখ্যক আউটপুট বা অপরিচিত কী থাকে তবে সেই জার্নিটি প্রত্যাখ্যান করে।

| ফিল্ড | টাইপ | বিবরণ |
|---|---|---|
| `identity.key` | string | ব্রাঞ্চ কী। নীচের [আউটপুট কী নিয়ম](#output-keys) অনুসরণ করতে হবে। |
| `identity.order` | int | ব্রাঞ্চের প্রদর্শনের ক্রম। |
| `info.title` | string | ঐচ্ছিক ব্রাঞ্চ লেবেল। |
| `info.next_point_uuid` | string | এই ব্রাঞ্চটি পরবর্তী যে পয়েন্টের সাথে সংযোগ করে তার UUID। |

#### Output keys

ডিফল্ট (প্রথম) ব্রাঞ্চের নাম সবসময় `"default"`। অতিরিক্ত ব্রাঞ্চগুলির নাম `"output1"`, `"output2"`, … (উপসর্গ `output` এবং তার পরে 1-ভিত্তিক ইনডেক্স)। দুটি পয়েন্ট টাইপ এই নিয়মটি ভাঙে, যা নীচে উল্লেখ করা হয়েছে।

| পয়েন্টের প্রকার | প্রত্যাশিত আউটপুট কী |
|---|---|
| এন্ট্রি পয়েন্ট (`START_BY_SEGMENT`, `START_BY_API`, `EVENT`), `INAPP`, `SET_TAGS`, `WEBHOOK`, `AUDIENCE_SYNC`, এবং স্প্লিটার ছাড়া মেসেজ পয়েন্ট (`SEND_PUSH`, `SEND_EMAIL`, `SEND_SMS`, `SEND_WHATSAPP`, `SEND_LINE`, `SEND_KAKAO`, `SEND_TELEGRAM`, `SEND_DATA`) | `default` |
| `GOAL_EVENT`, `EXIT` | কোনোটিই নয় (কোনো আউটপুট নেই) |
| `FILTER` | `default`, `output1` |
| `BOOLEAN_SPLITTER` | `default`, তারপর `output1` … `outputN` (প্রতিটি শর্তের জন্য একটি অতিরিক্ত ব্রাঞ্চ। একটি সাধারণ হ্যাঁ/না বিভাজন হল `default` + `output1`) |
| `WAIT` (delay) | `default`। ব্রাঞ্চ বিভাজন সহ একটি ডাইনামিক ডিলে `output1` যোগ করে |
| `WAIT_EVENT` | `default` হল **ইভেন্ট-ট্রিগার-না-হওয়া** ব্রাঞ্চ। `output1` (অথবা, একটি কন্ডিশন স্ক্রিপ্ট সহ, প্রতিটি কন্ডিশনের জন্য একটি ব্রাঞ্চ) হল ট্রিগার করা পথ |
| `SEND_PUSH` with a splitter | `default`, `output1` (এবং `output2` যখন বার্তা এবং ডেলিভারি উভয় স্প্লিটার চালু থাকে) |
| `SEND_EMAIL` / `SEND_SMS` / `SEND_LINE` / `SEND_WHATSAPP` with a splitter | `default`, `output1` |
| `SEND_WHATSAPP` with a quick-reply preset | `default`, এবং প্রতিটি কুইক-রিপ্লাইয়ের জন্য একটি করে ব্রাঞ্চ। কী হল কুইক-রিপ্লাইয়ের মান নিজেই |
| `AB_SPLITTER` | `output0`, `output1`, `output2`, … (প্রতিটি ভ্যারিয়েন্টের জন্য একটি। **কোনো `default` ব্রাঞ্চ নেই**) |

### Position

| ফিল্ড | টাইপ | বিবরণ |
|---|---|---|
| `x` | float | ক্যানভাসে অনুভূমিক স্থানাঙ্ক। |
| `y` | float | ক্যানভাসে উল্লম্ব স্থানাঙ্ক। |

## Point types and point_data

`point_data` একটি ওয়ান-অফ: এটি ঠিক একটি নেস্টেড অবজেক্ট বহন করে যার কী পয়েন্টের `point_type` দ্বারা নির্ধারিত হয়।

| `point_type` | `point_data` key | উদ্দেশ্য |
|---|---|---|
| `POINT_TYPE_START_BY_SEGMENT` | `start_by_segment` | এন্ট্রি: একটি সেগমেন্টের সাথে মিলে যাওয়া ব্যবহারকারীরা। |
| `POINT_TYPE_EVENT` | `message_bus` | এন্ট্রি: একটি ইভেন্ট ট্রিগার করা ব্যবহারকারীরা। |
| `POINT_TYPE_START_BY_API` | `start_by_api` | এন্ট্রি: [Start by API](/bn/developer/api-reference/customer-journey-api/start-by-api/) কলের মাধ্যমে ইনজেক্ট করা ব্যবহারকারীরা। |
| `POINT_TYPE_WAIT` | `delay` | একটি নির্দিষ্ট বা ডাইনামিক বিরতির জন্য অপেক্ষা করুন। |
| `POINT_TYPE_WAIT_EVENT` | `wait_event` | একটি ইভেন্ট ঘটা পর্যন্ত অপেক্ষা করুন। |
| `POINT_TYPE_SEND_PUSH` | `send_push` | একটি পুশ নোটিফিকেশন পাঠান। |
| `POINT_TYPE_SEND_EMAIL` | `send_email` | একটি ইমেল পাঠান। |
| `POINT_TYPE_SEND_SMS` | `send_sms` | একটি SMS পাঠান। |
| `POINT_TYPE_SEND_WHATSAPP` | `send_whatsapp` | একটি WhatsApp বার্তা পাঠান। |
| `POINT_TYPE_SEND_TELEGRAM` | `send_telegram` | একটি Telegram বার্তা পাঠান। |
| `POINT_TYPE_SEND_KAKAO` | `send_kakao` | একটি Kakao বার্তা পাঠান। |
| `POINT_TYPE_SEND_LINE` | `send_line` | একটি LINE বার্তা পাঠান। |
| `POINT_TYPE_SEND_DATA` | `send_data` | একটি সাইলেন্ট ডেটা বার্তা পাঠান। |
| `POINT_TYPE_INAPP` | `inapp` | একটি ইন-অ্যাপ বার্তা দেখান। |
| `POINT_TYPE_BOOLEAN_SPLITTER` | `boolean_splitter` | একটি শর্ত (সেগমেন্ট, ট্যাগ, বা ইভেন্ট) দ্বারা ব্যবহারকারীদের বিভক্ত করুন। |
| `POINT_TYPE_AB_SPLITTER` | `ab_splitter` | ব্যবহারকারীদের A/B গ্রুপে বিভক্ত করুন। |
| `POINT_TYPE_FILTER` | `filter` | শুধুমাত্র একটি ফিল্টারের সাথে মিলে যাওয়া ব্যবহারকারীদের চালিয়ে যাওয়ার অনুমতি দিন। |
| `POINT_TYPE_SET_TAGS` | `set_tags` | ব্যবহারকারীর ট্যাগ আপডেট করুন। |
| `POINT_TYPE_WEBHOOK` | `web_hook` | একটি আউটবাউন্ড HTTP অনুরোধ পাঠান। |
| `POINT_TYPE_GOAL_EVENT` | `goal_event` | একটি রূপান্তর লক্ষ্য ট্র্যাক করুন। |
| `POINT_TYPE_AUDIENCE_SYNC` | `audience_sync` | ব্যবহারকারীদের একটি বাহ্যিক অডিয়েন্সের সাথে সিঙ্ক করুন। |
| `POINT_TYPE_EXIT` | `terminator` | জার্নি থেকে প্রস্থান করুন। |

<Aside type="note">
প্রতি-টাইপ `point_data` পেলোডগুলি [পয়েন্ট রেফারেন্স](/bn/developer/api-reference/customer-journey-api/point-reference/)-এ নথিভুক্ত করা আছে। এন্ট্রি, টাইমিং, স্প্লিটিং, এবং অ্যাকশন পয়েন্টগুলি সেখানে সম্পূর্ণরূপে কভার করা হয়েছে। মেসেজিং পয়েন্টগুলি এনভেলপ স্তরে প্রাসঙ্গিক চ্যানেল ডক্সের লিঙ্ক সহ কভার করা হয়েছে।
</Aside>

### Example point

একটি "সেট ট্যাগ" পয়েন্ট যার একটি মাত্র ডাউনস্ট্রিম সংযোগ আছে:

```json
{
  "uuid": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
  "title": "Tag as engaged",
  "point_type": "POINT_TYPE_SET_TAGS",
  "position": { "x": 480, "y": 120 },
  "outputs": [
    {
      "identity": { "key": "default", "order": 0 },
      "info": { "title": "", "next_point_uuid": "ffffffff-1111-2222-3333-444444444444" }
    }
  ],
  "point_data": {
    "set_tags": {
      "application_code": "XXXXX-XXXXX",
      "tags": [ { "name": "engaged", "value": "true" } ]
    }
  }
}
```

## JourneyComment

| ফিল্ড | টাইপ | বিবরণ |
|---|---|---|
| `id` | string | কমেন্ট UUID। |
| `message` | string | কমেন্টের টেক্সট। |
| `position` | [`Position`](#position) | ক্যানভাসের স্থানাঙ্ক। |
| `index` | int | প্রদর্শনের ক্রম। |
| `created_at` | string | তৈরির টাইমস্ট্যাম্প (ISO 8601)। |
| `deleted` | bool | কমেন্টটি মুছে ফেলা হয়েছে কিনা। |

## Enums

### JourneyStatus enum

`STATUS_DRAFT`, `STATUS_RUNNING`, `STATUS_FINISHED`, `STATUS_ARCHIVED`, `STATUS_PAUSED`, `STATUS_UNKNOWN`।

### CampaignType enum

- `TriggerBased`: ব্যবহারকারীরা একটি ইভেন্টের উপর ভিত্তি করে প্রবেশ করে।
- `AudienceBased`: ব্যবহারকারীরা একটি সেগমেন্ট থেকে প্রবেশ করে।
- `APIBased`: ব্যবহারকারীরা Start by API কলের মাধ্যমে প্রবেশ করে।
- `Mixed`: একাধিক ধরনের এন্ট্রি।
- `Unknown`: এন্ট্রির ধরন নির্ধারিত নয়।

### PointType enum

সম্পূর্ণ তালিকা এবং প্রতিটি `point_data` কী কিসের সাথে ম্যাপ করে তা জানতে উপরের [পয়েন্টের প্রকার](#point-types-and-point_data) টেবিলটি দেখুন।

### UserIDTrackChangePolicy enum

জার্নির মাঝপথে কোনো ব্যবহারকারীর [ইউজার আইডি](/bn/developer/api-reference/api-identifiers/#user-id) পরিবর্তন হলে কী হবে তা নিয়ন্ত্রণ করে:

- `DEFAULT`: ডিফল্ট আচরণ।
- `TRACK`: নতুন আইডির অধীনে ব্যবহারকারীকে ট্র্যাক করতে থাকুন।
- `DROP`: আইডি পরিবর্তন হলে ব্যবহারকারীকে জার্নি থেকে সরিয়ে দিন।

## সম্পর্কিত

<CardGrid>
  <LinkCard title="পয়েন্ট রেফারেন্স" href="/developer/api-reference/customer-journey-api/point-reference/" />
  <LinkCard title="তৈরি এবং আপডেট" href="/developer/api-reference/customer-journey-api/create-update/" />
  <LinkCard title="লাইফসাইকেল" href="/developer/api-reference/customer-journey-api/lifecycle/" />
</CardGrid>