late-sdk 0.0.698 → 0.0.700
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/docs/CommentAutomationsApi.md +1 -1
- data/docs/ConnectApi.md +3 -3
- data/docs/CreateCommentAutomation200ResponseAutomation.md +2 -0
- data/docs/CreateCommentAutomationRequest.md +2 -0
- data/docs/GetCommentAutomation200ResponseAutomation.md +2 -0
- data/docs/GetCommentAutomation200ResponseLogsInner.md +2 -0
- data/docs/ListCommentAutomations200ResponseAutomationsInner.md +2 -0
- data/docs/UpdateCommentAutomation200ResponseAutomation.md +2 -0
- data/docs/UpdateCommentAutomationRequest.md +2 -0
- data/lib/zernio-sdk/api/comment_automations_api.rb +2 -2
- data/lib/zernio-sdk/api/connect_api.rb +4 -4
- data/lib/zernio-sdk/models/create_comment_automation200_response_automation.rb +11 -1
- data/lib/zernio-sdk/models/create_comment_automation_request.rb +13 -1
- data/lib/zernio-sdk/models/get_comment_automation200_response_automation.rb +11 -1
- data/lib/zernio-sdk/models/get_comment_automation200_response_logs_inner.rb +23 -1
- data/lib/zernio-sdk/models/list_comment_automations200_response_automations_inner.rb +11 -1
- data/lib/zernio-sdk/models/update_comment_automation200_response_automation.rb +11 -1
- data/lib/zernio-sdk/models/update_comment_automation_request.rb +11 -1
- data/lib/zernio-sdk/version.rb +1 -1
- data/openapi.yaml +16 -2
- data/spec/api/comment_automations_api_spec.rb +1 -1
- data/spec/api/connect_api_spec.rb +2 -2
- data/spec/models/create_comment_automation200_response_automation_spec.rb +6 -0
- data/spec/models/create_comment_automation_request_spec.rb +6 -0
- data/spec/models/get_comment_automation200_response_automation_spec.rb +6 -0
- data/spec/models/get_comment_automation200_response_logs_inner_spec.rb +10 -0
- data/spec/models/list_comment_automations200_response_automations_inner_spec.rb +6 -0
- data/spec/models/update_comment_automation200_response_automation_spec.rb +6 -0
- data/spec/models/update_comment_automation_request_spec.rb +6 -0
- data/zernio-sdk-0.0.700.gem +0 -0
- metadata +2 -2
- data/zernio-sdk-0.0.698.gem +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: eb848997fd20b7c6c8c0b434bbbca6c9d76f3c978f178ce1c05f42c75ec75260
|
|
4
|
+
data.tar.gz: 1daf1b78ae8d29ce75780d20c5ed5cb7424a3fe000ed9debff7454d32861049f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 1d5c204fcfab4aac709dd636224fd82dce7a86de9b42e0f1b4696849d6d2c343d5f241e43be313b78219dd7fd31bfeeedb814d8614ccd61bc967d615513fbad4
|
|
7
|
+
data.tar.gz: cd1aef01962db5814472d904fdebc71c0da59cd36ddb5f22ef1deef0e82e922eeb044f7a78839c36d13bfdf9e7b5a0f1a832258c354f1aeba439308df2ca03c7
|
|
@@ -18,7 +18,7 @@ All URIs are relative to *https://zernio.com/api*
|
|
|
18
18
|
|
|
19
19
|
Create comment-to-DM automation
|
|
20
20
|
|
|
21
|
-
Create a keyword-triggered DM automation on an Instagram or Facebook account. When someone comments a matching keyword (or, with `trigger: story_reply`, replies to your Instagram story with one), they automatically receive a DM. Triggers (`trigger`): * `comment` (default): fires on keyword comments on a post or reel. * `story_reply`: fires when someone replies to your Instagram story with a keyword, and answers them with a DM. Set `platformPostId` to a story media id to scope to one story, or omit it to match replies to any story. Targeting (comment trigger): * Per-post: set `platformPostId` to scope to one specific post (only one active per-post automation is allowed per post). * Account-wide (\"any post\"): omit `platformPostId` (and `postId`). The automation evaluates every comment on every post on the account. You can stack unlimited account-wide automations, each with its own keyword set, and they all run independently. Per-post automations take priority on their post. Audience (`audience`, Instagram only): restrict the automation to followers or non-followers, and/or to accounts above a follower count. Instagram only reveals the follow relationship for people who have messaged the account, so `audience.whenUnknown` decides what happens for everyone else - including `verify`, which sends a one-tap confirmation DM (`followGate`) and then delivers the real DM automatically. People we already know follow you skip the tap entirely. Links in the DM's buttons can be click-tracked (`linkTracking`, on by default) and clickers optionally tagged (`clickTag`) for segmentation. Stats returned include delivered, read, and link clicks.
|
|
21
|
+
Create a keyword-triggered DM automation on an Instagram or Facebook account. When someone comments a matching keyword (or, with `trigger: story_reply`, replies to your Instagram story with one), they automatically receive a DM. Triggers (`trigger`): * `comment` (default): fires on keyword comments on a post or reel. * `story_reply`: fires when someone replies to your Instagram story with a keyword, and answers them with a DM. Set `platformPostId` to a story media id to scope to one story, or omit it to match replies to any story. Targeting (comment trigger): * Per-post: set `platformPostId` to scope to one specific post (only one active per-post automation is allowed per post). * Account-wide (\"any post\"): omit `platformPostId` (and `postId`). The automation evaluates every comment on every post on the account. You can stack unlimited account-wide automations, each with its own keyword set, and they all run independently. Per-post automations take priority on their post. Audience (`audience`, Instagram only): restrict the automation to followers or non-followers, and/or to accounts above a follower count. Instagram only reveals the follow relationship for people who have messaged the account, so `audience.whenUnknown` decides what happens for everyone else - including `verify`, which sends a one-tap confirmation DM (`followGate`) and then delivers the real DM automatically. People we already know follow you skip the tap entirely. Set `alsoMatchInDms: true` on a `comment` automation to also answer people who send a keyword as a direct message instead of commenting it. One automation then covers both doors, and each door is deduplicated separately (someone who already got the DM from their comment still gets it if they later DM the keyword). Requires at least one keyword. Links in the DM's buttons can be click-tracked (`linkTracking`, on by default) and clickers optionally tagged (`clickTag`) for segmentation. Stats returned include delivered, read, and link clicks.
|
|
22
22
|
|
|
23
23
|
### Examples
|
|
24
24
|
|
data/docs/ConnectApi.md
CHANGED
|
@@ -719,7 +719,7 @@ profile_id = 'profile_id_example' # String | Your Zernio profile ID (get from /v
|
|
|
719
719
|
opts = {
|
|
720
720
|
redirect_url: 'redirect_url_example', # String | Your custom redirect URL after connection completes. Accepts an http(s) URL, a custom app scheme for mobile deeplinks (e.g. myapp://callback), or a relative path. Result params are appended with the URL API, so an existing query string is preserved. Standard mode appends connected={platform}&profileId=X&accountId=Y&username=Z. Headless mode appends OAuth data params for platforms requiring selection (e.g. LinkedIn orgs, Facebook pages). If no selection is needed, the account is created directly and the redirect includes accountId.
|
|
721
721
|
headless: true, # Boolean | When true, the user is redirected to your redirect_url with raw OAuth data (code, state) instead of Zernio's default account selection UI. Use this to build a custom connect experience.
|
|
722
|
-
login_method: 'instagram_login' # String | Instagram only. Which of the two Instagram connection methods to use. Ignored for every other platform. `instagram_login` (the default, and what you get if you omit this): the Instagram Login dialog. The user authorizes their Instagram professional account directly, no Facebook Page required. `facebook_login`: the Facebook Login dialog, i.e. \"Instagram API with Facebook Login\". The user authorizes a Facebook Page that has a linked Instagram professional account, and every API call for that account then runs through the Page. Use this when the customer manages Instagram through a Page and expects the Facebook consent screen. Because the user has to pick which Page to connect, the callback continues at the account-selection step, `/v1/connect/instagram/select-account`. `facebook_login`
|
|
722
|
+
login_method: 'instagram_login' # String | Instagram only. Which of the two Instagram connection methods to use. Ignored for every other platform. `instagram_login` (the default, and what you get if you omit this): the Instagram Login dialog. The user authorizes their Instagram professional account directly, no Facebook Page required. `facebook_login`: the Facebook Login dialog, i.e. \"Instagram API with Facebook Login\". The user authorizes a Facebook Page that has a linked Instagram professional account, and every API call for that account then runs through the Page. Use this when the customer manages Instagram through a Page and expects the Facebook consent screen. Because the user has to pick which Page to connect, the callback continues at the account-selection step, `/v1/connect/instagram/select-account`. `facebook_login` supports `headless=true` like the other selection platforms: the callback redirects to your `redirect_url` with `profileId`, `tempToken`, `platform=instagram`, `step=select_account` and `connect_token`, which you pass into the select-account endpoints to finish. The default `instagram_login` has no selection step, so it connects the account directly.
|
|
723
723
|
}
|
|
724
724
|
|
|
725
725
|
begin
|
|
@@ -757,7 +757,7 @@ end
|
|
|
757
757
|
| **profile_id** | **String** | Your Zernio profile ID (get from /v1/profiles). For WhatsApp, a Zernio-provisioned number can only be connected on the profile it was provisioned to; connecting from any other profile is rejected with a 409. | |
|
|
758
758
|
| **redirect_url** | **String** | Your custom redirect URL after connection completes. Accepts an http(s) URL, a custom app scheme for mobile deeplinks (e.g. myapp://callback), or a relative path. Result params are appended with the URL API, so an existing query string is preserved. Standard mode appends connected={platform}&profileId=X&accountId=Y&username=Z. Headless mode appends OAuth data params for platforms requiring selection (e.g. LinkedIn orgs, Facebook pages). If no selection is needed, the account is created directly and the redirect includes accountId. | [optional] |
|
|
759
759
|
| **headless** | **Boolean** | When true, the user is redirected to your redirect_url with raw OAuth data (code, state) instead of Zernio's default account selection UI. Use this to build a custom connect experience. | [optional][default to false] |
|
|
760
|
-
| **login_method** | **String** | Instagram only. Which of the two Instagram connection methods to use. Ignored for every other platform. `instagram_login` (the default, and what you get if you omit this): the Instagram Login dialog. The user authorizes their Instagram professional account directly, no Facebook Page required. `facebook_login`: the Facebook Login dialog, i.e. \"Instagram API with Facebook Login\". The user authorizes a Facebook Page that has a linked Instagram professional account, and every API call for that account then runs through the Page. Use this when the customer manages Instagram through a Page and expects the Facebook consent screen. Because the user has to pick which Page to connect, the callback continues at the account-selection step, `/v1/connect/instagram/select-account`. `facebook_login`
|
|
760
|
+
| **login_method** | **String** | Instagram only. Which of the two Instagram connection methods to use. Ignored for every other platform. `instagram_login` (the default, and what you get if you omit this): the Instagram Login dialog. The user authorizes their Instagram professional account directly, no Facebook Page required. `facebook_login`: the Facebook Login dialog, i.e. \"Instagram API with Facebook Login\". The user authorizes a Facebook Page that has a linked Instagram professional account, and every API call for that account then runs through the Page. Use this when the customer manages Instagram through a Page and expects the Facebook consent screen. Because the user has to pick which Page to connect, the callback continues at the account-selection step, `/v1/connect/instagram/select-account`. `facebook_login` supports `headless=true` like the other selection platforms: the callback redirects to your `redirect_url` with `profileId`, `tempToken`, `platform=instagram`, `step=select_account` and `connect_token`, which you pass into the select-account endpoints to finish. The default `instagram_login` has no selection step, so it connects the account directly. | [optional][default to 'instagram_login'] |
|
|
761
761
|
|
|
762
762
|
### Return type
|
|
763
763
|
|
|
@@ -1784,7 +1784,7 @@ end
|
|
|
1784
1784
|
|
|
1785
1785
|
List Pages with a linked Instagram account
|
|
1786
1786
|
|
|
1787
|
-
Completes the `loginMethod=facebook_login` Instagram flow, i.e. \"Instagram API with Facebook Login\". After the user authorizes on Facebook, extract `tempToken` from the redirect params and pass it here to list the Facebook Pages they manage. Only Pages that have a linked Instagram professional account are returned, so an empty array means the user has no eligible Page. Use the X-Connect-Token header if connecting via API key. Not used by the default `instagram_login` flow, which creates the account without a selection step.
|
|
1787
|
+
Completes the `loginMethod=facebook_login` Instagram flow, i.e. \"Instagram API with Facebook Login\". After the user authorizes on Facebook, extract `tempToken` from the redirect params (headless mode adds `step=select_account`) and pass it here to list the Facebook Pages they manage. Only Pages that have a linked Instagram professional account are returned, so an empty array means the user has no eligible Page. Use the X-Connect-Token header if connecting via API key. Not used by the default `instagram_login` flow, which creates the account without a selection step.
|
|
1788
1788
|
|
|
1789
1789
|
### Examples
|
|
1790
1790
|
|
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
| **comment_reply_delay_seconds** | **Integer** | Seconds waited before the public reply is posted. Absent when it follows the DM immediately. | [optional] |
|
|
26
26
|
| **audience** | [**CommentAutomationAudience**](CommentAutomationAudience.md) | | [optional] |
|
|
27
27
|
| **follow_gate** | [**CommentAutomationFollowGate**](CommentAutomationFollowGate.md) | | [optional] |
|
|
28
|
+
| **also_match_in_dms** | **Boolean** | Whether these keywords also fire on a plain inbound DM. | [optional] |
|
|
28
29
|
| **is_active** | **Boolean** | | [optional] |
|
|
29
30
|
| **stats** | [**CreateCommentAutomation200ResponseAutomationStats**](CreateCommentAutomation200ResponseAutomationStats.md) | | [optional] |
|
|
30
31
|
| **created_at** | **Time** | | [optional] |
|
|
@@ -56,6 +57,7 @@ instance = Zernio::CreateCommentAutomation200ResponseAutomation.new(
|
|
|
56
57
|
comment_reply_delay_seconds: null,
|
|
57
58
|
audience: null,
|
|
58
59
|
follow_gate: null,
|
|
60
|
+
also_match_in_dms: null,
|
|
59
61
|
is_active: null,
|
|
60
62
|
stats: null,
|
|
61
63
|
created_at: null
|
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
| **click_tag** | **String** | Optional tag applied to a contact when they click a tracked link (requires linkTracking). Lets you segment clickers for broadcasts/sequences. | [optional] |
|
|
26
26
|
| **dm_delay_seconds** | **Integer** | Seconds to wait after the trigger before sending the DM. Omit or send 0 to reply immediately (the default). Max 86400 (24h). The trigger is still matched and deduplicated the moment the comment arrives, so a delay only moves when the response is sent. | [optional] |
|
|
27
27
|
| **comment_reply_delay_seconds** | **Integer** | Seconds to wait before posting the public comment reply. Omit or send 0 to post it right after the DM (the default). The reply never goes out before the DM, so a value below dmDelaySeconds is raised to it. Ignored when trigger=story_reply, which has no public reply. | [optional] |
|
|
28
|
+
| **also_match_in_dms** | **Boolean** | Also fire these keywords on a plain inbound DM, so the automation answers people who message the keyword instead of commenting it. Requires at least one keyword (an empty keyword list means 'match anything', which would answer every inbound message) and is rejected on story_reply automations, which already trigger on DMs. Dedup is per door: a contact who already received the DM from their comment can still receive it from a DM. | [optional][default to false] |
|
|
28
29
|
| **audience** | [**CommentAutomationAudience**](CommentAutomationAudience.md) | | [optional] |
|
|
29
30
|
| **follow_gate** | [**CommentAutomationFollowGate**](CommentAutomationFollowGate.md) | | [optional] |
|
|
30
31
|
|
|
@@ -55,6 +56,7 @@ instance = Zernio::CreateCommentAutomationRequest.new(
|
|
|
55
56
|
click_tag: null,
|
|
56
57
|
dm_delay_seconds: null,
|
|
57
58
|
comment_reply_delay_seconds: null,
|
|
59
|
+
also_match_in_dms: null,
|
|
58
60
|
audience: null,
|
|
59
61
|
follow_gate: null
|
|
60
62
|
)
|
|
@@ -28,6 +28,7 @@
|
|
|
28
28
|
| **comment_reply_delay_seconds** | **Integer** | Seconds waited before the public reply is posted. Absent when it follows the DM immediately. | [optional] |
|
|
29
29
|
| **audience** | [**CommentAutomationAudience**](CommentAutomationAudience.md) | | [optional] |
|
|
30
30
|
| **follow_gate** | [**CommentAutomationFollowGate**](CommentAutomationFollowGate.md) | | [optional] |
|
|
31
|
+
| **also_match_in_dms** | **Boolean** | Whether these keywords also fire on a plain inbound DM. | [optional] |
|
|
31
32
|
| **is_active** | **Boolean** | | [optional] |
|
|
32
33
|
| **stats** | [**CreateCommentAutomation200ResponseAutomationStats**](CreateCommentAutomation200ResponseAutomationStats.md) | | [optional] |
|
|
33
34
|
| **created_at** | **Time** | | [optional] |
|
|
@@ -63,6 +64,7 @@ instance = Zernio::GetCommentAutomation200ResponseAutomation.new(
|
|
|
63
64
|
comment_reply_delay_seconds: null,
|
|
64
65
|
audience: null,
|
|
65
66
|
follow_gate: null,
|
|
67
|
+
also_match_in_dms: null,
|
|
66
68
|
is_active: null,
|
|
67
69
|
stats: null,
|
|
68
70
|
created_at: null,
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
| **commenter_id** | **String** | | [optional] |
|
|
10
10
|
| **commenter_name** | **String** | | [optional] |
|
|
11
11
|
| **comment_text** | **String** | | [optional] |
|
|
12
|
+
| **source** | **String** | Which door triggered this send. Absent on rows written before this field existed (all of those are comment-triggered). | [optional] |
|
|
12
13
|
| **status** | **String** | DM outcome. 'pending' = the automation has a dmDelaySeconds and the response is queued but not sent yet. 'gated' = the follow-gate confirmation DM went out and we are waiting for the tap; it flips to 'sent' or 'skipped' when they tap. | [optional] |
|
|
13
14
|
| **audience_outcome** | **String** | How the audience rule resolved. Absent on automations without one. | [optional] |
|
|
14
15
|
| **commenter_is_follower** | **Boolean** | Follow relationship at decision time. Absent when Instagram would not tell us (the commenter never messaged the account). | [optional] |
|
|
@@ -30,6 +31,7 @@ instance = Zernio::GetCommentAutomation200ResponseLogsInner.new(
|
|
|
30
31
|
commenter_id: null,
|
|
31
32
|
commenter_name: null,
|
|
32
33
|
comment_text: null,
|
|
34
|
+
source: null,
|
|
33
35
|
status: null,
|
|
34
36
|
audience_outcome: null,
|
|
35
37
|
commenter_is_follower: null,
|
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
| **click_tag** | **String** | Tag applied to a contact when they click a tracked link. | [optional] |
|
|
26
26
|
| **dm_delay_seconds** | **Integer** | Seconds waited after the trigger before the DM is sent. Absent when the DM goes out immediately. | [optional] |
|
|
27
27
|
| **comment_reply_delay_seconds** | **Integer** | Seconds waited before the public reply is posted. Absent when it follows the DM immediately. | [optional] |
|
|
28
|
+
| **also_match_in_dms** | **Boolean** | Whether these keywords also fire on a plain inbound DM. | [optional] |
|
|
28
29
|
| **is_active** | **Boolean** | | [optional] |
|
|
29
30
|
| **stats** | [**ListCommentAutomations200ResponseAutomationsInnerStats**](ListCommentAutomations200ResponseAutomationsInnerStats.md) | | [optional] |
|
|
30
31
|
| **created_at** | **Time** | | [optional] |
|
|
@@ -56,6 +57,7 @@ instance = Zernio::ListCommentAutomations200ResponseAutomationsInner.new(
|
|
|
56
57
|
click_tag: null,
|
|
57
58
|
dm_delay_seconds: null,
|
|
58
59
|
comment_reply_delay_seconds: null,
|
|
60
|
+
also_match_in_dms: null,
|
|
59
61
|
is_active: null,
|
|
60
62
|
stats: null,
|
|
61
63
|
created_at: null
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
| **comment_reply_variations** | **Array<String>** | Alternate public replies rotated at random with commentReply. Omitted when none. | [optional] |
|
|
19
19
|
| **audience** | [**CommentAutomationAudience**](CommentAutomationAudience.md) | | [optional] |
|
|
20
20
|
| **follow_gate** | [**CommentAutomationFollowGate**](CommentAutomationFollowGate.md) | | [optional] |
|
|
21
|
+
| **also_match_in_dms** | **Boolean** | Whether these keywords also fire on a plain inbound DM. | [optional] |
|
|
21
22
|
| **is_active** | **Boolean** | | [optional] |
|
|
22
23
|
| **updated_at** | **Time** | | [optional] |
|
|
23
24
|
|
|
@@ -41,6 +42,7 @@ instance = Zernio::UpdateCommentAutomation200ResponseAutomation.new(
|
|
|
41
42
|
comment_reply_variations: null,
|
|
42
43
|
audience: null,
|
|
43
44
|
follow_gate: null,
|
|
45
|
+
also_match_in_dms: null,
|
|
44
46
|
is_active: null,
|
|
45
47
|
updated_at: null
|
|
46
48
|
)
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
| **comment_reply_variations** | **Array<String>** | Alternate public replies for random rotation. Pass [] to clear. | [optional] |
|
|
19
19
|
| **link_tracking** | **Boolean** | Wrap link buttons in a tracked redirect to count clicks. Pass false to send links untouched. | [optional] |
|
|
20
20
|
| **click_tag** | **String** | Tag applied to a contact when they click a tracked link (requires linkTracking). Empty string clears it. | [optional] |
|
|
21
|
+
| **also_match_in_dms** | **Boolean** | Also fire these keywords on a plain inbound DM. Enabling it requires the automation to end up with at least one keyword (this request's keywords if you send them, otherwise the stored ones) and is rejected on story_reply automations. | [optional] |
|
|
21
22
|
| **dm_delay_seconds** | **Integer** | Seconds to wait after the trigger before sending the DM. Send 0 to clear the delay and reply immediately. | [optional] |
|
|
22
23
|
| **comment_reply_delay_seconds** | **Integer** | Seconds to wait before posting the public comment reply. Send 0 to clear it. The reply never goes out before the DM. | [optional] |
|
|
23
24
|
| **audience** | [**CommentAutomationAudience**](CommentAutomationAudience.md) | | [optional] |
|
|
@@ -44,6 +45,7 @@ instance = Zernio::UpdateCommentAutomationRequest.new(
|
|
|
44
45
|
comment_reply_variations: null,
|
|
45
46
|
link_tracking: null,
|
|
46
47
|
click_tag: null,
|
|
48
|
+
also_match_in_dms: null,
|
|
47
49
|
dm_delay_seconds: null,
|
|
48
50
|
comment_reply_delay_seconds: null,
|
|
49
51
|
audience: null,
|
|
@@ -20,7 +20,7 @@ module Zernio
|
|
|
20
20
|
@api_client = api_client
|
|
21
21
|
end
|
|
22
22
|
# Create comment-to-DM automation
|
|
23
|
-
# Create a keyword-triggered DM automation on an Instagram or Facebook account. When someone comments a matching keyword (or, with `trigger: story_reply`, replies to your Instagram story with one), they automatically receive a DM. Triggers (`trigger`): * `comment` (default): fires on keyword comments on a post or reel. * `story_reply`: fires when someone replies to your Instagram story with a keyword, and answers them with a DM. Set `platformPostId` to a story media id to scope to one story, or omit it to match replies to any story. Targeting (comment trigger): * Per-post: set `platformPostId` to scope to one specific post (only one active per-post automation is allowed per post). * Account-wide (\"any post\"): omit `platformPostId` (and `postId`). The automation evaluates every comment on every post on the account. You can stack unlimited account-wide automations, each with its own keyword set, and they all run independently. Per-post automations take priority on their post. Audience (`audience`, Instagram only): restrict the automation to followers or non-followers, and/or to accounts above a follower count. Instagram only reveals the follow relationship for people who have messaged the account, so `audience.whenUnknown` decides what happens for everyone else - including `verify`, which sends a one-tap confirmation DM (`followGate`) and then delivers the real DM automatically. People we already know follow you skip the tap entirely. Links in the DM's buttons can be click-tracked (`linkTracking`, on by default) and clickers optionally tagged (`clickTag`) for segmentation. Stats returned include delivered, read, and link clicks.
|
|
23
|
+
# Create a keyword-triggered DM automation on an Instagram or Facebook account. When someone comments a matching keyword (or, with `trigger: story_reply`, replies to your Instagram story with one), they automatically receive a DM. Triggers (`trigger`): * `comment` (default): fires on keyword comments on a post or reel. * `story_reply`: fires when someone replies to your Instagram story with a keyword, and answers them with a DM. Set `platformPostId` to a story media id to scope to one story, or omit it to match replies to any story. Targeting (comment trigger): * Per-post: set `platformPostId` to scope to one specific post (only one active per-post automation is allowed per post). * Account-wide (\"any post\"): omit `platformPostId` (and `postId`). The automation evaluates every comment on every post on the account. You can stack unlimited account-wide automations, each with its own keyword set, and they all run independently. Per-post automations take priority on their post. Audience (`audience`, Instagram only): restrict the automation to followers or non-followers, and/or to accounts above a follower count. Instagram only reveals the follow relationship for people who have messaged the account, so `audience.whenUnknown` decides what happens for everyone else - including `verify`, which sends a one-tap confirmation DM (`followGate`) and then delivers the real DM automatically. People we already know follow you skip the tap entirely. Set `alsoMatchInDms: true` on a `comment` automation to also answer people who send a keyword as a direct message instead of commenting it. One automation then covers both doors, and each door is deduplicated separately (someone who already got the DM from their comment still gets it if they later DM the keyword). Requires at least one keyword. Links in the DM's buttons can be click-tracked (`linkTracking`, on by default) and clickers optionally tagged (`clickTag`) for segmentation. Stats returned include delivered, read, and link clicks.
|
|
24
24
|
# @param create_comment_automation_request [CreateCommentAutomationRequest]
|
|
25
25
|
# @param [Hash] opts the optional parameters
|
|
26
26
|
# @return [CreateCommentAutomation200Response]
|
|
@@ -30,7 +30,7 @@ module Zernio
|
|
|
30
30
|
end
|
|
31
31
|
|
|
32
32
|
# Create comment-to-DM automation
|
|
33
|
-
# Create a keyword-triggered DM automation on an Instagram or Facebook account. When someone comments a matching keyword (or, with `trigger: story_reply`, replies to your Instagram story with one), they automatically receive a DM. Triggers (`trigger`): * `comment` (default): fires on keyword comments on a post or reel. * `story_reply`: fires when someone replies to your Instagram story with a keyword, and answers them with a DM. Set `platformPostId` to a story media id to scope to one story, or omit it to match replies to any story. Targeting (comment trigger): * Per-post: set `platformPostId` to scope to one specific post (only one active per-post automation is allowed per post). * Account-wide (\"any post\"): omit `platformPostId` (and `postId`). The automation evaluates every comment on every post on the account. You can stack unlimited account-wide automations, each with its own keyword set, and they all run independently. Per-post automations take priority on their post. Audience (`audience`, Instagram only): restrict the automation to followers or non-followers, and/or to accounts above a follower count. Instagram only reveals the follow relationship for people who have messaged the account, so `audience.whenUnknown` decides what happens for everyone else - including `verify`, which sends a one-tap confirmation DM (`followGate`) and then delivers the real DM automatically. People we already know follow you skip the tap entirely. Links in the DM's buttons can be click-tracked (`linkTracking`, on by default) and clickers optionally tagged (`clickTag`) for segmentation. Stats returned include delivered, read, and link clicks.
|
|
33
|
+
# Create a keyword-triggered DM automation on an Instagram or Facebook account. When someone comments a matching keyword (or, with `trigger: story_reply`, replies to your Instagram story with one), they automatically receive a DM. Triggers (`trigger`): * `comment` (default): fires on keyword comments on a post or reel. * `story_reply`: fires when someone replies to your Instagram story with a keyword, and answers them with a DM. Set `platformPostId` to a story media id to scope to one story, or omit it to match replies to any story. Targeting (comment trigger): * Per-post: set `platformPostId` to scope to one specific post (only one active per-post automation is allowed per post). * Account-wide (\"any post\"): omit `platformPostId` (and `postId`). The automation evaluates every comment on every post on the account. You can stack unlimited account-wide automations, each with its own keyword set, and they all run independently. Per-post automations take priority on their post. Audience (`audience`, Instagram only): restrict the automation to followers or non-followers, and/or to accounts above a follower count. Instagram only reveals the follow relationship for people who have messaged the account, so `audience.whenUnknown` decides what happens for everyone else - including `verify`, which sends a one-tap confirmation DM (`followGate`) and then delivers the real DM automatically. People we already know follow you skip the tap entirely. Set `alsoMatchInDms: true` on a `comment` automation to also answer people who send a keyword as a direct message instead of commenting it. One automation then covers both doors, and each door is deduplicated separately (someone who already got the DM from their comment still gets it if they later DM the keyword). Requires at least one keyword. Links in the DM's buttons can be click-tracked (`linkTracking`, on by default) and clickers optionally tagged (`clickTag`) for segmentation. Stats returned include delivered, read, and link clicks.
|
|
34
34
|
# @param create_comment_automation_request [CreateCommentAutomationRequest]
|
|
35
35
|
# @param [Hash] opts the optional parameters
|
|
36
36
|
# @return [Array<(CreateCommentAutomation200Response, Integer, Hash)>] CreateCommentAutomation200Response data, response status code and response headers
|
|
@@ -674,7 +674,7 @@ module Zernio
|
|
|
674
674
|
# @param [Hash] opts the optional parameters
|
|
675
675
|
# @option opts [String] :redirect_url Your custom redirect URL after connection completes. Accepts an http(s) URL, a custom app scheme for mobile deeplinks (e.g. myapp://callback), or a relative path. Result params are appended with the URL API, so an existing query string is preserved. Standard mode appends connected={platform}&profileId=X&accountId=Y&username=Z. Headless mode appends OAuth data params for platforms requiring selection (e.g. LinkedIn orgs, Facebook pages). If no selection is needed, the account is created directly and the redirect includes accountId.
|
|
676
676
|
# @option opts [Boolean] :headless When true, the user is redirected to your redirect_url with raw OAuth data (code, state) instead of Zernio's default account selection UI. Use this to build a custom connect experience. (default to false)
|
|
677
|
-
# @option opts [String] :login_method Instagram only. Which of the two Instagram connection methods to use. Ignored for every other platform. `instagram_login` (the default, and what you get if you omit this): the Instagram Login dialog. The user authorizes their Instagram professional account directly, no Facebook Page required. `facebook_login`: the Facebook Login dialog, i.e. \"Instagram API with Facebook Login\". The user authorizes a Facebook Page that has a linked Instagram professional account, and every API call for that account then runs through the Page. Use this when the customer manages Instagram through a Page and expects the Facebook consent screen. Because the user has to pick which Page to connect, the callback continues at the account-selection step, `/v1/connect/instagram/select-account`. `facebook_login`
|
|
677
|
+
# @option opts [String] :login_method Instagram only. Which of the two Instagram connection methods to use. Ignored for every other platform. `instagram_login` (the default, and what you get if you omit this): the Instagram Login dialog. The user authorizes their Instagram professional account directly, no Facebook Page required. `facebook_login`: the Facebook Login dialog, i.e. \"Instagram API with Facebook Login\". The user authorizes a Facebook Page that has a linked Instagram professional account, and every API call for that account then runs through the Page. Use this when the customer manages Instagram through a Page and expects the Facebook consent screen. Because the user has to pick which Page to connect, the callback continues at the account-selection step, `/v1/connect/instagram/select-account`. `facebook_login` supports `headless=true` like the other selection platforms: the callback redirects to your `redirect_url` with `profileId`, `tempToken`, `platform=instagram`, `step=select_account` and `connect_token`, which you pass into the select-account endpoints to finish. The default `instagram_login` has no selection step, so it connects the account directly. (default to 'instagram_login')
|
|
678
678
|
# @return [GetConnectUrl200Response]
|
|
679
679
|
def get_connect_url(platform, profile_id, opts = {})
|
|
680
680
|
data, _status_code, _headers = get_connect_url_with_http_info(platform, profile_id, opts)
|
|
@@ -688,7 +688,7 @@ module Zernio
|
|
|
688
688
|
# @param [Hash] opts the optional parameters
|
|
689
689
|
# @option opts [String] :redirect_url Your custom redirect URL after connection completes. Accepts an http(s) URL, a custom app scheme for mobile deeplinks (e.g. myapp://callback), or a relative path. Result params are appended with the URL API, so an existing query string is preserved. Standard mode appends connected={platform}&profileId=X&accountId=Y&username=Z. Headless mode appends OAuth data params for platforms requiring selection (e.g. LinkedIn orgs, Facebook pages). If no selection is needed, the account is created directly and the redirect includes accountId.
|
|
690
690
|
# @option opts [Boolean] :headless When true, the user is redirected to your redirect_url with raw OAuth data (code, state) instead of Zernio's default account selection UI. Use this to build a custom connect experience. (default to false)
|
|
691
|
-
# @option opts [String] :login_method Instagram only. Which of the two Instagram connection methods to use. Ignored for every other platform. `instagram_login` (the default, and what you get if you omit this): the Instagram Login dialog. The user authorizes their Instagram professional account directly, no Facebook Page required. `facebook_login`: the Facebook Login dialog, i.e. \"Instagram API with Facebook Login\". The user authorizes a Facebook Page that has a linked Instagram professional account, and every API call for that account then runs through the Page. Use this when the customer manages Instagram through a Page and expects the Facebook consent screen. Because the user has to pick which Page to connect, the callback continues at the account-selection step, `/v1/connect/instagram/select-account`. `facebook_login`
|
|
691
|
+
# @option opts [String] :login_method Instagram only. Which of the two Instagram connection methods to use. Ignored for every other platform. `instagram_login` (the default, and what you get if you omit this): the Instagram Login dialog. The user authorizes their Instagram professional account directly, no Facebook Page required. `facebook_login`: the Facebook Login dialog, i.e. \"Instagram API with Facebook Login\". The user authorizes a Facebook Page that has a linked Instagram professional account, and every API call for that account then runs through the Page. Use this when the customer manages Instagram through a Page and expects the Facebook consent screen. Because the user has to pick which Page to connect, the callback continues at the account-selection step, `/v1/connect/instagram/select-account`. `facebook_login` supports `headless=true` like the other selection platforms: the callback redirects to your `redirect_url` with `profileId`, `tempToken`, `platform=instagram`, `step=select_account` and `connect_token`, which you pass into the select-account endpoints to finish. The default `instagram_login` has no selection step, so it connects the account directly. (default to 'instagram_login')
|
|
692
692
|
# @return [Array<(GetConnectUrl200Response, Integer, Hash)>] GetConnectUrl200Response data, response status code and response headers
|
|
693
693
|
def get_connect_url_with_http_info(platform, profile_id, opts = {})
|
|
694
694
|
if @api_client.config.debugging
|
|
@@ -1710,7 +1710,7 @@ module Zernio
|
|
|
1710
1710
|
end
|
|
1711
1711
|
|
|
1712
1712
|
# List Pages with a linked Instagram account
|
|
1713
|
-
# Completes the `loginMethod=facebook_login` Instagram flow, i.e. \"Instagram API with Facebook Login\". After the user authorizes on Facebook, extract `tempToken` from the redirect params and pass it here to list the Facebook Pages they manage. Only Pages that have a linked Instagram professional account are returned, so an empty array means the user has no eligible Page. Use the X-Connect-Token header if connecting via API key. Not used by the default `instagram_login` flow, which creates the account without a selection step.
|
|
1713
|
+
# Completes the `loginMethod=facebook_login` Instagram flow, i.e. \"Instagram API with Facebook Login\". After the user authorizes on Facebook, extract `tempToken` from the redirect params (headless mode adds `step=select_account`) and pass it here to list the Facebook Pages they manage. Only Pages that have a linked Instagram professional account are returned, so an empty array means the user has no eligible Page. Use the X-Connect-Token header if connecting via API key. Not used by the default `instagram_login` flow, which creates the account without a selection step.
|
|
1714
1714
|
# @param profile_id [String] Profile ID from your connection flow
|
|
1715
1715
|
# @param temp_token [String] Long-lived Facebook user access token from the OAuth callback redirect
|
|
1716
1716
|
# @param [Hash] opts the optional parameters
|
|
@@ -1721,7 +1721,7 @@ module Zernio
|
|
|
1721
1721
|
end
|
|
1722
1722
|
|
|
1723
1723
|
# List Pages with a linked Instagram account
|
|
1724
|
-
# Completes the `loginMethod=facebook_login` Instagram flow, i.e. \"Instagram API with Facebook Login\". After the user authorizes on Facebook, extract `tempToken` from the redirect params and pass it here to list the Facebook Pages they manage. Only Pages that have a linked Instagram professional account are returned, so an empty array means the user has no eligible Page. Use the X-Connect-Token header if connecting via API key. Not used by the default `instagram_login` flow, which creates the account without a selection step.
|
|
1724
|
+
# Completes the `loginMethod=facebook_login` Instagram flow, i.e. \"Instagram API with Facebook Login\". After the user authorizes on Facebook, extract `tempToken` from the redirect params (headless mode adds `step=select_account`) and pass it here to list the Facebook Pages they manage. Only Pages that have a linked Instagram professional account are returned, so an empty array means the user has no eligible Page. Use the X-Connect-Token header if connecting via API key. Not used by the default `instagram_login` flow, which creates the account without a selection step.
|
|
1725
1725
|
# @param profile_id [String] Profile ID from your connection flow
|
|
1726
1726
|
# @param temp_token [String] Long-lived Facebook user access token from the OAuth callback redirect
|
|
1727
1727
|
# @param [Hash] opts the optional parameters
|
|
@@ -65,6 +65,9 @@ module Zernio
|
|
|
65
65
|
|
|
66
66
|
attr_accessor :follow_gate
|
|
67
67
|
|
|
68
|
+
# Whether these keywords also fire on a plain inbound DM.
|
|
69
|
+
attr_accessor :also_match_in_dms
|
|
70
|
+
|
|
68
71
|
attr_accessor :is_active
|
|
69
72
|
|
|
70
73
|
attr_accessor :stats
|
|
@@ -117,6 +120,7 @@ module Zernio
|
|
|
117
120
|
:'comment_reply_delay_seconds' => :'commentReplyDelaySeconds',
|
|
118
121
|
:'audience' => :'audience',
|
|
119
122
|
:'follow_gate' => :'followGate',
|
|
123
|
+
:'also_match_in_dms' => :'alsoMatchInDms',
|
|
120
124
|
:'is_active' => :'isActive',
|
|
121
125
|
:'stats' => :'stats',
|
|
122
126
|
:'created_at' => :'createdAt'
|
|
@@ -157,6 +161,7 @@ module Zernio
|
|
|
157
161
|
:'comment_reply_delay_seconds' => :'Integer',
|
|
158
162
|
:'audience' => :'CommentAutomationAudience',
|
|
159
163
|
:'follow_gate' => :'CommentAutomationFollowGate',
|
|
164
|
+
:'also_match_in_dms' => :'Boolean',
|
|
160
165
|
:'is_active' => :'Boolean',
|
|
161
166
|
:'stats' => :'CreateCommentAutomation200ResponseAutomationStats',
|
|
162
167
|
:'created_at' => :'Time'
|
|
@@ -280,6 +285,10 @@ module Zernio
|
|
|
280
285
|
self.follow_gate = attributes[:'follow_gate']
|
|
281
286
|
end
|
|
282
287
|
|
|
288
|
+
if attributes.key?(:'also_match_in_dms')
|
|
289
|
+
self.also_match_in_dms = attributes[:'also_match_in_dms']
|
|
290
|
+
end
|
|
291
|
+
|
|
283
292
|
if attributes.key?(:'is_active')
|
|
284
293
|
self.is_active = attributes[:'is_active']
|
|
285
294
|
end
|
|
@@ -358,6 +367,7 @@ module Zernio
|
|
|
358
367
|
comment_reply_delay_seconds == o.comment_reply_delay_seconds &&
|
|
359
368
|
audience == o.audience &&
|
|
360
369
|
follow_gate == o.follow_gate &&
|
|
370
|
+
also_match_in_dms == o.also_match_in_dms &&
|
|
361
371
|
is_active == o.is_active &&
|
|
362
372
|
stats == o.stats &&
|
|
363
373
|
created_at == o.created_at
|
|
@@ -372,7 +382,7 @@ module Zernio
|
|
|
372
382
|
# Calculates hash code according to all attributes.
|
|
373
383
|
# @return [Integer] Hash code
|
|
374
384
|
def hash
|
|
375
|
-
[id, name, platform, trigger, platform_post_id, keywords, match_mode, exclude_keywords, typo_tolerance, dm_message, buttons, template, comment_reply, dm_message_variations, comment_reply_variations, link_tracking, click_tag, dm_delay_seconds, comment_reply_delay_seconds, audience, follow_gate, is_active, stats, created_at].hash
|
|
385
|
+
[id, name, platform, trigger, platform_post_id, keywords, match_mode, exclude_keywords, typo_tolerance, dm_message, buttons, template, comment_reply, dm_message_variations, comment_reply_variations, link_tracking, click_tag, dm_delay_seconds, comment_reply_delay_seconds, audience, follow_gate, also_match_in_dms, is_active, stats, created_at].hash
|
|
376
386
|
end
|
|
377
387
|
|
|
378
388
|
# Builds the object from hash
|
|
@@ -77,6 +77,9 @@ module Zernio
|
|
|
77
77
|
# Seconds to wait before posting the public comment reply. Omit or send 0 to post it right after the DM (the default). The reply never goes out before the DM, so a value below dmDelaySeconds is raised to it. Ignored when trigger=story_reply, which has no public reply.
|
|
78
78
|
attr_accessor :comment_reply_delay_seconds
|
|
79
79
|
|
|
80
|
+
# Also fire these keywords on a plain inbound DM, so the automation answers people who message the keyword instead of commenting it. Requires at least one keyword (an empty keyword list means 'match anything', which would answer every inbound message) and is rejected on story_reply automations, which already trigger on DMs. Dedup is per door: a contact who already received the DM from their comment can still receive it from a DM.
|
|
81
|
+
attr_accessor :also_match_in_dms
|
|
82
|
+
|
|
80
83
|
attr_accessor :audience
|
|
81
84
|
|
|
82
85
|
attr_accessor :follow_gate
|
|
@@ -127,6 +130,7 @@ module Zernio
|
|
|
127
130
|
:'click_tag' => :'clickTag',
|
|
128
131
|
:'dm_delay_seconds' => :'dmDelaySeconds',
|
|
129
132
|
:'comment_reply_delay_seconds' => :'commentReplyDelaySeconds',
|
|
133
|
+
:'also_match_in_dms' => :'alsoMatchInDms',
|
|
130
134
|
:'audience' => :'audience',
|
|
131
135
|
:'follow_gate' => :'followGate'
|
|
132
136
|
}
|
|
@@ -166,6 +170,7 @@ module Zernio
|
|
|
166
170
|
:'click_tag' => :'String',
|
|
167
171
|
:'dm_delay_seconds' => :'Integer',
|
|
168
172
|
:'comment_reply_delay_seconds' => :'Integer',
|
|
173
|
+
:'also_match_in_dms' => :'Boolean',
|
|
169
174
|
:'audience' => :'CommentAutomationAudience',
|
|
170
175
|
:'follow_gate' => :'CommentAutomationFollowGate'
|
|
171
176
|
}
|
|
@@ -302,6 +307,12 @@ module Zernio
|
|
|
302
307
|
self.comment_reply_delay_seconds = attributes[:'comment_reply_delay_seconds']
|
|
303
308
|
end
|
|
304
309
|
|
|
310
|
+
if attributes.key?(:'also_match_in_dms')
|
|
311
|
+
self.also_match_in_dms = attributes[:'also_match_in_dms']
|
|
312
|
+
else
|
|
313
|
+
self.also_match_in_dms = false
|
|
314
|
+
end
|
|
315
|
+
|
|
305
316
|
if attributes.key?(:'audience')
|
|
306
317
|
self.audience = attributes[:'audience']
|
|
307
318
|
end
|
|
@@ -549,6 +560,7 @@ module Zernio
|
|
|
549
560
|
click_tag == o.click_tag &&
|
|
550
561
|
dm_delay_seconds == o.dm_delay_seconds &&
|
|
551
562
|
comment_reply_delay_seconds == o.comment_reply_delay_seconds &&
|
|
563
|
+
also_match_in_dms == o.also_match_in_dms &&
|
|
552
564
|
audience == o.audience &&
|
|
553
565
|
follow_gate == o.follow_gate
|
|
554
566
|
end
|
|
@@ -562,7 +574,7 @@ module Zernio
|
|
|
562
574
|
# Calculates hash code according to all attributes.
|
|
563
575
|
# @return [Integer] Hash code
|
|
564
576
|
def hash
|
|
565
|
-
[profile_id, account_id, trigger, platform_post_id, post_id, post_title, name, keywords, match_mode, exclude_keywords, typo_tolerance, dm_message, buttons, template, comment_reply, dm_message_variations, comment_reply_variations, link_tracking, click_tag, dm_delay_seconds, comment_reply_delay_seconds, audience, follow_gate].hash
|
|
577
|
+
[profile_id, account_id, trigger, platform_post_id, post_id, post_title, name, keywords, match_mode, exclude_keywords, typo_tolerance, dm_message, buttons, template, comment_reply, dm_message_variations, comment_reply_variations, link_tracking, click_tag, dm_delay_seconds, comment_reply_delay_seconds, also_match_in_dms, audience, follow_gate].hash
|
|
566
578
|
end
|
|
567
579
|
|
|
568
580
|
# Builds the object from hash
|
|
@@ -71,6 +71,9 @@ module Zernio
|
|
|
71
71
|
|
|
72
72
|
attr_accessor :follow_gate
|
|
73
73
|
|
|
74
|
+
# Whether these keywords also fire on a plain inbound DM.
|
|
75
|
+
attr_accessor :also_match_in_dms
|
|
76
|
+
|
|
74
77
|
attr_accessor :is_active
|
|
75
78
|
|
|
76
79
|
attr_accessor :stats
|
|
@@ -128,6 +131,7 @@ module Zernio
|
|
|
128
131
|
:'comment_reply_delay_seconds' => :'commentReplyDelaySeconds',
|
|
129
132
|
:'audience' => :'audience',
|
|
130
133
|
:'follow_gate' => :'followGate',
|
|
134
|
+
:'also_match_in_dms' => :'alsoMatchInDms',
|
|
131
135
|
:'is_active' => :'isActive',
|
|
132
136
|
:'stats' => :'stats',
|
|
133
137
|
:'created_at' => :'createdAt',
|
|
@@ -172,6 +176,7 @@ module Zernio
|
|
|
172
176
|
:'comment_reply_delay_seconds' => :'Integer',
|
|
173
177
|
:'audience' => :'CommentAutomationAudience',
|
|
174
178
|
:'follow_gate' => :'CommentAutomationFollowGate',
|
|
179
|
+
:'also_match_in_dms' => :'Boolean',
|
|
175
180
|
:'is_active' => :'Boolean',
|
|
176
181
|
:'stats' => :'CreateCommentAutomation200ResponseAutomationStats',
|
|
177
182
|
:'created_at' => :'Time',
|
|
@@ -308,6 +313,10 @@ module Zernio
|
|
|
308
313
|
self.follow_gate = attributes[:'follow_gate']
|
|
309
314
|
end
|
|
310
315
|
|
|
316
|
+
if attributes.key?(:'also_match_in_dms')
|
|
317
|
+
self.also_match_in_dms = attributes[:'also_match_in_dms']
|
|
318
|
+
end
|
|
319
|
+
|
|
311
320
|
if attributes.key?(:'is_active')
|
|
312
321
|
self.is_active = attributes[:'is_active']
|
|
313
322
|
end
|
|
@@ -393,6 +402,7 @@ module Zernio
|
|
|
393
402
|
comment_reply_delay_seconds == o.comment_reply_delay_seconds &&
|
|
394
403
|
audience == o.audience &&
|
|
395
404
|
follow_gate == o.follow_gate &&
|
|
405
|
+
also_match_in_dms == o.also_match_in_dms &&
|
|
396
406
|
is_active == o.is_active &&
|
|
397
407
|
stats == o.stats &&
|
|
398
408
|
created_at == o.created_at &&
|
|
@@ -408,7 +418,7 @@ module Zernio
|
|
|
408
418
|
# Calculates hash code according to all attributes.
|
|
409
419
|
# @return [Integer] Hash code
|
|
410
420
|
def hash
|
|
411
|
-
[id, name, platform, trigger, account_id, platform_post_id, post_id, post_title, keywords, match_mode, exclude_keywords, typo_tolerance, dm_message, buttons, template, comment_reply, dm_message_variations, comment_reply_variations, link_tracking, click_tag, dm_delay_seconds, comment_reply_delay_seconds, audience, follow_gate, is_active, stats, created_at, updated_at].hash
|
|
421
|
+
[id, name, platform, trigger, account_id, platform_post_id, post_id, post_title, keywords, match_mode, exclude_keywords, typo_tolerance, dm_message, buttons, template, comment_reply, dm_message_variations, comment_reply_variations, link_tracking, click_tag, dm_delay_seconds, comment_reply_delay_seconds, audience, follow_gate, also_match_in_dms, is_active, stats, created_at, updated_at].hash
|
|
412
422
|
end
|
|
413
423
|
|
|
414
424
|
# Builds the object from hash
|
|
@@ -25,6 +25,9 @@ module Zernio
|
|
|
25
25
|
|
|
26
26
|
attr_accessor :comment_text
|
|
27
27
|
|
|
28
|
+
# Which door triggered this send. Absent on rows written before this field existed (all of those are comment-triggered).
|
|
29
|
+
attr_accessor :source
|
|
30
|
+
|
|
28
31
|
# DM outcome. 'pending' = the automation has a dmDelaySeconds and the response is queued but not sent yet. 'gated' = the follow-gate confirmation DM went out and we are waiting for the tap; it flips to 'sent' or 'skipped' when they tap.
|
|
29
32
|
attr_accessor :status
|
|
30
33
|
|
|
@@ -80,6 +83,7 @@ module Zernio
|
|
|
80
83
|
:'commenter_id' => :'commenterId',
|
|
81
84
|
:'commenter_name' => :'commenterName',
|
|
82
85
|
:'comment_text' => :'commentText',
|
|
86
|
+
:'source' => :'source',
|
|
83
87
|
:'status' => :'status',
|
|
84
88
|
:'audience_outcome' => :'audienceOutcome',
|
|
85
89
|
:'commenter_is_follower' => :'commenterIsFollower',
|
|
@@ -110,6 +114,7 @@ module Zernio
|
|
|
110
114
|
:'commenter_id' => :'String',
|
|
111
115
|
:'commenter_name' => :'String',
|
|
112
116
|
:'comment_text' => :'String',
|
|
117
|
+
:'source' => :'String',
|
|
113
118
|
:'status' => :'String',
|
|
114
119
|
:'audience_outcome' => :'String',
|
|
115
120
|
:'commenter_is_follower' => :'Boolean',
|
|
@@ -164,6 +169,10 @@ module Zernio
|
|
|
164
169
|
self.comment_text = attributes[:'comment_text']
|
|
165
170
|
end
|
|
166
171
|
|
|
172
|
+
if attributes.key?(:'source')
|
|
173
|
+
self.source = attributes[:'source']
|
|
174
|
+
end
|
|
175
|
+
|
|
167
176
|
if attributes.key?(:'status')
|
|
168
177
|
self.status = attributes[:'status']
|
|
169
178
|
end
|
|
@@ -213,6 +222,8 @@ module Zernio
|
|
|
213
222
|
# @return true if the model is valid
|
|
214
223
|
def valid?
|
|
215
224
|
warn '[DEPRECATED] the `valid?` method is obsolete'
|
|
225
|
+
source_validator = EnumAttributeValidator.new('String', ["comment", "story_reply", "dm"])
|
|
226
|
+
return false unless source_validator.valid?(@source)
|
|
216
227
|
status_validator = EnumAttributeValidator.new('String', ["pending", "sent", "failed", "skipped", "gated"])
|
|
217
228
|
return false unless status_validator.valid?(@status)
|
|
218
229
|
audience_outcome_validator = EnumAttributeValidator.new('String', ["passed", "blocked", "gate_sent", "gate_passed", "gate_failed"])
|
|
@@ -222,6 +233,16 @@ module Zernio
|
|
|
222
233
|
true
|
|
223
234
|
end
|
|
224
235
|
|
|
236
|
+
# Custom attribute writer method checking allowed values (enum).
|
|
237
|
+
# @param [Object] source Object to be assigned
|
|
238
|
+
def source=(source)
|
|
239
|
+
validator = EnumAttributeValidator.new('String', ["comment", "story_reply", "dm"])
|
|
240
|
+
unless validator.valid?(source)
|
|
241
|
+
fail ArgumentError, "invalid value for \"source\", must be one of #{validator.allowable_values}."
|
|
242
|
+
end
|
|
243
|
+
@source = source
|
|
244
|
+
end
|
|
245
|
+
|
|
225
246
|
# Custom attribute writer method checking allowed values (enum).
|
|
226
247
|
# @param [Object] status Object to be assigned
|
|
227
248
|
def status=(status)
|
|
@@ -262,6 +283,7 @@ module Zernio
|
|
|
262
283
|
commenter_id == o.commenter_id &&
|
|
263
284
|
commenter_name == o.commenter_name &&
|
|
264
285
|
comment_text == o.comment_text &&
|
|
286
|
+
source == o.source &&
|
|
265
287
|
status == o.status &&
|
|
266
288
|
audience_outcome == o.audience_outcome &&
|
|
267
289
|
commenter_is_follower == o.commenter_is_follower &&
|
|
@@ -282,7 +304,7 @@ module Zernio
|
|
|
282
304
|
# Calculates hash code according to all attributes.
|
|
283
305
|
# @return [Integer] Hash code
|
|
284
306
|
def hash
|
|
285
|
-
[id, comment_id, commenter_id, commenter_name, comment_text, status, audience_outcome, commenter_is_follower, commenter_follower_count, error, comment_reply_status, comment_reply_error, next_due_at, created_at].hash
|
|
307
|
+
[id, comment_id, commenter_id, commenter_name, comment_text, source, status, audience_outcome, commenter_is_follower, commenter_follower_count, error, comment_reply_status, comment_reply_error, next_due_at, created_at].hash
|
|
286
308
|
end
|
|
287
309
|
|
|
288
310
|
# Builds the object from hash
|
|
@@ -67,6 +67,9 @@ module Zernio
|
|
|
67
67
|
# Seconds waited before the public reply is posted. Absent when it follows the DM immediately.
|
|
68
68
|
attr_accessor :comment_reply_delay_seconds
|
|
69
69
|
|
|
70
|
+
# Whether these keywords also fire on a plain inbound DM.
|
|
71
|
+
attr_accessor :also_match_in_dms
|
|
72
|
+
|
|
70
73
|
attr_accessor :is_active
|
|
71
74
|
|
|
72
75
|
attr_accessor :stats
|
|
@@ -119,6 +122,7 @@ module Zernio
|
|
|
119
122
|
:'click_tag' => :'clickTag',
|
|
120
123
|
:'dm_delay_seconds' => :'dmDelaySeconds',
|
|
121
124
|
:'comment_reply_delay_seconds' => :'commentReplyDelaySeconds',
|
|
125
|
+
:'also_match_in_dms' => :'alsoMatchInDms',
|
|
122
126
|
:'is_active' => :'isActive',
|
|
123
127
|
:'stats' => :'stats',
|
|
124
128
|
:'created_at' => :'createdAt'
|
|
@@ -159,6 +163,7 @@ module Zernio
|
|
|
159
163
|
:'click_tag' => :'String',
|
|
160
164
|
:'dm_delay_seconds' => :'Integer',
|
|
161
165
|
:'comment_reply_delay_seconds' => :'Integer',
|
|
166
|
+
:'also_match_in_dms' => :'Boolean',
|
|
162
167
|
:'is_active' => :'Boolean',
|
|
163
168
|
:'stats' => :'ListCommentAutomations200ResponseAutomationsInnerStats',
|
|
164
169
|
:'created_at' => :'Time'
|
|
@@ -281,6 +286,10 @@ module Zernio
|
|
|
281
286
|
self.comment_reply_delay_seconds = attributes[:'comment_reply_delay_seconds']
|
|
282
287
|
end
|
|
283
288
|
|
|
289
|
+
if attributes.key?(:'also_match_in_dms')
|
|
290
|
+
self.also_match_in_dms = attributes[:'also_match_in_dms']
|
|
291
|
+
end
|
|
292
|
+
|
|
284
293
|
if attributes.key?(:'is_active')
|
|
285
294
|
self.is_active = attributes[:'is_active']
|
|
286
295
|
end
|
|
@@ -371,6 +380,7 @@ module Zernio
|
|
|
371
380
|
click_tag == o.click_tag &&
|
|
372
381
|
dm_delay_seconds == o.dm_delay_seconds &&
|
|
373
382
|
comment_reply_delay_seconds == o.comment_reply_delay_seconds &&
|
|
383
|
+
also_match_in_dms == o.also_match_in_dms &&
|
|
374
384
|
is_active == o.is_active &&
|
|
375
385
|
stats == o.stats &&
|
|
376
386
|
created_at == o.created_at
|
|
@@ -385,7 +395,7 @@ module Zernio
|
|
|
385
395
|
# Calculates hash code according to all attributes.
|
|
386
396
|
# @return [Integer] Hash code
|
|
387
397
|
def hash
|
|
388
|
-
[id, name, platform, trigger, account_id, platform_post_id, post_title, keywords, match_mode, exclude_keywords, typo_tolerance, dm_message, buttons, template, comment_reply, dm_message_variations, comment_reply_variations, link_tracking, click_tag, dm_delay_seconds, comment_reply_delay_seconds, is_active, stats, created_at].hash
|
|
398
|
+
[id, name, platform, trigger, account_id, platform_post_id, post_title, keywords, match_mode, exclude_keywords, typo_tolerance, dm_message, buttons, template, comment_reply, dm_message_variations, comment_reply_variations, link_tracking, click_tag, dm_delay_seconds, comment_reply_delay_seconds, also_match_in_dms, is_active, stats, created_at].hash
|
|
389
399
|
end
|
|
390
400
|
|
|
391
401
|
# Builds the object from hash
|
|
@@ -49,6 +49,9 @@ module Zernio
|
|
|
49
49
|
|
|
50
50
|
attr_accessor :follow_gate
|
|
51
51
|
|
|
52
|
+
# Whether these keywords also fire on a plain inbound DM.
|
|
53
|
+
attr_accessor :also_match_in_dms
|
|
54
|
+
|
|
52
55
|
attr_accessor :is_active
|
|
53
56
|
|
|
54
57
|
attr_accessor :updated_at
|
|
@@ -92,6 +95,7 @@ module Zernio
|
|
|
92
95
|
:'comment_reply_variations' => :'commentReplyVariations',
|
|
93
96
|
:'audience' => :'audience',
|
|
94
97
|
:'follow_gate' => :'followGate',
|
|
98
|
+
:'also_match_in_dms' => :'alsoMatchInDms',
|
|
95
99
|
:'is_active' => :'isActive',
|
|
96
100
|
:'updated_at' => :'updatedAt'
|
|
97
101
|
}
|
|
@@ -124,6 +128,7 @@ module Zernio
|
|
|
124
128
|
:'comment_reply_variations' => :'Array<String>',
|
|
125
129
|
:'audience' => :'CommentAutomationAudience',
|
|
126
130
|
:'follow_gate' => :'CommentAutomationFollowGate',
|
|
131
|
+
:'also_match_in_dms' => :'Boolean',
|
|
127
132
|
:'is_active' => :'Boolean',
|
|
128
133
|
:'updated_at' => :'Time'
|
|
129
134
|
}
|
|
@@ -218,6 +223,10 @@ module Zernio
|
|
|
218
223
|
self.follow_gate = attributes[:'follow_gate']
|
|
219
224
|
end
|
|
220
225
|
|
|
226
|
+
if attributes.key?(:'also_match_in_dms')
|
|
227
|
+
self.also_match_in_dms = attributes[:'also_match_in_dms']
|
|
228
|
+
end
|
|
229
|
+
|
|
221
230
|
if attributes.key?(:'is_active')
|
|
222
231
|
self.is_active = attributes[:'is_active']
|
|
223
232
|
end
|
|
@@ -273,6 +282,7 @@ module Zernio
|
|
|
273
282
|
comment_reply_variations == o.comment_reply_variations &&
|
|
274
283
|
audience == o.audience &&
|
|
275
284
|
follow_gate == o.follow_gate &&
|
|
285
|
+
also_match_in_dms == o.also_match_in_dms &&
|
|
276
286
|
is_active == o.is_active &&
|
|
277
287
|
updated_at == o.updated_at
|
|
278
288
|
end
|
|
@@ -286,7 +296,7 @@ module Zernio
|
|
|
286
296
|
# Calculates hash code according to all attributes.
|
|
287
297
|
# @return [Integer] Hash code
|
|
288
298
|
def hash
|
|
289
|
-
[id, name, keywords, match_mode, exclude_keywords, typo_tolerance, dm_message, buttons, template, comment_reply, dm_message_variations, comment_reply_variations, audience, follow_gate, is_active, updated_at].hash
|
|
299
|
+
[id, name, keywords, match_mode, exclude_keywords, typo_tolerance, dm_message, buttons, template, comment_reply, dm_message_variations, comment_reply_variations, audience, follow_gate, also_match_in_dms, is_active, updated_at].hash
|
|
290
300
|
end
|
|
291
301
|
|
|
292
302
|
# Builds the object from hash
|
|
@@ -52,6 +52,9 @@ module Zernio
|
|
|
52
52
|
# Tag applied to a contact when they click a tracked link (requires linkTracking). Empty string clears it.
|
|
53
53
|
attr_accessor :click_tag
|
|
54
54
|
|
|
55
|
+
# Also fire these keywords on a plain inbound DM. Enabling it requires the automation to end up with at least one keyword (this request's keywords if you send them, otherwise the stored ones) and is rejected on story_reply automations.
|
|
56
|
+
attr_accessor :also_match_in_dms
|
|
57
|
+
|
|
55
58
|
# Seconds to wait after the trigger before sending the DM. Send 0 to clear the delay and reply immediately.
|
|
56
59
|
attr_accessor :dm_delay_seconds
|
|
57
60
|
|
|
@@ -103,6 +106,7 @@ module Zernio
|
|
|
103
106
|
:'comment_reply_variations' => :'commentReplyVariations',
|
|
104
107
|
:'link_tracking' => :'linkTracking',
|
|
105
108
|
:'click_tag' => :'clickTag',
|
|
109
|
+
:'also_match_in_dms' => :'alsoMatchInDms',
|
|
106
110
|
:'dm_delay_seconds' => :'dmDelaySeconds',
|
|
107
111
|
:'comment_reply_delay_seconds' => :'commentReplyDelaySeconds',
|
|
108
112
|
:'audience' => :'audience',
|
|
@@ -138,6 +142,7 @@ module Zernio
|
|
|
138
142
|
:'comment_reply_variations' => :'Array<String>',
|
|
139
143
|
:'link_tracking' => :'Boolean',
|
|
140
144
|
:'click_tag' => :'String',
|
|
145
|
+
:'also_match_in_dms' => :'Boolean',
|
|
141
146
|
:'dm_delay_seconds' => :'Integer',
|
|
142
147
|
:'comment_reply_delay_seconds' => :'Integer',
|
|
143
148
|
:'audience' => :'CommentAutomationAudience',
|
|
@@ -235,6 +240,10 @@ module Zernio
|
|
|
235
240
|
self.click_tag = attributes[:'click_tag']
|
|
236
241
|
end
|
|
237
242
|
|
|
243
|
+
if attributes.key?(:'also_match_in_dms')
|
|
244
|
+
self.also_match_in_dms = attributes[:'also_match_in_dms']
|
|
245
|
+
end
|
|
246
|
+
|
|
238
247
|
if attributes.key?(:'dm_delay_seconds')
|
|
239
248
|
self.dm_delay_seconds = attributes[:'dm_delay_seconds']
|
|
240
249
|
end
|
|
@@ -427,6 +436,7 @@ module Zernio
|
|
|
427
436
|
comment_reply_variations == o.comment_reply_variations &&
|
|
428
437
|
link_tracking == o.link_tracking &&
|
|
429
438
|
click_tag == o.click_tag &&
|
|
439
|
+
also_match_in_dms == o.also_match_in_dms &&
|
|
430
440
|
dm_delay_seconds == o.dm_delay_seconds &&
|
|
431
441
|
comment_reply_delay_seconds == o.comment_reply_delay_seconds &&
|
|
432
442
|
audience == o.audience &&
|
|
@@ -443,7 +453,7 @@ module Zernio
|
|
|
443
453
|
# Calculates hash code according to all attributes.
|
|
444
454
|
# @return [Integer] Hash code
|
|
445
455
|
def hash
|
|
446
|
-
[name, trigger, keywords, match_mode, exclude_keywords, typo_tolerance, dm_message, buttons, template, comment_reply, dm_message_variations, comment_reply_variations, link_tracking, click_tag, dm_delay_seconds, comment_reply_delay_seconds, audience, follow_gate, is_active].hash
|
|
456
|
+
[name, trigger, keywords, match_mode, exclude_keywords, typo_tolerance, dm_message, buttons, template, comment_reply, dm_message_variations, comment_reply_variations, link_tracking, click_tag, also_match_in_dms, dm_delay_seconds, comment_reply_delay_seconds, audience, follow_gate, is_active].hash
|
|
447
457
|
end
|
|
448
458
|
|
|
449
459
|
# Builds the object from hash
|
data/lib/zernio-sdk/version.rb
CHANGED
data/openapi.yaml
CHANGED
|
@@ -15715,7 +15715,7 @@ paths:
|
|
|
15715
15715
|
|
|
15716
15716
|
`facebook_login`: the Facebook Login dialog, i.e. "Instagram API with Facebook Login". The user authorizes a Facebook Page that has a linked Instagram professional account, and every API call for that account then runs through the Page. Use this when the customer manages Instagram through a Page and expects the Facebook consent screen. Because the user has to pick which Page to connect, the callback continues at the account-selection step, `/v1/connect/instagram/select-account`.
|
|
15717
15717
|
|
|
15718
|
-
`facebook_login`
|
|
15718
|
+
`facebook_login` supports `headless=true` like the other selection platforms: the callback redirects to your `redirect_url` with `profileId`, `tempToken`, `platform=instagram`, `step=select_account` and `connect_token`, which you pass into the select-account endpoints to finish. The default `instagram_login` has no selection step, so it connects the account directly.
|
|
15719
15719
|
security:
|
|
15720
15720
|
- bearerAuth: []
|
|
15721
15721
|
responses:
|
|
@@ -16154,7 +16154,7 @@ paths:
|
|
|
16154
16154
|
description: |
|
|
16155
16155
|
Completes the `loginMethod=facebook_login` Instagram flow, i.e. "Instagram API with Facebook Login".
|
|
16156
16156
|
|
|
16157
|
-
After the user authorizes on Facebook, extract `tempToken` from the redirect params and pass it here to list the Facebook Pages they manage. Only Pages that have a linked Instagram professional account are returned, so an empty array means the user has no eligible Page. Use the X-Connect-Token header if connecting via API key.
|
|
16157
|
+
After the user authorizes on Facebook, extract `tempToken` from the redirect params (headless mode adds `step=select_account`) and pass it here to list the Facebook Pages they manage. Only Pages that have a linked Instagram professional account are returned, so an empty array means the user has no eligible Page. Use the X-Connect-Token header if connecting via API key.
|
|
16158
16158
|
|
|
16159
16159
|
Not used by the default `instagram_login` flow, which creates the account without a selection step.
|
|
16160
16160
|
parameters:
|
|
@@ -36147,6 +36147,7 @@ paths:
|
|
|
36147
36147
|
clickTag: { type: string, description: "Tag applied to a contact when they click a tracked link." }
|
|
36148
36148
|
dmDelaySeconds: { type: integer, description: "Seconds waited after the trigger before the DM is sent. Absent when the DM goes out immediately." }
|
|
36149
36149
|
commentReplyDelaySeconds: { type: integer, description: "Seconds waited before the public reply is posted. Absent when it follows the DM immediately." }
|
|
36150
|
+
alsoMatchInDms: { type: boolean, description: "Whether these keywords also fire on a plain inbound DM." }
|
|
36150
36151
|
isActive: { type: boolean }
|
|
36151
36152
|
stats:
|
|
36152
36153
|
type: object
|
|
@@ -36194,6 +36195,12 @@ paths:
|
|
|
36194
36195
|
confirmation DM (`followGate`) and then delivers the real DM automatically. People we
|
|
36195
36196
|
already know follow you skip the tap entirely.
|
|
36196
36197
|
|
|
36198
|
+
Set `alsoMatchInDms: true` on a `comment` automation to also answer people who send
|
|
36199
|
+
a keyword as a direct message instead of commenting it. One automation then covers
|
|
36200
|
+
both doors, and each door is deduplicated separately (someone who already got the DM
|
|
36201
|
+
from their comment still gets it if they later DM the keyword). Requires at least one
|
|
36202
|
+
keyword.
|
|
36203
|
+
|
|
36197
36204
|
Links in the DM's buttons can be click-tracked (`linkTracking`, on by default) and
|
|
36198
36205
|
clickers optionally tagged (`clickTag`) for segmentation. Stats returned include
|
|
36199
36206
|
delivered, read, and link clicks.
|
|
@@ -36245,6 +36252,7 @@ paths:
|
|
|
36245
36252
|
clickTag: { type: string, description: "Optional tag applied to a contact when they click a tracked link (requires linkTracking). Lets you segment clickers for broadcasts/sequences." }
|
|
36246
36253
|
dmDelaySeconds: { type: integer, minimum: 0, maximum: 86400, description: "Seconds to wait after the trigger before sending the DM. Omit or send 0 to reply immediately (the default). Max 86400 (24h). The trigger is still matched and deduplicated the moment the comment arrives, so a delay only moves when the response is sent." }
|
|
36247
36254
|
commentReplyDelaySeconds: { type: integer, minimum: 0, maximum: 86400, description: "Seconds to wait before posting the public comment reply. Omit or send 0 to post it right after the DM (the default). The reply never goes out before the DM, so a value below dmDelaySeconds is raised to it. Ignored when trigger=story_reply, which has no public reply." }
|
|
36255
|
+
alsoMatchInDms: { type: boolean, default: false, description: "Also fire these keywords on a plain inbound DM, so the automation answers people who message the keyword instead of commenting it. Requires at least one keyword (an empty keyword list means 'match anything', which would answer every inbound message) and is rejected on story_reply automations, which already trigger on DMs. Dedup is per door: a contact who already received the DM from their comment can still receive it from a DM." }
|
|
36248
36256
|
audience: { $ref: '#/components/schemas/CommentAutomationAudience' }
|
|
36249
36257
|
followGate: { $ref: '#/components/schemas/CommentAutomationFollowGate' }
|
|
36250
36258
|
responses:
|
|
@@ -36284,6 +36292,7 @@ paths:
|
|
|
36284
36292
|
commentReplyDelaySeconds: { type: integer, description: "Seconds waited before the public reply is posted. Absent when it follows the DM immediately." }
|
|
36285
36293
|
audience: { $ref: '#/components/schemas/CommentAutomationAudience' }
|
|
36286
36294
|
followGate: { $ref: '#/components/schemas/CommentAutomationFollowGate' }
|
|
36295
|
+
alsoMatchInDms: { type: boolean, description: "Whether these keywords also fire on a plain inbound DM." }
|
|
36287
36296
|
isActive: { type: boolean }
|
|
36288
36297
|
stats: { type: object, properties: { totalTriggered: { type: integer }, totalSent: { type: integer }, totalFailed: { type: integer } } }
|
|
36289
36298
|
createdAt: { type: string, format: date-time }
|
|
@@ -36342,6 +36351,7 @@ paths:
|
|
|
36342
36351
|
commentReplyDelaySeconds: { type: integer, description: "Seconds waited before the public reply is posted. Absent when it follows the DM immediately." }
|
|
36343
36352
|
audience: { $ref: '#/components/schemas/CommentAutomationAudience' }
|
|
36344
36353
|
followGate: { $ref: '#/components/schemas/CommentAutomationFollowGate' }
|
|
36354
|
+
alsoMatchInDms: { type: boolean, description: "Whether these keywords also fire on a plain inbound DM." }
|
|
36345
36355
|
isActive: { type: boolean }
|
|
36346
36356
|
stats: { type: object, properties: { totalTriggered: { type: integer }, totalSent: { type: integer }, totalFailed: { type: integer } } }
|
|
36347
36357
|
createdAt: { type: string, format: date-time }
|
|
@@ -36356,6 +36366,7 @@ paths:
|
|
|
36356
36366
|
commenterId: { type: string }
|
|
36357
36367
|
commenterName: { type: string }
|
|
36358
36368
|
commentText: { type: string }
|
|
36369
|
+
source: { type: string, enum: [comment, story_reply, dm], description: "Which door triggered this send. Absent on rows written before this field existed (all of those are comment-triggered)." }
|
|
36359
36370
|
status: { type: string, enum: [pending, sent, failed, skipped, gated], description: "DM outcome. 'pending' = the automation has a dmDelaySeconds and the response is queued but not sent yet. 'gated' = the follow-gate confirmation DM went out and we are waiting for the tap; it flips to 'sent' or 'skipped' when they tap." }
|
|
36360
36371
|
audienceOutcome: { type: string, enum: [passed, blocked, gate_sent, gate_passed, gate_failed], description: "How the audience rule resolved. Absent on automations without one." }
|
|
36361
36372
|
commenterIsFollower: { type: boolean, description: "Follow relationship at decision time. Absent when Instagram would not tell us (the commenter never messaged the account)." }
|
|
@@ -36416,6 +36427,7 @@ paths:
|
|
|
36416
36427
|
description: "Alternate public replies for random rotation. Pass [] to clear."
|
|
36417
36428
|
linkTracking: { type: boolean, description: "Wrap link buttons in a tracked redirect to count clicks. Pass false to send links untouched." }
|
|
36418
36429
|
clickTag: { type: string, description: "Tag applied to a contact when they click a tracked link (requires linkTracking). Empty string clears it." }
|
|
36430
|
+
alsoMatchInDms: { type: boolean, description: "Also fire these keywords on a plain inbound DM. Enabling it requires the automation to end up with at least one keyword (this request's keywords if you send them, otherwise the stored ones) and is rejected on story_reply automations." }
|
|
36419
36431
|
dmDelaySeconds: { type: integer, minimum: 0, maximum: 86400, description: "Seconds to wait after the trigger before sending the DM. Send 0 to clear the delay and reply immediately." }
|
|
36420
36432
|
commentReplyDelaySeconds: { type: integer, minimum: 0, maximum: 86400, description: "Seconds to wait before posting the public comment reply. Send 0 to clear it. The reply never goes out before the DM." }
|
|
36421
36433
|
audience: { $ref: '#/components/schemas/CommentAutomationAudience' }
|
|
@@ -36451,6 +36463,7 @@ paths:
|
|
|
36451
36463
|
commentReplyVariations: { type: array, items: { type: string }, description: "Alternate public replies rotated at random with commentReply. Omitted when none." }
|
|
36452
36464
|
audience: { $ref: '#/components/schemas/CommentAutomationAudience' }
|
|
36453
36465
|
followGate: { $ref: '#/components/schemas/CommentAutomationFollowGate' }
|
|
36466
|
+
alsoMatchInDms: { type: boolean, description: "Whether these keywords also fire on a plain inbound DM." }
|
|
36454
36467
|
isActive: { type: boolean }
|
|
36455
36468
|
updatedAt: { type: string, format: date-time }
|
|
36456
36469
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
@@ -36503,6 +36516,7 @@ paths:
|
|
|
36503
36516
|
commenterId: { type: string }
|
|
36504
36517
|
commenterName: { type: string }
|
|
36505
36518
|
commentText: { type: string }
|
|
36519
|
+
source: { type: string, enum: [comment, story_reply, dm], description: "Which door triggered this send. Absent on rows written before this field existed (all of those are comment-triggered)." }
|
|
36506
36520
|
status: { type: string, enum: [pending, sent, failed, skipped, gated], description: "DM outcome. 'pending' = the automation has a dmDelaySeconds and the response is queued but not sent yet. 'gated' = the follow-gate confirmation DM went out and we are waiting for the tap; it flips to 'sent' or 'skipped' when they tap." }
|
|
36507
36521
|
audienceOutcome: { type: string, enum: [passed, blocked, gate_sent, gate_passed, gate_failed], description: "How the audience rule resolved. Absent on automations without one." }
|
|
36508
36522
|
commenterIsFollower: { type: boolean, description: "Follow relationship at decision time. Absent when Instagram would not tell us (the commenter never messaged the account)." }
|
|
@@ -34,7 +34,7 @@ describe 'CommentAutomationsApi' do
|
|
|
34
34
|
|
|
35
35
|
# unit tests for create_comment_automation
|
|
36
36
|
# Create comment-to-DM automation
|
|
37
|
-
# Create a keyword-triggered DM automation on an Instagram or Facebook account. When someone comments a matching keyword (or, with `trigger: story_reply`, replies to your Instagram story with one), they automatically receive a DM. Triggers (`trigger`): * `comment` (default): fires on keyword comments on a post or reel. * `story_reply`: fires when someone replies to your Instagram story with a keyword, and answers them with a DM. Set `platformPostId` to a story media id to scope to one story, or omit it to match replies to any story. Targeting (comment trigger): * Per-post: set `platformPostId` to scope to one specific post (only one active per-post automation is allowed per post). * Account-wide (\"any post\"): omit `platformPostId` (and `postId`). The automation evaluates every comment on every post on the account. You can stack unlimited account-wide automations, each with its own keyword set, and they all run independently. Per-post automations take priority on their post. Audience (`audience`, Instagram only): restrict the automation to followers or non-followers, and/or to accounts above a follower count. Instagram only reveals the follow relationship for people who have messaged the account, so `audience.whenUnknown` decides what happens for everyone else - including `verify`, which sends a one-tap confirmation DM (`followGate`) and then delivers the real DM automatically. People we already know follow you skip the tap entirely. Links in the DM's buttons can be click-tracked (`linkTracking`, on by default) and clickers optionally tagged (`clickTag`) for segmentation. Stats returned include delivered, read, and link clicks.
|
|
37
|
+
# Create a keyword-triggered DM automation on an Instagram or Facebook account. When someone comments a matching keyword (or, with `trigger: story_reply`, replies to your Instagram story with one), they automatically receive a DM. Triggers (`trigger`): * `comment` (default): fires on keyword comments on a post or reel. * `story_reply`: fires when someone replies to your Instagram story with a keyword, and answers them with a DM. Set `platformPostId` to a story media id to scope to one story, or omit it to match replies to any story. Targeting (comment trigger): * Per-post: set `platformPostId` to scope to one specific post (only one active per-post automation is allowed per post). * Account-wide (\"any post\"): omit `platformPostId` (and `postId`). The automation evaluates every comment on every post on the account. You can stack unlimited account-wide automations, each with its own keyword set, and they all run independently. Per-post automations take priority on their post. Audience (`audience`, Instagram only): restrict the automation to followers or non-followers, and/or to accounts above a follower count. Instagram only reveals the follow relationship for people who have messaged the account, so `audience.whenUnknown` decides what happens for everyone else - including `verify`, which sends a one-tap confirmation DM (`followGate`) and then delivers the real DM automatically. People we already know follow you skip the tap entirely. Set `alsoMatchInDms: true` on a `comment` automation to also answer people who send a keyword as a direct message instead of commenting it. One automation then covers both doors, and each door is deduplicated separately (someone who already got the DM from their comment still gets it if they later DM the keyword). Requires at least one keyword. Links in the DM's buttons can be click-tracked (`linkTracking`, on by default) and clickers optionally tagged (`clickTag`) for segmentation. Stats returned include delivered, read, and link clicks.
|
|
38
38
|
# @param create_comment_automation_request
|
|
39
39
|
# @param [Hash] opts the optional parameters
|
|
40
40
|
# @return [CreateCommentAutomation200Response]
|
|
@@ -158,7 +158,7 @@ describe 'ConnectApi' do
|
|
|
158
158
|
# @param [Hash] opts the optional parameters
|
|
159
159
|
# @option opts [String] :redirect_url Your custom redirect URL after connection completes. Accepts an http(s) URL, a custom app scheme for mobile deeplinks (e.g. myapp://callback), or a relative path. Result params are appended with the URL API, so an existing query string is preserved. Standard mode appends connected={platform}&profileId=X&accountId=Y&username=Z. Headless mode appends OAuth data params for platforms requiring selection (e.g. LinkedIn orgs, Facebook pages). If no selection is needed, the account is created directly and the redirect includes accountId.
|
|
160
160
|
# @option opts [Boolean] :headless When true, the user is redirected to your redirect_url with raw OAuth data (code, state) instead of Zernio's default account selection UI. Use this to build a custom connect experience.
|
|
161
|
-
# @option opts [String] :login_method Instagram only. Which of the two Instagram connection methods to use. Ignored for every other platform. `instagram_login` (the default, and what you get if you omit this): the Instagram Login dialog. The user authorizes their Instagram professional account directly, no Facebook Page required. `facebook_login`: the Facebook Login dialog, i.e. \"Instagram API with Facebook Login\". The user authorizes a Facebook Page that has a linked Instagram professional account, and every API call for that account then runs through the Page. Use this when the customer manages Instagram through a Page and expects the Facebook consent screen. Because the user has to pick which Page to connect, the callback continues at the account-selection step, `/v1/connect/instagram/select-account`. `facebook_login`
|
|
161
|
+
# @option opts [String] :login_method Instagram only. Which of the two Instagram connection methods to use. Ignored for every other platform. `instagram_login` (the default, and what you get if you omit this): the Instagram Login dialog. The user authorizes their Instagram professional account directly, no Facebook Page required. `facebook_login`: the Facebook Login dialog, i.e. \"Instagram API with Facebook Login\". The user authorizes a Facebook Page that has a linked Instagram professional account, and every API call for that account then runs through the Page. Use this when the customer manages Instagram through a Page and expects the Facebook consent screen. Because the user has to pick which Page to connect, the callback continues at the account-selection step, `/v1/connect/instagram/select-account`. `facebook_login` supports `headless=true` like the other selection platforms: the callback redirects to your `redirect_url` with `profileId`, `tempToken`, `platform=instagram`, `step=select_account` and `connect_token`, which you pass into the select-account endpoints to finish. The default `instagram_login` has no selection step, so it connects the account directly.
|
|
162
162
|
# @return [GetConnectUrl200Response]
|
|
163
163
|
describe 'get_connect_url test' do
|
|
164
164
|
it 'should work' do
|
|
@@ -348,7 +348,7 @@ describe 'ConnectApi' do
|
|
|
348
348
|
|
|
349
349
|
# unit tests for list_instagram_pages
|
|
350
350
|
# List Pages with a linked Instagram account
|
|
351
|
-
# Completes the `loginMethod=facebook_login` Instagram flow, i.e. \"Instagram API with Facebook Login\". After the user authorizes on Facebook, extract `tempToken` from the redirect params and pass it here to list the Facebook Pages they manage. Only Pages that have a linked Instagram professional account are returned, so an empty array means the user has no eligible Page. Use the X-Connect-Token header if connecting via API key. Not used by the default `instagram_login` flow, which creates the account without a selection step.
|
|
351
|
+
# Completes the `loginMethod=facebook_login` Instagram flow, i.e. \"Instagram API with Facebook Login\". After the user authorizes on Facebook, extract `tempToken` from the redirect params (headless mode adds `step=select_account`) and pass it here to list the Facebook Pages they manage. Only Pages that have a linked Instagram professional account are returned, so an empty array means the user has no eligible Page. Use the X-Connect-Token header if connecting via API key. Not used by the default `instagram_login` flow, which creates the account without a selection step.
|
|
352
352
|
# @param profile_id Profile ID from your connection flow
|
|
353
353
|
# @param temp_token Long-lived Facebook user access token from the OAuth callback redirect
|
|
354
354
|
# @param [Hash] opts the optional parameters
|
|
@@ -161,6 +161,12 @@ describe Zernio::CreateCommentAutomation200ResponseAutomation do
|
|
|
161
161
|
end
|
|
162
162
|
end
|
|
163
163
|
|
|
164
|
+
describe 'test attribute "also_match_in_dms"' do
|
|
165
|
+
it 'should work' do
|
|
166
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
|
|
164
170
|
describe 'test attribute "is_active"' do
|
|
165
171
|
it 'should work' do
|
|
166
172
|
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
@@ -161,6 +161,12 @@ describe Zernio::CreateCommentAutomationRequest do
|
|
|
161
161
|
end
|
|
162
162
|
end
|
|
163
163
|
|
|
164
|
+
describe 'test attribute "also_match_in_dms"' do
|
|
165
|
+
it 'should work' do
|
|
166
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
|
|
164
170
|
describe 'test attribute "audience"' do
|
|
165
171
|
it 'should work' do
|
|
166
172
|
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
@@ -179,6 +179,12 @@ describe Zernio::GetCommentAutomation200ResponseAutomation do
|
|
|
179
179
|
end
|
|
180
180
|
end
|
|
181
181
|
|
|
182
|
+
describe 'test attribute "also_match_in_dms"' do
|
|
183
|
+
it 'should work' do
|
|
184
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
185
|
+
end
|
|
186
|
+
end
|
|
187
|
+
|
|
182
188
|
describe 'test attribute "is_active"' do
|
|
183
189
|
it 'should work' do
|
|
184
190
|
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
@@ -57,6 +57,16 @@ describe Zernio::GetCommentAutomation200ResponseLogsInner do
|
|
|
57
57
|
end
|
|
58
58
|
end
|
|
59
59
|
|
|
60
|
+
describe 'test attribute "source"' do
|
|
61
|
+
it 'should work' do
|
|
62
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
63
|
+
# validator = Petstore::EnumTest::EnumAttributeValidator.new('String', ["comment", "story_reply", "dm"])
|
|
64
|
+
# validator.allowable_values.each do |value|
|
|
65
|
+
# expect { instance.source = value }.not_to raise_error
|
|
66
|
+
# end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
60
70
|
describe 'test attribute "status"' do
|
|
61
71
|
it 'should work' do
|
|
62
72
|
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
@@ -165,6 +165,12 @@ describe Zernio::ListCommentAutomations200ResponseAutomationsInner do
|
|
|
165
165
|
end
|
|
166
166
|
end
|
|
167
167
|
|
|
168
|
+
describe 'test attribute "also_match_in_dms"' do
|
|
169
|
+
it 'should work' do
|
|
170
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
171
|
+
end
|
|
172
|
+
end
|
|
173
|
+
|
|
168
174
|
describe 'test attribute "is_active"' do
|
|
169
175
|
it 'should work' do
|
|
170
176
|
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
@@ -115,6 +115,12 @@ describe Zernio::UpdateCommentAutomation200ResponseAutomation do
|
|
|
115
115
|
end
|
|
116
116
|
end
|
|
117
117
|
|
|
118
|
+
describe 'test attribute "also_match_in_dms"' do
|
|
119
|
+
it 'should work' do
|
|
120
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
|
|
118
124
|
describe 'test attribute "is_active"' do
|
|
119
125
|
it 'should work' do
|
|
120
126
|
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
@@ -119,6 +119,12 @@ describe Zernio::UpdateCommentAutomationRequest do
|
|
|
119
119
|
end
|
|
120
120
|
end
|
|
121
121
|
|
|
122
|
+
describe 'test attribute "also_match_in_dms"' do
|
|
123
|
+
it 'should work' do
|
|
124
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
|
|
122
128
|
describe 'test attribute "dm_delay_seconds"' do
|
|
123
129
|
it 'should work' do
|
|
124
130
|
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
Binary file
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: late-sdk
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.700
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- OpenAPI-Generator
|
|
@@ -5042,7 +5042,7 @@ files:
|
|
|
5042
5042
|
- spec/models/you_tube_video_retention_response_retention_curve_inner_spec.rb
|
|
5043
5043
|
- spec/models/you_tube_video_retention_response_spec.rb
|
|
5044
5044
|
- spec/spec_helper.rb
|
|
5045
|
-
- zernio-sdk-0.0.
|
|
5045
|
+
- zernio-sdk-0.0.700.gem
|
|
5046
5046
|
- zernio-sdk.gemspec
|
|
5047
5047
|
homepage: https://openapi-generator.tech
|
|
5048
5048
|
licenses:
|
data/zernio-sdk-0.0.698.gem
DELETED
|
Binary file
|