Skip to content

Commit

Permalink
Docs for Conversation Send Message and New Actions (#78)
Browse files Browse the repository at this point in the history
* Remove redundant row in create user verification request input table

* Fix Oauth scope for POST_ADDON_CREATE

* Add docs for conversation send message and actions
  • Loading branch information
arashyousefi authored Oct 13, 2024
1 parent 7beac52 commit e5e745b
Show file tree
Hide file tree
Showing 4 changed files with 183 additions and 36 deletions.
125 changes: 93 additions & 32 deletions chat/send_message.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
به علاوه در قسمت بالای پیام، عنوان برنامهٔ مورد نظر نشان داده می‌شود.

| ![نمایی از یک پیام ارسال شده توسط بات](/img/bot-message.png) |
| :----------------------------------------------------------: |
|:------------------------------------------------------------:|
| <sub dir="rtl">نمایی از یک پیام ارسال شده توسط بات</sub> |

> ⭐️ بهتر است پیامی که در چت ارسال می‌کنید برای هر دو طرف معنادار باشد و اطلاعات مفید در راستای خدمت دریافت شده ارائه دهد.
Expand All @@ -17,8 +17,8 @@
برای اینکه بتوانید در یک چت پیامی ارسال کنید، نیاز است تا اجازهٔ دسترسی در دو نقطه فراهم شده‌باشد:\
۱. برنامهٔ شما به صورت کلی دسترسی لازم را در [پنل کنار دیوار][پنل کنار] گرفته‌باشد.\
۲. [از کاربر اجازه گرفته‌باشید][احراز باز] و `access_token` ارسالی در درخواستتان این اجازه را داشته‌باشد:
- SCOPE: CHAT_MESSAGE_SEND
- IDENTIFIER: BASE64(user_id:post_token:peer_id)
- SCOPE: CONVERSATION_SEND_MESSAGE
- IDENTIFIER: CONVERSATION_ID

دو نوع دسترسی برای ارسال پیام در چت وجود دارد که برای هر کدام می‌توان جداگانه از کاربر اجازه گرفت. ارسال پیام در **یک چت** و ارسال پیام در **چت‌های یک آگهی**
جزییات و پارامترهای لازم برای درخواست دسترسی و ایجاد `access_token` را در [صفحهٔ احراز باز][احراز باز] ببینید.
Expand All @@ -30,42 +30,102 @@
می‌توانید قسمت‌های فارسی را با مقادیر خودتان جایگزین کنید:

```http request
POST https://api.divar.ir/v2/open-platform/chat/conversation
POST https://api.divar.ir/v2/open-platform/conversations/{{conversation_id}}/messages
Content-Type: application/json
x-api-key: {{apikey}}
x-access-token: {{access_token}}
{
"user_id": "شناسهٔ کاربر فرستنده که می خواهیم پیامی از سمت او وارد چت کنیم",
"post_token": "توکن آگهی مورد چت",
"peer_id": "شناسهٔ کاربر گیرنده در چت",
"type": "TEXT",
"message": "متن پیام",
"sender_btn": {
"action": "LINK",
"data": {
"icon_name": "نام آیکون مورد نظر برای این دکمه",
"extra_data": {
"your_custom_key":"اطلاعاتی که در ادامه هنگام کلیک روی دکمه نیاز داریم"
"type": "TEXT",
"message": "متن پیام",
"sender_buttons": {
"rows": [
{
"buttons": [
{
"action": {
"open_direct_link": "آدرس مورد نظر برای باز شدن بعد از کلیک"
},
"caption": "متن دکمهٔ زیر پیام برای طرف فرستنده"
}
این دکمه فقط برای کاربر فرستنده نمایش داده می‌شود
},
"receiver_btn": {
"action": "LINK",
"data": {
"icon_name": "نام آیکون مورد نظر برای این دکمه",
"extra_data": {
"your_custom_key":"اطلاعاتی که در ادامه هنگام کلیک روی دکمه نیاز داریم"
"icon_name": "نام آیکون",
"caption": "متن دکمه"
},
{
"action": {
"open_server_link": {
"data": {
"my_key_1": "value",
"my_key_2": "value2"
}
}
},
"caption": "متن دکمهٔ زیر پیام برای طرف گیرنده"
}
این دکمه فقط برای کاربر فرستنده نمایش داده می‌شود
}
"icon_name": "نام آیکون",
"caption": "متن دکمه"
}
]
}
]
},
"receiver_buttons": {
"rows": [
{
"buttons": [
{
"action": {
"open_direct_link": "آدرس مورد نظر برای باز شدن بعد از کلیک"
},
"icon_name": "نام آیکون",
"caption": "متن دکمه"
},
{
"action": {
"open_server_link": {
"data": {
"my_key_1": "value",
"my_key_2": "value2"
}
}
},
"icon_name": "نام آیکون",
"caption": "متن دکمه"
}
]
}
]
}
}
```

### درخواست

| Field Name | Field Type | Description |
|------------------|---------------------------|--------------------------------------------------|
| type | String | نوع محتوا را مشخص می‌کند، در حال حاضر فقط "TEXT" |
| message | String | محتوای متن پیام |
| sender_buttons | [ButtonGrid](#ButtonGrid) | شامل پیکربندی دکمه‌ها برای فرستنده |
| receiver_buttons | [ButtonGrid](#ButtonGrid) | شامل پیکربندی دکمه‌ها برای گیرنده |

### ButtonGrid

| Field Name | Field Type | Description |
|------------|--------------------------------|-----------------------------------------|
| rows | Array[[ButtonRow](#ButtonRow)] | آرایه‌ای از ردیف دکمه‌ها. حداکثر ۳ ردیف |


### ButtonRow

| Field Name | Field Type | Description |
|------------|--------------------------|-----------------------------------------------|
| buttons | Array[[Button](#Button)] | آرایه‌ای از دکمه‌ها. حداکثر ۳ دکمه در هر ردیف |


### Button

| Field Name | Field Type | Description |
|------------|----------------------------|-------------------------------------------------|
| action | [Action](/widgets/actions) | اکشنی که پس از کلیک کاربر بر روی دکمه رخ می‌دهد |
| icon_name | String | نام آیکون نمایش داده‌شده بر روی دکمه |
| caption | String | متنی که بر روی دکمه نمایش داده می‌شود |

در درخواست بالا، کاربران با [زدن روی دکمهٔ پیام][بازشدن برنامه]، در قالب webview یا pop-up به برنامهٔ شما وارد می‌شوند، در صورتی که نیاز به باز کردن صفحهٔ خود به صورت مستقیم در مرورگر دارید، می‌توانید ویژگی‌های دکمه را به شکل زیر تغییر دهید.

```
Expand All @@ -84,7 +144,7 @@ x-access-token: {{access_token}}
### خطاها

ممکن است در پاسخ این درخواست خطا به صورت زیر دریافت شود:
```javascript
```HTTP
HTTP/1.1 412
{
"code": 9,
Expand Down Expand Up @@ -112,7 +172,7 @@ HTTP/1.1 412
```JSON
{
"extra_data": {
"provider_data": {"your_custom_key":"اطلاعاتی که در درخواست ارسال پیام در مرحلهٔ قبل فرستادید"},
"provider_data": {"your_custom_key":"اطلاعاتی که در درخواست ارسال پیام در مرحلهٔ قبل فرستادید"}
},
"callback_url": "آدرسی که کاربر پس از انجام فرایند در سرویس شما باید به آن هدایت شود",
"post_token": "توکن آگهی",
Expand All @@ -124,7 +184,7 @@ HTTP/1.1 412
"demand": {
"id": "شناسهٔ کاربر خریدار"
},
conversation_id: "شناسه مکالمه"
"conversation_id": "شناسه مکالمه"
}

```
Expand All @@ -148,6 +208,7 @@ HTTP/1.1 412
[ارسال پیام در چت‌های آگهی]: #ارسال-پیام-در-چتهای-یک-آگهی
[بازشدن برنامه]: #کلیک-کاربر-روی-دکمهٔ-درج-شده-زیر-پیام


<br><br>

<div align="center">
Expand Down
11 changes: 7 additions & 4 deletions widgets/actions/ReadMe.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
# اکشن های ویجت ها
# اکشنهای ویجتها

برخی از ویجت ها علاوه بر نمایش اطلاعات د رهمان ویجت ، میتوانند با کلیک روی قسمتی از ویجت ، اکشنی انجام دهند ، برای مثال ، کاربر را به وب سایت دیگری ریدایرکت کنند.
برخی از ویجت ها علاوه بر نمایش اطلاعات در همان
ویجت، می‌توانند با کلیک روی قسمتی از ویجت، اکشنی انجام دهند،
برای مثال، کاربر را به وب سایت دیگری ریدایرکت کنند.

برخی از ویجت ها این قابلیت را دارند و برای مشخص کردن `action` برای ویجت ، یک فیلد `json` با نام `action` میگیرند.
برخی از ویجتها این قابلیت را دارند و برای مشخص کردن `action` برای ویجت ، یک فیلد `json` با نام `action` میگیرند.

در حال حاضر در افزونه های کنار دیوار ، دو اکشن زیر ساپورت میشوند:

- [LoadWebViewPage](./load_web_view_page.md)
- [OpenDirectLink](./open_direct_link.md)
- [OpenServerLink](./open_server_link.md)
13 changes: 13 additions & 0 deletions widgets/actions/open_direct_link.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# Open Direct Link
این اکشن به صورت یک فیلد در کنار دیتای ویجت قرار می‌گیرد:
```json
{
"action": {
"open_direct_link": "https://provider.com/redirect-page?id=12345"
}
}
```
در صورتی که کاربر از کلاینت وب استفاده می‌کند، فرد به تب
دیگری با آدرس مشخص شده ریدایرکت می‌شود و
اگر کاربر از کلاینت اندروید و iOS استفاده کند،
داخل اپلیکیشن یک صفحه‌ی وب با آدرس ذکر شده باز می‌شود.
70 changes: 70 additions & 0 deletions widgets/actions/open_server_link.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
# Open Server Link
این اکشن به صورت یک فیلد در کنار دیتای ویجت قرار می‌گیرد:
```json
{
"action": {
"open_server_link": {
"data": {
"your_key_1": "your value",
"your_key_2": "your value"
}
}
}
}
```

پس از کلیک کاربر بر روی ویجتی که این اکشن را داشته باشد، ابتدا یک درخواست از سمت
دیوار به برنامه‌ی شما برای دریافت آدرس هدایت کاربر ارسال می‌شود.
شما در جواب این درخواست باید آدرسی که کاربر باید به آن هدایت شود را برگردانید.

درخواست دریافت آدرس هدایت کاربر به صورت زیر است:
```http request
POST {{YOUR_INIT_URL}}
Content-Type: application/json
Authorization: {{YOUR_DIVAR_AUTH_HEADER}}
API_VERSION: 2
{
"return_url": "https://divar.ir/"
"source": "POST_ADDON",
"post_token": "wZC44q5D",
"conversation_id": "6b3d5cf7-9291-4fa9-892a-9d07e300daea",
"user_side": "Supply",
"extra_data": {
"your_key_1": "your value",
"your_key_2": "your value"
}
}
```

| نام فیلد | نوع | حداکثر طول | توضیحات |
|:----------------|:-----------------:|:----------:|-----------------------------------------------------------------:|
| return_url | String | 2048 | آدرسی که کاربر پس از اتمام فراید باید به آن بازگردد |
| source | String | 20 | محلی که کاربر از آن به سمت برنامه شما هدایت شده است |
| post_token | String (Nullable) | 10 | توکن پست (در صورت وجود) |
| conversation_id | String (Nullable) | 64 | شناسه مرتبط با چت (در صورت وجود) |
| user_side | String (Nullable) | 50 | نوع کاربر (خریدار یا فروشنده) |
| extra_data | JSON | N/A | داده‌های اضافی که از سمت برنامه‌ی شما در کلید data قرار داده شده |


انتظار می‌رود که در پاسخ به این درخواست، پاسخ موفق با کد وضعیت ۲۰۰ برگردانده شود
و بدنه‌ی پاسخ به صورت زیر باشد:
```json
{
"url": "https://your-doman.com/landings/6b3d5cf7-9291-4fa9-892a-9d07e300daea"
}
```


### مقادیر ممکن برای فیلد source

| Source | فیلد‌های موجود | توضیحات |
|:----------------------|:---------------------------------------------:|--------------------------------------------:|
| `POST_ADODN` | `post_token`, `conversation_id`, `user_side` | کاربر بر روی یک افزونه‌ی آگهی کلیک کرده است |
| `CHAT_MESSAGE_ACTION` | `post_token`, `conversation_id`, `user_side` | کاربر بر روی یک دکمه در چت کلیک کرده است |

در صورتی که کاربر از کلاینت وب استفاده می‌کند، فرد به تب
دیگری با آدرس مشخص شده ریدایرکت می‌شود و
اگر کاربر از کلاینت اندروید و iOS استفاده کند،
داخل اپلیکیشن یک صفحه‌ی وب با آدرس ذکر شده باز می‌شود.

0 comments on commit e5e745b

Please sign in to comment.