> ## Documentation Index
> Fetch the complete documentation index at: https://docs.so-me.studio/llms.txt
> Use this file to discover all available pages before exploring further.

# গ্রাহকের অ্যাকাউন্ট সংযুক্ত করুন

> আলাদা আলাদা এন্ড ইউজার তৈরি করুন এবং হোস্টেড OAuth-এর মাধ্যমে তাদের সোশ্যাল অ্যাকাউন্ট সংযুক্ত করুন

আপনার অ্যাপ্লিকেশনের প্রতিটি গ্রাহক Social media studio-র একটি আলাদা এন্ড ইউজারের সাথে যুক্ত থাকে। সোশ্যাল
সংযোগ ও পোস্ট ওই এন্ড ইউজারের আওতায় থাকে, আর আপনার পার্টনার কী পুরো ডেভেলপার প্রজেক্টের জন্য
প্রযোজ্য।

## এন্ড ইউজার আপসার্ট করুন

`externalId` হিসেবে আপনার নিজের ডাটাবেসের একটি অপরিবর্তনীয় শনাক্তকারী ব্যবহার করুন। একই মান দিয়ে
আবার `upsert` কল করলে গ্রাহকের তথ্য আপডেট হয়, এবং আগে নিষ্ক্রিয় করা থাকলে তাকে আবার সক্রিয় করা হয়।

```ts theme={null}
const endUser = await soMe.endUsers.upsert({
  externalId: "customer_123",
  displayName: "Acme Ltd",
  metadata: {
    plan: "pro",
    region: "eu",
  },
});
```

`endUser.id` আপনার গ্রাহকের রেকর্ডের সাথে সংরক্ষণ করুন। SDK-র মেথডগুলো `externalId` নয়, Social media studio-র এই
ID ব্যবহার করে।

```ts theme={null}
const customers = await soMe.endUsers.list();
const customer = await soMe.endUsers.get(endUser.id);
```

কোনো গ্রাহককে এমবেডেড প্ল্যাটফর্ম ব্যবহার করা থেকে বিরত রাখতে:

```ts theme={null}
await soMe.endUsers.disable(endUser.id);
```

নিষ্ক্রিয় করলে গ্রাহকের আলাদা ওয়ার্কস্পেস নিষ্ক্রিয় হয়ে যায়। পরে একই `externalId` দিয়ে `upsert` করলে সেটি
আবার সক্রিয় হয়।

## কানেক্ট সেশন তৈরি করুন

```ts theme={null}
const session = await soMe.connectSessions.create({
  endUserId: endUser.id,
  platform: "THREADS",
  returnUrl: "https://app.example.com/settings/social",
});
```

কানেক্ট সেশনের মেয়াদ ১০ মিনিট, এবং এটি শুধু নির্দিষ্ট এন্ড ইউজারের জন্যই ব্যবহার করা যায়। ফেরত পাওয়া
`connectUrl`-এ গ্রাহককে রিডাইরেক্ট করুন:

```ts theme={null}
return Response.redirect(session.connectUrl!);
```

> [!WARNING]
>
> `returnUrl`-এর origin আপনার পার্টনার প্রজেক্টে নিবন্ধিত origin-এর সাথে স্কিম, হোস্টনেম ও পোর্টসহ হুবহু মিলতে
> হবে। পাথ ও কোয়েরি প্যারামিটার ভিন্ন হতে পারে। রিটার্ন URL-এ ক্রেডেনশিয়াল থাকলে তা প্রত্যাখ্যান করা হয়।

## সম্পন্ন হওয়ার পর কী করবেন

হোস্টেড ফ্লো চূড়ান্ত অবস্থায় পৌঁছালে গ্রাহক একটি রিটার্ন বোতাম দেখতে পান। গন্তব্য URL নিচের কোয়েরি
প্যারামিটারগুলো পায়:

| প্যারামিটার | মান |
| - | - |
| `social_connect` | `success` অথবা `failed` |
| `end_user_id` | Social media studio-র এন্ড ইউজার ID |
| `connection_id` | সফল হলে নতুন সংযোগের ID |

ব্রাউজারের প্যারামিটারকে শুধু একটি বিজ্ঞপ্তি হিসেবে দেখুন, সাফল্যের প্রমাণ হিসেবে নয়। আপনি যে কানেক্ট-সেশন ID
তৈরি করেছিলেন তা দিয়ে আপনার ব্যাকএন্ড থেকে ফলাফল যাচাই করুন:

```ts theme={null}
const result = await soMe.connectSessions.get(session.id);

if (result.status === "completed" && result.connectionId) {
  // Persist result.connectionId for this customer.
}
```

পপআপে ব্যবহার করা হলে হোস্টেড পেজ তার opener-কে একটি `postMessage`-ও পাঠায়:

```ts theme={null}
window.addEventListener("message", (event) => {
  if (event.origin !== "https://api.so-me.studio") return;
  if (event.data?.type !== "some.social_connect.completed") return;

  // Ask your backend to verify the connect session.
});
```

## অ্যাকাউন্ট তালিকাভুক্ত ও বিচ্ছিন্ন করুন

```ts theme={null}
const connections = await soMe.connections.list(endUser.id);

await soMe.connections.disconnect(endUser.id, connections[0].id);
```

সংযোগটির মালিক যে এন্ড ইউজার, সবসময় তার ID পাঠান। অন্য গ্রাহকের সংযোগ দেখার বা বিচ্ছিন্ন করার চেষ্টা Social media studio
প্রত্যাখ্যান করে।

## সেশনের অবস্থা

| স্ট্যাটাস | অর্থ |
| - | - |
| `created` | গ্রাহকের খোলার জন্য প্রস্তুত |
| `started` | হোস্টেড OAuth ফ্লো শুরু হয়েছে |
| `completed` | অ্যাকাউন্ট সংযুক্ত হয়েছে; `connectionId` পাওয়া যাচ্ছে |
| `failed` | অনুমোদন প্রত্যাখ্যাত হয়েছে বা সম্পন্ন করা যায়নি |
| `expired` | ১০ মিনিটের সেশন-সময় শেষ হয়ে গেছে |

`failed` বা `expired` হলে নতুন সেশন তৈরি করুন; চূড়ান্ত অবস্থায় পৌঁছানো সেশন আবার চালু করা যায় না।


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.