bzapper 0.7.0
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 +7 -0
- data/LICENSE +21 -0
- data/README.md +323 -0
- data/lib/bzapper/client.rb +122 -0
- data/lib/bzapper/codec.rb +112 -0
- data/lib/bzapper/errors.rb +126 -0
- data/lib/bzapper/resources/accounts.rb +394 -0
- data/lib/bzapper/resources/advanced.rb +388 -0
- data/lib/bzapper/resources/advisories.rb +39 -0
- data/lib/bzapper/resources/base.rb +56 -0
- data/lib/bzapper/resources/billing.rb +177 -0
- data/lib/bzapper/resources/campaigns.rb +273 -0
- data/lib/bzapper/resources/connect.rb +35 -0
- data/lib/bzapper/resources/contacts.rb +481 -0
- data/lib/bzapper/resources/conversations.rb +47 -0
- data/lib/bzapper/resources/groups.rb +252 -0
- data/lib/bzapper/resources/instances.rb +287 -0
- data/lib/bzapper/resources/messages.rb +920 -0
- data/lib/bzapper/resources/partner.rb +134 -0
- data/lib/bzapper/resources/pools.rb +69 -0
- data/lib/bzapper/resources/scheduling.rb +38 -0
- data/lib/bzapper/resources/system.rb +21 -0
- data/lib/bzapper/resources/usage.rb +42 -0
- data/lib/bzapper/resources/webhooks.rb +147 -0
- data/lib/bzapper/resources.rb +100 -0
- data/lib/bzapper/transport.rb +248 -0
- data/lib/bzapper/unset.rb +27 -0
- data/lib/bzapper/upload.rb +61 -0
- data/lib/bzapper/version.rb +7 -0
- data/lib/bzapper/webhook.rb +194 -0
- data/lib/bzapper.rb +30 -0
- metadata +74 -0
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# GERADO por script/generate.rb a partir de packages/sdk/openapi.yaml — não edite à mão.
|
|
4
|
+
|
|
5
|
+
module Bzapper
|
|
6
|
+
module Resources
|
|
7
|
+
# Campanhas: estimativa, destinatários, simulação e controle — `client.campaigns`.
|
|
8
|
+
class Campaigns < Base
|
|
9
|
+
# List campaigns. `GET /campaigns`
|
|
10
|
+
#
|
|
11
|
+
# @param limit [Integer, nil] (query) Max items.
|
|
12
|
+
# @param timeout [Numeric, nil] segundos por tentativa (padrão: o do cliente).
|
|
13
|
+
# @return [Hash, Array, nil] o JSON da resposta, inteiro (nil em 204).
|
|
14
|
+
# @raise [Bzapper::Error] resposta fora de 2xx ou falha de rede.
|
|
15
|
+
def list_campaigns(limit: nil, timeout: nil)
|
|
16
|
+
query = {
|
|
17
|
+
"limit" => limit
|
|
18
|
+
}
|
|
19
|
+
request("GET", "/campaigns", query: query, timeout: timeout)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Create a campaign. `POST /campaigns`
|
|
23
|
+
#
|
|
24
|
+
# Requires the Pro plan and the Campaigns add-on.
|
|
25
|
+
#
|
|
26
|
+
# @param name [String, nil] (corpo)
|
|
27
|
+
# @param pool_id [String, nil] (corpo) Restrict to a pool (else all project numbers).
|
|
28
|
+
# @param pacing_profile [String, nil] (corpo)
|
|
29
|
+
# @param start_at [Time, String, nil] (corpo) Future start = scheduled campaign.
|
|
30
|
+
# @param variations [Array<Hash>] (corpo)
|
|
31
|
+
# @param idempotency_key [String, nil] chave de idempotência (senão a SDK gera uma).
|
|
32
|
+
# @param timeout [Numeric, nil] segundos por tentativa (padrão: o do cliente).
|
|
33
|
+
# @return [Hash, Array, nil] o JSON da resposta, inteiro (nil em 204).
|
|
34
|
+
# @raise [Bzapper::Error] resposta fora de 2xx ou falha de rede.
|
|
35
|
+
def create_campaign(variations:, name: UNSET, pool_id: UNSET, pacing_profile: UNSET,
|
|
36
|
+
start_at: UNSET, idempotency_key: nil, timeout: nil)
|
|
37
|
+
payload = compact(
|
|
38
|
+
"name" => name,
|
|
39
|
+
"pool_id" => pool_id,
|
|
40
|
+
"pacing_profile" => pacing_profile,
|
|
41
|
+
"start_at" => start_at,
|
|
42
|
+
"variations" => variations
|
|
43
|
+
)
|
|
44
|
+
request("POST",
|
|
45
|
+
"/campaigns",
|
|
46
|
+
body: payload,
|
|
47
|
+
idempotency_key: idempotency_key,
|
|
48
|
+
timeout: timeout)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# Estimate send duration (live). `GET /campaigns/estimate`
|
|
52
|
+
#
|
|
53
|
+
# Given a recipient count and pacing, returns eligible numbers and the estimated duration —
|
|
54
|
+
# powers the builder's real-time panel. No campaign needed.
|
|
55
|
+
#
|
|
56
|
+
# @param recipients [Integer, nil] (query) Number of recipients.
|
|
57
|
+
# @param pacing [String, nil] (query)
|
|
58
|
+
# @param pool_id [String, nil] (query)
|
|
59
|
+
# @param timeout [Numeric, nil] segundos por tentativa (padrão: o do cliente).
|
|
60
|
+
# @return [Hash, Array, nil] o JSON da resposta, inteiro (nil em 204).
|
|
61
|
+
# @raise [Bzapper::Error] resposta fora de 2xx ou falha de rede.
|
|
62
|
+
def estimate_campaign(recipients: nil, pacing: nil, pool_id: nil, timeout: nil)
|
|
63
|
+
query = {
|
|
64
|
+
"recipients" => recipients,
|
|
65
|
+
"pacing" => pacing,
|
|
66
|
+
"pool_id" => pool_id
|
|
67
|
+
}
|
|
68
|
+
request("GET", "/campaigns/estimate", query: query, timeout: timeout)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# Per-number campaign eligibility (connection + warm-up). `GET /campaigns/eligibility`
|
|
72
|
+
#
|
|
73
|
+
# Same engine the dispatcher uses: which numbers can send campaigns now, the account's anti-ban
|
|
74
|
+
# policy (warm-up days, minimum numbers) and whether a campaign can be started.
|
|
75
|
+
#
|
|
76
|
+
# @param pool_id [String, nil] (query) Restrict to a pool.
|
|
77
|
+
# @param timeout [Numeric, nil] segundos por tentativa (padrão: o do cliente).
|
|
78
|
+
# @return [Hash, Array, nil] o JSON da resposta, inteiro (nil em 204).
|
|
79
|
+
# @raise [Bzapper::Error] resposta fora de 2xx ou falha de rede.
|
|
80
|
+
def get_campaign_eligibility(pool_id: nil, timeout: nil)
|
|
81
|
+
query = {
|
|
82
|
+
"pool_id" => pool_id
|
|
83
|
+
}
|
|
84
|
+
request("GET", "/campaigns/eligibility", query: query, timeout: timeout)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
# Upload the header image. `POST /campaigns/media`
|
|
88
|
+
#
|
|
89
|
+
# Uploads a header image (PNG/JPEG/WebP, up to 5 MB) and returns a public URL to use as the
|
|
90
|
+
# variation media.
|
|
91
|
+
#
|
|
92
|
+
# @param file [String, IO, Pathname] conteúdo do arquivo (bytes), um IO ou o caminho no disco.
|
|
93
|
+
# @param filename [String, nil] nome do arquivo (padrão: o do caminho, senão "file").
|
|
94
|
+
# @param content_type [String, nil] tipo MIME (padrão: application/octet-stream).
|
|
95
|
+
# @param idempotency_key [String, nil] chave de idempotência (senão a SDK gera uma).
|
|
96
|
+
# @param timeout [Numeric, nil] segundos por tentativa (padrão: o do cliente).
|
|
97
|
+
# @return [Hash, Array, nil] o JSON da resposta, inteiro (nil em 204).
|
|
98
|
+
# @raise [Bzapper::Error] resposta fora de 2xx ou falha de rede.
|
|
99
|
+
def upload_campaign_media(file:, filename: nil, content_type: nil, idempotency_key: nil,
|
|
100
|
+
timeout: nil)
|
|
101
|
+
request("POST",
|
|
102
|
+
"/campaigns/media",
|
|
103
|
+
multipart: upload("file", file, filename, content_type),
|
|
104
|
+
idempotency_key: idempotency_key,
|
|
105
|
+
timeout: timeout)
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
# Get a campaign with stats and variations. `GET /campaigns/{id}`
|
|
109
|
+
#
|
|
110
|
+
# @param id [String] parâmetro de caminho
|
|
111
|
+
# @param timeout [Numeric, nil] segundos por tentativa (padrão: o do cliente).
|
|
112
|
+
# @return [Hash, Array, nil] o JSON da resposta, inteiro (nil em 204).
|
|
113
|
+
# @raise [Bzapper::Error] resposta fora de 2xx ou falha de rede.
|
|
114
|
+
# @raise [ArgumentError] parâmetro de caminho vazio, "." ou "..".
|
|
115
|
+
def get_campaign(id, timeout: nil)
|
|
116
|
+
request("GET", "/campaigns/#{segment(id, "id")}", timeout: timeout)
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
# Edit a not-yet-started campaign. `PATCH /campaigns/{id}`
|
|
120
|
+
#
|
|
121
|
+
# Updates name, pacing, schedule and (if sent) replaces the variations. Only allowed while
|
|
122
|
+
# draft/scheduled — 409 once started.
|
|
123
|
+
#
|
|
124
|
+
# @param id [String] parâmetro de caminho
|
|
125
|
+
# @param name [String, nil] (corpo)
|
|
126
|
+
# @param pacing_profile [String, nil] (corpo)
|
|
127
|
+
# @param start_at [Time, String, nil] (corpo) Future start = scheduled campaign.
|
|
128
|
+
# @param variations [Array<Hash>, nil] (corpo) When sent (non-empty), REPLACES all variations.
|
|
129
|
+
# @param idempotency_key [String, nil] chave de idempotência (senão a SDK gera uma).
|
|
130
|
+
# @param timeout [Numeric, nil] segundos por tentativa (padrão: o do cliente).
|
|
131
|
+
# @return [Hash, Array, nil] o JSON da resposta, inteiro (nil em 204).
|
|
132
|
+
# @raise [Bzapper::Error] resposta fora de 2xx ou falha de rede.
|
|
133
|
+
# @raise [ArgumentError] parâmetro de caminho vazio, "." ou "..".
|
|
134
|
+
def update_campaign(id, name: UNSET, pacing_profile: UNSET, start_at: UNSET,
|
|
135
|
+
variations: UNSET, idempotency_key: nil, timeout: nil)
|
|
136
|
+
payload = compact(
|
|
137
|
+
"name" => name,
|
|
138
|
+
"pacing_profile" => pacing_profile,
|
|
139
|
+
"start_at" => start_at,
|
|
140
|
+
"variations" => variations
|
|
141
|
+
)
|
|
142
|
+
request("PATCH",
|
|
143
|
+
"/campaigns/#{segment(id, "id")}",
|
|
144
|
+
body: payload,
|
|
145
|
+
idempotency_key: idempotency_key,
|
|
146
|
+
timeout: timeout)
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
# List recipients with per-contact delivery. `GET /campaigns/{id}/recipients`
|
|
150
|
+
#
|
|
151
|
+
# @param id [String] parâmetro de caminho
|
|
152
|
+
# @param limit [Integer, nil] (query)
|
|
153
|
+
# @param timeout [Numeric, nil] segundos por tentativa (padrão: o do cliente).
|
|
154
|
+
# @return [Hash, Array, nil] o JSON da resposta, inteiro (nil em 204).
|
|
155
|
+
# @raise [Bzapper::Error] resposta fora de 2xx ou falha de rede.
|
|
156
|
+
# @raise [ArgumentError] parâmetro de caminho vazio, "." ou "..".
|
|
157
|
+
def list_campaign_recipients(id, limit: nil, timeout: nil)
|
|
158
|
+
query = {
|
|
159
|
+
"limit" => limit
|
|
160
|
+
}
|
|
161
|
+
request("GET", "/campaigns/#{segment(id, "id")}/recipients", query: query, timeout: timeout)
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
# Add (or replace) recipients. `POST /campaigns/{id}/recipients`
|
|
165
|
+
#
|
|
166
|
+
# @param id [String] parâmetro de caminho
|
|
167
|
+
# @param recipients [Array<Hash>, nil] (corpo)
|
|
168
|
+
# @param contacts [Hash, nil] (corpo) Map of phone → payload, e.g. {"+5551999198087": {"name":
|
|
169
|
+
# "Vinicius"}}.
|
|
170
|
+
# @param contact_ids [Array<String>, nil] (corpo) Explicitly selected contact ids (only the
|
|
171
|
+
# active ones are added).
|
|
172
|
+
# @param contact_filter [Hash, nil] (corpo) Add every ACTIVE contact matching this filter.
|
|
173
|
+
# @param replace [Boolean, nil] (corpo) Replace the whole recipient list instead of appending
|
|
174
|
+
# (clears first). Only allowed while the campaign is draft/scheduled.
|
|
175
|
+
# @param idempotency_key [String, nil] chave de idempotência (senão a SDK gera uma).
|
|
176
|
+
# @param timeout [Numeric, nil] segundos por tentativa (padrão: o do cliente).
|
|
177
|
+
# @return [Hash, Array, nil] o JSON da resposta, inteiro (nil em 204).
|
|
178
|
+
# @raise [Bzapper::Error] resposta fora de 2xx ou falha de rede.
|
|
179
|
+
# @raise [ArgumentError] parâmetro de caminho vazio, "." ou "..".
|
|
180
|
+
def add_campaign_recipients(id, recipients: UNSET, contacts: UNSET, contact_ids: UNSET,
|
|
181
|
+
contact_filter: UNSET, replace: UNSET, idempotency_key: nil,
|
|
182
|
+
timeout: nil)
|
|
183
|
+
payload = compact(
|
|
184
|
+
"recipients" => recipients,
|
|
185
|
+
"contacts" => contacts,
|
|
186
|
+
"contact_ids" => contact_ids,
|
|
187
|
+
"contact_filter" => contact_filter,
|
|
188
|
+
"replace" => replace
|
|
189
|
+
)
|
|
190
|
+
request("POST",
|
|
191
|
+
"/campaigns/#{segment(id, "id")}/recipients",
|
|
192
|
+
body: payload,
|
|
193
|
+
idempotency_key: idempotency_key,
|
|
194
|
+
timeout: timeout)
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
# Start (or schedule) a campaign. `POST /campaigns/{id}/start`
|
|
198
|
+
#
|
|
199
|
+
# @param id [String] parâmetro de caminho
|
|
200
|
+
# @param idempotency_key [String, nil] chave de idempotência (senão a SDK gera uma).
|
|
201
|
+
# @param timeout [Numeric, nil] segundos por tentativa (padrão: o do cliente).
|
|
202
|
+
# @return [Hash, Array, nil] o JSON da resposta, inteiro (nil em 204).
|
|
203
|
+
# @raise [Bzapper::Error] resposta fora de 2xx ou falha de rede.
|
|
204
|
+
# @raise [ArgumentError] parâmetro de caminho vazio, "." ou "..".
|
|
205
|
+
def start_campaign(id, idempotency_key: nil, timeout: nil)
|
|
206
|
+
request("POST",
|
|
207
|
+
"/campaigns/#{segment(id, "id")}/start",
|
|
208
|
+
idempotency_key: idempotency_key,
|
|
209
|
+
timeout: timeout)
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
# Pause a campaign. `POST /campaigns/{id}/pause`
|
|
213
|
+
#
|
|
214
|
+
# @param id [String] parâmetro de caminho
|
|
215
|
+
# @param idempotency_key [String, nil] chave de idempotência (senão a SDK gera uma).
|
|
216
|
+
# @param timeout [Numeric, nil] segundos por tentativa (padrão: o do cliente).
|
|
217
|
+
# @return [Hash, Array, nil] o JSON da resposta, inteiro (nil em 204).
|
|
218
|
+
# @raise [Bzapper::Error] resposta fora de 2xx ou falha de rede.
|
|
219
|
+
# @raise [ArgumentError] parâmetro de caminho vazio, "." ou "..".
|
|
220
|
+
def pause_campaign(id, idempotency_key: nil, timeout: nil)
|
|
221
|
+
request("POST",
|
|
222
|
+
"/campaigns/#{segment(id, "id")}/pause",
|
|
223
|
+
idempotency_key: idempotency_key,
|
|
224
|
+
timeout: timeout)
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
# Resume a campaign. `POST /campaigns/{id}/resume`
|
|
228
|
+
#
|
|
229
|
+
# @param id [String] parâmetro de caminho
|
|
230
|
+
# @param idempotency_key [String, nil] chave de idempotência (senão a SDK gera uma).
|
|
231
|
+
# @param timeout [Numeric, nil] segundos por tentativa (padrão: o do cliente).
|
|
232
|
+
# @return [Hash, Array, nil] o JSON da resposta, inteiro (nil em 204).
|
|
233
|
+
# @raise [Bzapper::Error] resposta fora de 2xx ou falha de rede.
|
|
234
|
+
# @raise [ArgumentError] parâmetro de caminho vazio, "." ou "..".
|
|
235
|
+
def resume_campaign(id, idempotency_key: nil, timeout: nil)
|
|
236
|
+
request("POST",
|
|
237
|
+
"/campaigns/#{segment(id, "id")}/resume",
|
|
238
|
+
idempotency_key: idempotency_key,
|
|
239
|
+
timeout: timeout)
|
|
240
|
+
end
|
|
241
|
+
|
|
242
|
+
# Cancel a campaign. `POST /campaigns/{id}/cancel`
|
|
243
|
+
#
|
|
244
|
+
# @param id [String] parâmetro de caminho
|
|
245
|
+
# @param idempotency_key [String, nil] chave de idempotência (senão a SDK gera uma).
|
|
246
|
+
# @param timeout [Numeric, nil] segundos por tentativa (padrão: o do cliente).
|
|
247
|
+
# @return [Hash, Array, nil] o JSON da resposta, inteiro (nil em 204).
|
|
248
|
+
# @raise [Bzapper::Error] resposta fora de 2xx ou falha de rede.
|
|
249
|
+
# @raise [ArgumentError] parâmetro de caminho vazio, "." ou "..".
|
|
250
|
+
def cancel_campaign(id, idempotency_key: nil, timeout: nil)
|
|
251
|
+
request("POST",
|
|
252
|
+
"/campaigns/#{segment(id, "id")}/cancel",
|
|
253
|
+
idempotency_key: idempotency_key,
|
|
254
|
+
timeout: timeout)
|
|
255
|
+
end
|
|
256
|
+
|
|
257
|
+
# Simulate a campaign without sending. `POST /campaigns/{id}/dry-run`
|
|
258
|
+
#
|
|
259
|
+
# @param id [String] parâmetro de caminho
|
|
260
|
+
# @param idempotency_key [String, nil] chave de idempotência (senão a SDK gera uma).
|
|
261
|
+
# @param timeout [Numeric, nil] segundos por tentativa (padrão: o do cliente).
|
|
262
|
+
# @return [Hash, Array, nil] o JSON da resposta, inteiro (nil em 204).
|
|
263
|
+
# @raise [Bzapper::Error] resposta fora de 2xx ou falha de rede.
|
|
264
|
+
# @raise [ArgumentError] parâmetro de caminho vazio, "." ou "..".
|
|
265
|
+
def dry_run_campaign(id, idempotency_key: nil, timeout: nil)
|
|
266
|
+
request("POST",
|
|
267
|
+
"/campaigns/#{segment(id, "id")}/dry-run",
|
|
268
|
+
idempotency_key: idempotency_key,
|
|
269
|
+
timeout: timeout)
|
|
270
|
+
end
|
|
271
|
+
end
|
|
272
|
+
end
|
|
273
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# GERADO por script/generate.rb a partir de packages/sdk/openapi.yaml — não edite à mão.
|
|
4
|
+
|
|
5
|
+
module Bzapper
|
|
6
|
+
module Resources
|
|
7
|
+
# bZapper Connect do lado do CLIENTE: apps parceiros conectados à conta — `client.connect`.
|
|
8
|
+
class Connect < Base
|
|
9
|
+
# Connected apps — partner software using this account's WhatsApp. `GET /me/connections`
|
|
10
|
+
#
|
|
11
|
+
# @param timeout [Numeric, nil] segundos por tentativa (padrão: o do cliente).
|
|
12
|
+
# @return [Hash, Array, nil] o JSON da resposta, inteiro (nil em 204).
|
|
13
|
+
# @raise [Bzapper::Error] resposta fora de 2xx ou falha de rede.
|
|
14
|
+
def list_connected_apps(timeout: nil)
|
|
15
|
+
request("GET", "/me/connections", timeout: timeout)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Disconnect a partner app (admin). The partner's key stops working immediately. `DELETE
|
|
19
|
+
# /me/connections/{id}`
|
|
20
|
+
#
|
|
21
|
+
# @param id [String] Instance ID (UUID).
|
|
22
|
+
# @param idempotency_key [String, nil] chave de idempotência (senão a SDK gera uma).
|
|
23
|
+
# @param timeout [Numeric, nil] segundos por tentativa (padrão: o do cliente).
|
|
24
|
+
# @return [Hash, Array, nil] o JSON da resposta, inteiro (nil em 204).
|
|
25
|
+
# @raise [Bzapper::Error] resposta fora de 2xx ou falha de rede.
|
|
26
|
+
# @raise [ArgumentError] parâmetro de caminho vazio, "." ou "..".
|
|
27
|
+
def revoke_connected_app(id, idempotency_key: nil, timeout: nil)
|
|
28
|
+
request("DELETE",
|
|
29
|
+
"/me/connections/#{segment(id, "id")}",
|
|
30
|
+
idempotency_key: idempotency_key,
|
|
31
|
+
timeout: timeout)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|